{"_id":"@graphty/algorithms","_rev":"16-700e97ad9a49ca0867a59259a5b7b42c","name":"@graphty/algorithms","dist-tags":{"latest":"2.0.2"},"versions":{"1.0.1":{"name":"@graphty/algorithms","version":"1.0.1","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","_id":"@graphty/algorithms@1.0.1","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"homepage":"https://github.com/graphty-org/algorithms#readme","bugs":{"url":"https://github.com/graphty-org/algorithms/issues"},"dist":{"shasum":"e314897c17dd3fad5fe8abbc49304f6a42295913","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-1.0.1.tgz","fileCount":155,"integrity":"sha512-e85giHytBM1oMuuZgzK8xLhln+/5WzIXCzFEBQjpMulrmG1VvvHv9g1qBGQa7NeWxRfUexUyP15WVMm7RhrOhA==","signatures":[{"sig":"MEUCIQC+eZ1lkPPySHUumn82WlwmY1NBhxfOUs1e1F3t3gK+KQIgGPzecUEPaLX7YoHgTDcSN9a99EzMxBi2Njsd5qXvhKc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":614102},"main":"dist/algorithms.js","type":"module","types":"dist/algorithms.d.ts","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js"}},"gitHead":"5268d30a795dbfd6e9b30a33742b13a9428e5b43","scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit","test":"vitest","build":"tsc","commit":"cz","prepare":"husky","test:ui":"vitest --ui","lint:all":"npm run lint && npm run lint:pkg","lint:fix":"eslint --fix","lint:pkg":"knip","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","typecheck":"tsc --noEmit","build:watch":"tsc --watch","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"apowers313","email":"apowers@ato.ms"},"repository":{"url":"git+https://github.com/graphty-org/algorithms.git","type":"git"},"_npmVersion":"10.9.3","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"_nodeVersion":"22.17.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.61.3","husky":"^9.1.7","eslint":"^9.29.0","vitest":"^3.2.4","globals":"^15.12.0","happy-dom":"^18.0.1","@eslint/js":"^9.29.0","@vitest/ui":"^3.2.4","playwright":"^1.53.0","typescript":"^5.8.3","@types/node":"^20.19.2","@commitlint/cli":"^19.8.1","@vitest/browser":"^3.2.4","semantic-release":"^24.2.7","typescript-eslint":"^8.34.1","@vitest/coverage-v8":"^3.2.4","@semantic-release/git":"^10.0.1","@stylistic/eslint-plugin":"^4.4.1","cz-conventional-changelog":"^3.3.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^19.8.1","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/algorithms_1.0.1_1753038579727_0.001494610218496284","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@graphty/algorithms","version":"1.1.0","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","_id":"@graphty/algorithms@1.1.0","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"homepage":"https://github.com/graphty-org/algorithms#readme","bugs":{"url":"https://github.com/graphty-org/algorithms/issues"},"dist":{"shasum":"247ee3e88a3336c747a6e4d52f0e273e40617c51","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-1.1.0.tgz","fileCount":262,"integrity":"sha512-RzdcVrQeJVR/2IrlLRsH9K/j0YD0jvYaxQSQYbRa/2JTWsTxNU4BuDYSqaUL6jBSwpW+ILyA4H88D/Fz1k61dA==","signatures":[{"sig":"MEUCIF+kNnlaXfduFTq/0zFYM6Loi3ga327EHjUidlEbDE3HAiEAgk5BbTR7Q86rryYAuCVmBMNIqwqTZzZCNxVOHtTOv7U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":944169},"main":"dist/algorithms.js","type":"module","types":"dist/algorithms.d.ts","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js"}},"gitHead":"f0ff8b7846d9df8e2bca748cf100834cdef87a82","scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit","test":"vitest","build":"tsc","commit":"cz","prepare":"husky","test:ui":"vitest --ui","lint:all":"npm run lint && npm run lint:pkg","lint:fix":"eslint --fix","lint:pkg":"knip","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","typecheck":"tsc --noEmit","build:watch":"tsc --watch","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"apowers313","email":"apowers@ato.ms"},"repository":{"url":"git+https://github.com/graphty-org/algorithms.git","type":"git"},"_npmVersion":"10.9.3","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"_nodeVersion":"22.17.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","knip":"^5.61.3","husky":"^9.1.7","eslint":"^9.29.0","vitest":"^3.2.4","globals":"^15.12.0","ts-node":"^10.9.2","happy-dom":"^18.0.1","@eslint/js":"^9.29.0","@vitest/ui":"^3.2.4","playwright":"^1.53.0","typescript":"^5.8.3","@types/node":"^20.19.2","@commitlint/cli":"^19.8.1","@vitest/browser":"^3.2.4","semantic-release":"^24.2.7","typescript-eslint":"^8.34.1","@vitest/coverage-v8":"^3.2.4","@semantic-release/git":"^10.0.1","@stylistic/eslint-plugin":"^4.4.1","cz-conventional-changelog":"^3.3.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^19.8.1","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/algorithms_1.1.0_1753197871967_0.8953396159513267","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@graphty/algorithms","version":"1.2.0","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","_id":"@graphty/algorithms@1.2.0","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"homepage":"https://github.com/graphty-org/algorithms#readme","bugs":{"url":"https://github.com/graphty-org/algorithms/issues"},"dist":{"shasum":"b156fa0f1fbc31d08a68a4b9da80c18ddb63ee44","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-1.2.0.tgz","fileCount":282,"integrity":"sha512-tIs+zWfVyuXNIameVYisjhuFcQf+FHkRH2xbgWyZYcX+qJTnvgNfzbrd5TC+xtwVmCX0jeomSQnRch/pShxStA==","signatures":[{"sig":"MEUCIQC10NmwwRQB/A79tXVRb5qUMog105vIeLFrZAFoe7RkjgIgMFdVHfhCmqlCZUL5nbN7mZ5PGUutW2+o6O5IZvdCSMU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1112529},"main":"dist/algorithms.js","type":"module","types":"dist/algorithms.d.ts","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js"}},"gitHead":"991b79cfa1e73e29b300d49cf16368c267178f89","scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit","test":"vitest","build":"tsc","serve":"npm run build:bundle && vite","watch":"tsc --watch","commit":"cz","prepare":"husky","test:ui":"vitest --ui","examples":"node examples/run-all-examples.js","lint:all":"npm run lint && npm run lint:pkg","lint:fix":"eslint --fix","lint:pkg":"knip","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","build:all":"npm run build && npm run build:bundle","typecheck":"tsc --noEmit","build:watch":"tsc --watch","build:bundle":"node scripts/build-bundle.js","examples:run":"node examples/run-all-examples.js","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","examples:html":"npm run build:bundle && vite","test:coverage":"vitest run --coverage","build:gh-pages":"npm run build:bundle && node scripts/build-gh-pages.js"},"_npmUser":{"name":"apowers313","email":"apowers@ato.ms"},"repository":{"url":"git+https://github.com/graphty-org/algorithms.git","type":"git"},"_npmVersion":"10.9.3","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"_nodeVersion":"22.17.1","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","knip":"^5.61.3","vite":"^7.0.5","husky":"^9.1.7","eslint":"^9.29.0","vitest":"^3.2.4","globals":"^15.12.0","ts-node":"^10.9.2","happy-dom":"^18.0.1","@eslint/js":"^9.29.0","@vitest/ui":"^3.2.4","playwright":"^1.53.0","typescript":"^5.8.3","@types/node":"^20.19.2","@commitlint/cli":"^19.8.1","@vitest/browser":"^3.2.4","semantic-release":"^24.2.7","typescript-eslint":"^8.34.1","@vitest/coverage-v8":"^3.2.4","@semantic-release/git":"^10.0.1","@stylistic/eslint-plugin":"^4.4.1","cz-conventional-changelog":"^3.3.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^19.8.1","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/algorithms_1.2.0_1753327036369_0.7967050678167935","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@graphty/algorithms","version":"1.3.1","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","_id":"@graphty/algorithms@1.3.1","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"homepage":"https://github.com/graphty-org/algorithms#readme","bugs":{"url":"https://github.com/graphty-org/algorithms/issues"},"dist":{"shasum":"a931e59a1ece58060d9b4f263f9525bd47cf27ad","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-1.3.1.tgz","fileCount":382,"integrity":"sha512-8fgRL9OvmJm3pZFMG4EJBl2n0a8+xsJ2SyFFyzc2RiIUP0gGrry8kAspNjUmDdrhEMfIXrEdPDk2b4gOJyChFA==","signatures":[{"sig":"MEUCIQCgRJquWFSyzQ0Am1PfFDBUjVz1FkdD1IdYn0Lz5oyCfwIgfkKBX18sGXRg+heAYl7Q3uQqu20bN1xzYQV+WFUO+vI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@1.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2713351},"main":"dist/algorithms.js","type":"module","types":"dist/algorithms.d.ts","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js"}},"gitHead":"daadc2eab10b9e7c70750f668caa86d91d6c9080","scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit","test":"vitest","build":"tsc","serve":"npm run build:bundle && vite","watch":"tsc --watch","commit":"cz","prepare":"husky","test:ui":"vitest --ui","examples":"node examples/run-all-examples.js","lint:all":"npm run lint && npm run lint:pkg","lint:fix":"eslint --fix","lint:pkg":"knip","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","benchmark":"tsx src/benchmark-all-algorithms.ts","build:all":"npm run build && npm run build:bundle","typecheck":"tsc --noEmit","build:watch":"tsc --watch","build:bundle":"node scripts/build-bundle.js","examples:run":"node examples/run-all-examples.js","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","examples:html":"npm run build:bundle && vite","test:coverage":"vitest run --coverage","build:gh-pages":"npm run build:bundle && node scripts/build-gh-pages.js","memory:profile":"tsx test/helpers/memory-profiler.ts","benchmark:quick":"tsx src/benchmark-all-algorithms.ts --quick","benchmark:report":"tsx scripts/generate-performance-report.ts","test:performance":"tsx test/helpers/run-performance-regression.ts","benchmark:validation":"tsx src/optimized/benchmark-validation.ts","benchmark:comprehensive":"tsx src/optimized/benchmark-comprehensive.ts","test:performance:update":"tsx test/helpers/run-performance-regression.ts --update-baselines"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:98868849-6650-4b56-b7fe-53142c5a1e1c"}},"repository":{"url":"git+https://github.com/graphty-org/algorithms.git","type":"git"},"_npmVersion":"11.7.0","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"_nodeVersion":"22.21.1","dependencies":{"pupt":"^1.3.2","typedfastbitset":"^0.6.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","knip":"^5.61.3","vite":"^7.0.5","husky":"^9.1.7","eslint":"^9.29.0","vitest":"^3.2.4","globals":"^15.12.0","ts-node":"^10.9.2","gh-pages":"^6.3.0","benchmark":"^2.1.4","happy-dom":"^18.0.1","@eslint/js":"^9.29.0","@vitest/ui":"^3.2.4","playwright":"^1.53.0","typescript":"^5.8.3","@types/node":"^20.19.9","@commitlint/cli":"^19.8.1","@vitest/browser":"^3.2.4","@types/benchmark":"^2.1.5","semantic-release":"^25.0.2","typescript-eslint":"^8.34.1","@vitest/coverage-v8":"^3.2.4","@semantic-release/git":"^10.0.1","@stylistic/eslint-plugin":"^4.4.1","cz-conventional-changelog":"^3.3.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^19.8.1","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/algorithms_1.3.1_1765869978493_0.24165653034813683","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@graphty/algorithms","version":"1.4.2","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","_id":"@graphty/algorithms@1.4.2","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"homepage":"https://github.com/graphty-org/graphty-monorepo/tree/master/algorithms#readme","bugs":{"url":"https://github.com/graphty-org/graphty-monorepo/issues"},"dist":{"shasum":"fc1091af48dcdf5dd35313e9c089975084547dc1","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-1.4.2.tgz","fileCount":382,"integrity":"sha512-VUo/SS1XBuXE9LNRMvf1Fo8Dmkx1Vsdc7Q61yguly9px/VN1U1dzj131TrTSe3VVW99hVh88LAtFfv6QuYhWZg==","signatures":[{"sig":"MEUCIFYUpn9xiPFUJ1rJwTnKJjlMHpWYfPVXb9jG4bmr7lcEAiEAhYtmxkRKNJkWZbxanU+xrqD1B0A33E76tZoisNb+3lQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@1.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2962821},"main":"dist/algorithms.js","type":"module","_from":"file:graphty-algorithms-1.4.2.tgz","types":"dist/algorithms.d.ts","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js"}},"scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit","test":"vitest","build":"tsc","serve":"npm run build:bundle && vite","watch":"tsc --watch","commit":"cz","test:ui":"vitest --ui","coverage":"npm run coverage:shards && npm run coverage:merge","examples":"node examples/run-all-examples.js","lint:all":"npm run lint && npm run lint:pkg","lint:fix":"eslint --fix","lint:pkg":"knip","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","benchmark":"tsx src/benchmark-all-algorithms.ts","build:all":"npm run build && npm run build:bundle","typecheck":"tsc --noEmit","build:watch":"tsc --watch","build:bundle":"node scripts/build-bundle.js","examples:run":"node examples/run-all-examples.js","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","coverage:fast":"vitest run --project=default --coverage","examples:html":"npm run build:bundle && vite","test:coverage":"vitest run --coverage","build:gh-pages":"npm run build:bundle && node scripts/build-gh-pages.js","coverage:merge":"./scripts/coverage-merge.sh","memory:profile":"tsx test/helpers/memory-profiler.ts","benchmark:quick":"tsx src/benchmark-all-algorithms.ts --quick","coverage:shards":"npm run coverage:shards:clean && npm run coverage:shards:run","benchmark:report":"tsx scripts/generate-performance-report.ts","coverage:preview":"npx serve coverage -p 9051","test:performance":"tsx test/helpers/run-performance-regression.ts","coverage:shards:run":"npm run coverage:shard:default && npm run coverage:shard:browser","benchmark:validation":"tsx src/optimized/benchmark-validation.ts","coverage:shards:clean":"rm -rf .coverage-parts","coverage:shard:browser":"COVERAGE_DIR=.coverage-parts/browser vitest run --project=browser --coverage","coverage:shard:default":"COVERAGE_DIR=.coverage-parts/default vitest run --project=default --coverage","benchmark:comprehensive":"tsx src/optimized/benchmark-comprehensive.ts","test:performance:update":"tsx test/helpers/run-performance-regression.ts --update-baselines"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:612e51c2-1fd6-4d06-9b45-9d4f65040138"}},"_resolved":"/tmp/897dbe5a69ecdaa0c382ea463b9c6792/graphty-algorithms-1.4.2.tgz","_integrity":"sha512-VUo/SS1XBuXE9LNRMvf1Fo8Dmkx1Vsdc7Q61yguly9px/VN1U1dzj131TrTSe3VVW99hVh88LAtFfv6QuYhWZg==","repository":{"url":"git+https://github.com/graphty-org/graphty-monorepo.git","type":"git","directory":"algorithms"},"_npmVersion":"11.7.0","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"_nodeVersion":"22.21.1","dependencies":{"pupt":"^1.3.2","typedfastbitset":"^0.6.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","knip":"^5.61.3","vite":"^7.0.5","eslint":"^9.29.0","vitest":"^3.2.4","globals":"^15.12.0","ts-node":"^10.9.2","gh-pages":"^6.3.0","benchmark":"^2.1.4","happy-dom":"^18.0.1","@eslint/js":"^9.29.0","@vitest/ui":"^3.2.4","playwright":"^1.53.0","typescript":"^5.8.3","@types/node":"^20.19.9","@vitest/browser":"^3.2.4","@types/benchmark":"^2.1.5","semantic-release":"^25.0.2","typescript-eslint":"^8.34.1","@vitest/coverage-v8":"^3.2.4","@semantic-release/git":"^10.0.1","@semantic-release/changelog":"^6.0.3","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/algorithms_1.4.2_1767421880819_0.2076868204110056","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@graphty/algorithms","version":"1.5.0","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","_id":"@graphty/algorithms@1.5.0","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"homepage":"https://github.com/graphty-org/graphty-monorepo/tree/master/algorithms#readme","bugs":{"url":"https://github.com/graphty-org/graphty-monorepo/issues"},"dist":{"shasum":"f80025821db1d844b250055606861dceb2288d49","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-1.5.0.tgz","fileCount":383,"integrity":"sha512-63831OqufILap9u1fytTXVBjBYtRmUImDnxrXMKRcFoY+AF4YCTEbE0EApWs/lQW/44rrQ8O7U4giYFIETBAkg==","signatures":[{"sig":"MEYCIQCbulFpTLlMM3NCapZhSrPg7Q3EQVu7iMajWwP3ae/9EQIhAOQ9u8F4CwX5JBDjizYXWhi4R2FT70AeLgY3TGFXazeq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3034767},"main":"dist/algorithms.js","type":"module","_from":"file:graphty-algorithms-1.5.0.tgz","types":"dist/algorithms.d.ts","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js"}},"scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit","test":"vitest","build":"tsc","serve":"npm run build:bundle && vite","watch":"tsc --watch","commit":"cz","test:ui":"vitest --ui","coverage":"npm run coverage:shards && npm run coverage:merge","docs:api":"typedoc && node scripts/sanitize-api-docs.js","docs:dev":"vitepress dev docs","examples":"node examples/run-all-examples.js","lint:all":"npm run lint && npm run lint:pkg","lint:fix":"eslint --fix","lint:pkg":"knip","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","benchmark":"tsx src/benchmark-all-algorithms.ts","build:all":"npm run build && npm run build:bundle","typecheck":"tsc --noEmit","docs:build":"npm run docs:api && vitepress build docs","docs:watch":"npm run docs:api && (npm run docs:api:watch & npm run docs:dev & wait)","build:watch":"tsc --watch","build:bundle":"node scripts/build-bundle.js","docs:preview":"vitepress preview docs","examples:run":"node examples/run-all-examples.js","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","coverage:fast":"vitest run --project=default --coverage","examples:html":"npm run build:bundle && vite","test:coverage":"vitest run --coverage","build:gh-pages":"npm run build:bundle && node scripts/build-gh-pages.js","coverage:merge":"./scripts/coverage-merge.sh","docs:api:watch":"typedoc --watch","memory:profile":"tsx test/helpers/memory-profiler.ts","benchmark:quick":"tsx src/benchmark-all-algorithms.ts --quick","coverage:shards":"npm run coverage:shards:clean && npm run coverage:shards:run","benchmark:report":"tsx scripts/generate-performance-report.ts","coverage:preview":"npx serve coverage -p 9051","test:performance":"tsx test/helpers/run-performance-regression.ts","coverage:shards:run":"npm run coverage:shard:default && npm run coverage:shard:browser","benchmark:validation":"tsx src/optimized/benchmark-validation.ts","coverage:shards:clean":"rm -rf .coverage-parts","coverage:shard:browser":"COVERAGE_DIR=.coverage-parts/browser vitest run --project=browser --coverage","coverage:shard:default":"COVERAGE_DIR=.coverage-parts/default vitest run --project=default --coverage","benchmark:comprehensive":"tsx src/optimized/benchmark-comprehensive.ts","test:performance:update":"tsx test/helpers/run-performance-regression.ts --update-baselines"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:612e51c2-1fd6-4d06-9b45-9d4f65040138"}},"_resolved":"/tmp/24af1a03b28397c749232cc0b46f398a/graphty-algorithms-1.5.0.tgz","_integrity":"sha512-63831OqufILap9u1fytTXVBjBYtRmUImDnxrXMKRcFoY+AF4YCTEbE0EApWs/lQW/44rrQ8O7U4giYFIETBAkg==","repository":{"url":"git+https://github.com/graphty-org/graphty-monorepo.git","type":"git","directory":"algorithms"},"_npmVersion":"11.7.0","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"_nodeVersion":"22.21.1","dependencies":{"pupt":"^1.3.2","typedfastbitset":"^0.6.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","gh-pages":"^6.3.0","benchmark":"^2.1.4","@types/benchmark":"^2.1.5"},"_npmOperationalInternal":{"tmp":"tmp/algorithms_1.5.0_1767514719650_0.8188659914314667","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@graphty/algorithms","version":"1.6.0","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","_id":"@graphty/algorithms@1.6.0","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"homepage":"https://github.com/graphty-org/graphty-monorepo/tree/master/algorithms#readme","bugs":{"url":"https://github.com/graphty-org/graphty-monorepo/issues"},"dist":{"shasum":"0133dfd592b0dd044e4b60aea8498dd2f51175e7","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-1.6.0.tgz","fileCount":383,"integrity":"sha512-Ljef/O1PvogntbqwfPPHEvw/SbY+Wg4hM2rDa0BRmKvrRUsM8LH32doffkhyhZrdPvnUYQmFg9Cy0QzGbaM5OQ==","signatures":[{"sig":"MEQCIGcQ3iBEJMHLMqBgcKiJItP5+s4jPCrzGT09Rf6jADt5AiB/AZUZeye3hTKZd+NhMoRUzu4VRIlVZYpyBPQFZo65Tw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3034963},"main":"dist/algorithms.js","type":"module","_from":"file:graphty-algorithms-1.6.0.tgz","types":"dist/algorithms.d.ts","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js"}},"scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit","test":"vitest","build":"tsc","serve":"npm run build:bundle && vite","watch":"tsc --watch","commit":"cz","test:ui":"vitest --ui","coverage":"npm run coverage:shards && npm run coverage:merge","docs:api":"typedoc && node scripts/sanitize-api-docs.js","docs:dev":"vitepress dev docs","examples":"node examples/run-all-examples.js","lint:all":"npm run lint && npm run lint:pkg","lint:fix":"eslint --fix","lint:pkg":"knip","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","benchmark":"tsx src/benchmark-all-algorithms.ts","build:all":"npm run build && npm run build:bundle","typecheck":"tsc --noEmit","docs:build":"npm run docs:api && vitepress build docs","docs:watch":"npm run docs:api && (npm run docs:api:watch & npm run docs:dev & wait)","build:watch":"tsc --watch","build:bundle":"node scripts/build-bundle.js","docs:preview":"vitepress preview docs","examples:run":"node examples/run-all-examples.js","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","coverage:fast":"vitest run --project=default --coverage","examples:html":"npm run build:bundle && vite","test:coverage":"vitest run --coverage","build:gh-pages":"npm run build:bundle && node scripts/build-gh-pages.js","coverage:merge":"./scripts/coverage-merge.sh","docs:api:watch":"typedoc --watch","memory:profile":"tsx test/helpers/memory-profiler.ts","benchmark:quick":"tsx src/benchmark-all-algorithms.ts --quick","coverage:shards":"npm run coverage:shards:clean && npm run coverage:shards:run","benchmark:report":"tsx scripts/generate-performance-report.ts","coverage:preview":"npx serve coverage -p 9051","test:performance":"tsx test/helpers/run-performance-regression.ts","coverage:shards:run":"npm run coverage:shard:default && npm run coverage:shard:browser","benchmark:validation":"tsx src/optimized/benchmark-validation.ts","coverage:shards:clean":"rm -rf .coverage-parts","coverage:shard:browser":"COVERAGE_DIR=.coverage-parts/browser vitest run --project=browser --coverage","coverage:shard:default":"COVERAGE_DIR=.coverage-parts/default vitest run --project=default --coverage","benchmark:comprehensive":"tsx src/optimized/benchmark-comprehensive.ts","test:performance:update":"tsx test/helpers/run-performance-regression.ts --update-baselines"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:612e51c2-1fd6-4d06-9b45-9d4f65040138"}},"_resolved":"/tmp/fbec9a74cd09b009508374ffc0a921d2/graphty-algorithms-1.6.0.tgz","_integrity":"sha512-Ljef/O1PvogntbqwfPPHEvw/SbY+Wg4hM2rDa0BRmKvrRUsM8LH32doffkhyhZrdPvnUYQmFg9Cy0QzGbaM5OQ==","repository":{"url":"git+https://github.com/graphty-org/graphty-monorepo.git","type":"git","directory":"algorithms"},"_npmVersion":"11.7.0","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"_nodeVersion":"22.21.1","dependencies":{"pupt":"^1.3.2","typedfastbitset":"^0.6.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","gh-pages":"^6.3.0","benchmark":"^2.1.4","@types/benchmark":"^2.1.5"},"_npmOperationalInternal":{"tmp":"tmp/algorithms_1.6.0_1767773088475_0.9583567520845375","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@graphty/algorithms","version":"1.7.0","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","_id":"@graphty/algorithms@1.7.0","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"homepage":"https://github.com/graphty-org/graphty-monorepo/tree/master/algorithms#readme","bugs":{"url":"https://github.com/graphty-org/graphty-monorepo/issues"},"dist":{"shasum":"a89848cab937ab30c9c9c4a92b22ed58113e9a78","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-1.7.0.tgz","fileCount":383,"integrity":"sha512-4QeT5CMzLeDuDFEqzA9XAwFvFOlvim4HQyLPeKlvvcf40b426xNYncC8jix0axMOJ/Bj9+UzB1r4tFS9Oz6/6A==","signatures":[{"sig":"MEUCIGP6jgdoMm3qd3dd3maOlW6Sxn2urUGUsQjiVfL0wkrMAiEAmcfv+OYAomdgPOgL6hmVvdJqjYv0qhlFGhtqlXklMuo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@1.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3113847},"main":"dist/algorithms.js","type":"module","_from":"file:graphty-algorithms-1.7.0.tgz","types":"dist/algorithms.d.ts","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js","default":"./dist/algorithms.js"}},"scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit","test":"vitest","build":"tsc","serve":"npm run build:bundle && vite","watch":"tsc --watch","commit":"cz","test:ui":"vitest --ui","coverage":"npm run coverage:shards && npm run coverage:merge","docs:api":"typedoc && node scripts/sanitize-api-docs.js","docs:dev":"vitepress dev docs","examples":"node examples/run-all-examples.js","lint:all":"npm run lint && npm run lint:pkg","lint:fix":"eslint --fix","lint:pkg":"knip","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","benchmark":"tsx src/benchmark-all-algorithms.ts","build:all":"npm run build && npm run build:bundle","storybook":". ../.env 2>/dev/null; storybook dev -p ${PORT:-6006} --host ${HOST:-localhost} ${HTTPS_CERT_PATH:+--https --ssl-cert $HTTPS_CERT_PATH --ssl-key $HTTPS_KEY_PATH} --no-open","typecheck":"tsc --noEmit","docs:build":"npm run docs:api && vitepress build docs","docs:watch":"npm run docs:api && (npm run docs:api:watch & npm run docs:dev & wait)","build:watch":"tsc --watch","build:bundle":"node scripts/build-bundle.js","docs:preview":"vitepress preview docs","examples:run":"node examples/run-all-examples.js","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","coverage:fast":"vitest run --project=default --coverage","examples:html":"npm run build:bundle && vite","test:coverage":"vitest run --coverage","build:gh-pages":"npm run build:bundle && node scripts/build-gh-pages.js","coverage:merge":"./scripts/coverage-merge.sh","docs:api:watch":"typedoc --watch","memory:profile":"tsx test/helpers/memory-profiler.ts","benchmark:quick":"tsx src/benchmark-all-algorithms.ts --quick","build-storybook":"storybook build","coverage:shards":"npm run coverage:shards:clean && npm run coverage:shards:run","benchmark:report":"tsx scripts/generate-performance-report.ts","coverage:preview":"npx serve coverage -p 9051","test:performance":"tsx test/helpers/run-performance-regression.ts","coverage:shards:run":"npm run coverage:shard:default && npm run coverage:shard:browser","benchmark:validation":"tsx src/optimized/benchmark-validation.ts","coverage:shards:clean":"rm -rf .coverage-parts","coverage:shard:browser":"COVERAGE_DIR=.coverage-parts/browser vitest run --project=browser --coverage","coverage:shard:default":"COVERAGE_DIR=.coverage-parts/default vitest run --project=default --coverage","benchmark:comprehensive":"tsx src/optimized/benchmark-comprehensive.ts","test:performance:update":"tsx test/helpers/run-performance-regression.ts --update-baselines"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:612e51c2-1fd6-4d06-9b45-9d4f65040138"}},"_resolved":"/tmp/822e86025537f6cd76d99895c98fb5db/graphty-algorithms-1.7.0.tgz","_integrity":"sha512-4QeT5CMzLeDuDFEqzA9XAwFvFOlvim4HQyLPeKlvvcf40b426xNYncC8jix0axMOJ/Bj9+UzB1r4tFS9Oz6/6A==","repository":{"url":"git+https://github.com/graphty-org/graphty-monorepo.git","type":"git","directory":"algorithms"},"_npmVersion":"11.7.0","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"_nodeVersion":"22.21.1","dependencies":{"pupt":"^1.3.2","typedfastbitset":"^0.6.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","knip":"^5.61.3","vite":"^7.0.5","eslint":"^9.29.0","vitest":"^3.2.4","globals":"^15.12.0","ts-node":"^10.9.2","typedoc":"^0.28.15","gh-pages":"^6.3.0","benchmark":"^2.1.4","chromatic":"^11.0.0","happy-dom":"^18.0.1","storybook":"^9.0.11","vitepress":"^1.6.3","@eslint/js":"^9.29.0","playwright":"^1.53.0","typescript":"^5.8.3","@storybook/test":"^8.6.14","@types/benchmark":"^2.1.5","semantic-release":"^25.0.2","typescript-eslint":"^8.34.1","@storybook/html-vite":"^9.0.11","@semantic-release/git":"^10.0.1","@storybook/addon-docs":"^9.0.11","typedoc-plugin-markdown":"^4.9.0","typedoc-vitepress-theme":"^1.1.2","@chromatic-com/storybook":"^4.0.0","@semantic-release/changelog":"^6.0.3","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/algorithms_1.7.0_1767892748942_0.3959170837606476","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"@graphty/algorithms","version":"1.7.1","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","_id":"@graphty/algorithms@1.7.1","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"homepage":"https://github.com/graphty-org/graphty-monorepo/tree/master/algorithms#readme","bugs":{"url":"https://github.com/graphty-org/graphty-monorepo/issues"},"dist":{"shasum":"04ca5f787f5d5b9b68dac0e5a4b50e6bf549c874","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-1.7.1.tgz","fileCount":383,"integrity":"sha512-D9oH+xUHVUTKZDE4voxQ/QAa3LBcMfktvOhnVr8DueOYuFb2dx6s5wZIgvWhg1iD8+mAuJyfczgnAqvcvOznPg==","signatures":[{"sig":"MEUCIQDCiGx74rktNQp9XE8iC9lJ8VT2EiS4AB13HRz9QI1p5AIgfnzi6fss9hg5U9aigRV6I9Ao6IfQmgvdX0g4VS/sTig=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@1.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3115698},"main":"dist/algorithms.js","type":"module","_from":"file:graphty-algorithms-1.7.1.tgz","types":"dist/algorithms.d.ts","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js","default":"./dist/algorithms.js"}},"scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit","test":"vitest","build":"tsc","serve":"npm run build:bundle && vite","watch":"tsc --watch","commit":"cz","test:ui":"vitest --ui","coverage":"npm run coverage:shards && npm run coverage:merge","docs:api":"typedoc && node scripts/sanitize-api-docs.js","docs:dev":"vitepress dev docs","examples":"node examples/run-all-examples.js","lint:all":"npm run lint && npm run lint:pkg","lint:fix":"eslint --fix","lint:pkg":"knip","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","benchmark":"tsx src/benchmark-all-algorithms.ts","build:all":"npm run build && npm run build:bundle","storybook":". ../.env 2>/dev/null; storybook dev -p ${PORT:-6006} --host ${HOST:-localhost} ${HTTPS_CERT_PATH:+--https --ssl-cert $HTTPS_CERT_PATH --ssl-key $HTTPS_KEY_PATH} --no-open","typecheck":"tsc --noEmit","docs:build":"npm run docs:api && vitepress build docs","docs:watch":"npm run docs:api && (npm run docs:api:watch & npm run docs:dev & wait)","build:watch":"tsc --watch","build:bundle":"node scripts/build-bundle.js","docs:preview":"vitepress preview docs","examples:run":"node examples/run-all-examples.js","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","coverage:fast":"vitest run --project=default --coverage","examples:html":"npm run build:bundle && vite","test:coverage":"vitest run --coverage","build:gh-pages":"npm run build:bundle && node scripts/build-gh-pages.js","coverage:merge":"./scripts/coverage-merge.sh","docs:api:watch":"typedoc --watch","memory:profile":"tsx test/helpers/memory-profiler.ts","benchmark:quick":"tsx src/benchmark-all-algorithms.ts --quick","build-storybook":"storybook build","coverage:shards":"npm run coverage:shards:clean && npm run coverage:shards:run","benchmark:report":"tsx scripts/generate-performance-report.ts","coverage:preview":"npx serve coverage -p 9051","test:performance":"tsx test/helpers/run-performance-regression.ts","coverage:shards:run":"npm run coverage:shard:default && npm run coverage:shard:browser","benchmark:validation":"tsx src/optimized/benchmark-validation.ts","coverage:shards:clean":"rm -rf .coverage-parts","coverage:shard:browser":"COVERAGE_DIR=.coverage-parts/browser vitest run --project=browser --coverage","coverage:shard:default":"COVERAGE_DIR=.coverage-parts/default vitest run --project=default --coverage","benchmark:comprehensive":"tsx src/optimized/benchmark-comprehensive.ts","test:performance:update":"tsx test/helpers/run-performance-regression.ts --update-baselines"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:612e51c2-1fd6-4d06-9b45-9d4f65040138"}},"_resolved":"/tmp/faf8e8b52b8b4aa83461a0964ff4e5b9/graphty-algorithms-1.7.1.tgz","_integrity":"sha512-D9oH+xUHVUTKZDE4voxQ/QAa3LBcMfktvOhnVr8DueOYuFb2dx6s5wZIgvWhg1iD8+mAuJyfczgnAqvcvOznPg==","repository":{"url":"git+https://github.com/graphty-org/graphty-monorepo.git","type":"git","directory":"algorithms"},"_npmVersion":"11.7.0","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"_nodeVersion":"22.21.1","dependencies":{"pupt":"^1.3.2","typedfastbitset":"^0.6.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","knip":"^5.61.3","vite":"^7.0.5","eslint":"^9.29.0","vitest":"^3.2.4","globals":"^15.12.0","ts-node":"^10.9.2","typedoc":"^0.28.15","gh-pages":"^6.3.0","benchmark":"^2.1.4","chromatic":"^11.0.0","happy-dom":"^18.0.1","storybook":"^9.0.11","vitepress":"^1.6.3","@eslint/js":"^9.29.0","playwright":"^1.53.0","typescript":"^5.8.3","@storybook/test":"^8.6.14","@types/benchmark":"^2.1.5","semantic-release":"^25.0.2","typescript-eslint":"^8.34.1","@storybook/html-vite":"^9.0.11","@semantic-release/git":"^10.0.1","@storybook/addon-docs":"^9.0.11","typedoc-plugin-markdown":"^4.9.0","typedoc-vitepress-theme":"^1.1.2","@chromatic-com/storybook":"^4.0.0","@semantic-release/changelog":"^6.0.3","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/algorithms_1.7.1_1767943273582_0.28920105500252435","host":"s3://npm-registry-packages-npm-production"}},"1.7.2":{"name":"@graphty/algorithms","version":"1.7.2","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","_id":"@graphty/algorithms@1.7.2","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"homepage":"https://github.com/graphty-org/graphty-monorepo/tree/master/algorithms#readme","bugs":{"url":"https://github.com/graphty-org/graphty-monorepo/issues"},"dist":{"shasum":"54c0996c9a36a477a3dc973db7a9f9250e0895ac","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-1.7.2.tgz","fileCount":363,"integrity":"sha512-MfDm350ugiSYfVn+DhM91tlX7+BPvi7u6F6CxN5DbPVP/Ve68lzwZdBOP78dL3fZEdM5Fhgn66ftmalw1gSQrQ==","signatures":[{"sig":"MEQCIFE26d2wLJ/VMJ4zUD/qtd94cqS0oMMW9eNLj87BFzXzAiBl43HDOHoXZipBfPHewnRMIz6z+rFSM0i8ZLtnsgA0Pw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@1.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3101137},"main":"dist/algorithms.js","type":"module","_from":"file:graphty-algorithms-1.7.2.tgz","types":"dist/algorithms.d.ts","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js","default":"./dist/algorithms.js"}},"scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit","test":"vitest","build":"tsc","serve":"npm run build:bundle && vite","watch":"tsc --watch","commit":"cz","test:ui":"vitest --ui","coverage":"npm run coverage:shards && npm run coverage:merge","docs:api":"typedoc && node scripts/sanitize-api-docs.js","docs:dev":"vitepress dev docs","examples":"node examples/run-all-examples.js","lint:fix":"eslint --fix","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","benchmark":"tsx src/benchmark-all-algorithms.ts","build:all":"npm run build && npm run build:bundle","lint:knip":"cd .. && pnpm run lint:knip -- --workspace algorithms","storybook":". ../.env 2>/dev/null; storybook dev -p ${PORT:-6006} --host ${HOST:-localhost} ${HTTPS_CERT_PATH:+--https --ssl-cert $HTTPS_CERT_PATH --ssl-key $HTTPS_KEY_PATH} --no-open","typecheck":"tsc --noEmit","docs:build":"npm run docs:api && vitepress build docs","docs:watch":"npm run docs:api && (npm run docs:api:watch & npm run docs:dev & wait)","build:watch":"tsc --watch","build:bundle":"node scripts/build-bundle.js","docs:preview":"vitepress preview docs","examples:run":"node examples/run-all-examples.js","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","coverage:fast":"vitest run --project=default --coverage","examples:html":"npm run build:bundle && vite","test:coverage":"vitest run --coverage","build:gh-pages":"npm run build:bundle && node scripts/build-gh-pages.js","coverage:merge":"./scripts/coverage-merge.sh","docs:api:watch":"typedoc --watch","memory:profile":"tsx test/helpers/memory-profiler.ts","benchmark:quick":"tsx src/benchmark-all-algorithms.ts --quick","build-storybook":"storybook build","coverage:shards":"npm run coverage:shards:clean && npm run coverage:shards:run","benchmark:report":"tsx scripts/generate-performance-report.ts","coverage:preview":"npx serve coverage -p 9051","test:performance":"tsx test/helpers/run-performance-regression.ts","coverage:shards:run":"npm run coverage:shard:default && npm run coverage:shard:browser","benchmark:validation":"tsx src/optimized/benchmark-validation.ts","coverage:shards:clean":"rm -rf .coverage-parts","coverage:shard:browser":"COVERAGE_DIR=.coverage-parts/browser vitest run --project=browser --coverage","coverage:shard:default":"COVERAGE_DIR=.coverage-parts/default vitest run --project=default --coverage","benchmark:comprehensive":"tsx src/optimized/benchmark-comprehensive.ts","test:performance:update":"tsx test/helpers/run-performance-regression.ts --update-baselines"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:612e51c2-1fd6-4d06-9b45-9d4f65040138"}},"_resolved":"/tmp/6872ded33eb88db5a058b4ce2f35c433/graphty-algorithms-1.7.2.tgz","_integrity":"sha512-MfDm350ugiSYfVn+DhM91tlX7+BPvi7u6F6CxN5DbPVP/Ve68lzwZdBOP78dL3fZEdM5Fhgn66ftmalw1gSQrQ==","repository":{"url":"git+https://github.com/graphty-org/graphty-monorepo.git","type":"git","directory":"algorithms"},"_npmVersion":"11.19.1","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"_nodeVersion":"22.23.2","dependencies":{"typedfastbitset":"^0.6.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","knip":"^5.61.3","vite":"^7.0.5","eslint":"^9.29.0","vitest":"^3.2.4","globals":"^15.12.0","ts-node":"^10.9.2","typedoc":"^0.28.15","gh-pages":"^6.3.0","benchmark":"^2.1.4","chromatic":"^11.0.0","happy-dom":"^18.0.1","storybook":"^9.0.11","vitepress":"^1.6.3","@eslint/js":"^9.29.0","playwright":"^1.53.0","typescript":"^5.8.3","@storybook/test":"^8.6.14","@types/benchmark":"^2.1.5","semantic-release":"^25.0.2","typescript-eslint":"^8.34.1","@storybook/html-vite":"^9.0.11","@semantic-release/git":"^10.0.1","@storybook/addon-docs":"^9.0.11","typedoc-plugin-markdown":"^4.9.0","typedoc-vitepress-theme":"^1.1.2","@chromatic-com/storybook":"^4.0.0","@semantic-release/changelog":"^6.0.3","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/algorithms_1.7.2_1789162089247_0.09579396188769551","host":"s3://npm-registry-packages-npm-production"}},"1.7.3":{"name":"@graphty/algorithms","version":"1.7.3","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","_id":"@graphty/algorithms@1.7.3","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"homepage":"https://github.com/graphty-org/graphty-monorepo/tree/master/algorithms#readme","bugs":{"url":"https://github.com/graphty-org/graphty-monorepo/issues"},"dist":{"shasum":"2ce87f7d6741a160d4d361e897856f09af912309","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-1.7.3.tgz","fileCount":363,"integrity":"sha512-Rnq+8Imikcd79GXJlGOVOGURMXbApxYUurbUU3pcN2FoM1eORSjp4cY59X2Z/gq+ZPLVVoHqBf5EU1DfgTT7Dw==","signatures":[{"sig":"MEYCIQCCgtcng989iGiRa7p0fzliPfZ7l2noI09UUFr7y2th5wIhAOxTfo60bgKx6Ux6oOScSsr3PF86cW44t9YlsKw2yM+V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD7LDOTMoIuh7bVDxAEYjTxLVwWi5rGUBqqCREN2uDg7wIgPwFjam4AjSQNThaUVf0W2oLwxNxPNK2l65gBBE5vuwI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@1.7.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3101137},"main":"dist/algorithms.js","type":"module","_from":"file:graphty-algorithms-1.7.3.tgz","types":"dist/algorithms.d.ts","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js","default":"./dist/algorithms.js"}},"scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit","test":"vitest","build":"tsc","serve":"npm run build:bundle && vite","watch":"tsc --watch","commit":"cz","test:ui":"vitest --ui","coverage":"npm run coverage:shards && npm run coverage:merge","docs:api":"typedoc && node scripts/sanitize-api-docs.js","docs:dev":"vitepress dev docs","examples":"node examples/run-all-examples.js","lint:fix":"eslint --fix","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","benchmark":"tsx src/benchmark-all-algorithms.ts","build:all":"npm run build && npm run build:bundle","lint:knip":"cd .. && pnpm run lint:knip -- --workspace algorithms","storybook":". ../.env 2>/dev/null; storybook dev -p ${PORT:-6006} --host ${HOST:-localhost} ${HTTPS_CERT_PATH:+--https --ssl-cert $HTTPS_CERT_PATH --ssl-key $HTTPS_KEY_PATH} --no-open","typecheck":"tsc --noEmit","docs:build":"npm run docs:api && vitepress build docs","docs:watch":"npm run docs:api && (npm run docs:api:watch & npm run docs:dev & wait)","build:watch":"tsc --watch","build:bundle":"node scripts/build-bundle.js","docs:preview":"vitepress preview docs","examples:run":"node examples/run-all-examples.js","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","coverage:fast":"vitest run --project=default --coverage","examples:html":"npm run build:bundle && vite","test:coverage":"vitest run --coverage","build:gh-pages":"npm run build:bundle && node scripts/build-gh-pages.js","coverage:merge":"./scripts/coverage-merge.sh","docs:api:watch":"typedoc --watch","memory:profile":"tsx test/helpers/memory-profiler.ts","benchmark:quick":"tsx src/benchmark-all-algorithms.ts --quick","build-storybook":"storybook build","coverage:shards":"npm run coverage:shards:clean && npm run coverage:shards:run","benchmark:report":"tsx scripts/generate-performance-report.ts","coverage:preview":"npx serve coverage -p 9051","test:performance":"tsx test/helpers/run-performance-regression.ts","coverage:shards:run":"npm run coverage:shard:default && npm run coverage:shard:browser","benchmark:validation":"tsx src/optimized/benchmark-validation.ts","coverage:shards:clean":"rm -rf .coverage-parts","coverage:shard:browser":"COVERAGE_DIR=.coverage-parts/browser vitest run --project=browser --coverage","coverage:shard:default":"COVERAGE_DIR=.coverage-parts/default vitest run --project=default --coverage","benchmark:comprehensive":"tsx src/optimized/benchmark-comprehensive.ts","test:performance:update":"tsx test/helpers/run-performance-regression.ts --update-baselines"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:612e51c2-1fd6-4d06-9b45-9d4f65040138"}},"_resolved":"/tmp/7ed9e7d39638085dc959aafaaf897413/graphty-algorithms-1.7.3.tgz","_integrity":"sha512-Rnq+8Imikcd79GXJlGOVOGURMXbApxYUurbUU3pcN2FoM1eORSjp4cY59X2Z/gq+ZPLVVoHqBf5EU1DfgTT7Dw==","repository":{"url":"git+https://github.com/graphty-org/graphty-monorepo.git","type":"git","directory":"algorithms"},"_npmVersion":"11.19.1","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"_nodeVersion":"22.23.2","dependencies":{"typedfastbitset":"^0.6.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","knip":"^5.61.3","vite":"^7.0.5","eslint":"^9.29.0","vitest":"^3.2.4","globals":"^15.12.0","ts-node":"^10.9.2","typedoc":"^0.28.15","gh-pages":"^6.3.0","benchmark":"^2.1.4","chromatic":"^11.0.0","happy-dom":"^18.0.1","storybook":"^9.0.11","vitepress":"^1.6.3","@eslint/js":"^9.29.0","playwright":"^1.53.0","typescript":"^5.8.3","@storybook/test":"^8.6.14","@types/benchmark":"^2.1.5","semantic-release":"^25.0.2","typescript-eslint":"^8.34.1","@storybook/html-vite":"^9.0.11","@semantic-release/git":"^10.0.1","@storybook/addon-docs":"^9.0.11","typedoc-plugin-markdown":"^4.9.0","typedoc-vitepress-theme":"^1.1.2","@chromatic-com/storybook":"^4.0.0","@semantic-release/changelog":"^6.0.3","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/algorithms_1.7.3_1789886792984_0.8209899175252788","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@graphty/algorithms","version":"1.8.0","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","_id":"@graphty/algorithms@1.8.0","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"homepage":"https://github.com/graphty-org/graphty-monorepo/tree/master/algorithms#readme","bugs":{"url":"https://github.com/graphty-org/graphty-monorepo/issues"},"dist":{"shasum":"76b57f7829fb66c30a3106c7a2bfacd2d286d58c","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-1.8.0.tgz","fileCount":430,"integrity":"sha512-Uatv6ZA9KBSg73aX4Jc0WiYkTVSSMtTcFsjx1d+4HuAIeYfC8jtfpq3vHj6dGxU3bO5u46UuH+YTMzT97H0ASA==","signatures":[{"sig":"MEYCIQDHbY8A0csazz6UNBr3MpIF3jfN+RwFfWI3jZGi2Xz5xQIhAMzzDL9S6K0BL1F8X/waHvUhewJXqP+yi8UJ5xLXV+bP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAlBLiSf19FLJtKnEaHdQuZWtb13M5FX8F2pfpmO7G4fAiBn4i0gixqSqSekZR9m0VbKSdaJvwLFuC3lIlN4ovdZ6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@1.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5802479},"main":"dist/algorithms.js","type":"module","_from":"file:graphty-algorithms-1.8.0.tgz","types":"dist/algorithms.d.ts","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js","default":"./dist/algorithms.js"}},"scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit && tsc -p tsconfig.typecheck.json","test":"vitest","build":"tsc","serve":"npm run build:bundle && vite","watch":"tsc --watch","commit":"cz","test:ui":"vitest --ui","coverage":"npm run coverage:shards && npm run coverage:merge","docs:api":"typedoc && node scripts/sanitize-api-docs.js","docs:dev":"vitepress dev docs","examples":"node examples/run-all-examples.js","lint:fix":"eslint --fix","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","benchmark":"tsx src/benchmark-all-algorithms.ts","build:all":"npm run build && npm run build:bundle","lint:knip":"cd .. && pnpm run lint:knip -- --workspace algorithms","storybook":". ../.env 2>/dev/null; storybook dev -p ${PORT:-6006} --host ${HOST:-localhost} ${HTTPS_CERT_PATH:+--https --ssl-cert $HTTPS_CERT_PATH --ssl-key $HTTPS_KEY_PATH} --no-open","typecheck":"tsc --noEmit","docs:build":"npm run docs:api && vitepress build docs","docs:watch":"npm run docs:api && (npm run docs:api:watch & npm run docs:dev & wait)","build:watch":"tsc --watch","build:bundle":"node scripts/build-bundle.js","docs:preview":"vitepress preview docs","examples:run":"node examples/run-all-examples.js","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","coverage:fast":"vitest run --project=default --coverage","examples:html":"npm run build:bundle && vite","test:coverage":"vitest run --coverage","build:gh-pages":"npm run build:bundle && node scripts/build-gh-pages.js","coverage:merge":"./scripts/coverage-merge.sh","docs:api:watch":"typedoc --watch","memory:profile":"tsx test/helpers/memory-profiler.ts","benchmark:quick":"tsx src/benchmark-all-algorithms.ts --quick","build-storybook":"storybook build","coverage:shards":"npm run coverage:shards:clean && npm run coverage:shards:run","benchmark:report":"tsx scripts/generate-performance-report.ts","coverage:preview":"npx serve coverage -p 9051","test:performance":"tsx test/helpers/run-performance-regression.ts","coverage:shards:run":"npm run coverage:shard:default && npm run coverage:shard:browser","benchmark:validation":"tsx src/optimized/benchmark-validation.ts","coverage:shards:clean":"rm -rf .coverage-parts","coverage:shard:browser":"COVERAGE_DIR=.coverage-parts/browser vitest run --project=browser --coverage","coverage:shard:default":"COVERAGE_DIR=.coverage-parts/default vitest run --project=default --coverage","benchmark:comprehensive":"tsx src/optimized/benchmark-comprehensive.ts","test:performance:update":"tsx test/helpers/run-performance-regression.ts --update-baselines"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:612e51c2-1fd6-4d06-9b45-9d4f65040138"}},"_resolved":"/tmp/059bd6f5b54f90febf857c080570409b/graphty-algorithms-1.8.0.tgz","_integrity":"sha512-Uatv6ZA9KBSg73aX4Jc0WiYkTVSSMtTcFsjx1d+4HuAIeYfC8jtfpq3vHj6dGxU3bO5u46UuH+YTMzT97H0ASA==","repository":{"url":"git+https://github.com/graphty-org/graphty-monorepo.git","type":"git","directory":"algorithms"},"_npmVersion":"11.19.1","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"_nodeVersion":"22.23.2","dependencies":{"typedfastbitset":"^0.6.1","@graphty/graph-format":"^1.0.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","knip":"^5.61.3","vite":"^7.0.5","eslint":"^9.29.0","vitest":"^3.2.4","globals":"^15.12.0","ts-node":"^10.9.2","typedoc":"^0.28.15","gh-pages":"^6.3.0","benchmark":"^2.1.4","chromatic":"^11.0.0","happy-dom":"^18.0.1","storybook":"^9.0.11","vitepress":"^1.6.3","@eslint/js":"^9.29.0","playwright":"^1.53.0","typescript":"^5.8.3","@storybook/test":"^8.6.14","@types/benchmark":"^2.1.5","semantic-release":"^25.0.2","typescript-eslint":"^8.34.1","@storybook/html-vite":"^9.0.11","@semantic-release/git":"^10.0.1","@storybook/addon-docs":"^9.0.11","typedoc-plugin-markdown":"^4.9.0","typedoc-vitepress-theme":"^1.1.2","@chromatic-com/storybook":"^4.0.0","@semantic-release/changelog":"^6.0.3","eslint-plugin-simple-import-sort":"^12.1.1"},"peerDependencies":{"@graphty/graph-format":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/algorithms_1.8.0_1789919650928_0.7292273496559405","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"@graphty/algorithms","version":"1.8.1","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","_id":"@graphty/algorithms@1.8.1","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"homepage":"https://github.com/graphty-org/graphty-monorepo/tree/master/algorithms#readme","bugs":{"url":"https://github.com/graphty-org/graphty-monorepo/issues"},"dist":{"shasum":"4815ab0f289caa922039c6e525c742d763623242","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-1.8.1.tgz","fileCount":430,"integrity":"sha512-ygicN0sx1HbQObqQNoAEaX0Lp1itdAMZZFan8RoJWHynQRyJzVRFyRwWRVa0xaaMiZ+CrjrbUPBGKJRmxpTlXA==","signatures":[{"sig":"MEUCIGVIka0JtQv2YQUXF2C7RXXoGm9Q/cqOA6eNRYXkb2ZcAiEAwlLhurMAtS5Wi2gneJdjMV8JSGw3zkVQd/md4F8gujc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIB1NY/W+gzTS9GZ06tj7vrkIl7BTL+4Qp1QqGxEkPrxVAiEAoyz1Z+zYoCED2Gf5izPnBMTkMvu6zpUnulqV6Ub5OE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@1.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5802479},"main":"dist/algorithms.js","type":"module","_from":"file:graphty-algorithms-1.8.1.tgz","types":"dist/algorithms.d.ts","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js","default":"./dist/algorithms.js"}},"scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit && tsc -p tsconfig.typecheck.json","test":"vitest","build":"tsc","serve":"npm run build:bundle && vite","watch":"tsc --watch","commit":"cz","test:ui":"vitest --ui","coverage":"npm run coverage:shards && npm run coverage:merge","docs:api":"typedoc && node scripts/sanitize-api-docs.js","docs:dev":"vitepress dev docs","examples":"node examples/run-all-examples.js","lint:fix":"eslint --fix","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","benchmark":"tsx src/benchmark-all-algorithms.ts","build:all":"npm run build && npm run build:bundle","lint:knip":"cd .. && pnpm run lint:knip -- --workspace algorithms","storybook":". ../.env 2>/dev/null; storybook dev -p ${PORT:-6006} --host ${HOST:-localhost} ${HTTPS_CERT_PATH:+--https --ssl-cert $HTTPS_CERT_PATH --ssl-key $HTTPS_KEY_PATH} --no-open","typecheck":"tsc --noEmit","docs:build":"npm run docs:api && vitepress build docs","docs:watch":"npm run docs:api && (npm run docs:api:watch & npm run docs:dev & wait)","build:watch":"tsc --watch","build:bundle":"node scripts/build-bundle.js","docs:preview":"vitepress preview docs","examples:run":"node examples/run-all-examples.js","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","coverage:fast":"vitest run --project=default --coverage","examples:html":"npm run build:bundle && vite","test:coverage":"vitest run --coverage","build:gh-pages":"npm run build:bundle && node scripts/build-gh-pages.js","coverage:merge":"./scripts/coverage-merge.sh","docs:api:watch":"typedoc --watch","memory:profile":"tsx test/helpers/memory-profiler.ts","benchmark:quick":"tsx src/benchmark-all-algorithms.ts --quick","build-storybook":"storybook build","coverage:shards":"npm run coverage:shards:clean && npm run coverage:shards:run","benchmark:report":"tsx scripts/generate-performance-report.ts","coverage:preview":"npx serve coverage -p 9051","test:performance":"tsx test/helpers/run-performance-regression.ts","coverage:shards:run":"npm run coverage:shard:default && npm run coverage:shard:browser","benchmark:validation":"tsx src/optimized/benchmark-validation.ts","coverage:shards:clean":"rm -rf .coverage-parts","coverage:shard:browser":"COVERAGE_DIR=.coverage-parts/browser vitest run --project=browser --coverage","coverage:shard:default":"COVERAGE_DIR=.coverage-parts/default vitest run --project=default --coverage","benchmark:comprehensive":"tsx src/optimized/benchmark-comprehensive.ts","test:performance:update":"tsx test/helpers/run-performance-regression.ts --update-baselines"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:612e51c2-1fd6-4d06-9b45-9d4f65040138"}},"_resolved":"/tmp/48a03ca56310860bb66e2d556f62b645/graphty-algorithms-1.8.1.tgz","_integrity":"sha512-ygicN0sx1HbQObqQNoAEaX0Lp1itdAMZZFan8RoJWHynQRyJzVRFyRwWRVa0xaaMiZ+CrjrbUPBGKJRmxpTlXA==","repository":{"url":"git+https://github.com/graphty-org/graphty-monorepo.git","type":"git","directory":"algorithms"},"_npmVersion":"11.19.1","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"_nodeVersion":"22.23.2","dependencies":{"typedfastbitset":"^0.6.1","@graphty/graph-format":"^1.0.2"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","knip":"^5.61.3","vite":"^7.0.5","eslint":"^9.29.0","vitest":"^3.2.4","globals":"^15.12.0","ts-node":"^10.9.2","typedoc":"^0.28.15","gh-pages":"^6.3.0","benchmark":"^2.1.4","chromatic":"^11.0.0","happy-dom":"^18.0.1","storybook":"^9.0.11","vitepress":"^1.6.3","@eslint/js":"^9.29.0","playwright":"^1.53.0","typescript":"^5.8.3","@storybook/test":"^8.6.14","@types/benchmark":"^2.1.5","semantic-release":"^25.0.2","typescript-eslint":"^8.34.1","@storybook/html-vite":"^9.0.11","@semantic-release/git":"^10.0.1","@storybook/addon-docs":"^9.0.11","typedoc-plugin-markdown":"^4.9.0","typedoc-vitepress-theme":"^1.1.2","@chromatic-com/storybook":"^4.0.0","@semantic-release/changelog":"^6.0.3","eslint-plugin-simple-import-sort":"^12.1.1"},"peerDependencies":{"@graphty/graph-format":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/algorithms_1.8.1_1789958030162_0.2996972395410211","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@graphty/algorithms","version":"2.0.0","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","_id":"@graphty/algorithms@2.0.0","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"homepage":"https://github.com/graphty-org/graphty-monorepo/tree/master/algorithms#readme","bugs":{"url":"https://github.com/graphty-org/graphty-monorepo/issues"},"dist":{"shasum":"0c2a81ef2e065b1fad687f836bbb5b038b196d20","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-2.0.0.tgz","fileCount":435,"integrity":"sha512-4aFo5+69qYpnfkDwGMMbCuQ3SDPQJoJmGG9C2OKELGEapOU5NDHyZI2gt5qbDaEhrdi3FetjzB1nGDlVm39b4g==","signatures":[{"sig":"MEUCIQCuHULmm3wjLZz5P46+kWH01ED+kqsdLvtdEcUaTbsEzAIgL48lZ1fy8pRGjnyGbCypn/BWEjOr5VR65JJ0RvAihUg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIB6xsxW7pmLbnNjMmChsaog/u5JvqjYrAxjr3S7kgBlaAiAKYKTVUePsRAoEUezpOE0VjOPtsjnI/EHt87kQRvp32w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5827629},"main":"dist/algorithms.js","type":"module","_from":"file:graphty-algorithms-2.0.0.tgz","types":"dist/algorithms.d.ts","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js","default":"./dist/algorithms.js"}},"scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit && tsc -p tsconfig.typecheck.json","test":"vitest","build":"tsc","serve":"npm run build:bundle && vite --port ${PORT:?start it through servherd, which sets PORT} --strictPort","watch":"tsc --watch","commit":"cz","test:ui":"vitest --ui","coverage":"npm run coverage:shards && npm run coverage:merge","docs:api":"typedoc && node scripts/sanitize-api-docs.js","docs:dev":"vitepress dev docs --port ${PORT:?start it through servherd, which sets PORT} --strictPort","examples":"node examples/run-all-examples.js","lint:fix":"eslint --fix","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","benchmark":"tsx src/benchmark-all-algorithms.ts","build:all":"npm run build && npm run build:bundle","lint:knip":"cd .. && pnpm run lint:knip -- --workspace algorithms","storybook":"storybook dev -p ${PORT:?start it through servherd, which sets PORT} --host ${HOST:-localhost} ${HTTPS_CERT_PATH:+--https --ssl-cert $HTTPS_CERT_PATH --ssl-key $HTTPS_KEY_PATH} --no-open","typecheck":"tsc --noEmit","docs:build":"npm run docs:api && vitepress build docs","docs:watch":"npm run docs:api && (npm run docs:api:watch & npm run docs:dev & wait)","build:watch":"tsc --watch","build:bundle":"node scripts/build-bundle.js","docs:preview":"vitepress preview docs --port ${PORT:?start it through servherd, which sets PORT}","examples:run":"node examples/run-all-examples.js","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","coverage:fast":"vitest run --project=default --coverage","examples:html":"npm run build:bundle && vite --port ${PORT:?start it through servherd, which sets PORT} --strictPort","test:coverage":"vitest run --coverage","build:gh-pages":"npm run build:bundle && node scripts/build-gh-pages.js","coverage:merge":"./scripts/coverage-merge.sh","docs:api:watch":"typedoc --watch","memory:profile":"tsx test/helpers/memory-profiler.ts","benchmark:quick":"tsx src/benchmark-all-algorithms.ts --quick","build-storybook":"storybook build","coverage:shards":"npm run coverage:shards:clean && npm run coverage:shards:run","benchmark:report":"tsx scripts/generate-performance-report.ts","coverage:preview":"npx serve coverage -p ${PORT:?start it through servherd, which sets PORT}","test:performance":"tsx test/helpers/run-performance-regression.ts","coverage:shards:run":"npm run coverage:shard:default && npm run coverage:shard:browser","benchmark:validation":"tsx src/optimized/benchmark-validation.ts","coverage:shards:clean":"rm -rf .coverage-parts","coverage:shard:browser":"COVERAGE_DIR=.coverage-parts/browser vitest run --project=browser --coverage","coverage:shard:default":"COVERAGE_DIR=.coverage-parts/default vitest run --project=default --coverage","benchmark:comprehensive":"tsx src/optimized/benchmark-comprehensive.ts","test:performance:update":"tsx test/helpers/run-performance-regression.ts --update-baselines"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:612e51c2-1fd6-4d06-9b45-9d4f65040138"}},"_resolved":"/tmp/5a3368a78d130813f2a36c9eda675614/graphty-algorithms-2.0.0.tgz","_integrity":"sha512-4aFo5+69qYpnfkDwGMMbCuQ3SDPQJoJmGG9C2OKELGEapOU5NDHyZI2gt5qbDaEhrdi3FetjzB1nGDlVm39b4g==","repository":{"url":"git+https://github.com/graphty-org/graphty-monorepo.git","type":"git","directory":"algorithms"},"_npmVersion":"11.20.0","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"_nodeVersion":"22.23.2","dependencies":{"typedfastbitset":"^0.6.1","@graphty/graph-format":"^1.0.2"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","knip":"^5.61.3","vite":"^7.0.5","eslint":"^9.29.0","vitest":"^3.2.4","globals":"^15.12.0","ts-node":"^10.9.2","typedoc":"^0.28.15","gh-pages":"^6.3.0","benchmark":"^2.1.4","chromatic":"^11.0.0","happy-dom":"^18.0.1","storybook":"^9.0.11","vitepress":"^1.6.3","@eslint/js":"^9.29.0","playwright":"^1.53.0","typescript":"^5.8.3","@storybook/test":"^8.6.14","@types/benchmark":"^2.1.5","semantic-release":"^25.0.2","typescript-eslint":"^8.34.1","@storybook/html-vite":"^9.0.11","@semantic-release/git":"^10.0.1","@storybook/addon-docs":"^9.0.11","typedoc-plugin-markdown":"^4.9.0","typedoc-vitepress-theme":"^1.1.2","@chromatic-com/storybook":"^4.0.0","@semantic-release/changelog":"^6.0.3","eslint-plugin-simple-import-sort":"^12.1.1"},"peerDependencies":{"@graphty/graph-format":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/algorithms_2.0.0_1790251378705_0.9753519144928631","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@graphty/algorithms","version":"2.0.1","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","_id":"@graphty/algorithms@2.0.1","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"homepage":"https://github.com/graphty-org/graphty-monorepo/tree/master/algorithms#readme","bugs":{"url":"https://github.com/graphty-org/graphty-monorepo/issues"},"dist":{"shasum":"6aa63fb9f6e67079c18b908c592ca357a6a2f9ff","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-2.0.1.tgz","fileCount":434,"integrity":"sha512-XsBAqyddfHAH9LuCUXHkICbZ7lukIitdnbsk1/eVuYB4ZDlSHcrgdG6PFhH1ONL2I4JC9LYxtYS75/iGeQd3Gg==","signatures":[{"sig":"MEQCIF2s4xz/FyAWw+Ut1BVh6ScU4QcfIdkArCuTzlijQu99AiAgKy3X1s/5otSWfWtreBczAHf58zd2DRCV+4PM3l7U9A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC/KyWE8igR7NxxLQC4KuKTluFOBdWm/UfbG4vxcIcGugIgD1RImwMizpcdNlnwZmlrClostf0nyqa1gFAXK85HF0E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5676146},"main":"dist/algorithms.js","type":"module","_from":"file:graphty-algorithms-2.0.1.tgz","types":"dist/algorithms.d.ts","config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js","default":"./dist/algorithms.js"}},"scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit && tsc -p tsconfig.typecheck.json","test":"vitest","build":"tsc","serve":"npm run build:bundle && vite --port ${PORT:?start it through servherd, which sets PORT} --strictPort","watch":"tsc --watch","commit":"cz","test:ui":"vitest --ui","coverage":"npm run coverage:shards && npm run coverage:merge","docs:api":"typedoc && node scripts/sanitize-api-docs.js","docs:dev":"vitepress dev docs --port ${PORT:?start it through servherd, which sets PORT} --strictPort","examples":"node examples/run-all-examples.js","lint:fix":"eslint --fix","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","benchmark":"tsx src/benchmark-all-algorithms.ts","build:all":"npm run build && npm run build:bundle","lint:knip":"cd .. && pnpm run lint:knip -- --workspace algorithms","storybook":"storybook dev -p ${PORT:?start it through servherd, which sets PORT} --host ${HOST:-localhost} ${HTTPS_CERT_PATH:+--https --ssl-cert $HTTPS_CERT_PATH --ssl-key $HTTPS_KEY_PATH} --no-open","typecheck":"tsc --noEmit","docs:build":"npm run docs:api && vitepress build docs","docs:watch":"npm run docs:api && (npm run docs:api:watch & npm run docs:dev & wait)","build:watch":"tsc --watch","build:bundle":"node scripts/build-bundle.js","docs:preview":"vitepress preview docs --port ${PORT:?start it through servherd, which sets PORT}","examples:run":"node examples/run-all-examples.js","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","coverage:fast":"vitest run --project=default --coverage","examples:html":"npm run build:bundle && vite --port ${PORT:?start it through servherd, which sets PORT} --strictPort","test:coverage":"vitest run --coverage","build:gh-pages":"npm run build:bundle && node scripts/build-gh-pages.js","coverage:merge":"./scripts/coverage-merge.sh","docs:api:watch":"typedoc --watch","memory:profile":"tsx test/helpers/memory-profiler.ts","benchmark:quick":"tsx src/benchmark-all-algorithms.ts --quick","build-storybook":"storybook build","coverage:shards":"npm run coverage:shards:clean && npm run coverage:shards:run","benchmark:report":"tsx scripts/generate-performance-report.ts","coverage:preview":"npx serve coverage -p ${PORT:?start it through servherd, which sets PORT}","test:performance":"tsx test/helpers/run-performance-regression.ts","coverage:shards:run":"npm run coverage:shard:default && npm run coverage:shard:browser","benchmark:validation":"tsx src/optimized/benchmark-validation.ts","coverage:shards:clean":"rm -rf .coverage-parts","coverage:shard:browser":"COVERAGE_DIR=.coverage-parts/browser vitest run --project=browser --coverage","coverage:shard:default":"COVERAGE_DIR=.coverage-parts/default vitest run --project=default --coverage","benchmark:comprehensive":"tsx src/optimized/benchmark-comprehensive.ts","test:performance:update":"tsx test/helpers/run-performance-regression.ts --update-baselines"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:612e51c2-1fd6-4d06-9b45-9d4f65040138"}},"_resolved":"/tmp/2e66bec82bac3514ac236c8cb0e9249f/graphty-algorithms-2.0.1.tgz","_integrity":"sha512-XsBAqyddfHAH9LuCUXHkICbZ7lukIitdnbsk1/eVuYB4ZDlSHcrgdG6PFhH1ONL2I4JC9LYxtYS75/iGeQd3Gg==","repository":{"url":"git+https://github.com/graphty-org/graphty-monorepo.git","type":"git","directory":"algorithms"},"_npmVersion":"11.20.0","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"_nodeVersion":"22.23.2","dependencies":{"typedfastbitset":"^0.6.1","@graphty/graph-format":"^1.0.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","knip":"^5.61.3","vite":"^7.0.5","eslint":"^9.29.0","vitest":"^3.2.4","globals":"^15.12.0","ts-node":"^10.9.2","typedoc":"^0.28.15","gh-pages":"^6.3.0","benchmark":"^2.1.4","chromatic":"^11.0.0","happy-dom":"^18.0.1","storybook":"^9.0.11","vitepress":"^1.6.3","@eslint/js":"^9.29.0","playwright":"^1.53.0","typescript":"^5.8.3","@storybook/test":"^8.6.14","@types/benchmark":"^2.1.5","semantic-release":"^25.0.2","typescript-eslint":"^8.34.1","@storybook/html-vite":"^9.0.11","@semantic-release/git":"^10.0.1","@storybook/addon-docs":"^9.0.11","typedoc-plugin-markdown":"^4.9.0","typedoc-vitepress-theme":"^1.1.2","@chromatic-com/storybook":"^4.0.0","@semantic-release/changelog":"^6.0.3","eslint-plugin-simple-import-sort":"^12.1.1"},"peerDependencies":{"@graphty/graph-format":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/algorithms_2.0.1_1790276531362_0.13615191686628214","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"_id":"@graphty/algorithms@2.0.2","bugs":{"url":"https://github.com/graphty-org/graphty-monorepo/issues"},"dist":{"shasum":"41cf93e1089a1c40860076a95a2110910c5334b1","tarball":"https://registry.npmjs.org/@graphty/algorithms/-/algorithms-2.0.2.tgz","fileCount":434,"integrity":"sha512-EQ4syFSUspUkYduw6B3Tkr9cf1IeFrNa5dPU3SYEt2dlmAZ6b8qKGEAXFMy97oH+iolN3j56gB1xKT/hQMzSGA==","signatures":[{"sig":"MEUCIDYLKMcPagCwoVtKDDsTd5njB7l9y3GtopksbKL3PUmtAiEAhjiiSJdJjOI/pXxkdKWgRgyb1GM1QO7n+mepdcY+580=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDdKkk2VNlsC3K6bvILmPOqbb9+PCeJKg2grFNGwU+/3gIhAPUXXHN9WSepUDMF0rKVPaH2OAYx/vtDQQXlElfplOkW"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@graphty%2falgorithms@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5676146},"main":"dist/algorithms.js","name":"@graphty/algorithms","type":"module","_from":"file:graphty-algorithms-2.0.2.tgz","types":"dist/algorithms.d.ts","author":{"name":"Adam Powers","email":"apowers@ato.ms"},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"engines":{"node":">=18.19.0"},"exports":{".":{"types":"./dist/algorithms.d.ts","import":"./dist/algorithms.js","default":"./dist/algorithms.js"}},"license":"MIT","scripts":{"dev":"tsc --watch","lint":"eslint && tsc --noEmit && tsc -p tsconfig.typecheck.json","test":"vitest","build":"tsc","serve":"npm run build:bundle && vite --port ${PORT:?start it through servherd, which sets PORT} --strictPort","watch":"tsc --watch","commit":"cz","test:ui":"vitest --ui","coverage":"npm run coverage:shards && npm run coverage:merge","docs:api":"typedoc && node scripts/sanitize-api-docs.js","docs:dev":"vitepress dev docs --port ${PORT:?start it through servherd, which sets PORT} --strictPort","examples":"node examples/run-all-examples.js","lint:fix":"eslint --fix","test:all":"vitest run --project=default --project=browser","test:run":"vitest run --project=default","benchmark":"tsx src/benchmark-all-algorithms.ts","build:all":"npm run build && npm run build:bundle","lint:knip":"cd .. && pnpm run lint:knip -- --workspace algorithms","storybook":"storybook dev -p ${PORT:?start it through servherd, which sets PORT} --host ${HOST:-localhost} ${HTTPS_CERT_PATH:+--https --ssl-cert $HTTPS_CERT_PATH --ssl-key $HTTPS_KEY_PATH} --no-open","typecheck":"tsc --noEmit","docs:build":"npm run docs:api && vitepress build docs","docs:watch":"npm run docs:api && (npm run docs:api:watch & npm run docs:dev & wait)","build:watch":"tsc --watch","build:bundle":"node scripts/build-bundle.js","docs:preview":"vitepress preview docs --port ${PORT:?start it through servherd, which sets PORT}","examples:run":"node examples/run-all-examples.js","ready:commit":"npm run build && npm run lint && npm run test:all","test:browser":"vitest --project=browser","coverage:fast":"vitest run --project=default --coverage","examples:html":"npm run build:bundle && vite --port ${PORT:?start it through servherd, which sets PORT} --strictPort","test:coverage":"vitest run --coverage","build:gh-pages":"npm run build:bundle && node scripts/build-gh-pages.js","coverage:merge":"./scripts/coverage-merge.sh","docs:api:watch":"typedoc --watch","memory:profile":"tsx test/helpers/memory-profiler.ts","benchmark:quick":"tsx src/benchmark-all-algorithms.ts --quick","build-storybook":"storybook build","coverage:shards":"npm run coverage:shards:clean && npm run coverage:shards:run","benchmark:report":"tsx scripts/generate-performance-report.ts","coverage:preview":"npx serve coverage -p ${PORT:?start it through servherd, which sets PORT}","test:performance":"tsx test/helpers/run-performance-regression.ts","coverage:shards:run":"npm run coverage:shard:default && npm run coverage:shard:browser","benchmark:validation":"tsx src/optimized/benchmark-validation.ts","coverage:shards:clean":"rm -rf .coverage-parts","coverage:shard:browser":"COVERAGE_DIR=.coverage-parts/browser vitest run --project=browser --coverage","coverage:shard:default":"COVERAGE_DIR=.coverage-parts/default vitest run --project=default --coverage","benchmark:comprehensive":"tsx src/optimized/benchmark-comprehensive.ts","test:performance:update":"tsx test/helpers/run-performance-regression.ts --update-baselines"},"version":"2.0.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:612e51c2-1fd6-4d06-9b45-9d4f65040138"}},"homepage":"https://github.com/graphty-org/graphty-monorepo/tree/master/algorithms#readme","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"_resolved":"/tmp/a51e7437fcffd51a2657631009cc9fcf/graphty-algorithms-2.0.2.tgz","_integrity":"sha512-EQ4syFSUspUkYduw6B3Tkr9cf1IeFrNa5dPU3SYEt2dlmAZ6b8qKGEAXFMy97oH+iolN3j56gB1xKT/hQMzSGA==","repository":{"url":"git+https://github.com/graphty-org/graphty-monorepo.git","type":"git","directory":"algorithms"},"_npmVersion":"11.20.0","description":"Graph algorithms library for browser environments implemented in TypeScript","directories":{"example":"examples"},"maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"_nodeVersion":"22.23.2","dependencies":{"typedfastbitset":"^0.6.1","@graphty/graph-format":"^1.0.4"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","knip":"^5.61.3","vite":"^7.0.5","eslint":"^9.29.0","vitest":"^3.2.4","globals":"^15.12.0","ts-node":"^10.9.2","typedoc":"^0.28.15","gh-pages":"^6.3.0","benchmark":"^2.1.4","chromatic":"^11.0.0","happy-dom":"^18.0.1","storybook":"^9.0.11","vitepress":"^1.6.3","@eslint/js":"^9.29.0","playwright":"^1.53.0","typescript":"^5.8.3","@storybook/test":"^8.6.14","@types/benchmark":"^2.1.5","semantic-release":"^25.0.2","typescript-eslint":"^8.34.1","@storybook/html-vite":"^9.0.11","@semantic-release/git":"^10.0.1","@storybook/addon-docs":"^9.0.11","typedoc-plugin-markdown":"^4.9.0","typedoc-vitepress-theme":"^1.1.2","@chromatic-com/storybook":"^4.0.0","@semantic-release/changelog":"^6.0.3","eslint-plugin-simple-import-sort":"^12.1.1"},"peerDependencies":{"@graphty/graph-format":"^1.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/algorithms_2.0.2_1790289201906_0.5548566022352199"}}},"time":{"created":"2025-07-20T19:09:39.639Z","modified":"2026-09-24T22:33:22.403Z","1.0.1":"2025-07-20T19:09:39.944Z","1.1.0":"2025-07-22T15:24:32.183Z","1.2.0":"2025-07-24T03:17:16.634Z","1.3.1":"2025-12-16T07:26:18.685Z","1.4.2":"2026-01-03T06:31:20.995Z","1.5.0":"2026-01-04T08:18:39.913Z","1.6.0":"2026-01-07T08:04:48.662Z","1.7.0":"2026-01-08T17:19:09.177Z","1.7.1":"2026-01-09T07:21:13.844Z","1.7.2":"2026-09-11T21:28:09.473Z","1.7.3":"2026-09-20T06:46:33.078Z","1.8.0":"2026-09-20T15:54:11.041Z","1.8.1":"2026-09-21T02:33:50.294Z","2.0.0":"2026-09-24T12:02:58.797Z","2.0.1":"2026-09-24T19:02:11.471Z","2.0.2":"2026-09-24T22:33:22.043Z"},"bugs":{"url":"https://github.com/graphty-org/graphty-monorepo/issues"},"author":{"name":"Adam Powers","email":"apowers@ato.ms"},"license":"MIT","homepage":"https://github.com/graphty-org/graphty-monorepo/tree/master/algorithms#readme","keywords":["graph","algorithms","typescript","browser","graph-theory","network-analysis","centrality","community-detection","shortest-path","graph-traversal"],"repository":{"url":"git+https://github.com/graphty-org/graphty-monorepo.git","type":"git","directory":"algorithms"},"description":"Graph algorithms library for browser environments implemented in TypeScript","maintainers":[{"name":"apowers313","email":"apowers@ato.ms"}],"readme":"# @graphty/algorithms\n\n[![CI](https://github.com/graphty-org/graphty-monorepo/actions/workflows/ci.yml/badge.svg)](https://github.com/graphty-org/graphty-monorepo/actions/workflows/ci.yml)\n[![Coverage Status](https://coveralls.io/repos/github/graphty-org/graphty-monorepo/badge.svg?branch=master)](https://coveralls.io/github/graphty-org/graphty-monorepo?branch=master)\n[![npm version](https://img.shields.io/npm/v/@graphty/algorithms.svg)](https://www.npmjs.com/package/@graphty/algorithms)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Documentation](https://img.shields.io/badge/docs-vitepress-blue)](https://graphty.app/docs/algorithms/)\n[![Storybook](https://img.shields.io/badge/storybook-interactive%20demos-ff4785)](https://graphty.app/storybook/algorithms/)\n[![Examples](https://img.shields.io/badge/demo-github%20pages-blue)](https://graphty.app/algorithms/)\n\nA comprehensive TypeScript graph algorithms library with 98 algorithms optimized for browser environments and visualization applications.\n\n## Features\n\n- **TypeScript-first**: Full type safety with comprehensive type definitions\n- **Browser-optimized**: Designed to run efficiently in web browsers\n- **Modular**: Import only the algorithms you need\n- **Comprehensive**: 98 graph algorithms including traversal, shortest paths, centrality, clustering, flow, matching, link prediction, and more\n- **Interactive Examples**: [Live demos](https://graphty.app/algorithms/) with visualizations for all algorithms\n- **Performance Analysis**: [Detailed benchmarks](https://graphty.app/algorithms/benchmarks/) comparing algorithm performance\n- **Well-tested**: Extensive test suite with high coverage\n- **Standards-compliant**: Follows conventional commits and semantic versioning\n\n## Performance Optimizations\n\nThe library automatically optimizes performance for large graphs (≥10,000 nodes) using:\n\n- **Direction-Optimized BFS**: Dynamically switches between top-down and bottom-up search strategies, providing up to 42x speedup on large graphs\n- **CSR Graph Format**: Compressed Sparse Row format for cache-efficient memory access\n- **Bit-Packed Data Structures**: 8x memory reduction using bit arrays for boolean data\n\nThese optimizations are applied automatically - no configuration needed! Just use the standard API:\n\n```typescript\n// Automatically uses optimized implementation for large graphs\nconst result = breadthFirstSearch(largeGraph, startNode);\n```\n\nAll BFS-based algorithms benefit from these optimizations:\n\n- `breadthFirstSearch`, `shortestPathBFS`, `singleSourceShortestPathBFS`\n- `betweennessCentrality`, `closenessCentrality`\n- Connected component algorithms\n\n### Performance Benchmarks\n\n| Graph Size | Standard BFS | Optimized BFS | Speedup |\n| ---------- | ------------ | ------------- | ------- |\n| 10K nodes  | 4.40ms       | 6.34ms        | 0.69x   |\n| 50K nodes  | 158.64ms     | 44.27ms       | 3.58x   |\n| 100K nodes | 5,370ms      | 126ms         | 42.58x  |\n\n_Note: Optimizations activate automatically for graphs ≥10K nodes to avoid conversion overhead on smaller graphs._\n\n### Learn More\n\n- 📖 [Performance Guide](docs/PERFORMANCE_GUIDE.md) - Detailed optimization explanations\n- 🔄 [Migration Guide](docs/MIGRATION_GUIDE.md) - Upgrading from older versions\n- 💾 [Memory vs Speed Tradeoffs](docs/PERFORMANCE_GUIDE.md#memory-vs-speed-tradeoffs) - Making the right choices\n\n## Installation\n\n```bash\nnpm install @graphty/algorithms\n```\n\n## Quick Start\n\n```typescript\nimport { Graph, breadthFirstSearch, dijkstra } from \"@graphty/algorithms\";\n\n// Create a new graph\nconst graph = new Graph();\n\n// Add nodes and edges\ngraph.addNode(\"A\");\ngraph.addNode(\"B\");\ngraph.addNode(\"C\");\ngraph.addEdge(\"A\", \"B\", 1); // source, target, weight\ngraph.addEdge(\"B\", \"C\", 2);\n\n// Basic graph operations\nconsole.log(graph.nodeCount); // 3\nconsole.log(graph.totalEdgeCount); // 2\nconsole.log(graph.hasEdge(\"A\", \"B\")); // true\n\n// Run algorithms\nconst traversal = breadthFirstSearch(graph, \"A\");\nconsole.log(traversal.order); // ['A', 'B', 'C']\n\nconst shortestPaths = dijkstra(graph, \"A\");\n// Get distance to C\nconst pathToC = shortestPaths.get(\"C\");\nconsole.log(pathToC?.distance); // 3\n```\n\n## API Reference\n\n### Graph Class\n\nThe core data structure for representing graphs.\n\n```typescript\nclass Graph {\n    constructor(config?: Partial<GraphConfig>);\n}\n```\n\n#### Configuration Options\n\n```typescript\ninterface GraphConfig {\n    directed: boolean; // Default: false\n    allowSelfLoops: boolean; // Default: false\n    allowParallelEdges: boolean; // Default: false\n}\n```\n\n#### Node Operations\n\n```typescript\n// Add a node with optional data\ngraph.addNode(id: NodeId, data?: Record<string, unknown>): void\n\n// Remove a node and all its edges\ngraph.removeNode(id: NodeId): boolean\n\n// Check if a node exists\ngraph.hasNode(id: NodeId): boolean\n\n// Get node details\ngraph.getNode(id: NodeId): Node | undefined\n\n// Get all nodes\ngraph.nodes(): IterableIterator<Node>\n```\n\n#### Edge Operations\n\n```typescript\n// Add an edge with optional weight and data\ngraph.addEdge(\n  source: NodeId,\n  target: NodeId,\n  weight?: number,\n  data?: Record<string, unknown>\n): void\n\n// Remove an edge\ngraph.removeEdge(source: NodeId, target: NodeId): boolean\n\n// Check if an edge exists\ngraph.hasEdge(source: NodeId, target: NodeId): boolean\n\n// Get edge details\ngraph.getEdge(source: NodeId, target: NodeId): Edge | undefined\n\n// Get all edges\ngraph.edges(): IterableIterator<Edge>\n```\n\n#### Graph Properties\n\n```typescript\n// Number of nodes\ngraph.nodeCount: number\n\n// Total number of edges (counts both directions for undirected)\ngraph.totalEdgeCount: number\n\n// Number of unique edges\ngraph.uniqueEdgeCount: number\n\n// Check if graph is directed\ngraph.isDirected: boolean\n```\n\n#### Degree Operations\n\n```typescript\n// Total degree (in + out for directed)\ngraph.degree(nodeId: NodeId): number\n\n// In-degree (directed graphs only)\ngraph.inDegree(nodeId: NodeId): number\n\n// Out-degree\ngraph.outDegree(nodeId: NodeId): number\n```\n\n#### Neighbor Operations\n\n```typescript\n// Get neighboring nodes\ngraph.neighbors(nodeId: NodeId): IterableIterator<NodeId>\n\n// Get incoming neighbors (directed graphs)\ngraph.inNeighbors(nodeId: NodeId): IterableIterator<NodeId>\n\n// Get outgoing neighbors\ngraph.outNeighbors(nodeId: NodeId): IterableIterator<NodeId>\n```\n\n#### Utility Methods\n\n```typescript\n// Create a deep copy\ngraph.clone(): Graph\n\n// Clear all nodes and edges\ngraph.clear(): void\n\n// Get a copy of the graph configuration\ngraph.getConfig(): GraphConfig\n```\n\n### Traversal Algorithms\n\n#### Breadth-First Search (BFS)\n\n```typescript\nimport { breadthFirstSearch, shortestPathBFS, singleSourceShortestPathBFS, isBipartite } from '@graphty/algorithms';\n\n// Basic BFS traversal\nconst result = breadthFirstSearch(graph, startNode, {\n  targetNode?: NodeId,     // Optional: stop when target is reached\n  visitCallback?: (node: NodeId, level: number) => void\n});\n// Returns: TraversalResult { visited: Set<NodeId>, order: NodeId[], tree?: Map<NodeId, NodeId | null> }\n\n// Note: For graphs with ≥10K nodes, BFS automatically uses:\n// - Direction-Optimized BFS (switches between top-down/bottom-up)\n// - CSR graph format for cache efficiency\n// - Bit-packed data structures for memory efficiency\n\n// Find shortest path between two nodes (unweighted)\nconst path = shortestPathBFS(graph, source, target);\n// Returns: ShortestPathResult | null\n// ShortestPathResult = { distance: number, path: NodeId[], predecessor: Map<NodeId, NodeId | null> }\n\n// Find all shortest paths from a source\nconst paths = singleSourceShortestPathBFS(graph, source);\n// Returns: Map<NodeId, ShortestPathResult>\n\n// Check if graph is bipartite\nconst bipartite = isBipartite(graph);\n// Returns: { isBipartite: boolean, coloring?: Map<NodeId, number> }\n```\n\n#### Depth-First Search (DFS)\n\n```typescript\nimport { depthFirstSearch, topologicalSort, hasCycleDFS, findStronglyConnectedComponents } from '@graphty/algorithms';\n\n// Basic DFS traversal\nconst result = depthFirstSearch(graph, startNode, {\n  targetNode?: NodeId,      // Optional: stop when target is reached\n  visitCallback?: (node: NodeId, level: number) => void,\n  recursive?: boolean,      // Use recursive implementation (default: false)\n  preOrder?: boolean        // Visit nodes in pre-order (default: true)\n});\n// Returns: TraversalResult\n\n// Topological sort (for DAGs)\nconst sorted = topologicalSort(graph);\n// Returns: NodeId[] | null (null if cycle detected)\n\n// Cycle detection\nconst hasCycle = hasCycleDFS(graph);\n// Returns: boolean\n\n// Find strongly connected components using DFS\nconst sccs = findStronglyConnectedComponents(graph);\n// Returns: NodeId[][]\n```\n\n### Shortest Path Algorithms\n\n#### Dijkstra's Algorithm\n\n```typescript\nimport {\n  dijkstra,\n  dijkstraPath,\n  singleSourceShortestPath,\n  allPairsShortestPath\n} from '@graphty/algorithms'\n\n// Single-source shortest paths\nconst result = dijkstra(graph, source, {\n  target?: NodeId // Optional: stop when target is reached\n})\n// Returns: Map<NodeId, ShortestPathResult>\n// ShortestPathResult = { distance: number, path: NodeId[], predecessor: Map<NodeId, NodeId | null> }\n\n// Get specific path\nconst path = dijkstraPath(graph, source, target)\n// Returns: ShortestPathResult | null\n\n// All shortest paths from source\nconst paths = singleSourceShortestPath(graph, source)\n// Returns: Map<NodeId, ShortestPathResult>\n\n// All pairs shortest paths\nconst allPairs = allPairsShortestPath(graph)\n// Returns: Map<NodeId, Map<NodeId, ShortestPathResult>>\n```\n\n#### Bellman-Ford Algorithm\n\n```typescript\nimport { bellmanFord, bellmanFordPath, hasNegativeCycle } from \"@graphty/algorithms\";\n\n// Single-source shortest paths (handles negative weights)\nconst result = bellmanFord(graph, source);\n// Returns: BellmanFordResult {\n//   distances: Map<NodeId, number>,\n//   predecessors: Map<NodeId, NodeId | null>,\n//   hasNegativeCycle: boolean,\n//   negativeCycleNodes?: Set<NodeId>\n// }\n\n// Get specific path\nconst path = bellmanFordPath(graph, source, target);\n// Returns: ShortestPathResult | null\n\n// Check for negative cycles\nconst result = hasNegativeCycle(graph);\n// Returns: BellmanFordResult with hasNegativeCycle boolean\n```\n\n#### Floyd-Warshall Algorithm\n\n```typescript\nimport { floydWarshall, floydWarshallPath, transitiveClosure } from \"@graphty/algorithms\";\n\n// All pairs shortest paths\nconst result = floydWarshall(graph);\n// Returns: { distances: Map<NodeId, Map<NodeId, number>>, next: Map<NodeId, Map<NodeId, NodeId | null>> }\n\n// Get specific path between any pair\nconst path = floydWarshallPath(result, source, target);\n// Returns: NodeId[] | null\n\n// Compute transitive closure\nconst closure = transitiveClosure(graph);\n// Returns: Map<NodeId, Set<NodeId>>\n```\n\n### Centrality Algorithms\n\n#### Degree Centrality\n\n```typescript\nimport { degreeCentrality, nodeDegreeCentrality } from \"@graphty/algorithms\";\n\n// Calculate for all nodes\nconst centralities = degreeCentrality(graph, {\n    normalized: boolean, // Default: false\n    weight: string, // Optional: edge property for weighted degree\n});\n// Returns: CentralityResult (Record<string, number>)\n\n// Calculate for single node\nconst centrality = nodeDegreeCentrality(graph, nodeId, { normalized: boolean });\n// Returns: number\n```\n\n#### Betweenness Centrality\n\n```typescript\nimport { betweennessCentrality, nodeBetweennessCentrality, edgeBetweennessCentrality } from \"@graphty/algorithms\";\n\n// Node betweenness for all nodes\nconst centralities = betweennessCentrality(graph, {\n    normalized: boolean, // Default: false\n    weight: string, // Optional: use weighted shortest paths\n    endpoints: boolean, // Default: false, include endpoints in paths\n});\n// Returns: CentralityResult (Record<string, number>)\n\n// Single node betweenness\nconst centrality = nodeBetweennessCentrality(graph, nodeId, options);\n// Returns: number\n\n// Edge betweenness\nconst edgeCentralities = edgeBetweennessCentrality(graph, options);\n// Returns: Map<string, number> (edge ID to centrality)\n```\n\n#### Closeness Centrality\n\n```typescript\nimport { closenessCentrality, nodeClosenessCentrality, weightedClosenessCentrality } from \"@graphty/algorithms\";\n\n// Closeness for all nodes\nconst centralities = closenessCentrality(graph, {\n    normalized: boolean, // Default: false\n});\n// Returns: CentralityResult (Record<string, number>)\n\n// Single node closeness\nconst centrality = nodeClosenessCentrality(graph, nodeId, {\n    normalized: boolean,\n});\n// Returns: number\n\n// Weighted closeness\nconst centralities = weightedClosenessCentrality(graph, {\n    normalized: boolean,\n    weight: string, // Edge property for weights\n});\n// Returns: CentralityResult (Record<string, number>)\n\n// Single node weighted closeness\nconst centrality = nodeWeightedClosenessCentrality(graph, nodeId, {\n    normalized: boolean,\n    weight: string, // Edge property for weights\n});\n// Returns: number\n```\n\n#### PageRank\n\n```typescript\nimport { pageRank, personalizedPageRank, topPageRankNodes } from \"@graphty/algorithms\";\n\n// Standard PageRank\nconst result = pageRank(graph, {\n    dampingFactor: number, // Default: 0.85\n    maxIterations: number, // Default: 100\n    tolerance: number, // Default: 1e-6\n    initialRanks: Record<string, number>,\n    personalization: Record<string, number>,\n});\n// Returns: { ranks: Record<string, number>, iterations: number, converged: boolean }\n\n// Personalized PageRank (with bias)\nconst ranks = personalizedPageRank(graph, personalization, options);\n// personalization: Map<NodeId, number> - restart probabilities\n// Returns: CentralityResult (Record<string, number>)\n\n// Get top N nodes by PageRank\nconst topNodes = topPageRankNodes(graph, n, options);\n// Returns: Array<{ node: NodeId, rank: number }>\n\n// Alternative PageRank that returns CentralityResult format\nconst centralities = pageRankCentrality(graph, options);\n// Returns: CentralityResult (Record<string, number>)\n```\n\n#### Eigenvector Centrality\n\n```typescript\nimport { eigenvectorCentrality, nodeEigenvectorCentrality } from \"@graphty/algorithms\";\n\n// Calculate eigenvector centrality for all nodes\nconst centralities = eigenvectorCentrality(graph, {\n    maxIterations: number, // Default: 100\n    tolerance: number, // Default: 1e-6\n});\n// Throws ConvergenceError (exported) when maxIterations passes do not meet the tolerance,\n// as networkx raises PowerIterationFailedConvergence. Long paths and large grids need more\n// than 100 passes; raise maxIterations or tolerance and call again.\n// Returns: CentralityResult (Record<string, number>)\n\n// Single node eigenvector centrality\nconst centrality = nodeEigenvectorCentrality(graph, nodeId, options);\n// Returns: number\n```\n\n#### Katz Centrality\n\n```typescript\nimport { katzCentrality, nodeKatzCentrality } from \"@graphty/algorithms\";\n\n// Calculate Katz centrality for all nodes\nconst centralities = katzCentrality(graph, {\n    alpha: number, // Attenuation factor (default: 0.1)\n    beta: number, // Weight for direct connections (default: 1.0)\n    maxIterations: number, // Default: 100\n    tolerance: number, // Default: 1e-6\n    normalized: boolean, // Default: true\n});\n// Returns: CentralityResult (Record<string, number>)\n\n// Single node Katz centrality\nconst centrality = nodeKatzCentrality(graph, nodeId, options);\n// Returns: number\n```\n\n#### HITS Algorithm\n\n```typescript\nimport { hits, nodeHITS } from \"@graphty/algorithms\";\n\n// Calculate hub and authority scores\nconst result = hits(graph, {\n    maxIterations: number, // Default: 100\n    tolerance: number, // Default: 1e-6\n});\n// Returns: HITSResult { hubs: CentralityResult, authorities: CentralityResult }\n\n// Single node HITS scores\nconst scores = nodeHITS(graph, nodeId, options);\n// Returns: { hub: number, authority: number }\n```\n\n### Connected Components\n\n#### Basic Component Operations\n\n```typescript\nimport {\n    connectedComponents,\n    isConnected,\n    numberOfConnectedComponents,\n    largestConnectedComponent,\n    getConnectedComponent,\n} from \"@graphty/algorithms\";\n\n// Find all components\nconst components = connectedComponents(graph);\n// Returns: NodeId[][] (array of component arrays)\n\n// Check if graph is connected\nconst connected = isConnected(graph);\n// Returns: boolean\n\n// Count components\nconst count = numberOfConnectedComponents(graph);\n// Returns: number\n\n// Get largest component\nconst largest = largestConnectedComponent(graph);\n// Returns: NodeId[]\n\n// Get component containing a specific node\nconst component = getConnectedComponent(graph, nodeId);\n// Returns: Set<NodeId>\n```\n\n#### Strongly Connected Components\n\n```typescript\nimport {\n    stronglyConnectedComponents,\n    findStronglyConnectedComponents,\n    isStronglyConnected,\n    condensationGraph,\n} from \"@graphty/algorithms\";\n\n// Find SCCs using Tarjan's algorithm\nconst sccs = stronglyConnectedComponents(graph);\n// Returns: ComponentResult\n\n// Alternative: using DFS\nconst sccs = findStronglyConnectedComponents(graph);\n// Returns: NodeId[][]\n\n// Check if directed graph is strongly connected\nconst stronglyConnected = isStronglyConnected(graph);\n// Returns: boolean\n\n// Create condensation graph (DAG of SCCs)\nconst condensation = condensationGraph(graph);\n// Returns: { graph: Graph, componentMap: Map<NodeId, number> }\n\n// Alternative DFS-based connected components\nconst components = connectedComponentsDFS(graph);\n// Returns: ComponentResult\n```\n\n#### Weakly Connected Components\n\n```typescript\nimport { weaklyConnectedComponents, isWeaklyConnected } from \"@graphty/algorithms\";\n\n// Find WCCs (ignoring edge direction)\nconst wccs = weaklyConnectedComponents(graph);\n// Returns: ComponentResult\n\n// Check if directed graph is weakly connected\nconst weaklyConnected = isWeaklyConnected(graph);\n// Returns: boolean\n```\n\n### Data Structures\n\n#### Priority Queue\n\nMin-heap implementation used internally by algorithms.\n\n```typescript\nimport { PriorityQueue } from \"@graphty/algorithms\";\n\nconst pq = new PriorityQueue<T>((a, b) => a.priority - b.priority);\n\npq.enqueue(item);\npq.dequeue();\npq.peek();\npq.isEmpty();\npq.size;\npq.clear();\n```\n\n#### Union-Find (Disjoint Set)\n\nEfficient data structure for tracking connected components.\n\n```typescript\nimport { UnionFind } from \"@graphty/algorithms\";\n\nconst uf = new UnionFind<T>();\n\nuf.makeSet(item);\nuf.find(item);\nuf.union(item1, item2);\nuf.connected(item1, item2);\nuf.getSetSize(item);\nuf.numberOfSets;\n```\n\n### Minimum Spanning Tree Algorithms\n\n#### Kruskal's Algorithm\n\n```typescript\nimport { kruskalMST, minimumSpanningTree } from \"@graphty/algorithms\";\n\n// Find MST using Kruskal's algorithm\nconst mst = kruskalMST(graph);\n// Returns: { edges: Edge[], weight: number }\n\n// Alternative alias\nconst mst = minimumSpanningTree(graph);\n```\n\n#### Prim's Algorithm\n\n```typescript\nimport { primMST } from '@graphty/algorithms';\n\n// Find MST using Prim's algorithm\nconst mst = primMST(graph, startNode?);\n// Returns: { edges: Edge[], weight: number }\n```\n\n### Community Detection Algorithms\n\n#### Louvain Method\n\n```typescript\nimport { louvain } from \"@graphty/algorithms\";\n\n// Detect communities using Louvain method\nconst communities = louvain(graph, {\n    resolution: number, // Default: 1.0\n    randomSeed: number,\n});\n// Returns: { communities: Map<NodeId, number>, modularity: number }\n```\n\n#### Leiden Algorithm\n\n```typescript\nimport { leiden } from \"@graphty/algorithms\";\n\n// Improved community detection\nconst communities = leiden(graph, {\n    resolution: number, // Default: 1.0\n    iterations: number, // Default: 10\n    randomSeed: number,\n});\n// Returns: { communities: Map<NodeId, number>, modularity: number }\n```\n\n#### Label Propagation\n\n```typescript\nimport { labelPropagation, labelPropagationAsync, labelPropagationSemiSupervised } from \"@graphty/algorithms\";\n\n// Basic label propagation\nconst labels = labelPropagation(graph, {\n    maxIterations: number, // Default: 100\n});\n// Returns: Map<NodeId, number>\n\n// Asynchronous version\nconst labels = labelPropagationAsync(graph, options);\n\n// Semi-supervised with seed communities\nconst labels = labelPropagationSemiSupervised(graph, seedLabels, options);\n```\n\n#### Girvan-Newman Algorithm\n\n```typescript\nimport { girvanNewman } from \"@graphty/algorithms\";\n\n// Edge betweenness based community detection\nconst dendrogram = girvanNewman(graph, {\n    targetCommunities: number, // Stop at this many communities\n});\n// Returns: { levels: Array<{ modularity: number, communities: NodeId[][] }> }\n```\n\n### Pathfinding Algorithms\n\n#### A\\* Algorithm\n\n```typescript\nimport { astar } from \"@graphty/algorithms\";\n\n// A* pathfinding with heuristic\nconst path = astar(\n    graph, // Map<T, Map<T, number>> adjacency list\n    start,\n    goal,\n    heuristic, // (node: T, goal: T) => number\n);\n// Returns: { path: T[], cost: number } | null\n```\n\n### Flow Algorithms\n\n#### Maximum Flow\n\n```typescript\nimport { fordFulkerson, edmondsKarp } from '@graphty/algorithms';\n\n// Ford-Fulkerson using DFS\nconst flow = fordFulkerson(graph, source, sink, {\n  capacityKey?: string      // Edge property for capacity\n});\n// Returns: { maxFlow: number, flowGraph: Map<NodeId, Map<NodeId, number>> }\n\n// Edmonds-Karp using BFS (better complexity)\nconst flow = edmondsKarp(graph, source, sink, options);\n\n// Create bipartite flow network\nconst flowNetwork = createBipartiteFlowNetwork(leftNodes, rightNodes, edges, capacities?);\n// Returns: FlowNetwork\n```\n\n#### Minimum Cut\n\n```typescript\nimport { minSTCut, stoerWagner, kargerMinCut } from '@graphty/algorithms';\n\n// Min s-t cut using max flow\nconst cut = minSTCut(graph, source, sink);\n// Returns: { cutValue: number, sourcePartition: Set<NodeId>, sinkPartition: Set<NodeId> }\n\n// Global minimum cut (Stoer-Wagner)\nconst cut = stoerWagner(graph);\n// Returns: { cutValue: number, partition1: Set<NodeId>, partition2: Set<NodeId> }\n\n// Randomized min cut (Karger)\nconst cut = kargerMinCut(graph, iterations?);\n// Returns: { cutValue: number, partition1: Set<NodeId>, partition2: Set<NodeId> }\n```\n\n### Clustering Algorithms\n\n#### Hierarchical Clustering\n\n```typescript\nimport { hierarchicalClustering, cutDendrogram, cutDendrogramKClusters } from \"@graphty/algorithms\";\n\n// Agglomerative clustering\nconst result = hierarchicalClustering(graph, linkage);\n// graph: Map<NodeId, Set<NodeId>>\n// linkage: 'single' | 'complete' | 'average' | 'ward' (default: 'single')\n// Returns: HierarchicalClusteringResult { root: ClusterNode, dendrogram: ClusterNode[], clusters: Map<number, Set<NodeId>[]> }\n\n// Cut at specific height\nconst clusters = cutDendrogram(result.root, height);\n// Returns: Set<NodeId>[]\n\n// Get exactly k clusters\nconst clusters = cutDendrogramKClusters(result.root, k);\n// Returns: Set<NodeId>[]\n```\n\n#### K-Core Decomposition\n\n```typescript\nimport { kCoreDecomposition, getKCore, kTruss, degeneracyOrdering } from \"@graphty/algorithms\";\n\n// Find all k-cores\nconst result = kCoreDecomposition(graph);\n// graph: Map<NodeId, Set<NodeId>>\n// Returns: KCoreResult { cores: Map<number, Set<NodeId>>, coreness: Map<NodeId, number>, maxCore: number }\n\n// Extract specific k-core subgraph\nconst kCore = getKCore(graph, k);\n// Returns: Set<NodeId>\n\n// Find k-truss (triangular cores)\nconst truss = kTruss(graph, k);\n// Returns: Set<string> (edge strings)\n\n// Degeneracy ordering\nconst ordering = degeneracyOrdering(graph);\n// Returns: NodeId[]\n```\n\n#### Spectral Clustering\n\n```typescript\nimport { spectralClustering } from \"@graphty/algorithms\";\n\n// Spectral clustering using graph Laplacian\nconst result = spectralClustering(graph, {\n    k: number, // Number of clusters\n    laplacianType: \"unnormalized\" | \"normalized\" | \"randomWalk\", // Default: 'normalized'\n    maxIterations: number, // Default: 100\n    tolerance: number, // Default: 1e-4\n});\n// Returns: SpectralClusteringResult { communities: NodeId[][], clusterAssignments: Map<NodeId, number> }\n```\n\n#### Markov Clustering (MCL)\n\n```typescript\nimport { markovClustering, calculateMCLModularity } from \"@graphty/algorithms\";\n\n// MCL algorithm for network clustering\nconst result = markovClustering(graph, {\n    expansion: number, // Expansion parameter (default: 2)\n    inflation: number, // Inflation parameter (default: 2)\n    maxIterations: number, // Default: 100\n    tolerance: number, // Default: 1e-6\n});\n// Returns: MCLResult { communities: NodeId[][], attractors: Set<NodeId>, iterations: number, converged: boolean }\n\n// Calculate modularity of MCL clustering result\nconst modularity = calculateMCLModularity(graph, result.communities);\n// Returns: number\n```\n\n### Matching Algorithms\n\n#### Bipartite Matching\n\n```typescript\nimport { maximumBipartiteMatching, greedyBipartiteMatching, bipartitePartition } from \"@graphty/algorithms\";\n\n// Maximum bipartite matching (Hungarian algorithm)\nconst matching = maximumBipartiteMatching(graph, {\n    leftNodes: Set<NodeId>, // Optional: specify left partition\n    rightNodes: Set<NodeId>, // Optional: specify right partition\n});\n// Returns: BipartiteMatchingResult { matching: Map<NodeId, NodeId>, size: number }\n\n// Greedy bipartite matching (faster, approximate)\nconst matching = greedyBipartiteMatching(graph, options);\n\n// Partition graph into bipartite sets\nconst partition = bipartitePartition(graph);\n// Returns: { left: Set<NodeId>, right: Set<NodeId> } | null\n```\n\n#### Graph Isomorphism\n\n```typescript\nimport { isGraphIsomorphic, findAllIsomorphisms } from \"@graphty/algorithms\";\n\n// Check if two graphs are isomorphic\nconst result = isGraphIsomorphic(graph1, graph2, {\n    nodeMatch: (node1: NodeId, node2: NodeId, g1: Graph, g2: Graph) => boolean,\n    edgeMatch: (edge1: [NodeId, NodeId], edge2: [NodeId, NodeId], g1: Graph, g2: Graph) => boolean,\n    findAllMappings: boolean, // Find all possible isomorphisms\n});\n// Returns: IsomorphismResult { isIsomorphic: boolean, mapping?: Map<NodeId, NodeId> }\n\n// Find all isomorphism mappings\nconst mappings = findAllIsomorphisms(graph1, graph2, options);\n// Returns: Array<Map<NodeId, NodeId>>\n```\n\n### Link Prediction Algorithms\n\n#### Common Neighbors\n\n```typescript\nimport { commonNeighborsScore, commonNeighborsPrediction, commonNeighborsForPairs } from \"@graphty/algorithms\";\n\n// Score for a specific pair\nconst score = commonNeighborsScore(graph, node1, node2);\n// Returns: number\n\n// Predict links for all non-connected pairs\nconst predictions = commonNeighborsPrediction(graph, {\n    directed: boolean, // Consider direction\n    includeExisting: boolean, // Include existing edges\n    topK: number, // Return only top K predictions\n});\n// Returns: LinkPredictionScore[]\n\n// Score multiple specific pairs\nconst scores = commonNeighborsForPairs(graph, pairs, options);\n// Returns: LinkPredictionScore[]\n\n// Evaluate prediction performance\nconst evaluation = evaluateCommonNeighbors(graph, testEdges);\n// Returns: { precision, recall, f1Score }\n\n// Get top candidates for a node\nconst candidates = getTopCandidatesForNode(graph, nodeId, { topK: number });\n// Returns: LinkPredictionScore[]\n```\n\n#### Adamic-Adar Index\n\n```typescript\nimport { adamicAdarScore, adamicAdarPrediction, adamicAdarForPairs } from \"@graphty/algorithms\";\n\n// Adamic-Adar score for a pair (weighted by neighbor degrees)\nconst score = adamicAdarScore(graph, node1, node2);\n// Returns: number\n\n// Predict links using Adamic-Adar\nconst predictions = adamicAdarPrediction(graph, {\n    directed: boolean,\n    includeExisting: boolean,\n    topK: number,\n});\n// Returns: LinkPredictionScore[]\n\n// Score multiple pairs\nconst scores = adamicAdarForPairs(graph, pairs, options);\n// Returns: LinkPredictionScore[]\n\n// Compare Adamic-Adar with Common Neighbors\nconst comparison = compareAdamicAdarWithCommonNeighbors(graph, pairs);\n// Returns: Array<{ source, target, adamicAdar, commonNeighbors }>\n\n// Evaluate prediction performance\nconst evaluation = evaluateAdamicAdar(graph, testEdges);\n// Returns: { precision, recall, f1Score }\n\n// Get top candidates for a node\nconst candidates = getTopAdamicAdarCandidatesForNode(graph, nodeId, {\n    topK: number,\n});\n// Returns: LinkPredictionScore[]\n```\n\n### Research Algorithms (2023-2025)\n\nCutting-edge graph algorithms based on recent research.\n\n#### SynC - Synergistic Deep Graph Clustering\n\n```typescript\nimport { syncClustering } from \"@graphty/algorithms\";\n\n// Deep learning based clustering\nconst result = syncClustering(graph, {\n    k: number, // Number of clusters\n    maxIterations: number, // Default: 100\n    learningRate: number, // Default: 0.01\n    hiddenDim: number, // Default: 64\n    randomSeed: number,\n});\n// Returns: SynCResult {\n//   communities: NodeId[][],\n//   clusterAssignments: Map<NodeId, number>,\n//   embeddings: Map<NodeId, number[]>,\n//   iterations: number,\n//   converged: boolean\n// }\n```\n\n#### TeraHAC - Scalable Hierarchical Agglomerative Clustering\n\n```typescript\nimport { teraHAC } from \"@graphty/algorithms\";\n\n// Scalable hierarchical clustering\nconst result = teraHAC(graph, {\n    linkage: \"single\" | \"complete\" | \"average\", // Default: 'average'\n    k: number, // Target number of clusters\n    threshold: number, // Distance threshold for merging\n    sampleSize: number, // Default: 1000\n    randomSeed: number,\n});\n// Returns: TeraHACResult {\n//   root: TeraHACClusterNode,\n//   dendrogram: TeraHACClusterNode[],\n//   clusters: NodeId[][],\n//   mergeDistances: number[]\n// }\n```\n\n#### GRSBM - Greedy Recursive Spectral Bisection with Modularity\n\n```typescript\nimport { grsbm } from \"@graphty/algorithms\";\n\n// Explainable community detection\nconst result = grsbm(graph, {\n    minClusterSize: number, // Default: 5\n    maxDepth: number, // Default: 10\n    modularityThreshold: number, // Default: 0.1\n    explainClusters: boolean, // Default: true\n});\n// Returns: GRSBMResult {\n//   clusters: GRSBMCluster[],   // Each cluster has id, nodes, modularity, explanation\n//   hierarchy: Map<number, number[]>,\n//   totalModularity: number\n// }\n```\n\n## Algorithm Categories Summary\n\n### Available Algorithms by Category:\n\n- **Traversal**: BFS, DFS, Topological Sort, Cycle Detection, Bipartite Check\n- **Shortest Path**: Dijkstra, Bellman-Ford, Floyd-Warshall, A\\*\n- **Centrality**: Degree, Betweenness, Closeness, PageRank, Eigenvector, Katz, HITS\n- **Components**: Connected, Strongly Connected, Weakly Connected, Condensation Graph\n- **Community Detection**: Louvain, Leiden, Label Propagation, Girvan-Newman\n- **Clustering**: Hierarchical, K-Core, Spectral, Markov (MCL)\n- **Minimum Spanning Tree**: Kruskal, Prim\n- **Network Flow**: Ford-Fulkerson, Edmonds-Karp, Min-Cut (Stoer-Wagner, Karger)\n- **Matching**: Bipartite Matching, Graph Isomorphism\n- **Link Prediction**: Common Neighbors, Adamic-Adar\n- **Research Algorithms**: SynC, TeraHAC, GRSBM\n\n## Interactive Examples\n\n### Storybook (Recommended)\n\nExplore algorithms with interactive Storybook demos: **[View Storybook →](https://graphty.app/storybook/algorithms/)**\n\nStorybook provides:\n- **Animated visualizations** showing how each algorithm works step-by-step\n- **Interactive controls** to modify parameters and graph types\n- **Deterministic output** with seeded randomness for reproducibility\n- **Visual testing** with Chromatic for regression detection\n\n### Legacy HTML Examples\n\nTry out all algorithms with interactive visualizations: **[Live Demo →](https://graphty.app/algorithms/)**\n\nThe library includes comprehensive examples demonstrating each algorithm. You can:\n\n- **[Browse Interactive HTML Examples](https://graphty.app/algorithms/examples/)** - Visual demonstrations with step-by-step execution\n- **[View Performance Benchmarks](https://graphty.app/algorithms/benchmarks/)** - Comparative analysis of algorithm performance\n- **[Explore Code Examples](https://github.com/graphty-org/algorithms/tree/main/examples)** - Implementation examples for each algorithm\n\n### Basic Algorithms\n\n- [BFS Traversal](https://github.com/graphty-org/algorithms/blob/main/examples/bfs-example.js) - Breadth-first search and shortest paths\n- [DFS Traversal](https://github.com/graphty-org/algorithms/blob/main/examples/dfs-example.js) - Depth-first search and applications\n- [Dijkstra's Algorithm](https://github.com/graphty-org/algorithms/blob/main/examples/dijkstra-example.js) - Weighted shortest paths\n- [Bellman-Ford](https://github.com/graphty-org/algorithms/blob/main/examples/bellman-ford-example.js) - Shortest paths with negative weights\n- [Floyd-Warshall](https://github.com/graphty-org/algorithms/blob/main/examples/floyd-warshall-example.js) - All pairs shortest paths\n\n### Centrality Measures\n\n- [Degree Centrality](https://github.com/graphty-org/algorithms/blob/main/examples/degree-centrality-example.js) - Node importance by connections\n- [Betweenness Centrality](https://github.com/graphty-org/algorithms/blob/main/examples/betweenness-centrality-example.js) - Bridge nodes\n- [Closeness Centrality](https://github.com/graphty-org/algorithms/blob/main/examples/closeness-centrality-example.js) - Central nodes\n- [PageRank](https://github.com/graphty-org/algorithms/blob/main/examples/pagerank-example.js) - Node ranking algorithm\n- [Eigenvector Centrality](https://github.com/graphty-org/algorithms/blob/main/examples/eigenvector-centrality-example.js) - Influence from important nodes\n- [Katz Centrality](https://github.com/graphty-org/algorithms/blob/main/examples/katz-centrality-example.js) - Weighted path counting\n- [HITS Algorithm](https://github.com/graphty-org/algorithms/blob/main/examples/hits-algorithm-example.js) - Hub and authority scores\n\n### Graph Structure\n\n- [Connected Components](https://github.com/graphty-org/algorithms/blob/main/examples/connected-components-example.js) - Find graph components\n- [Kruskal's MST](https://github.com/graphty-org/algorithms/blob/main/examples/kruskal-example.js) - Minimum spanning tree\n- [Prim's MST](https://github.com/graphty-org/algorithms/blob/main/examples/prim-example.js) - Alternative MST algorithm\n\n### Community Detection\n\n- [Louvain Method](https://github.com/graphty-org/algorithms/blob/main/examples/louvain-example.js) - Modularity-based communities\n- [Leiden Algorithm](https://github.com/graphty-org/algorithms/blob/main/examples/leiden-community.ts) - Improved Louvain\n- [Label Propagation](https://github.com/graphty-org/algorithms/blob/main/examples/label-propagation.ts) - Fast community detection\n- [Girvan-Newman](https://github.com/graphty-org/algorithms/blob/main/examples/girvan-newman-example.js) - Hierarchical communities\n\n### Clustering\n\n- [Hierarchical Clustering](https://github.com/graphty-org/algorithms/blob/main/examples/hierarchical-clustering.ts) - Graph clustering\n- [K-Core Decomposition](https://github.com/graphty-org/algorithms/blob/main/examples/k-core-decomposition.ts) - Core analysis\n- [Spectral Clustering](https://github.com/graphty-org/algorithms/blob/main/examples/spectral-clustering-example.js) - Eigenvalue-based clustering\n- [MCL Clustering](https://github.com/graphty-org/algorithms/blob/main/examples/mcl-clustering-example.js) - Markov clustering\n\n### Matching\n\n- [Bipartite Matching](https://github.com/graphty-org/algorithms/blob/main/examples/bipartite-matching-example.js) - Job assignment, dating apps\n- [Graph Isomorphism](https://github.com/graphty-org/algorithms/blob/main/examples/graph-isomorphism-example.js) - Structural equivalence\n\n### Link Prediction\n\n- [Common Neighbors](https://github.com/graphty-org/algorithms/blob/main/examples/common-neighbors-example.js) - Friend suggestions\n- [Adamic-Adar](https://github.com/graphty-org/algorithms/blob/main/examples/adamic-adar-example.js) - Weighted predictions\n\n### Advanced Algorithms\n\n- [A\\* Pathfinding](https://github.com/graphty-org/algorithms/blob/main/examples/astar-pathfinding.ts) - Heuristic pathfinding\n- [Flow Algorithms](https://github.com/graphty-org/algorithms/blob/main/examples/flow-algorithms.ts) - Maximum flow and applications\n- [Ford-Fulkerson Flow](https://github.com/graphty-org/algorithms/blob/main/examples/ford-fulkerson-flow.ts) - Maximum flow implementation\n- [Minimum Cut](https://github.com/graphty-org/algorithms/blob/main/examples/min-cut.ts) - Graph partitioning\n\n### Research Algorithms\n\n- [SynC Clustering](https://github.com/graphty-org/algorithms/blob/main/examples/sync-example.js) - Deep learning based clustering\n- [TeraHAC](https://github.com/graphty-org/algorithms/blob/main/examples/terahac-example.js) - Scalable hierarchical clustering\n- [GRSBM](https://github.com/graphty-org/algorithms/blob/main/examples/grsbm-example.js) - Explainable community detection\n\n## Advanced Usage Examples\n\n### Working with Weighted Graphs\n\n```typescript\nconst graph = new Graph();\n\n// Add weighted edges\ngraph.addEdge(\"A\", \"B\", 5);\ngraph.addEdge(\"B\", \"C\", 3);\ngraph.addEdge(\"A\", \"C\", 10);\n\n// Find shortest path considering weights\nconst result = dijkstra(graph, \"A\");\nconst pathToC = dijkstraPath(graph, \"A\", \"C\");\nconsole.log(pathToC); // { path: ['A', 'B', 'C'], distance: 8 }\n```\n\n### Directed Graphs\n\n```typescript\nconst directedGraph = new Graph({ directed: true });\n\ndirectedGraph.addEdge(\"A\", \"B\");\ndirectedGraph.addEdge(\"B\", \"C\");\ndirectedGraph.addEdge(\"C\", \"A\");\n\n// Check for cycles\nconsole.log(hasCycleDFS(directedGraph)); // true\n\n// Find strongly connected components\nconst sccs = stronglyConnectedComponents(directedGraph);\nconsole.log(sccs.components); // [['A', 'B', 'C']]\n```\n\n### Network Analysis\n\n```typescript\n// Identify important nodes\nconst graph = createSocialNetwork(); // Your graph\n\n// Find influencers (high PageRank)\nconst influencers = topPageRankNodes(graph, 10);\n\n// Find bridges (high betweenness)\nconst bridgers = Array.from(betweennessCentrality(graph).entries())\n    .sort((a, b) => b[1] - a[1])\n    .slice(0, 10);\n\n// Find communities (connected components)\nconst communities = connectedComponents(graph);\nconsole.log(`Found ${communities.components.length} communities`);\n```\n\n### Custom Edge Properties\n\n```typescript\nconst graph = new Graph();\n\n// Add edges with custom data\ngraph.addEdge(\"A\", \"B\", 1, {\n    type: \"road\",\n    distance: 100,\n    traffic: \"heavy\",\n});\n\n// Use custom weight in algorithms\nconst result = dijkstra(graph, \"A\", {\n    weightKey: \"distance\", // Use 'distance' property as weight\n});\n```\n\n### Graph Visualization Preparation\n\n```typescript\n// Prepare data for visualization\nconst graph = loadGraph();\n\n// Calculate layout metrics\nconst centralities = degreeCentrality(graph, { normalized: true });\nconst ranks = pageRank(graph);\n\n// Export for visualization\nconst nodes = Array.from(graph.nodes()).map((node) => ({\n    id: node.id,\n    data: node.data,\n    size: centralities.get(node.id) || 0,\n    importance: ranks.get(node.id) || 0,\n}));\n\nconst edges = Array.from(graph.edges()).map((edge) => ({\n    source: edge.source,\n    target: edge.target,\n    weight: edge.weight || 1,\n    data: edge.data,\n}));\n```\n\n## Type Definitions\n\n### Core Types\n\n```typescript\ntype NodeId = string | number;\n\ninterface Node {\n    id: NodeId;\n    data?: Record<string, unknown>;\n}\n\ninterface Edge {\n    source: NodeId;\n    target: NodeId;\n    weight?: number;\n    id?: string;\n    data?: Record<string, unknown>;\n}\n```\n\n### Algorithm Result Types\n\n```typescript\ninterface TraversalResult {\n    visited: Set<NodeId>;\n    order: NodeId[];\n    tree?: Map<NodeId, NodeId | null>;\n}\n\ninterface ShortestPathResult {\n    distance: number;\n    path: NodeId[];\n    predecessor: Map<NodeId, NodeId | null>;\n}\n\ninterface BellmanFordResult {\n    distances: Map<NodeId, number>;\n    previous: Map<NodeId, NodeId | null>;\n    hasNegativeCycle: boolean;\n    negativeCycleNodes?: NodeId[];\n}\n\ntype CentralityResult = Record<string, number>;\n\ninterface PageRankResult {\n    ranks: Record<string, number>;\n    iterations: number;\n    converged: boolean;\n}\n\ninterface CommunityResult {\n    communities: Map<NodeId, number>;\n    modularity: number;\n}\n\ninterface ComponentResult {\n    components: NodeId[][];\n    componentMap: Map<NodeId, number>;\n}\n\ninterface HITSResult {\n    hubs: CentralityResult;\n    authorities: CentralityResult;\n}\n\ninterface SpectralClusteringResult {\n    communities: NodeId[][];\n    clusterAssignments: Map<NodeId, number>;\n}\n\ninterface MCLResult {\n    communities: NodeId[][];\n    attractors: Set<NodeId>;\n    iterations: number;\n    converged: boolean;\n}\n\ninterface BipartiteMatchingResult {\n    matching: Map<NodeId, NodeId>;\n    size: number;\n}\n\ninterface LinkPredictionScore {\n    source: NodeId;\n    target: NodeId;\n    score: number;\n}\n\ninterface HierarchicalClusteringResult<T> {\n    root: ClusterNode<T>;\n    dendrogram: ClusterNode<T>[];\n    clusters: Map<number, Set<T>[]>;\n}\n\ninterface KCoreResult<T> {\n    cores: Map<number, Set<T>>;\n    coreness: Map<T, number>;\n    maxCore: number;\n}\n\ninterface IsomorphismResult {\n    isIsomorphic: boolean;\n    mapping?: Map<NodeId, NodeId>;\n}\n\ninterface SynCResult {\n    communities: NodeId[][];\n    clusterAssignments: Map<NodeId, number>;\n    embeddings: Map<NodeId, number[]>;\n    iterations: number;\n    converged: boolean;\n}\n\ninterface TeraHACResult {\n    root: TeraHACClusterNode;\n    dendrogram: TeraHACClusterNode[];\n    clusters: NodeId[][];\n    mergeDistances: number[];\n}\n\ninterface GRSBMResult {\n    clusters: GRSBMCluster[];\n    hierarchy: Map<number, number[]>;\n    totalModularity: number;\n}\n```\n\n## Performance Considerations\n\n- **Graph Representation**: Uses adjacency lists for O(1) neighbor access\n- **Algorithm Complexity**:\n    - BFS/DFS: O(V + E)\n    - Dijkstra: O((V + E) log V) with binary heap\n    - Bellman-Ford: O(VE)\n    - Floyd-Warshall: O(V³)\n    - PageRank: O(k(V + E)) where k is iterations\n    - Connected Components: O(V + E)\n    - Kruskal's MST: O(E log E)\n    - Prim's MST: O((V + E) log V)\n    - A\\*: O((V + E) log V) - depends on heuristic quality\n    - Ford-Fulkerson: O(E \\* f) where f is max flow\n    - Edmonds-Karp: O(VE²)\n    - Louvain/Leiden: O(n log n) average case\n    - Hierarchical Clustering: O(n² log n)\n    - SynC: O(kni) where k is clusters, n is nodes, i is iterations\n    - TeraHAC: O(n log n) with sampling\n    - GRSBM: O(m log n) where m is edges\n- **Memory Usage**: O(V + E) for graph storage\n- **Browser Optimization**: Algorithms use iterative approaches where possible to avoid stack overflow\n- **Performance Benchmarks**: View detailed performance comparisons at [https://graphty.app/algorithms/benchmarks/](https://graphty.app/algorithms/benchmarks/)\n\n## Development\n\n### Prerequisites\n\n- Node.js 18+\n- npm 9+\n\n### Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/graphty-org/algorithms.git\ncd algorithms\n\n# Install dependencies\nnpm install\n\n# Set up git hooks\nnpm run prepare\n```\n\n### Scripts\n\n```bash\n# Development\nnpm run dev          # Watch mode compilation\nnpm run build        # Build the library\nnpm run typecheck    # Type checking\n\n# Testing\nnpm run test         # Run tests in watch mode\nnpm run test:run     # Run tests once\nnpm run test:coverage # Generate coverage report\nnpm run test:browser # Run browser tests\n\n# Code Quality\nnpm run lint         # Run ESLint\nnpm run lint:fix     # Fix ESLint issues\nnpm run lint:pkg     # Check for unused dependencies\n\n# Benchmarking\nnpm run benchmark    # Run full benchmark suite\nnpm run benchmark:quick # Run quick benchmark\nnpm run benchmark:report # Generate performance report\n\n# HTML Examples & Documentation\nnpm run examples:html # Run interactive HTML examples locally\nnpm run build:gh-pages # Build for GitHub Pages deployment\nnpm run examples:run # Run all code examples\n\n# Git\nnpm run commit       # Conventional commit helper\n```\n\n### Development Server\n\nThe project includes interactive HTML examples demonstrating each algorithm. To run them locally:\n\n1. **Copy the environment configuration:**\n\n    ```bash\n    cp .env.example .env\n    ```\n\n2. **Configure the server (optional):**\n   Edit `.env` to set your preferred host and port:\n\n    ```bash\n    # Server host (defaults to true for network exposure)\n    HOST=localhost       # For local-only access\n    # HOST=0.0.0.0       # For network access\n    # HOST=my.server.com # Custom domain\n\n    ```\n\n3. **Start the development server** (the port is required and comes from `PORT`):\n\n    ```bash\n    PORT=9000 npm run examples:html\n    ```\n\n4. **Open your browser** to `http://localhost:9000` (or your configured host/port)\n\nThe HTML examples provide:\n\n- Interactive visualizations for each algorithm\n- Step-by-step execution with play/pause controls\n- Multiple graph types for testing\n- Real-time parameter adjustment\n- Educational information about complexity and use cases\n- Mobile debugging console (Eruda) for testing on mobile devices\n\n### Project Structure\n\n```\nsrc/\n├── core/              # Core graph data structures\n├── algorithms/        # Algorithm implementations\n│   ├── traversal/     # BFS, DFS\n│   ├── shortest-path/ # Dijkstra, Bellman-Ford\n│   ├── centrality/    # Degree, Betweenness, PageRank\n│   └── components/    # Connected components\n├── data-structures/   # Supporting data structures\n├── types/            # TypeScript type definitions\n└── utils/            # Utility functions\n\nexamples/\n├── html/             # Interactive HTML examples\n│   ├── shared/       # Shared utilities and styles\n│   └── algorithms/   # Algorithm-specific examples\n\ntest/\n├── unit/             # Unit tests\n├── browser/          # Browser-specific tests\n└── helpers/          # Test utilities\n```\n\n## Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Commit Convention\n\nThis project uses [Conventional Commits](https://www.conventionalcommits.org/):\n\n```\nfeat(scope): add new algorithm\nfix(scope): resolve edge case in traversal\ndocs(scope): update API documentation\ntest(scope): add coverage for centrality measures\n```\n\n## License\n\nMIT © Adam Powers\n\n## Related Projects\n\n- [@graphty/layout](https://github.com/graphty-org/layout) - Graph layout algorithms\n- [@graphty/graphty-element](https://github.com/graphty-org/graphty-element) - 3D graph visualization web component\n","readmeFilename":"README.md"}