{"_id":"@aeolun/dijkstra-calculator","_rev":"13-3f1e62c6c2a7cecd85dedfe9bca8389f","name":"@aeolun/dijkstra-calculator","dist-tags":{"latest":"1.6.0"},"versions":{"1.1.0":{"name":"@aeolun/dijkstra-calculator","version":"1.1.0","keywords":[],"license":"MIT","_id":"@aeolun/dijkstra-calculator@1.1.0","maintainers":[{"name":"aeolun","email":"bart@serial-experiments.com"}],"homepage":"https://github.com/aeolun/dijkstra-calculator#readme","bugs":{"url":"https://github.com/aeolun/dijkstra-calculator/issues"},"ava":{"files":["!build/module/**"],"timeout":"60s","failFast":true,"typescript":{"rewritePaths":{"src/":"build/main/"}}},"nyc":{"exclude":["**/*.spec.js"],"extends":"@istanbuljs/nyc-config-typescript"},"dist":{"shasum":"62076d36d21c85cb8c0955e5d943b80572423c10","tarball":"https://registry.npmjs.org/@aeolun/dijkstra-calculator/-/dijkstra-calculator-1.1.0.tgz","fileCount":16,"integrity":"sha512-a7WLgBEw69ZtbzrZ1ZYTBY0Jw1RY0XBtuAmeToTeyHFdInkN1x7jE/oRt/wD1HjlCRX1cSDi8LOFbur2XDP0OA==","signatures":[{"sig":"MEUCIQCG0K0DSqYhkcG5gqTnhPsLSLld0XnJiOEDMMeN0VIgswIgBntflZOBPPSHCThJYMKVF1CjBS7PCKloRlkmsB4cdl8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58818},"main":"build/main/index.js","_from":"file:aeolun-dijkstra-calculator-1.1.0.tgz","config":{"commitizen":{"path":"cz-conventional-changelog"}},"module":"build/module/index.js","engines":{"node":">=10"},"scripts":{"cov":"npm-run-all -s build test:unit cov:html cov:lcov && open-cli coverage/index.html","doc":"npm-run-all -s doc:html && open-cli build/docs/index.html","fix":"npm-run-all -s fix:*","test":"npm-run-all -s build test:*","build":"npm-run-all -p build:*","version":"standard-version","cov:html":"nyc report --reporter=html","cov:lcov":"nyc report --reporter=lcov","cov:send":"npm-run-all -s cov:lcov && codecov","doc:html":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --out build/docs","doc:json":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --json build/docs/typedoc.json","fix:lint":"eslint src --ext .ts --fix","check-cli":"npm-run-all -s test diff-integration-tests check-integration-tests","cov:check":"nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100","test:lint":"eslint src --ext .ts","test:unit":"nyc --silent ava","build:main":"tsc -p tsconfig.json","reset-hard":"git clean -dfx && git reset --hard && yarn","watch:test":"nyc --silent ava --watch","doc:publish":"gh-pages -m \"[ci skip] Updates\" -d build/docs","watch:build":"tsc -p tsconfig.json -w","build:module":"tsc -p tsconfig.module.json","fix:prettier":"prettier \"src/**/*.ts\" --write","test:prettier":"prettier \"src/**/*.ts\" --list-different","test:spelling":"cspell \"{README.md,.github/*.md,src/**/*.ts}\"","prepare-release":"npm-run-all -s reset-hard test cov:check doc:html version doc:publish","diff-integration-tests":"mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'","check-integration-tests":"npm-run-all -s check-integration-test:*"},"typings":"build/main/index.d.ts","_npmUser":{"name":"aeolun","email":"bart@serial-experiments.com"},"prettier":{"singleQuote":true},"_resolved":"/tmp/5016f0acd9be6670b8de79116ec4bc9b/aeolun-dijkstra-calculator-1.1.0.tgz","_integrity":"sha512-a7WLgBEw69ZtbzrZ1ZYTBY0Jw1RY0XBtuAmeToTeyHFdInkN1x7jE/oRt/wD1HjlCRX1cSDi8LOFbur2XDP0OA==","repository":{"url":"git+https://github.com/aeolun/dijkstra-calculator.git","type":"git"},"_npmVersion":"9.5.1","description":"Dijkstra calculator for the shortest path in a graph of nodes given a weight.","directories":{},"_nodeVersion":"18.16.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"ava":"^3.12.1","nyc":"^15.1.0","cspell":"^4.1.0","eslint":"^7.8.0","codecov":"^3.5.0","ts-node":"^9.0.0","typedoc":"^0.19.0","gh-pages":"^3.1.0","open-cli":"^6.0.1","prettier":"^2.1.1","typescript":"^4.5.5","npm-run-all":"^4.1.5","@ava/typescript":"^1.1.1","standard-version":"^9.0.0","eslint-plugin-import":"^2.22.0","eslint-config-prettier":"^6.11.0","eslint-plugin-functional":"^3.0.2","@typescript-eslint/parser":"^4.0.1","cz-conventional-changelog":"^3.3.0","eslint-plugin-eslint-comments":"^3.2.0","@typescript-eslint/eslint-plugin":"^4.0.1","@istanbuljs/nyc-config-typescript":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dijkstra-calculator_1.1.0_1684987338921_0.8679633002469802","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@aeolun/dijkstra-calculator","version":"1.2.0","keywords":[],"license":"MIT","_id":"@aeolun/dijkstra-calculator@1.2.0","maintainers":[{"name":"aeolun","email":"bart@serial-experiments.com"}],"homepage":"https://github.com/aeolun/dijkstra-calculator#readme","bugs":{"url":"https://github.com/aeolun/dijkstra-calculator/issues"},"ava":{"files":["!build/module/**"],"timeout":"60s","failFast":true,"typescript":{"rewritePaths":{"src/":"build/main/"}}},"nyc":{"exclude":["**/*.spec.js"],"extends":"@istanbuljs/nyc-config-typescript"},"dist":{"shasum":"a4c092e62afb0731f1349785a2f09a9824ec3dbb","tarball":"https://registry.npmjs.org/@aeolun/dijkstra-calculator/-/dijkstra-calculator-1.2.0.tgz","fileCount":16,"integrity":"sha512-VCdFTv+ZNSmQBNohR9gXXmW43GmXqGvEjUQHKDkLWkOQ5D+8fdkRrxVqtbMN3XxKXObEAh4TBTezPclp9dLbHw==","signatures":[{"sig":"MEYCIQCjajq58TfyfNHQIoLutpoj0luKsU9INDkpw6S2uMrs6wIhAPTxy3ZzkhPZvi3CF9p+epgGxvLX4M/twm8KYiPMsmq6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":112781},"main":"build/main/index.js","_from":"file:aeolun-dijkstra-calculator-1.2.0.tgz","config":{},"module":"build/module/index.js","engines":{"node":">=10"},"scripts":{"cov":"npm-run-all -s build test:unit cov:html cov:lcov && open-cli coverage/index.html","doc":"npm-run-all -s doc:html && open-cli build/docs/index.html","fix":"npm-run-all -s fix:*","test":"npm-run-all -s build test:*","build":"npm-run-all -p build:*","version":"standard-version","cov:html":"nyc report --reporter=html","cov:lcov":"nyc report --reporter=lcov","cov:send":"npm-run-all -s cov:lcov && codecov","doc:html":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --out build/docs","doc:json":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --json build/docs/typedoc.json","fix:lint":"eslint src --ext .ts --fix","check-cli":"npm-run-all -s test diff-integration-tests check-integration-tests","cov:check":"nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100","test:lint":"eslint src --ext .ts","test:unit":"nyc --silent ava","build:main":"tsc -p tsconfig.json","reset-hard":"git clean -dfx && git reset --hard && yarn","watch:test":"nyc --silent ava --watch","doc:publish":"gh-pages -m \"[ci skip] Updates\" -d build/docs","watch:build":"tsc -p tsconfig.json -w","build:module":"tsc -p tsconfig.module.json","fix:prettier":"prettier \"src/**/*.ts\" --write","test:prettier":"prettier \"src/**/*.ts\" --list-different","test:spelling":"cspell \"{README.md,.github/*.md,src/**/*.ts}\"","prepare-release":"npm-run-all -s reset-hard test cov:check doc:html version doc:publish","diff-integration-tests":"mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'","check-integration-tests":"npm-run-all -s check-integration-test:*"},"typings":"build/main/index.d.ts","_npmUser":{"name":"aeolun","email":"bart@serial-experiments.com"},"prettier":{"singleQuote":true},"_resolved":"/tmp/47aba435b5d24810c9d502ea71024836/aeolun-dijkstra-calculator-1.2.0.tgz","_integrity":"sha512-VCdFTv+ZNSmQBNohR9gXXmW43GmXqGvEjUQHKDkLWkOQ5D+8fdkRrxVqtbMN3XxKXObEAh4TBTezPclp9dLbHw==","repository":{"url":"git+https://github.com/aeolun/dijkstra-calculator.git","type":"git"},"_npmVersion":"9.5.1","description":"Dijkstra calculator for the shortest path in a graph of nodes given a weight.","directories":{},"_nodeVersion":"18.16.0","_hasShrinkwrap":false,"devDependencies":{"ava":"5.3.1","nyc":"^15.1.0","cspell":"^4.1.0","eslint":"^7.8.0","codecov":"^3.5.0","ts-node":"^9.0.0","typedoc":"^0.24.8","gh-pages":"^3.1.0","open-cli":"^6.0.1","prettier":"^2.1.1","typescript":"^4.5.5","@types/node":"^18.15.3","npm-run-all":"^4.1.5","@ava/typescript":"^1.1.1","standard-version":"^9.0.0","eslint-plugin-import":"^2.22.0","eslint-config-prettier":"^6.11.0","eslint-plugin-functional":"^3.0.2","@typescript-eslint/parser":"^4.0.1","cz-conventional-changelog":"^3.3.0","eslint-plugin-eslint-comments":"^3.2.0","@typescript-eslint/eslint-plugin":"^4.0.1","@istanbuljs/nyc-config-typescript":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dijkstra-calculator_1.2.0_1689152178329_0.08525445957886868","host":"s3://npm-registry-packages"}},"1.2.1":{"name":"@aeolun/dijkstra-calculator","version":"1.2.1","keywords":[],"license":"MIT","_id":"@aeolun/dijkstra-calculator@1.2.1","maintainers":[{"name":"aeolun","email":"bart@serial-experiments.com"}],"homepage":"https://github.com/aeolun/dijkstra-calculator#readme","bugs":{"url":"https://github.com/aeolun/dijkstra-calculator/issues"},"ava":{"files":["!build/module/**"],"timeout":"60s","failFast":true,"typescript":{"rewritePaths":{"src/":"build/main/"}}},"nyc":{"exclude":["**/*.spec.js"],"extends":"@istanbuljs/nyc-config-typescript"},"dist":{"shasum":"55b415c1a6b146546e925afd9cd90a263f2558a3","tarball":"https://registry.npmjs.org/@aeolun/dijkstra-calculator/-/dijkstra-calculator-1.2.1.tgz","fileCount":16,"integrity":"sha512-VdB/xnhWuXHj+ySZBmGMyopUsLKqmbAlxGcTr+UBOVfpCFHLK8qYa3k817e083KUowMzsi8T/hf6nOYfePNkDA==","signatures":[{"sig":"MEUCIFJQnH/Hgr8bb2FI2g7GyxMsDCe4KUMdG2vO8F79rHhEAiEA8uW0w5wAoG4fppWzz7Fc6YFskYjxdrvN84aNwctm0a4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":113656},"main":"build/main/index.js","_from":"file:aeolun-dijkstra-calculator-1.2.1.tgz","config":{},"module":"build/module/index.js","engines":{"node":">=10"},"scripts":{"cov":"npm-run-all -s build test:unit cov:html cov:lcov && open-cli coverage/index.html","doc":"npm-run-all -s doc:html && open-cli build/docs/index.html","fix":"npm-run-all -s fix:*","test":"npm-run-all -s build test:*","build":"npm-run-all -p build:*","version":"standard-version","cov:html":"nyc report --reporter=html","cov:lcov":"nyc report --reporter=lcov","cov:send":"npm-run-all -s cov:lcov && codecov","doc:html":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --out build/docs","doc:json":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --json build/docs/typedoc.json","fix:lint":"eslint src --ext .ts --fix","check-cli":"npm-run-all -s test diff-integration-tests check-integration-tests","cov:check":"nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100","test:lint":"eslint src --ext .ts","test:unit":"nyc --silent ava","build:main":"tsc -p tsconfig.json","reset-hard":"git clean -dfx && git reset --hard && yarn","watch:test":"nyc --silent ava --watch","doc:publish":"gh-pages -m \"[ci skip] Updates\" -d build/docs","watch:build":"tsc -p tsconfig.json -w","build:module":"tsc -p tsconfig.module.json","fix:prettier":"prettier \"src/**/*.ts\" --write","test:prettier":"prettier \"src/**/*.ts\" --list-different","test:spelling":"cspell \"{README.md,.github/*.md,src/**/*.ts}\"","prepare-release":"npm-run-all -s reset-hard test cov:check doc:html version doc:publish","diff-integration-tests":"mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'","check-integration-tests":"npm-run-all -s check-integration-test:*"},"typings":"build/main/index.d.ts","_npmUser":{"name":"aeolun","email":"bart@serial-experiments.com"},"prettier":{"singleQuote":true},"_resolved":"/tmp/5387e49bf50d783d9dc1dd256555be7d/aeolun-dijkstra-calculator-1.2.1.tgz","_integrity":"sha512-VdB/xnhWuXHj+ySZBmGMyopUsLKqmbAlxGcTr+UBOVfpCFHLK8qYa3k817e083KUowMzsi8T/hf6nOYfePNkDA==","repository":{"url":"git+https://github.com/aeolun/dijkstra-calculator.git","type":"git"},"_npmVersion":"9.5.1","description":"Dijkstra calculator for the shortest path in a graph of nodes given a weight.","directories":{},"_nodeVersion":"18.16.0","_hasShrinkwrap":false,"devDependencies":{"ava":"5.3.1","nyc":"^15.1.0","cspell":"^4.1.0","eslint":"^7.8.0","codecov":"^3.5.0","ts-node":"^9.0.0","typedoc":"^0.24.8","gh-pages":"^3.1.0","open-cli":"^6.0.1","prettier":"^2.1.1","typescript":"^4.5.5","@types/node":"^18.15.3","npm-run-all":"^4.1.5","@ava/typescript":"^1.1.1","standard-version":"^9.0.0","eslint-plugin-import":"^2.22.0","eslint-config-prettier":"^6.11.0","eslint-plugin-functional":"^3.0.2","@typescript-eslint/parser":"^4.0.1","cz-conventional-changelog":"^3.3.0","eslint-plugin-eslint-comments":"^3.2.0","@typescript-eslint/eslint-plugin":"^4.0.1","@istanbuljs/nyc-config-typescript":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dijkstra-calculator_1.2.1_1689169490488_0.5814169855554407","host":"s3://npm-registry-packages"}},"1.2.2":{"name":"@aeolun/dijkstra-calculator","version":"1.2.2","keywords":[],"license":"MIT","_id":"@aeolun/dijkstra-calculator@1.2.2","maintainers":[{"name":"aeolun","email":"bart@serial-experiments.com"}],"homepage":"https://github.com/aeolun/dijkstra-calculator#readme","bugs":{"url":"https://github.com/aeolun/dijkstra-calculator/issues"},"ava":{"files":["!build/module/**"],"timeout":"60s","failFast":true,"typescript":{"rewritePaths":{"src/":"build/main/"}}},"nyc":{"exclude":["**/*.spec.js"],"extends":"@istanbuljs/nyc-config-typescript"},"dist":{"shasum":"d59e22fb1c74d4c985f6dfb9620408933440cee6","tarball":"https://registry.npmjs.org/@aeolun/dijkstra-calculator/-/dijkstra-calculator-1.2.2.tgz","fileCount":16,"integrity":"sha512-xwJCOeUTc/wBEd6wERfgl7SRGrJXighiwfilb1MYaCX6rGiYGXLSW2yXs/M8O4mU1KuevcZ1qk3SnXgZBqJhDQ==","signatures":[{"sig":"MEYCIQCJRV0Ap9Bw56tFWg9bGd/bY7Xvr4SSpHgt9kVk5ngp4gIhAJm+e9vK6EcptLS8kLhSFMxa9gdO80GcPpIXq2puL/2w","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":115822},"main":"build/main/index.js","_from":"file:aeolun-dijkstra-calculator-1.2.2.tgz","config":{},"module":"build/module/index.js","engines":{"node":">=10"},"scripts":{"cov":"npm-run-all -s build test:unit cov:html cov:lcov && open-cli coverage/index.html","doc":"npm-run-all -s doc:html && open-cli build/docs/index.html","fix":"npm-run-all -s fix:*","test":"npm-run-all -s build test:*","build":"npm-run-all -p build:*","version":"standard-version","cov:html":"nyc report --reporter=html","cov:lcov":"nyc report --reporter=lcov","cov:send":"npm-run-all -s cov:lcov && codecov","doc:html":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --out build/docs","doc:json":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --json build/docs/typedoc.json","fix:lint":"eslint src --ext .ts --fix","check-cli":"npm-run-all -s test diff-integration-tests check-integration-tests","cov:check":"nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100","test:lint":"eslint src --ext .ts","test:unit":"nyc --silent ava","build:main":"tsc -p tsconfig.json","reset-hard":"git clean -dfx && git reset --hard && yarn","watch:test":"nyc --silent ava --watch","doc:publish":"gh-pages -m \"[ci skip] Updates\" -d build/docs","watch:build":"tsc -p tsconfig.json -w","build:module":"tsc -p tsconfig.module.json","fix:prettier":"prettier \"src/**/*.ts\" --write","test:prettier":"prettier \"src/**/*.ts\" --list-different","test:spelling":"cspell \"{README.md,.github/*.md,src/**/*.ts}\"","prepare-release":"npm-run-all -s reset-hard test cov:check doc:html version doc:publish","diff-integration-tests":"mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'","check-integration-tests":"npm-run-all -s check-integration-test:*"},"typings":"build/main/index.d.ts","_npmUser":{"name":"aeolun","email":"bart@serial-experiments.com"},"prettier":{"singleQuote":true},"_resolved":"/tmp/e4076922022e73633da1935cbaa04547/aeolun-dijkstra-calculator-1.2.2.tgz","_integrity":"sha512-xwJCOeUTc/wBEd6wERfgl7SRGrJXighiwfilb1MYaCX6rGiYGXLSW2yXs/M8O4mU1KuevcZ1qk3SnXgZBqJhDQ==","repository":{"url":"git+https://github.com/aeolun/dijkstra-calculator.git","type":"git"},"_npmVersion":"9.5.1","description":"Dijkstra calculator for the shortest path in a graph of nodes given a weight.","directories":{},"_nodeVersion":"18.16.0","_hasShrinkwrap":false,"devDependencies":{"ava":"5.3.1","nyc":"^15.1.0","cspell":"^4.1.0","eslint":"^7.8.0","codecov":"^3.5.0","ts-node":"^9.0.0","typedoc":"^0.24.8","gh-pages":"^3.1.0","open-cli":"^6.0.1","prettier":"^2.1.1","typescript":"^4.5.5","@types/node":"^18.15.3","npm-run-all":"^4.1.5","@ava/typescript":"^1.1.1","standard-version":"^9.0.0","eslint-plugin-import":"^2.22.0","eslint-config-prettier":"^6.11.0","eslint-plugin-functional":"^3.0.2","@typescript-eslint/parser":"^4.0.1","cz-conventional-changelog":"^3.3.0","eslint-plugin-eslint-comments":"^3.2.0","@typescript-eslint/eslint-plugin":"^4.0.1","@istanbuljs/nyc-config-typescript":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dijkstra-calculator_1.2.2_1689170523138_0.28318820694851254","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"@aeolun/dijkstra-calculator","version":"1.3.0","keywords":[],"license":"MIT","_id":"@aeolun/dijkstra-calculator@1.3.0","maintainers":[{"name":"aeolun","email":"bart@serial-experiments.com"}],"homepage":"https://github.com/aeolun/dijkstra-calculator#readme","bugs":{"url":"https://github.com/aeolun/dijkstra-calculator/issues"},"ava":{"files":["!build/module/**"],"timeout":"60s","failFast":true,"typescript":{"rewritePaths":{"src/":"build/main/"}}},"nyc":{"exclude":["**/*.spec.js"],"extends":"@istanbuljs/nyc-config-typescript"},"dist":{"shasum":"0aaac6975d22074e542814522ec149fe456fe415","tarball":"https://registry.npmjs.org/@aeolun/dijkstra-calculator/-/dijkstra-calculator-1.3.0.tgz","fileCount":16,"integrity":"sha512-GA+hXzIPAQ79XjFQUjptwwHn5/OhldLYrZRUTuXzdDP8pTKi42EkIk1lMQfe67dFGcpCJLmnFyQoYG8Q+/YXfA==","signatures":[{"sig":"MEQCIHMPzfmzuS8MfPrrwAZqKqVPFAB/Q9qK3DRF4lI+1aguAiBHhfRRk+OxdZmpyf5k1NXh831rQrkCtLamFCAZ/7s8eA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":116717},"main":"build/main/index.js","_from":"file:aeolun-dijkstra-calculator-1.3.0.tgz","config":{},"module":"build/module/index.js","engines":{"node":">=10"},"scripts":{"cov":"npm-run-all -s build test:unit cov:html cov:lcov && open-cli coverage/index.html","doc":"npm-run-all -s doc:html && open-cli build/docs/index.html","fix":"npm-run-all -s fix:*","test":"npm-run-all -s build test:*","build":"npm-run-all -p build:*","version":"standard-version","cov:html":"nyc report --reporter=html","cov:lcov":"nyc report --reporter=lcov","cov:send":"npm-run-all -s cov:lcov && codecov","doc:html":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --out build/docs","doc:json":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --json build/docs/typedoc.json","fix:lint":"eslint src --ext .ts --fix","check-cli":"npm-run-all -s test diff-integration-tests check-integration-tests","cov:check":"nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100","test:lint":"eslint src --ext .ts","test:unit":"nyc --silent ava","build:main":"tsc -p tsconfig.json","reset-hard":"git clean -dfx && git reset --hard && yarn","watch:test":"nyc --silent ava --watch","doc:publish":"gh-pages -m \"[ci skip] Updates\" -d build/docs","watch:build":"tsc -p tsconfig.json -w","build:module":"tsc -p tsconfig.module.json","fix:prettier":"prettier \"src/**/*.ts\" --write","test:prettier":"prettier \"src/**/*.ts\" --list-different","test:spelling":"cspell \"{README.md,.github/*.md,src/**/*.ts}\"","prepare-release":"npm-run-all -s reset-hard test cov:check doc:html version doc:publish","diff-integration-tests":"mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'","check-integration-tests":"npm-run-all -s check-integration-test:*"},"typings":"build/main/index.d.ts","_npmUser":{"name":"aeolun","email":"bart@serial-experiments.com"},"prettier":{"singleQuote":true},"_resolved":"/tmp/8635d0b14aaaa0baf538f4b12d84db61/aeolun-dijkstra-calculator-1.3.0.tgz","_integrity":"sha512-GA+hXzIPAQ79XjFQUjptwwHn5/OhldLYrZRUTuXzdDP8pTKi42EkIk1lMQfe67dFGcpCJLmnFyQoYG8Q+/YXfA==","repository":{"url":"git+https://github.com/aeolun/dijkstra-calculator.git","type":"git"},"_npmVersion":"9.5.1","description":"Dijkstra calculator for the shortest path in a graph of nodes given a weight.","directories":{},"_nodeVersion":"18.16.0","_hasShrinkwrap":false,"devDependencies":{"ava":"5.3.1","nyc":"^15.1.0","cspell":"^4.1.0","eslint":"^7.8.0","codecov":"^3.5.0","ts-node":"^9.0.0","typedoc":"^0.24.8","gh-pages":"^3.1.0","open-cli":"^6.0.1","prettier":"^2.1.1","typescript":"^4.5.5","@types/node":"^18.15.3","npm-run-all":"^4.1.5","@ava/typescript":"^1.1.1","standard-version":"^9.0.0","eslint-plugin-import":"^2.22.0","eslint-config-prettier":"^6.11.0","eslint-plugin-functional":"^3.0.2","@typescript-eslint/parser":"^4.0.1","cz-conventional-changelog":"^3.3.0","eslint-plugin-eslint-comments":"^3.2.0","@typescript-eslint/eslint-plugin":"^4.0.1","@istanbuljs/nyc-config-typescript":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dijkstra-calculator_1.3.0_1689385739119_0.8446972615967978","host":"s3://npm-registry-packages"}},"1.3.1":{"name":"@aeolun/dijkstra-calculator","version":"1.3.1","keywords":[],"license":"MIT","_id":"@aeolun/dijkstra-calculator@1.3.1","maintainers":[{"name":"aeolun","email":"bart@serial-experiments.com"}],"homepage":"https://github.com/aeolun/dijkstra-calculator#readme","bugs":{"url":"https://github.com/aeolun/dijkstra-calculator/issues"},"ava":{"files":["!build/module/**"],"timeout":"60s","failFast":true,"typescript":{"rewritePaths":{"src/":"build/main/"}}},"nyc":{"exclude":["**/*.spec.js"],"extends":"@istanbuljs/nyc-config-typescript"},"dist":{"shasum":"b1a16ef17f59657d0fce1221b80602e90d42af22","tarball":"https://registry.npmjs.org/@aeolun/dijkstra-calculator/-/dijkstra-calculator-1.3.1.tgz","fileCount":16,"integrity":"sha512-lT7RbfajSbVQgRA60r/NPJJCaOA548pPFTgsulQiCVXwr0qTnn1D3CEhqrmz9aH0yX0qpHoS8eEahg7/ku/SXA==","signatures":[{"sig":"MEQCIDD9Z4BVPDEBt8P6bS+9PkrqAzQaRuv4qK4lmlG0hIyxAiBushMNwel87/IG/rNPRifRHEwfD1dsV+4dnzgvFSjq2Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":107301},"main":"build/main/index.js","_from":"file:aeolun-dijkstra-calculator-1.3.1.tgz","config":{},"module":"build/module/index.js","engines":{"node":">=10"},"scripts":{"cov":"npm-run-all -s build test:unit cov:html cov:lcov && open-cli coverage/index.html","doc":"npm-run-all -s doc:html && open-cli build/docs/index.html","fix":"npm-run-all -s fix:*","test":"npm-run-all -s build test:*","build":"npm-run-all -p build:*","version":"standard-version","cov:html":"nyc report --reporter=html","cov:lcov":"nyc report --reporter=lcov","cov:send":"npm-run-all -s cov:lcov && codecov","doc:html":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --out build/docs","doc:json":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --json build/docs/typedoc.json","fix:lint":"eslint src --ext .ts --fix","check-cli":"npm-run-all -s test diff-integration-tests check-integration-tests","cov:check":"nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100","test:lint":"eslint src --ext .ts","test:unit":"nyc --silent ava","build:main":"tsc -p tsconfig.json","reset-hard":"git clean -dfx && git reset --hard && yarn","watch:test":"nyc --silent ava --watch","doc:publish":"gh-pages -m \"[ci skip] Updates\" -d build/docs","watch:build":"tsc -p tsconfig.json -w","build:module":"tsc -p tsconfig.module.json","fix:prettier":"prettier \"src/**/*.ts\" --write","test:prettier":"prettier \"src/**/*.ts\" --list-different","test:spelling":"cspell \"{README.md,.github/*.md,src/**/*.ts}\"","prepare-release":"npm-run-all -s reset-hard test cov:check doc:html version doc:publish","diff-integration-tests":"mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'","check-integration-tests":"npm-run-all -s check-integration-test:*"},"typings":"build/main/index.d.ts","_npmUser":{"name":"aeolun","email":"bart@serial-experiments.com"},"prettier":{"singleQuote":true},"_resolved":"/tmp/aa7c4ee52225866e2646909c0e7afdd6/aeolun-dijkstra-calculator-1.3.1.tgz","_integrity":"sha512-lT7RbfajSbVQgRA60r/NPJJCaOA548pPFTgsulQiCVXwr0qTnn1D3CEhqrmz9aH0yX0qpHoS8eEahg7/ku/SXA==","repository":{"url":"git+https://github.com/aeolun/dijkstra-calculator.git","type":"git"},"_npmVersion":"9.5.1","description":"Dijkstra calculator for the shortest path in a graph of nodes given a weight.","directories":{},"_nodeVersion":"18.16.0","_hasShrinkwrap":false,"devDependencies":{"ava":"5.3.1","nyc":"^15.1.0","cspell":"^4.1.0","eslint":"^7.8.0","codecov":"^3.5.0","ts-node":"^9.0.0","typedoc":"^0.24.8","gh-pages":"^3.1.0","open-cli":"^6.0.1","prettier":"^2.1.1","typescript":"^4.5.5","@types/node":"^18.15.3","npm-run-all":"^4.1.5","@ava/typescript":"^1.1.1","standard-version":"^9.0.0","eslint-plugin-import":"^2.22.0","eslint-config-prettier":"^6.11.0","eslint-plugin-functional":"^3.0.2","@typescript-eslint/parser":"^4.0.1","cz-conventional-changelog":"^3.3.0","eslint-plugin-eslint-comments":"^3.2.0","@typescript-eslint/eslint-plugin":"^4.0.1","@istanbuljs/nyc-config-typescript":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dijkstra-calculator_1.3.1_1689389353620_0.9762518228356605","host":"s3://npm-registry-packages"}},"1.3.2":{"name":"@aeolun/dijkstra-calculator","version":"1.3.2","keywords":[],"license":"MIT","_id":"@aeolun/dijkstra-calculator@1.3.2","maintainers":[{"name":"aeolun","email":"bart@serial-experiments.com"}],"homepage":"https://github.com/aeolun/dijkstra-calculator#readme","bugs":{"url":"https://github.com/aeolun/dijkstra-calculator/issues"},"ava":{"files":["!build/module/**"],"timeout":"60s","failFast":true,"typescript":{"rewritePaths":{"src/":"build/main/"}}},"nyc":{"exclude":["**/*.spec.js"],"extends":"@istanbuljs/nyc-config-typescript"},"dist":{"shasum":"9a8c489aeda763222014f7f495a8a248a606017b","tarball":"https://registry.npmjs.org/@aeolun/dijkstra-calculator/-/dijkstra-calculator-1.3.2.tgz","fileCount":16,"integrity":"sha512-tw5ktr3Eg0DQvMTlO8yWTgOvqUhzIHH8snnckht7L3fov9YF/4ycILEHtk9MdMPgtjOr0cZisHCNfm6zrOCxXA==","signatures":[{"sig":"MEYCIQCcgp4BJSflRe+RHTJiDvQKmPdWVLgLAQXAZnsTdm+bPgIhAIAY8PsCw2EjIoa24okBFJOlHPxhU7rnLdO65euHeHB3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":107031},"main":"build/main/index.js","_from":"file:aeolun-dijkstra-calculator-1.3.2.tgz","config":{},"module":"build/module/index.js","engines":{"node":">=10"},"scripts":{"cov":"npm-run-all -s build test:unit cov:html cov:lcov && open-cli coverage/index.html","doc":"npm-run-all -s doc:html && open-cli build/docs/index.html","fix":"npm-run-all -s fix:*","test":"npm-run-all -s build test:*","build":"npm-run-all -p build:*","version":"standard-version","cov:html":"nyc report --reporter=html","cov:lcov":"nyc report --reporter=lcov","cov:send":"npm-run-all -s cov:lcov && codecov","doc:html":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --out build/docs","doc:json":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --json build/docs/typedoc.json","fix:lint":"eslint src --ext .ts --fix","check-cli":"npm-run-all -s test diff-integration-tests check-integration-tests","cov:check":"nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100","test:lint":"eslint src --ext .ts","test:unit":"nyc --silent ava","build:main":"tsc -p tsconfig.json","reset-hard":"git clean -dfx && git reset --hard && yarn","watch:test":"nyc --silent ava --watch","doc:publish":"gh-pages -m \"[ci skip] Updates\" -d build/docs","watch:build":"tsc -p tsconfig.json -w","build:module":"tsc -p tsconfig.module.json","fix:prettier":"prettier \"src/**/*.ts\" --write","test:prettier":"prettier \"src/**/*.ts\" --list-different","test:spelling":"cspell \"{README.md,.github/*.md,src/**/*.ts}\"","prepare-release":"npm-run-all -s reset-hard test cov:check doc:html version doc:publish","diff-integration-tests":"mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'","check-integration-tests":"npm-run-all -s check-integration-test:*"},"typings":"build/main/index.d.ts","_npmUser":{"name":"aeolun","email":"bart@serial-experiments.com"},"prettier":{"singleQuote":true},"_resolved":"/tmp/bb73f66b5d3fae2c5fe0df4b1aaffe93/aeolun-dijkstra-calculator-1.3.2.tgz","_integrity":"sha512-tw5ktr3Eg0DQvMTlO8yWTgOvqUhzIHH8snnckht7L3fov9YF/4ycILEHtk9MdMPgtjOr0cZisHCNfm6zrOCxXA==","repository":{"url":"git+https://github.com/aeolun/dijkstra-calculator.git","type":"git"},"_npmVersion":"9.5.1","description":"Dijkstra calculator for the shortest path in a graph of nodes given a weight.","directories":{},"_nodeVersion":"18.16.0","_hasShrinkwrap":false,"devDependencies":{"ava":"5.3.1","nyc":"^15.1.0","cspell":"^4.1.0","eslint":"^7.8.0","codecov":"^3.5.0","ts-node":"^9.0.0","typedoc":"^0.24.8","gh-pages":"^3.1.0","open-cli":"^6.0.1","prettier":"^2.1.1","typescript":"^4.5.5","@types/node":"^18.15.3","npm-run-all":"^4.1.5","@ava/typescript":"^1.1.1","standard-version":"^9.0.0","eslint-plugin-import":"^2.22.0","eslint-config-prettier":"^6.11.0","eslint-plugin-functional":"^3.0.2","@typescript-eslint/parser":"^4.0.1","cz-conventional-changelog":"^3.3.0","eslint-plugin-eslint-comments":"^3.2.0","@typescript-eslint/eslint-plugin":"^4.0.1","@istanbuljs/nyc-config-typescript":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dijkstra-calculator_1.3.2_1689389479063_0.4415712359588322","host":"s3://npm-registry-packages"}},"1.4.0":{"name":"@aeolun/dijkstra-calculator","version":"1.4.0","keywords":[],"license":"MIT","_id":"@aeolun/dijkstra-calculator@1.4.0","maintainers":[{"name":"aeolun","email":"bart@serial-experiments.com"}],"homepage":"https://github.com/aeolun/dijkstra-calculator#readme","bugs":{"url":"https://github.com/aeolun/dijkstra-calculator/issues"},"nyc":{"exclude":["**/*.spec.js"],"extends":"@istanbuljs/nyc-config-typescript"},"dist":{"shasum":"2d38d1b133e9d1cd41c233ef571dfc3aa54c029b","tarball":"https://registry.npmjs.org/@aeolun/dijkstra-calculator/-/dijkstra-calculator-1.4.0.tgz","fileCount":26,"integrity":"sha512-83eP0dUZpyg8/kDlp+3McByRJKg7vr72V1pUI4ZsiniBbtR3coohu4qnA6mSy5D1E1gCG4Nv4j/T/Qe8MSzKCw==","signatures":[{"sig":"MEUCIQCXzJDY11nMkLBc3WMQqfd4JX8HhcBsjO/Nz3L+NU3J8AIgbzt577yxF2WmN5hqO0B40Q56ZLTNugOXJULaEAWkqYY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":238599},"main":"build/main/index.js","_from":"file:aeolun-dijkstra-calculator-1.4.0.tgz","config":{},"module":"build/module/index.js","engines":{"node":">=10"},"scripts":{"cov":"npm-run-all -s build test:unit cov:html cov:lcov && open-cli coverage/index.html","doc":"npm-run-all -s doc:html && open-cli build/docs/index.html","fix":"npm-run-all -s fix:*","test":"npm-run-all -s build test:*","build":"npm-run-all -p build:*","version":"standard-version","cov:html":"nyc report --reporter=html","cov:lcov":"nyc report --reporter=lcov","cov:send":"npm-run-all -s cov:lcov && codecov","doc:html":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --out build/docs","doc:json":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --json build/docs/typedoc.json","fix:lint":"eslint src --ext .ts --fix","check-cli":"npm-run-all -s test diff-integration-tests check-integration-tests","cov:check":"nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100","test:lint":"eslint src --ext .ts","test:unit":"vitest","build:main":"tsc -p tsconfig.json","reset-hard":"git clean -dfx && git reset --hard && yarn","watch:test":"nyc --silent ava --watch","doc:publish":"gh-pages -m \"[ci skip] Updates\" -d build/docs","watch:build":"tsc -p tsconfig.json -w","build:module":"tsc -p tsconfig.module.json","fix:prettier":"prettier \"src/**/*.ts\" --write","prepare-release":"npm-run-all -s reset-hard test cov:check doc:html version doc:publish","diff-integration-tests":"mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'","check-integration-tests":"npm-run-all -s check-integration-test:*"},"typings":"build/main/index.d.ts","_npmUser":{"name":"aeolun","email":"bart@serial-experiments.com"},"prettier":{"singleQuote":true},"_resolved":"/tmp/2bfd5972ef8b6303409285e2513d4558/aeolun-dijkstra-calculator-1.4.0.tgz","_integrity":"sha512-83eP0dUZpyg8/kDlp+3McByRJKg7vr72V1pUI4ZsiniBbtR3coohu4qnA6mSy5D1E1gCG4Nv4j/T/Qe8MSzKCw==","repository":{"url":"git+https://github.com/aeolun/dijkstra-calculator.git","type":"git"},"_npmVersion":"9.5.1","description":"Dijkstra calculator for the shortest path in a graph of nodes given a weight.","directories":{},"_nodeVersion":"18.16.0","_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","tsx":"^3.14.0","cspell":"^4.1.0","eslint":"^7.8.0","vitest":"^0.34.6","codecov":"^3.5.0","ts-node":"^9.0.0","typedoc":"^0.24.8","gh-pages":"^3.1.0","open-cli":"^6.0.1","prettier":"^2.1.1","typescript":"^4.5.5","@types/node":"^18.15.3","npm-run-all":"^4.1.5","@ava/typescript":"^1.1.1","standard-version":"^9.0.0","eslint-plugin-import":"^2.22.0","eslint-config-prettier":"^6.11.0","eslint-plugin-functional":"^3.0.2","@typescript-eslint/parser":"^4.0.1","cz-conventional-changelog":"^3.3.0","eslint-plugin-eslint-comments":"^3.2.0","@typescript-eslint/eslint-plugin":"^4.0.1","@istanbuljs/nyc-config-typescript":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dijkstra-calculator_1.4.0_1699014858180_0.9807440129460128","host":"s3://npm-registry-packages"}},"1.4.1":{"name":"@aeolun/dijkstra-calculator","version":"1.4.1","keywords":[],"license":"MIT","_id":"@aeolun/dijkstra-calculator@1.4.1","maintainers":[{"name":"aeolun","email":"bart@serial-experiments.com"}],"homepage":"https://github.com/aeolun/dijkstra-calculator#readme","bugs":{"url":"https://github.com/aeolun/dijkstra-calculator/issues"},"nyc":{"exclude":["**/*.spec.js"],"extends":"@istanbuljs/nyc-config-typescript"},"dist":{"shasum":"3503e6e72170c4a93ad1853407e42d3128670063","tarball":"https://registry.npmjs.org/@aeolun/dijkstra-calculator/-/dijkstra-calculator-1.4.1.tgz","fileCount":26,"integrity":"sha512-x9h//SOaVVkAXd9BChfFiQ8fMwbWwOHb8gB5M9DQUL8YXfv8yTOMSxatj3rmiHzqo9DugVN6NLkElFwcXsatKg==","signatures":[{"sig":"MEUCIQDDGyR89RNzGubU0OsvjkMnrswiLIjWijTKQHCDk0i6FQIgUWoN0b4rPPj4JPuG87D9+TYZxjnr8cEPuBx5WTySnV8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":241800},"main":"build/main/index.js","_from":"file:aeolun-dijkstra-calculator-1.4.1.tgz","config":{},"module":"build/module/index.js","engines":{"node":">=10"},"scripts":{"cov":"npm-run-all -s build test:unit cov:html cov:lcov && open-cli coverage/index.html","doc":"npm-run-all -s doc:html && open-cli build/docs/index.html","fix":"npm-run-all -s fix:*","test":"npm-run-all -s build test:*","build":"npm-run-all -p build:*","version":"standard-version","cov:html":"nyc report --reporter=html","cov:lcov":"nyc report --reporter=lcov","cov:send":"npm-run-all -s cov:lcov && codecov","doc:html":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --out build/docs","doc:json":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --json build/docs/typedoc.json","fix:lint":"eslint src --ext .ts --fix","check-cli":"npm-run-all -s test diff-integration-tests check-integration-tests","cov:check":"nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100","test:lint":"eslint src --ext .ts","test:unit":"vitest","build:main":"tsc -p tsconfig.json","reset-hard":"git clean -dfx && git reset --hard && yarn","watch:test":"nyc --silent ava --watch","doc:publish":"gh-pages -m \"[ci skip] Updates\" -d build/docs","watch:build":"tsc -p tsconfig.json -w","build:module":"tsc -p tsconfig.module.json","fix:prettier":"prettier \"src/**/*.ts\" --write","prepare-release":"npm-run-all -s reset-hard test cov:check doc:html version doc:publish","diff-integration-tests":"mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'","check-integration-tests":"npm-run-all -s check-integration-test:*"},"typings":"build/main/index.d.ts","_npmUser":{"name":"aeolun","email":"bart@serial-experiments.com"},"prettier":{"singleQuote":true},"_resolved":"/tmp/512cf638aeda30c0eccf8de8ed8fe9c0/aeolun-dijkstra-calculator-1.4.1.tgz","_integrity":"sha512-x9h//SOaVVkAXd9BChfFiQ8fMwbWwOHb8gB5M9DQUL8YXfv8yTOMSxatj3rmiHzqo9DugVN6NLkElFwcXsatKg==","repository":{"url":"git+https://github.com/aeolun/dijkstra-calculator.git","type":"git"},"_npmVersion":"10.2.3","description":"Dijkstra calculator for the shortest path in a graph of nodes given a weight.","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","tsx":"^3.14.0","cspell":"^4.1.0","eslint":"^7.8.0","vitest":"^0.34.6","codecov":"^3.5.0","ts-node":"^9.0.0","typedoc":"^0.24.8","gh-pages":"^3.1.0","open-cli":"^6.0.1","prettier":"^2.1.1","typescript":"^4.5.5","@types/node":"^18.15.3","npm-run-all":"^4.1.5","@ava/typescript":"^1.1.1","standard-version":"^9.0.0","eslint-plugin-import":"^2.22.0","eslint-config-prettier":"^6.11.0","eslint-plugin-functional":"^3.0.2","@typescript-eslint/parser":"^4.0.1","cz-conventional-changelog":"^3.3.0","eslint-plugin-eslint-comments":"^3.2.0","@typescript-eslint/eslint-plugin":"^4.0.1","@istanbuljs/nyc-config-typescript":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dijkstra-calculator_1.4.1_1707144503456_0.9517171080722233","host":"s3://npm-registry-packages"}},"1.4.2":{"name":"@aeolun/dijkstra-calculator","version":"1.4.2","keywords":[],"license":"MIT","_id":"@aeolun/dijkstra-calculator@1.4.2","maintainers":[{"name":"aeolun","email":"bart@serial-experiments.com"}],"homepage":"https://github.com/aeolun/dijkstra-calculator#readme","bugs":{"url":"https://github.com/aeolun/dijkstra-calculator/issues"},"nyc":{"exclude":["**/*.spec.js"],"extends":"@istanbuljs/nyc-config-typescript"},"dist":{"shasum":"5a8f3446f7f9e4ee518eccad42a9223143aa022f","tarball":"https://registry.npmjs.org/@aeolun/dijkstra-calculator/-/dijkstra-calculator-1.4.2.tgz","fileCount":26,"integrity":"sha512-sswMv7QXQ2jQ0/jhRzqu33TjJgQN87by9OzxmJ/AmYsS2e7KHvp0cBI970DVFfLCvFmLjMHIKjMWH72cNlzqWw==","signatures":[{"sig":"MEUCIBUJOCu2eauQakv6uNwexje3rehvgaLkVJyLhscDKiNIAiEA+8iN5d7uzHM7lBlAdIEG/n116k8vYNY6fiOdyxu860Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":247848},"main":"build/main/index.js","_from":"file:aeolun-dijkstra-calculator-1.4.2.tgz","config":{},"module":"build/module/index.js","engines":{"node":">=10"},"scripts":{"cov":"npm-run-all -s build test:unit cov:html cov:lcov && open-cli coverage/index.html","doc":"npm-run-all -s doc:html && open-cli build/docs/index.html","fix":"npm-run-all -s fix:*","test":"npm-run-all -s build test:*","build":"npm-run-all -p build:*","version":"standard-version","cov:html":"nyc report --reporter=html","cov:lcov":"nyc report --reporter=lcov","cov:send":"npm-run-all -s cov:lcov && codecov","doc:html":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --out build/docs","doc:json":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --json build/docs/typedoc.json","fix:lint":"eslint src --ext .ts --fix","check-cli":"npm-run-all -s test diff-integration-tests check-integration-tests","cov:check":"nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100","test:lint":"eslint src --ext .ts","test:unit":"vitest","build:main":"tsc -p tsconfig.json","reset-hard":"git clean -dfx && git reset --hard && yarn","watch:test":"nyc --silent ava --watch","doc:publish":"gh-pages -m \"[ci skip] Updates\" -d build/docs","watch:build":"tsc -p tsconfig.json -w","build:module":"tsc -p tsconfig.module.json","fix:prettier":"prettier \"src/**/*.ts\" --write","prepare-release":"npm-run-all -s reset-hard test cov:check doc:html version doc:publish","diff-integration-tests":"mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'","check-integration-tests":"npm-run-all -s check-integration-test:*"},"typings":"build/main/index.d.ts","_npmUser":{"name":"aeolun","email":"bart@serial-experiments.com"},"prettier":{"singleQuote":true},"_resolved":"/tmp/86f9c9cd73ec519af0b8ea66bcf07d90/aeolun-dijkstra-calculator-1.4.2.tgz","_integrity":"sha512-sswMv7QXQ2jQ0/jhRzqu33TjJgQN87by9OzxmJ/AmYsS2e7KHvp0cBI970DVFfLCvFmLjMHIKjMWH72cNlzqWw==","repository":{"url":"git+https://github.com/aeolun/dijkstra-calculator.git","type":"git"},"_npmVersion":"10.2.3","description":"Dijkstra calculator for the shortest path in a graph of nodes given a weight.","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","tsx":"^3.14.0","cspell":"^4.1.0","eslint":"^7.8.0","vitest":"^0.34.6","codecov":"^3.5.0","ts-node":"^9.0.0","typedoc":"^0.24.8","gh-pages":"^3.1.0","open-cli":"^6.0.1","prettier":"^2.1.1","typescript":"^4.5.5","@types/node":"^18.15.3","npm-run-all":"^4.1.5","@ava/typescript":"^1.1.1","standard-version":"^9.0.0","eslint-plugin-import":"^2.22.0","eslint-config-prettier":"^6.11.0","eslint-plugin-functional":"^3.0.2","@typescript-eslint/parser":"^4.0.1","cz-conventional-changelog":"^3.3.0","eslint-plugin-eslint-comments":"^3.2.0","@typescript-eslint/eslint-plugin":"^4.0.1","@istanbuljs/nyc-config-typescript":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dijkstra-calculator_1.4.2_1707353862649_0.7205988164043591","host":"s3://npm-registry-packages"}},"1.4.3":{"name":"@aeolun/dijkstra-calculator","version":"1.4.3","keywords":[],"license":"MIT","_id":"@aeolun/dijkstra-calculator@1.4.3","maintainers":[{"name":"aeolun","email":"bart@serial-experiments.com"}],"homepage":"https://github.com/aeolun/dijkstra-calculator#readme","bugs":{"url":"https://github.com/aeolun/dijkstra-calculator/issues"},"nyc":{"exclude":["**/*.spec.js"],"extends":"@istanbuljs/nyc-config-typescript"},"dist":{"shasum":"79ecb47740532b66ba4ab0b67c9a7abd12d312ab","tarball":"https://registry.npmjs.org/@aeolun/dijkstra-calculator/-/dijkstra-calculator-1.4.3.tgz","fileCount":26,"integrity":"sha512-063BmvRqKXktz1lquqntvJparWv5eop+5X8oJ9nCUD3FoXxRXpGgdcBm6CyZy3LrJjTBvj1SdpRWOVD7nYBcEA==","signatures":[{"sig":"MEUCIQDYnrdQnvXHCtD8YsQNvrtzeKA07Yg+O4/SoSW8PwETwQIgYVAL7DcbGDF0bEz+xsIi0+sm1hZ3aRDhvcSIjcwiI1c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":248491},"main":"build/main/index.js","_from":"file:aeolun-dijkstra-calculator-1.4.3.tgz","config":{},"module":"build/module/index.js","engines":{"node":">=10"},"scripts":{"cov":"npm-run-all -s build test:unit cov:html cov:lcov && open-cli coverage/index.html","doc":"npm-run-all -s doc:html && open-cli build/docs/index.html","fix":"npm-run-all -s fix:*","test":"npm-run-all -s build test:*","build":"npm-run-all -p build:*","version":"standard-version","cov:html":"nyc report --reporter=html","cov:lcov":"nyc report --reporter=lcov","cov:send":"npm-run-all -s cov:lcov && codecov","doc:html":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --out build/docs","doc:json":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --json build/docs/typedoc.json","fix:lint":"eslint src --ext .ts --fix","check-cli":"npm-run-all -s test diff-integration-tests check-integration-tests","cov:check":"nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100","test:lint":"eslint src --ext .ts","test:unit":"vitest","build:main":"tsc -p tsconfig.json","reset-hard":"git clean -dfx && git reset --hard && yarn","watch:test":"nyc --silent ava --watch","doc:publish":"gh-pages -m \"[ci skip] Updates\" -d build/docs","watch:build":"tsc -p tsconfig.json -w","build:module":"tsc -p tsconfig.module.json","fix:prettier":"prettier \"src/**/*.ts\" --write","prepare-release":"npm-run-all -s reset-hard test cov:check doc:html version doc:publish","diff-integration-tests":"mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'","check-integration-tests":"npm-run-all -s check-integration-test:*"},"typings":"build/main/index.d.ts","_npmUser":{"name":"aeolun","email":"bart@serial-experiments.com"},"prettier":{"singleQuote":true},"_resolved":"/tmp/d373fa66182e6b95245cf7f2aae87c7d/aeolun-dijkstra-calculator-1.4.3.tgz","_integrity":"sha512-063BmvRqKXktz1lquqntvJparWv5eop+5X8oJ9nCUD3FoXxRXpGgdcBm6CyZy3LrJjTBvj1SdpRWOVD7nYBcEA==","repository":{"url":"git+https://github.com/aeolun/dijkstra-calculator.git","type":"git"},"_npmVersion":"10.2.3","description":"Dijkstra calculator for the shortest path in a graph of nodes given a weight.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"recharts":"^2.11.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^15.1.0","tsx":"^3.14.0","cspell":"^4.1.0","eslint":"^7.8.0","vitest":"^0.34.6","codecov":"^3.5.0","ts-node":"^9.0.0","typedoc":"^0.24.8","gh-pages":"^3.1.0","open-cli":"^6.0.1","prettier":"^2.1.1","typescript":"^4.5.5","@types/node":"^18.15.3","npm-run-all":"^4.1.5","@ava/typescript":"^1.1.1","standard-version":"^9.0.0","eslint-plugin-import":"^2.22.0","eslint-config-prettier":"^6.11.0","eslint-plugin-functional":"^3.0.2","@typescript-eslint/parser":"^4.0.1","cz-conventional-changelog":"^3.3.0","eslint-plugin-eslint-comments":"^3.2.0","@typescript-eslint/eslint-plugin":"^4.0.1","@istanbuljs/nyc-config-typescript":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dijkstra-calculator_1.4.3_1707829896008_0.4452099846168922","host":"s3://npm-registry-packages"}},"1.6.0":{"name":"@aeolun/dijkstra-calculator","version":"1.6.0","description":"Dijkstra calculator for the shortest path in a graph of nodes given a weight.","main":"build/main/index.js","typings":"build/main/index.d.ts","module":"build/module/index.js","repository":{"type":"git","url":"git+https://github.com/Aeolun/dijkstra-calculator.git"},"license":"MIT","keywords":[],"engines":{"node":">=10"},"devDependencies":{"@ava/typescript":"^1.1.1","@biomejs/biome":"^2.2.5","@istanbuljs/nyc-config-typescript":"^1.0.2","@types/node":"^22.18.9","codecov":"^3.8.3","cspell":"^4.2.8","cz-conventional-changelog":"^3.3.0","gh-pages":"^3.2.3","just-release":"^0.5.2","npm-run-all":"^4.1.5","nyc":"^15.1.0","open-cli":"^6.0.1","pino":"^10.0.0","standard-version":"^9.5.0","ts-node":"^9.1.1","tsx":"^3.14.0","typedoc":"^0.27.9","typescript":"^5.9.3","vitest":"^2.1.9"},"config":{},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","exclude":["**/*.spec.js"]},"scripts":{"build":"npm-run-all -p build:*","build:main":"tsc -p tsconfig.json","build:module":"tsc -p tsconfig.module.json","fix":"biome check --write .","test":"npm-run-all -s build test:*","test:lint":"biome check .","test:unit":"vitest","check-cli":"npm-run-all -s test diff-integration-tests check-integration-tests","check-integration-tests":"npm-run-all -s check-integration-test:*","diff-integration-tests":"mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'","watch:build":"tsc -p tsconfig.json -w","watch:test":"nyc --silent ava --watch","cov":"npm-run-all -s build test:unit cov:html cov:lcov && open-cli coverage/index.html","cov:html":"nyc report --reporter=html","cov:lcov":"nyc report --reporter=lcov","cov:send":"npm-run-all -s cov:lcov && codecov","cov:check":"nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100","doc":"npm-run-all -s doc:html && open-cli build/docs/index.html","doc:html":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --out build/docs","doc:json":"typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --json build/docs/typedoc.json","doc:publish":"gh-pages -m \"[ci skip] Updates\" -d build/docs","version":"standard-version","reset-hard":"git clean -dfx && git reset --hard && yarn","prepare-release":"npm-run-all -s reset-hard test cov:check doc:html version doc:publish"},"_id":"@aeolun/dijkstra-calculator@1.6.0","bugs":{"url":"https://github.com/Aeolun/dijkstra-calculator/issues"},"homepage":"https://github.com/Aeolun/dijkstra-calculator#readme","_integrity":"sha512-lbrSE+MqMDnkqN7shF9qW0KN2Lw7vP23S9EDz1RaA8i13OyBmNaZ0P+akHH0muCsu3fAnIvdEa2DeHzRChHU7Q==","_resolved":"/tmp/88f1473b541d77cad449387761afed00/aeolun-dijkstra-calculator-1.6.0.tgz","_from":"file:aeolun-dijkstra-calculator-1.6.0.tgz","_nodeVersion":"25.2.1","_npmVersion":"11.7.0","dist":{"integrity":"sha512-lbrSE+MqMDnkqN7shF9qW0KN2Lw7vP23S9EDz1RaA8i13OyBmNaZ0P+akHH0muCsu3fAnIvdEa2DeHzRChHU7Q==","shasum":"ff003f9fa1a0c83bc901cfe5ab0edc4098dcbda8","tarball":"https://registry.npmjs.org/@aeolun/dijkstra-calculator/-/dijkstra-calculator-1.6.0.tgz","fileCount":26,"unpackedSize":369509,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aeolun%2fdijkstra-calculator@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHN4bYeKIVHmqce0N9SNXYETiHSQ1+Od8uKhkLk/GPkpAiEAjdLjhSKdnByzFf6S4rbp0pRq5wjT9dBimvqKvfD9wR0="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e1209629-71af-489e-913e-81380d093f08"}},"directories":{},"maintainers":[{"name":"aeolun","email":"bart@serial-experiments.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dijkstra-calculator_1.6.0_1768188434321_0.7164233076610946"},"_hasShrinkwrap":false}},"time":{"created":"2023-05-25T04:02:18.921Z","modified":"2026-01-12T03:27:14.829Z","1.1.0":"2023-05-25T04:02:19.138Z","1.2.0":"2023-07-12T08:56:18.577Z","1.2.1":"2023-07-12T13:44:50.714Z","1.2.2":"2023-07-12T14:02:03.380Z","1.3.0":"2023-07-15T01:48:59.365Z","1.3.1":"2023-07-15T02:49:13.802Z","1.3.2":"2023-07-15T02:51:19.246Z","1.4.0":"2023-11-03T12:34:18.383Z","1.4.1":"2024-02-05T14:48:23.581Z","1.4.2":"2024-02-08T00:57:42.836Z","1.4.3":"2024-02-13T13:11:36.231Z","1.6.0":"2026-01-12T03:27:14.454Z"},"bugs":{"url":"https://github.com/Aeolun/dijkstra-calculator/issues"},"license":"MIT","homepage":"https://github.com/Aeolun/dijkstra-calculator#readme","keywords":[],"repository":{"type":"git","url":"git+https://github.com/Aeolun/dijkstra-calculator.git"},"description":"Dijkstra calculator for the shortest path in a graph of nodes given a weight.","maintainers":[{"name":"aeolun","email":"bart@serial-experiments.com"}],"readme":"![Dijkstra's Calculator](./banner.jpg)\n\n# A TypeScript implementation of Dijkstra's shortest path algorithm\n\n> An advanced pathfinding library with resource management, custom cost functions, and A* heuristic support\n\n- **GitHub URL**: https://github.com/aeolun/dijkstra-calculator\n- **TypeDoc Link**: https://getditto.github.io/dijkstra-calculator\n- Built with [![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/)\n- Continuous Integration Status ![Continuous Integration](https://github.com/getditto/dijkstra-calculator/actions/workflows/ci.yml/badge.svg)\n\n## Overview\n\nFind the shortest path between nodes in a graph using [Dijkstra's algorithm](https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm), with support for:\n\n- 🎯 **Resource management** - Track consumable resources like fuel, energy, or ammunition\n- ⛽ **Resource recovery** - Define refueling/recharging stations at vertices\n- 🔄 **Multiple edge types** - Model different travel modes (walk/drive/fly) between the same nodes\n- 💰 **Dynamic cost functions** - Calculate edge costs based on current state\n- 🚀 **A* heuristic** - Improve performance with custom heuristic functions\n- 🗺️ **Multi-waypoint routing** - Calculate routes through multiple destinations\n\nOriginally ported from [Alfred Gatsby @Prottoy2938](https://github.com/Prottoy2938)'s [gist](https://gist.github.com/Prottoy2938/66849e04b0bac459606059f5f9f3aa1a), this library has been significantly extended to support resource-constrained pathfinding.\n\nAt [Ditto](https://www.ditto.live), we use this library with [react-force-graph](https://github.com/vasturiano/react-force-graph) to visualize optimal paths in mesh networks with varying link priorities and resource constraints.\n\n**Scale**: This library is battle-tested on massive graphs with 7,000-350,000 nodes (depending on granularity) and multiple travel modes between each pair of nodes. For graphs of this size, using proper A* heuristics is essential to make pathfinding tractable.\n\n[Learn how to pronounce Dijkstra](https://www.youtube.com/watch?v=lg6uIPSvclU)\n\n## Installation\n\n```sh\nnpm install @aeolun/dijkstra-calculator\n# or\nyarn add @aeolun/dijkstra-calculator\n# or\npnpm add @aeolun/dijkstra-calculator\n```\n\nThis library targets ES2017 and works in Web, Node, and Electron environments with **zero runtime dependencies**.\n\n## Usage\n\n### Basic Usage\n\nFind the shortest path between two nodes with uniform edge weights:\n\n```typescript\nimport { DijkstraCalculator } from '@aeolun/dijkstra-calculator';\n\nconst graph = new DijkstraCalculator();\n\n// Add vertices\ngraph.addVertex('A');\ngraph.addVertex('B');\ngraph.addVertex('C');\ngraph.addVertex('D');\ngraph.addVertex('E');\ngraph.addVertex('F');\n\n// Add edges (default weight: 1)\ngraph.addEdge('A', 'B');\ngraph.addEdge('A', 'C');\ngraph.addEdge('B', 'E');\ngraph.addEdge('C', 'D');\ngraph.addEdge('C', 'F');\ngraph.addEdge('D', 'E');\ngraph.addEdge('D', 'F');\ngraph.addEdge('E', 'F');\n\nconst result = graph.calculateShortestPath('A', 'E');\nconsole.log(result.finalPath); // ['A', 'B', 'E']\nconsole.log(result.pathProperties.priority); // 2 (total weight)\n```\n\n### Weighted Edges\n\nAssign different weights to prioritize certain paths:\n\n```typescript\nconst graph = new DijkstraCalculator();\n\ngraph.addVertex('A');\ngraph.addVertex('B');\ngraph.addVertex('C');\ngraph.addVertex('D');\ngraph.addVertex('E');\ngraph.addVertex('F');\n\ngraph.addEdge('A', 'B', { weight: 4 });\ngraph.addEdge('A', 'C', { weight: 2 });\ngraph.addEdge('B', 'E', { weight: 3 });\ngraph.addEdge('C', 'D', { weight: 2 });\ngraph.addEdge('C', 'F', { weight: 4 });\ngraph.addEdge('D', 'E', { weight: 3 });\ngraph.addEdge('D', 'F', { weight: 1 });\ngraph.addEdge('E', 'F', { weight: 1 });\n\nconst result = graph.calculateShortestPath('A', 'E');\nconsole.log(result.finalPath); // ['A', 'C', 'D', 'F', 'E']\nconsole.log(result.pathProperties.priority); // 6\n```\n\n### Resource Management\n\nTrack consumable resources (fuel, energy, health, etc.) and find paths that don't exceed capacity:\n\n```typescript\n// Specify resource types via generic parameter\nconst graph = new DijkstraCalculator<'fuel'>();\n\ngraph.addVertex('A');\ngraph.addVertex('B');\ngraph.addVertex('C');\ngraph.addVertex('D');\ngraph.addVertex('E');\n\n// Each edge consumes resources\ngraph.addEdge('A', 'B', { weight: 1, consumes: { fuel: 1 } });\ngraph.addEdge('A', 'C', { weight: 1, consumes: { fuel: 1 } });\ngraph.addEdge('B', 'D', { weight: 1, consumes: { fuel: 1 } });\ngraph.addEdge('B', 'E', { weight: 1, consumes: { fuel: 10 } }); // expensive!\ngraph.addEdge('C', 'D', { weight: 1, consumes: { fuel: 1 } });\ngraph.addEdge('D', 'E', { weight: 1, consumes: { fuel: 1 } });\n\nconst result = graph.calculateShortestPath('A', 'E', {\n  supplies: { fuel: 3 },        // Starting fuel\n  supplyCapacity: { fuel: 3 },  // Maximum fuel capacity\n});\n\nconsole.log(result.finalPath); // ['A', 'B', 'D', 'E'] - avoids expensive edge\nconsole.log(result.pathProperties.supplies); // { fuel: 0 } - fuel remaining\n```\n\nWhen a path would exceed resource capacity, it receives a large penalty (100,000 × deficit), making it non-viable unless no other path exists.\n\n### Resource Recovery (Refueling Stations)\n\nDefine vertices where resources can be recovered:\n\n```typescript\nconst graph = new DijkstraCalculator<'fuel'>();\n\ngraph.addVertex('A');\ngraph.addVertex('B');\ngraph.addVertex('C', {\n  recover: {\n    fuel: (currentLevel, maxCapacity) => {\n      const recoverAmount = maxCapacity - currentLevel;\n      const refuelCost = recoverAmount * 0.5; // cost per unit\n      return {\n        recoverAmount,\n        cost: refuelCost, // added to path priority\n      };\n    },\n  },\n});\ngraph.addVertex('D');\ngraph.addVertex('E');\n\ngraph.addEdge('A', 'B', { weight: 1, consumes: { fuel: 2 } });\ngraph.addEdge('A', 'C', { weight: 1, consumes: { fuel: 2 } });\ngraph.addEdge('B', 'E', { weight: 1, consumes: { fuel: 2 } });\ngraph.addEdge('C', 'D', { weight: 1, consumes: { fuel: 2 } });\ngraph.addEdge('D', 'E', { weight: 1, consumes: { fuel: 2 } });\n\nconst result = graph.calculateShortestPath('A', 'E', {\n  supplies: { fuel: 4 },\n  supplyCapacity: { fuel: 10 },\n});\n\n// May route through C to refuel if it's more efficient\nconsole.log(result.pathProperties.totalConsumed); // Total fuel consumed\nconsole.log(result.pathProperties.totalRecovered); // Total fuel recovered\n```\n\n### Multiple Edge Types\n\nModel different travel modes between the same nodes:\n\n```typescript\nconst graph = new DijkstraCalculator<'fuel'>();\n\ngraph.addVertex('A');\ngraph.addVertex('B');\n\n// Walk: slow but fuel-efficient\ngraph.addEdge('A', 'B', {\n  id: 'walk',\n  weight: 10,\n  consumes: { fuel: 1 },\n});\n\n// Drive: fast but uses more fuel\ngraph.addEdge('A', 'B', {\n  id: 'drive',\n  weight: 3,\n  consumes: { fuel: 5 },\n});\n\n// Fly: fastest but fuel-hungry\ngraph.addEdge('A', 'B', {\n  id: 'fly',\n  weight: 1,\n  consumes: { fuel: 10 },\n});\n\n// Low fuel: will choose walk\nconst lowFuelResult = graph.calculateShortestPath('A', 'B', {\n  supplies: { fuel: 2 },\n  supplyCapacity: { fuel: 2 },\n});\n\n// High fuel: will choose fly\nconst highFuelResult = graph.calculateShortestPath('A', 'B', {\n  supplies: { fuel: 20 },\n  supplyCapacity: { fuel: 20 },\n});\n```\n\n### Dynamic Cost Functions\n\nCalculate edge costs based on current path state:\n\n```typescript\nconst graph = new DijkstraCalculator<'fuel'>();\n\ngraph.addVertex('A');\ngraph.addVertex('B');\n\ngraph.addEdge('A', 'B', {\n  weight: 10,\n  consumes: { fuel: 5 },\n  // Add cost based on how much fuel we're using\n  extraCost: (currentSupply, maxSupply, consumedThisEdge, isFinalStep) => {\n    const fuelUsed = consumedThisEdge.fuel ?? 0;\n    const fuelRemaining = currentSupply.fuel ?? 0;\n\n    // Penalize low fuel at destination\n    if (isFinalStep && fuelRemaining < maxSupply.fuel! * 0.2) {\n      return 1000; // large penalty for arriving with <20% fuel\n    }\n\n    // Small cost per fuel unit consumed\n    return fuelUsed * 0.1;\n  },\n});\n```\n\n### A* Heuristic\n\nImprove pathfinding performance with a heuristic function (converts Dijkstra to A*):\n\n```typescript\n// Define 2D positions for nodes\nconst positions: Record<string, { x: number; y: number }> = {\n  A: { x: 0, y: 0 },\n  B: { x: 10, y: 5 },\n  C: { x: 20, y: 0 },\n  D: { x: 30, y: 10 },\n};\n\n// Heuristic: Euclidean distance to target\nconst graph = new DijkstraCalculator<'fuel'>((currentNode, targetNode) => {\n  const current = positions[currentNode];\n  const target = positions[targetNode];\n  const distance = Math.sqrt(\n    Math.pow(target.x - current.x, 2) +\n    Math.pow(target.y - current.y, 2)\n  );\n  return distance * 0.5; // scale factor\n});\n\n// Add vertices and edges...\nconst result = graph.calculateShortestPath('A', 'D', {\n  supplies: { fuel: 100 },\n  supplyCapacity: { fuel: 100 },\n});\n```\n\nThe heuristic guides the search toward the target, potentially exploring fewer nodes.\n\n### Optional Debug Logging\n\nBy default, the library is completely silent with no logging overhead. For debugging, you can optionally provide a logger:\n\n```typescript\nimport { DijkstraCalculator, type Logger } from '@aeolun/dijkstra-calculator';\nimport pino from 'pino'; // optional dependency\n\n// With Pino (or any compatible logger)\nconst logger = pino({ level: 'debug' });\nconst graph = new DijkstraCalculator<'fuel'>(undefined, logger);\n\n// With custom logger\nconst consoleLogger: Logger = {\n  debug: (msg, ...args) => console.log('[DEBUG]', msg, ...args),\n};\nconst graph2 = new DijkstraCalculator<'fuel'>(undefined, consoleLogger);\n\n// Without logger (default - zero overhead)\nconst graph3 = new DijkstraCalculator<'fuel'>();\n```\n\nThe `Logger` interface is compatible with [Pino](https://github.com/pinojs/pino), [Winston](https://github.com/winstonjs/winston), and most other logging libraries.\n\n### Multi-Waypoint Routing\n\nCalculate a route through multiple destinations in sequence:\n\n```typescript\nconst graph = new DijkstraCalculator<'fuel'>();\n\n// Add vertices and edges...\n\nconst result = graph.calculateShortestRouteAsLinkedListResults(\n  ['A', 'C', 'E', 'B'], // visit in this order\n  {\n    supplies: { fuel: 50 },\n    supplyCapacity: { fuel: 50 },\n  }\n);\n\nconsole.log(result.finalPath); // Complete path through all waypoints\nconsole.log(result.pathProperties.priority); // Total cost\nconsole.log(result.pathProperties.timeTaken); // Computation time (ms)\n```\n\n### Linked List Output\n\nFor visualization libraries like [d3](https://d3js.org/), [Vis.js](https://visjs.org/), or [force-graph](https://github.com/vasturiano/react-force-graph/), use the linked list format:\n\n```typescript\nconst result = graph.calculateShortestPathAsLinkedListResult('A', 'E', {\n  supplies: { fuel: 10 },\n  supplyCapacity: { fuel: 10 },\n});\n\nconsole.log(result.finalPath);\n// [\n//   {\n//     source: 'A',\n//     target: 'C',\n//     edge: 'drive',\n//     weight: 2,\n//     consumes: { fuel: 1 },\n//     recover: {},\n//     supplies: { fuel: 9 },\n//     totalConsumed: { fuel: 1 },\n//     totalRecovered: { fuel: 0 },\n//   },\n//   // ... more edges\n// ]\n```\n\nEach edge includes:\n- `source`/`target`: Node IDs\n- `edge`: Edge ID (if provided)\n- `weight`: Base edge weight\n- `extraWeight`: Additional cost from `extraCost` function\n- `consumes`: Resources consumed on this edge\n- `recover`: Resources recovered at target vertex\n- `supplies`: Resource levels after this edge\n- `totalConsumed`/`totalRecovered`: Cumulative resource usage\n\n## TypeScript Types\n\nThe library is fully typed. Key interfaces:\n\n```typescript\n// Define your resource types\ntype MyResources = 'fuel' | 'health' | 'ammo';\n\n// Create a typed graph\nconst graph = new DijkstraCalculator<MyResources>();\n\n// Edge configuration\ninterface EdgeProperties<RESOURCES extends string> {\n  id?: string;\n  weight: number;\n  consumes?: Partial<Record<RESOURCES, number>>;\n  extraCost?: (\n    currentSupply: Partial<Record<RESOURCES, number>>,\n    maxSupply: Partial<Record<RESOURCES, number>>,\n    consumed: Partial<Record<RESOURCES, number>>,\n    isFinalStep: boolean\n  ) => number;\n}\n\n// Vertex configuration\ninterface VertexProperties<RESOURCES extends string> {\n  recover?: Partial<Record<RESOURCES, (\n    currentLevel: number,\n    maxLevel: number\n  ) => {\n    recoverAmount: number;\n    cost: number;\n  }>>;\n}\n\n// Path calculation options\ninterface PathProperties<RESOURCES extends string> {\n  supplies?: Partial<Record<RESOURCES, number>>;\n  supplyCapacity?: Partial<Record<RESOURCES, number>>;\n  timeout?: number;         // Maximum time in ms before aborting\n}\n\n// Return type\ninterface PathReturnProperties<RESOURCES extends string> {\n  priority: number;      // Total path cost\n  timeTaken: number;     // Calculation time (ms)\n  supplies?: Partial<Record<RESOURCES, number>>;\n  totalConsumed?: Partial<Record<RESOURCES, number>>;\n  totalRecovered?: Partial<Record<RESOURCES, number>>;\n  resourceWeight?: Partial<Record<RESOURCES, number>>; // Cost from recovery\n}\n```\n\n## Real-World Example\n\nA space trading game with fuel management:\n\n```typescript\nconst graph = new DijkstraCalculator<'fuel'>((from, to) => {\n  // A* heuristic: straight-line distance\n  return Math.hypot(\n    systems[to].x - systems[from].x,\n    systems[to].y - systems[from].y\n  ) * 0.5;\n});\n\n// Add star systems\nsystems.forEach(system => {\n  graph.addVertex(system.id, {\n    recover: system.hasRefueling ? {\n      fuel: (current, max) => {\n        const amount = max - current;\n        return {\n          recoverAmount: amount,\n          cost: amount * system.fuelPrice, // varies by location\n        };\n      }\n    } : undefined,\n  });\n});\n\n// Add travel routes\nsystems.forEach(system => {\n  system.neighbors.forEach(neighbor => {\n    const distance = Math.hypot(\n      neighbor.x - system.x,\n      neighbor.y - system.y\n    );\n\n    // Multiple travel speeds\n    graph.addEdge(system.id, neighbor.id, {\n      id: 'cruise',\n      weight: distance * 2,  // time cost\n      consumes: { fuel: distance },\n    });\n\n    graph.addEdge(system.id, neighbor.id, {\n      id: 'burn',\n      weight: distance,      // faster\n      consumes: { fuel: distance * 2 }, // uses more fuel\n      extraCost: (supply, max, spent, finalStep) => {\n        // Penalty for arriving with low fuel\n        if (finalStep && supply.fuel! < max.fuel! * 0.1) {\n          return 5000;\n        }\n        return 0;\n      },\n    });\n  });\n});\n\nconst route = graph.calculateShortestPath('Sol', 'Alpha-Centauri', {\n  supplies: { fuel: 500 },\n  supplyCapacity: { fuel: 500 },\n});\n```\n\n## Performance Tips\n\nFor large graphs (>1,000 nodes), performance optimization becomes critical:\n\n### 1. **Use A* Heuristics (Essential for Large Graphs)**\n\nFor graphs with spatial properties, A* heuristics are **mandatory** for reasonable performance. On graphs with 100,000+ nodes, a good heuristic can reduce pathfinding time from minutes to milliseconds.\n\n```typescript\n// Without heuristic: explores most of the graph\nconst slowGraph = new DijkstraCalculator<'fuel'>();\n\n// With heuristic: guided search, explores only relevant nodes\nconst fastGraph = new DijkstraCalculator<'fuel'>((current, target) => {\n  const dx = positions[target].x - positions[current].x;\n  const dy = positions[target].y - positions[current].y;\n  return Math.sqrt(dx * dx + dy * dy);\n});\n```\n\n**Heuristic requirements**:\n- Must be **admissible** (never overestimate the true cost)\n- Should be **consistent** (satisfy triangle inequality)\n- Euclidean distance works well for spatial graphs\n- For non-spatial graphs, try domain-specific distance metrics\n\n### 2. **Pre-compute Graph Structure**\n\nIf running multiple queries on the same graph, build it once:\n\n```typescript\n// Build graph once\nconst graph = new DijkstraCalculator<'fuel'>(heuristic);\nfor (const node of nodes) {\n  graph.addVertex(node.id);\n}\nfor (const edge of edges) {\n  graph.addEdge(edge.from, edge.to, edge.properties);\n}\n\n// Run multiple queries efficiently\nconst route1 = graph.calculateShortestPath('A', 'B', props);\nconst route2 = graph.calculateShortestPath('C', 'D', props);\n```\n\n### 3. **Optimize Resource Calculations**\n\nFor graphs with many resources, minimize computation in hot paths:\n\n```typescript\n// Avoid expensive calculations in extraCost\ngraph.addEdge('A', 'B', {\n  weight: 10,\n  extraCost: (supply, max, consumed, finalStep) => {\n    // BAD: Complex math in hot path\n    // return Math.pow(consumed.fuel, 2) * Math.sin(supply.fuel);\n\n    // GOOD: Simple arithmetic\n    return consumed.fuel * 0.1;\n  },\n});\n```\n\n### 4. **Use Directed Edges When Possible**\n\nIf your graph has one-way connections, use directed edges to reduce memory:\n\n```typescript\n// Bidirectional (default) - creates 2 edges\ngraph.addEdge('A', 'B', { weight: 1 });\n\n// Directed - creates 1 edge\ngraph.addEdge('A', 'B', { weight: 1 }, true);\n```\n\n### 5. **Use Timeouts for Long-Distance Queries**\n\nFor very large graphs (100,000+ nodes), some queries across the entire graph may take too long. Use timeouts to prevent hanging:\n\n```typescript\nconst result = graph.calculateShortestPath('EarthSystem', 'FarGalaxy', {\n  supplies: { fuel: 1000 },\n  supplyCapacity: { fuel: 1000 },\n  timeout: 500, // Abort after 500ms if no path found\n});\n\nif (result.finalPath.length === 0) {\n  console.log('No path found within timeout - systems too far apart');\n} else {\n  console.log(`Path found in ${result.pathProperties.timeTaken}ms`);\n}\n```\n\n**Timeout guidelines**:\n- For graphs with good heuristics: 100-500ms is usually sufficient\n- Without heuristics: may need 1000ms+ for large graphs\n- Empty result (`finalPath: []`) indicates timeout or no path exists\n\n### 6. **Use Bidirectional Search (For Graphs Without Resources)**\n\nFor very large graphs with good heuristics and **without resource constraints**, use `calculateBidirectionalPath()` which searches from both start and end simultaneously:\n\n```typescript\n// Create graph with heuristic (required for bidirectional search)\nconst graph = new DijkstraCalculator((from, to) => {\n  return Math.hypot(\n    positions[to].x - positions[from].x,\n    positions[to].y - positions[from].y\n  );\n});\n\n// Add vertices and edges WITHOUT resource consumption\nsystems.forEach(system => {\n  graph.addVertex(system.id);\n});\n\nsystems.forEach(system => {\n  system.neighbors.forEach(neighbor => {\n    graph.addEdge(system.id, neighbor.id, {\n      weight: calculateDistance(system, neighbor),\n      // NO consumes, NO supplies\n    });\n  });\n});\n\n// Use bidirectional search for fast pathfinding\nconst result = graph.calculateBidirectionalPath('EarthSystem', 'AlphaCentauri', {\n  timeout: 500, // Optional timeout in ms\n});\n\nconsole.log(result.finalPath); // ['EarthSystem', ..., 'AlphaCentauri']\nconsole.log(result.pathProperties.priority); // Total cost\n```\n\n**Important limitations**:\n- **Does NOT support resource management** (fuel, supplies, etc.)\n- Requires a heuristic function (will throw error if not provided)\n- For graphs with resources, you must use the standard `calculateShortestPath()` methods\n\n**When to use**:\n- Very large graphs (50,000+ nodes) with good heuristics\n- Long-distance queries where standard A* is too slow\n- **Graphs without resource constraints**\n- Simple weight-only pathfinding at scale\n\n### 7. **Profile Large Graphs**\n\nFor graphs with 10,000+ nodes, check timing to identify bottlenecks:\n\n```typescript\nconst result = graph.calculateShortestPath('A', 'Z', props);\nconsole.log(`Pathfinding took ${result.pathProperties.timeTaken}ms`);\n\n// If slow:\n// - Verify heuristic is working (should see <100ms for most queries)\n// - Check if recovery functions are too complex\n// - Consider reducing graph granularity if possible\n// - Try bidirectional search for long-distance queries\n// - Add a timeout to prevent UI hangs\n```\n\n## API Reference\n\n### `DijkstraCalculator<RESOURCES extends string>`\n\n#### Constructor\n```typescript\nconstructor(\n  heuristic?: (currentNode: NodeId, targetNode: NodeId) => number,\n  logger?: Logger  // optional, defaults to no-op\n)\n```\n\n#### Methods\n\n- `addVertex(id: NodeId, properties?: VertexProperties<RESOURCES>): void`\n- `addEdge(from: NodeId, to: NodeId, properties?: EdgeProperties<RESOURCES>, directed?: boolean): void`\n- `calculateShortestPath(start: NodeId, end: NodeId, properties?: PathProperties<RESOURCES>): PathResult`\n- `calculateShortestPathAsLinkedListResult(start: NodeId, end: NodeId, properties?: PathProperties<RESOURCES>): LinkedListResult`\n- `calculateShortestRouteAsLinkedListResults(nodes: NodeId[], properties?: PathProperties<RESOURCES>): LinkedListResult`\n- `calculateBidirectionalPath(start: NodeId, end: NodeId, options?: { timeout?: number }): { finalPath: string[]; pathProperties: { priority: number; timeTaken: number } }` - For graphs without resource constraints only\n\n## License\n\nMIT\n\n## Credits\n\n- Original implementation: [Alfred Gatsby @Prottoy2938](https://github.com/Prottoy2938)\n- Extended by [@aeolun](https://github.com/aeolun) with resource management, recovery mechanics, and advanced features\n- Used in production at [Ditto](https://www.ditto.live)\n","readmeFilename":"README.md"}