{"_id":"@perma/map","_rev":"2-102e47989a9c434066bb7990107951fd","name":"@perma/map","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.1":{"name":"@perma/map","description":"Immutable hash maps implemented as hash array papped tries","version":"1.0.1","keywords":["HAMT","CHAMP","immutable","hashmap","map"],"repository":{"type":"git","url":"git+https://github.com/gozala/perma-map.git"},"homepage":"https://github.com/gozala/perma-map.git","dependencies":{"murmurhash3js-revisited":"^3.0.0"},"devDependencies":{"@multiformats/murmur3":"^2.1.0","@types/chai":"^4.3.3","@types/mocha":"^10.0.0","c8":"^7.11.0","chai":"^4.3.6","mocha":"^10.0.0","nyc":"^15.1.0","playwright-test":"^8.1.1","typescript":"4.8.3"},"type":"module","main":"src/lib.js","module":"src/lib.js","types":"./dist/src/lib.d.ts","typesVersions":{"*":{".":["dist/src/lib.d.ts"]}},"exports":{".":{"types":"./dist/src/lib.d.ts","import":"./src/lib.js"}},"c8":{"exclude":["test/**","dist/**"]},"license":"(Apache-2.0 AND MIT)","scripts":{"build":"tsc --build","test:web":"playwright-test test/**/*.spec.js --cov && nyc report","test:node":"c8 --check-coverage --branches 100 --functions 100 --lines 100 mocha test/**/*.spec.js","test":"c8 --check-coverage --branches 0 --functions 0 --lines 0 mocha test/**/*.spec.js","coverage":"c8 --reporter=html mocha test/**/*.spec.js && npm_config_yes=true npx st -d coverage -p 8080","check":"tsc --build"},"bugs":{"url":"https://github.com/gozala/perma-map/issues"},"_id":"@perma/map@1.0.1","_integrity":"sha512-EKAl6CU2waILocLE+kNS8ASrE9YBkAdJc+zRWo5oLfH4tyFP+sTohmaq0BoneZokDFa3aZhTNChZpCgzxTp+KA==","_resolved":"/tmp/a8ff5649caaf47d6a5a204efbc281576/perma-map-1.0.1.tgz","_from":"file:perma-map-1.0.1.tgz","_nodeVersion":"16.19.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-EKAl6CU2waILocLE+kNS8ASrE9YBkAdJc+zRWo5oLfH4tyFP+sTohmaq0BoneZokDFa3aZhTNChZpCgzxTp+KA==","shasum":"cf89997b65fe259422f258aeff650a86b576a6a5","tarball":"https://registry.npmjs.org/@perma/map/-/map-1.0.1.tgz","fileCount":38,"unpackedSize":102475,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTdPo5TL3qeYXcFtVTtm0vacawEiYdiYSaEaDUTrNRtgIhAMyKMXsThxnejVju2rbjFEShsn0GRO+l9Z0WX5+9vw1N"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkCPVoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpcoQ//Quo88lCvdIvKXK2eRHMlzy05FP3amFMbakeAbEqLiwFlO0P4\r\nM7p6beUCWJ8A1iXFXnzG7g/n36RVZ7+Cgww7Uyfh2AZtaf37XAtetp7DBVFr\r\nm/j5EH6wqg7lgGHWxmU5G6KSf4iLshvBfUCKtC05BmR380uLrZbc5EdXCwrB\r\nRt6eXz/iLcDX28yV9K7PDmRVp53HYXs/C1Uvvq0ZtKuM5fvAd5O2z/FHuDom\r\nVikb4hXqnuKPG907L+J28y91xbs6IzBmbS+2Qhr2rTddN4i8EBB5GzTZA9dt\r\nWJkh/ZepRJLE10g2iEu7YBckclZB+ASCvxv/yIWPLUn/iZV+cfTGuu8W5xhi\r\nTYR374CNC6CI7dpmX9cgjNLOdH4qlJNQ0ihLVuGfZAfhPnBkGdyTJRna2pJa\r\no/4Vo6iRl7ImeeX82h5or7/H2lvtCRxlV/2EEniFJECbZrvbVjGICtjVVf0S\r\ngGWgS3DfLTPVpiLxlp3KfERcRyKZAa9NniXMg2fjnR2ZoUaIZxnzuYJQspRU\r\nLG2C7mtSsl7FOKdDbqFHT4QOEqfxNLNBNtVvnIkk3PV6K2p39QdavBqGDLD7\r\nitf20R4rbkFyTaGzaqF6hC7IjLyKXVJn5nCjUVyZZRaSGPMmdGQTm2Uh5Cuz\r\nOedxvM+bnwulhi0LnN6oQIUhpMgNv2JIPic=\r\n=Ngd0\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"gozala","email":"dev@gozala.io"},"directories":{},"maintainers":[{"name":"gozala","email":"dev@gozala.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/map_1.0.1_1678308712530_0.17555605859878254"},"_hasShrinkwrap":false},"1.0.2":{"name":"@perma/map","description":"Immutable hash maps implemented as hash array papped tries","version":"1.0.2","keywords":["HAMT","CHAMP","immutable","hashmap","map"],"repository":{"type":"git","url":"git+https://github.com/gozala/perma-map.git"},"homepage":"https://github.com/gozala/perma-map.git","dependencies":{"murmurhash3js-revisited":"^3.0.0"},"devDependencies":{"@multiformats/murmur3":"^2.1.0","@types/chai":"^4.3.3","@types/mocha":"^10.0.0","c8":"^7.11.0","chai":"^4.3.6","mocha":"^10.0.0","nyc":"^15.1.0","playwright-test":"^8.1.1","typescript":"4.8.3"},"type":"module","main":"src/lib.js","module":"src/lib.js","types":"./dist/src/lib.d.ts","typesVersions":{"*":{".":["dist/src/lib.d.ts"],"unixfs":["dist/src/unixfs.d.ts"]}},"exports":{".":{"types":"./dist/src/lib.d.ts","import":"./src/lib.js"},"./unixfs":{"types":"./dist/src/unixfs.d.ts","import":"./src/unixfs.js"}},"c8":{"exclude":["test/**","dist/**"]},"license":"(Apache-2.0 AND MIT)","scripts":{"build":"tsc --build","test:web":"playwright-test test/**/*.spec.js --cov && nyc report","test:node":"c8 --check-coverage --branches 100 --functions 100 --lines 100 mocha test/**/*.spec.js","test":"c8 --check-coverage --branches 0 --functions 0 --lines 0 mocha test/**/*.spec.js","coverage":"c8 --reporter=html mocha test/**/*.spec.js && npm_config_yes=true npx st -d coverage -p 8080","check":"tsc --build"},"bugs":{"url":"https://github.com/gozala/perma-map/issues"},"_id":"@perma/map@1.0.2","_integrity":"sha512-hujwGOY6yTYnpf5YAtpD5MJAI1kcsVPqyN0lxG8Sampf/InO3jmX/MlJCHCGFPpPqB5JyO5WNnL+tUs1Umqe0A==","_resolved":"/tmp/6a21340c95d64d49ca6c503e12acc7fe/perma-map-1.0.2.tgz","_from":"file:perma-map-1.0.2.tgz","_nodeVersion":"16.19.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-hujwGOY6yTYnpf5YAtpD5MJAI1kcsVPqyN0lxG8Sampf/InO3jmX/MlJCHCGFPpPqB5JyO5WNnL+tUs1Umqe0A==","shasum":"838043c5f4c2ec30f1f9dfef7862ab50e2947d5b","tarball":"https://registry.npmjs.org/@perma/map/-/map-1.0.2.tgz","fileCount":38,"unpackedSize":102633,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICv8KnlFCkMh8z7FOxLW312TOtiHasDiH3h74Y2hUbzrAiEA7/yuy7W3vcY+GlNNsz/ZAHDHWp0AyDnQ30vF/+K9Va0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkCQpWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoJ1hAAheE9D+4VrEhrB/n/UDLX5iog/6LJ5z5N8eNmoLbn4A2+T5A8\r\n+yHuRlBajqSgSFMS37fvi6kQiYlC+gdpOXvuFvwesVYo/pVBJBgvFvq/6bUQ\r\nOr+IC+NhHsN7h81GzUUT+a0Si//0Eb9ks9MUudEKmvNJU3mtzc8iKZ0RAkKA\r\n4LfKsD9XomwBaHZElNdOcdysnp+u+SgGaPvHncwLSbVti8NMavTDKEbKKTLQ\r\nMLHTA5fcKOUysjkklWWqFsh50lQ474S0BcUwnvOHButVvC3FJaC/4polft13\r\nNt4SN7s1pT2E1+RC4TIxNTCB89m55R2GGiFvY1DIRoIpPQucfz2l6TT0o7uB\r\nx0cuerCDt+UNxjW8ET0c/ZZE7dFkKu2CxIScPO8rb4Z8cgC2YVFMhQEMsXoI\r\nq7xuieqMsDtWiCLnFJ6fVqQzwtTCcU2OFRqI7vI4J6algcTKWfxOym726CHp\r\noLsPEbuerwqhh/0oovt7sqjjUdwuIlyyiFOCc/4rJPjODTWmD9M8olb1EoSf\r\n3tyMA3WbeixxIE9kNL5/u+1vf+IN6dTTERxliHywsFDTdk04kG0eyJTR7ets\r\nBcCrFxgXWB9BEjy2negBg/zDKnHnH+eV1qsz1PtBZYS0e89iCz+98Hyl6KF0\r\nJEw3w4qKQRdZqakW4epU4spObQYewDvOvyk=\r\n=Tnnl\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"gozala","email":"dev@gozala.io"},"directories":{},"maintainers":[{"name":"gozala","email":"dev@gozala.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/map_1.0.2_1678314069998_0.4656239028513518"},"_hasShrinkwrap":false},"1.0.3":{"name":"@perma/map","description":"Immutable hash maps implemented as hash array papped tries","version":"1.0.3","keywords":["HAMT","CHAMP","immutable","hashmap","map"],"repository":{"type":"git","url":"git+https://github.com/gozala/perma-map.git"},"homepage":"https://github.com/gozala/perma-map.git","dependencies":{"@multiformats/murmur3":"^2.1.0","murmurhash3js-revisited":"^3.0.0"},"devDependencies":{"@types/chai":"^4.3.3","@types/mocha":"^10.0.0","c8":"^7.11.0","chai":"^4.3.6","mocha":"^10.0.0","nyc":"^15.1.0","playwright-test":"^8.1.1","typescript":"4.8.3"},"type":"module","main":"src/lib.js","module":"src/lib.js","types":"./dist/src/lib.d.ts","typesVersions":{"*":{".":["dist/src/lib.d.ts"],"unixfs":["dist/src/unixfs.d.ts"]}},"exports":{".":{"types":"./dist/src/lib.d.ts","import":"./src/lib.js"},"./unixfs":{"types":"./dist/src/unixfs.d.ts","import":"./src/unixfs.js"}},"c8":{"exclude":["test/**","dist/**"]},"license":"(Apache-2.0 AND MIT)","scripts":{"build":"tsc --build","test:web":"playwright-test test/**/*.spec.js --cov && nyc report","test:node":"c8 --check-coverage --branches 100 --functions 100 --lines 100 mocha test/**/*.spec.js","test":"c8 --check-coverage --branches 0 --functions 0 --lines 0 mocha test/**/*.spec.js","coverage":"c8 --reporter=html mocha test/**/*.spec.js && npm_config_yes=true npx st -d coverage -p 8080","check":"tsc --build"},"bugs":{"url":"https://github.com/gozala/perma-map/issues"},"_id":"@perma/map@1.0.3","_integrity":"sha512-Bf5njk0fnJGTFE2ETntq0N1oJ6YdCPIpTDn3R3KYZJQdeYSOCNL7mBrFlGnbqav8YQhJA/p81pvHINX9vAtHkQ==","_resolved":"/tmp/1078a9d5543893f48c766c91dee98d61/perma-map-1.0.3.tgz","_from":"file:perma-map-1.0.3.tgz","_nodeVersion":"16.20.0","_npmVersion":"8.19.4","dist":{"integrity":"sha512-Bf5njk0fnJGTFE2ETntq0N1oJ6YdCPIpTDn3R3KYZJQdeYSOCNL7mBrFlGnbqav8YQhJA/p81pvHINX9vAtHkQ==","shasum":"c80021c9626276298c69a44dec6a4e041bbd47f3","tarball":"https://registry.npmjs.org/@perma/map/-/map-1.0.3.tgz","fileCount":38,"unpackedSize":102633,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBB3oTM1LkfA8xENa28ethCSdlsM7mCXTa49rVc8j1TRAiBXBoiqcpqUOx0heBYbRYqRoeGz6VEEwruamVEm8sQuEA=="}]},"_npmUser":{"name":"gozala","email":"dev@gozala.io"},"directories":{},"maintainers":[{"name":"gozala","email":"dev@gozala.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/map_1.0.3_1687555847095_0.3424203287663734"},"_hasShrinkwrap":false}},"time":{"created":"2023-03-08T20:51:52.431Z","1.0.1":"2023-03-08T20:51:52.800Z","modified":"2023-06-23T21:30:47.413Z","1.0.2":"2023-03-08T22:21:10.183Z","1.0.3":"2023-06-23T21:30:47.263Z"},"maintainers":[{"name":"gozala","email":"dev@gozala.io"}],"description":"Immutable hash maps implemented as hash array papped tries","homepage":"https://github.com/gozala/perma-map.git","keywords":["HAMT","CHAMP","immutable","hashmap","map"],"repository":{"type":"git","url":"git+https://github.com/gozala/perma-map.git"},"bugs":{"url":"https://github.com/gozala/perma-map/issues"},"license":"(Apache-2.0 AND MIT)","readme":"# @perma/map\n\nHash Array Map Trie (HAMT) implementation based on [CHAMP][] paper and inspired by [Clojure][]. Library provides a builder API inspired by clojure [transient][]s that can be utilized for bulk updates.\n\n## Status\n\nPrototype implements hash-array map tries (HAMT) by synthesizing [CHAMP][]\nalgorithm with HAMTs used by [IPFS UnixFS][] and [IPLD HAMT][]. [CHAMP][]\nalgorithm utilized several optimizations that are incompatible with [IPFS UnixFS][] and [IPLD HAMT][], this implementation attempts to utilize those optimizations at\nruntime and provide a way to map it to [IPFS UnixFS][] compatible representation.\n\n## Optimizations\n\n[CHAMP][] algorithm exploits branching factor of `32` because it can be manipulated efficiently on 32-bit processors. It also allows storing HAMT bitmaps in a single integer.\n\nIn order to support [IPFS UnixFS][] implementation (which uses `256` factor by default) branching factor is configurable, but relevant optimizations only apply when branching factor of `32` is used.\n\nIt is also worth noting that even with branching factor of `32` it can store large amount of entries in a relatively shallow tree e.g. tree 6 levels deep could store around `33,554,432` entries.\n\n## Credits\n\n- [Leveling up Clojure’s Hash Maps](https://bendyworks.com/blog/leveling-clojures-hash-maps)\n- [Hash Array Mapped Tries](https://worace.works/2016/05/24/hash-array-mapped-tries/)\n- [Optimizing Hash-Array Mapped Tries for Fast and Lean Immutable JVM Collections](https://michael.steindorfer.name/publications/oopsla15.pdf)\n- [Lean Hash Array Mapped Trie (Lean Map)](https://github.com/bendyworks/lean-map)\n- [Ideal hash trees](http://lampwww.epfl.ch/papers/idealhashtrees.pdf)\n\n[ipfs unixfs]: https://github.com/ipfs/specs/blob/main/UNIXFS.md\n[champ]: https://michael.steindorfer.name/publications/oopsla15.pdf\n[ipld hamt]: https://ipld.io/specs/advanced-data-layouts/hamt/spec/\n[clojure]: https://clojure.org/\n[transient]: https://clojure.org/reference/transients\n","readmeFilename":"Readme.md"}