{"_id":"@jsdoc/salty","_rev":"4539296","name":"@jsdoc/salty","description":"A drop-in replacement for (some of) TaffyDB.","dist-tags":{"latest":"0.2.12"},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"time":{"modified":"2026-04-09T15:30:27.000Z","created":"2022-10-30T20:11:09.782Z","0.2.12":"2026-04-04T17:29:02.870Z","0.2.11":"2026-03-26T03:11:38.406Z","0.2.10":"2026-02-22T21:01:08.307Z","0.2.9":"2024-12-15T23:09:12.320Z","0.2.8":"2024-04-15T21:25:45.568Z","0.2.7":"2023-12-03T22:53:42.908Z","0.2.6":"2023-11-12T23:43:52.205Z","0.2.5":"2023-03-08T23:53:49.713Z","0.2.4":"2023-03-01T04:19:14.135Z","0.2.3":"2023-01-16T20:15:38.348Z","0.2.2":"2022-12-12T03:00:23.203Z","0.2.1":"2022-11-02T04:01:37.366Z","0.2.0":"2022-11-02T03:49:11.898Z","0.1.1":"2022-10-31T03:21:05.186Z","0.1.0":"2022-10-30T20:11:09.782Z"},"users":{},"author":{"name":"Jeff Williams","email":"jeffrey.l.williams@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"versions":{"0.2.12":{"name":"@jsdoc/salty","version":"0.2.12","description":"A drop-in replacement for (some of) TaffyDB.","keywords":["jsdoc"],"author":{"name":"Jeff Williams","email":"jeffrey.l.williams@gmail.com"},"homepage":"https://jsdoc.app/","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"type":"commonjs","dependencies":{"lodash":"^4.18.1"},"engines":{"node":">=v12.0.0"},"gitHead":"9425fa20ffb1242c8aa75e7deb9859b6f788cd4a","_id":"@jsdoc/salty@0.2.12","_nodeVersion":"22.22.2","_npmVersion":"lerna/9.0.7/node@v22.22.2+arm64 (darwin)","dist":{"shasum":"6320bb4bd16e98c2da2c666ec97d1a72922cd06a","size":8931,"noattachment":false,"key":"/@jsdoc/salty/-/@jsdoc/salty-0.2.12.tgz","tarball":"http://registry.cnpm.dingdandao.com/@jsdoc/salty/download/@jsdoc/salty-0.2.12.tgz"},"_npmUser":{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"},"directories":{},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/salty_0.2.12_1775323742714_0.6975343230444042"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-04-04T17:29:02.870Z","publish_time":1775323742870,"_source_registry_name":"default","_cnpm_publish_time":1775323742870},"0.2.11":{"name":"@jsdoc/salty","version":"0.2.11","description":"A drop-in replacement for (some of) TaffyDB.","keywords":["jsdoc"],"author":{"name":"Jeff Williams","email":"jeffrey.l.williams@gmail.com"},"homepage":"https://jsdoc.app/","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"type":"commonjs","dependencies":{"lodash":"^4.17.23"},"engines":{"node":">=v12.0.0"},"gitHead":"8095524a8de807aeb154cc1eee30f0e02d0d2db1","_id":"@jsdoc/salty@0.2.11","_nodeVersion":"22.13.0","_npmVersion":"lerna/9.0.7/node@v22.13.0+arm64 (darwin)","dist":{"shasum":"ce2e12c7e529a957619bddc5dfcbe3493a1c3074","size":8931,"noattachment":false,"key":"/@jsdoc/salty/-/@jsdoc/salty-0.2.11.tgz","tarball":"http://registry.cnpm.dingdandao.com/@jsdoc/salty/download/@jsdoc/salty-0.2.11.tgz"},"_npmUser":{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"},"directories":{},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/salty_0.2.11_1774494698272_0.9465545722490338"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-26T03:11:38.406Z","publish_time":1774494698406,"_source_registry_name":"default","_cnpm_publish_time":1774494698406},"0.2.10":{"name":"@jsdoc/salty","version":"0.2.10","description":"A drop-in replacement for (some of) TaffyDB.","keywords":["jsdoc"],"author":{"name":"Jeff Williams","email":"jeffrey.l.williams@gmail.com"},"homepage":"https://jsdoc.app/","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"type":"commonjs","dependencies":{"lodash":"^4.17.23"},"engines":{"node":">=v12.0.0"},"gitHead":"7f0b802741958e3431edc63b3a9e76412d46b1a2","_id":"@jsdoc/salty@0.2.10","_nodeVersion":"25.3.0","_npmVersion":"11.10.0","dist":{"shasum":"88b314f06bbe3b22e6b6a639a832cd47431868a1","size":8911,"noattachment":false,"key":"/@jsdoc/salty/-/@jsdoc/salty-0.2.10.tgz","tarball":"http://registry.cnpm.dingdandao.com/@jsdoc/salty/download/@jsdoc/salty-0.2.10.tgz"},"_npmUser":{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"},"directories":{},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/salty_0.2.10_1771794068159_0.10497192663757393"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-02-22T21:01:08.307Z","publish_time":1771794068307,"_source_registry_name":"default","_cnpm_publish_time":1771794068307},"0.2.9":{"name":"@jsdoc/salty","version":"0.2.9","description":"A drop-in replacement for (some of) TaffyDB.","keywords":["jsdoc"],"author":"Jeff Williams <jeffrey.l.williams@gmail.com>","homepage":"https://jsdoc.app/","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"type":"commonjs","dependencies":{"lodash":"^4.17.21"},"engines":{"node":">=v12.0.0"},"gitHead":"7e92e5acfd7fed52a73507489632ea3e8979d7fc","_nodeVersion":"18.20.4","_npmVersion":"lerna/8.1.9/node@v18.20.4+x64 (darwin)","_id":"@jsdoc/salty@0.2.9","dist":{"shasum":"4d8c147f7ca011532681ce86352a77a0178f1dec","size":8931,"noattachment":false,"key":"/@jsdoc/salty/-/@jsdoc/salty-0.2.9.tgz","tarball":"http://registry.cnpm.dingdandao.com/@jsdoc/salty/download/@jsdoc/salty-0.2.9.tgz"},"_npmUser":{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"},"directories":{},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/salty_0.2.9_1734304152116_0.2198910102299334"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-12-15T23:09:12.320Z","publish_time":1734304152320,"_source_registry_name":"default","_cnpm_publish_time":1734304152320},"0.2.8":{"name":"@jsdoc/salty","version":"0.2.8","description":"A drop-in replacement for (some of) TaffyDB.","keywords":["jsdoc"],"author":{"name":"Jeff Williams","email":"jeffrey.l.williams@gmail.com"},"homepage":"https://jsdoc.app/","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"type":"commonjs","dependencies":{"lodash":"^4.17.21"},"engines":{"node":">=v12.0.0"},"gitHead":"7942901ff766e74d5d800ae5c708ab72cf89cefe","_id":"@jsdoc/salty@0.2.8","_nodeVersion":"20.11.1","_npmVersion":"lerna/8.1.2/node@v20.11.1+x64 (darwin)","dist":{"shasum":"8d29923a9429694a437a50ab75004b576131d597","size":8926,"noattachment":false,"key":"/@jsdoc/salty/-/@jsdoc/salty-0.2.8.tgz","tarball":"http://registry.cnpm.dingdandao.com/@jsdoc/salty/download/@jsdoc/salty-0.2.8.tgz"},"_npmUser":{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"},"directories":{},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/salty_0.2.8_1713216345419_0.12681131053289452"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-04-15T21:25:45.568Z","publish_time":1713216345568,"_source_registry_name":"default","_cnpm_publish_time":1713216345568},"0.2.7":{"name":"@jsdoc/salty","version":"0.2.7","description":"A drop-in replacement for (some of) TaffyDB.","keywords":["jsdoc"],"author":{"name":"Jeff Williams","email":"jeffrey.l.williams@gmail.com"},"homepage":"https://jsdoc.app/","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"type":"commonjs","dependencies":{"lodash":"^4.17.21"},"engines":{"node":">=v12.0.0"},"gitHead":"3e4f5fc5570472d398a6a28d2b6080e8ec7cdfb5","_id":"@jsdoc/salty@0.2.7","_nodeVersion":"18.18.0","_npmVersion":"lerna/8.0.0/node@v18.18.0+x64 (darwin)","dist":{"shasum":"98ddce519fd95d7bee605a658fabf6e8cbf7556d","size":8862,"noattachment":false,"key":"/@jsdoc/salty/-/@jsdoc/salty-0.2.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/@jsdoc/salty/download/@jsdoc/salty-0.2.7.tgz"},"_npmUser":{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"},"directories":{},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/salty_0.2.7_1701644022773_0.40525303647121924"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-12-03T22:53:42.908Z","publish_time":1701644022908,"_source_registry_name":"default","_cnpm_publish_time":1701644022908},"0.2.6":{"name":"@jsdoc/salty","version":"0.2.6","description":"A drop-in replacement for (some of) TaffyDB.","keywords":["jsdoc"],"author":{"name":"Jeff Williams","email":"jeffrey.l.williams@gmail.com"},"homepage":"https://jsdoc.app/","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"type":"commonjs","dependencies":{"lodash":"^4.17.21"},"engines":{"node":">=v12.0.0"},"gitHead":"3fddc126ab49149c425d59abf6dde0289dd4eac3","_id":"@jsdoc/salty@0.2.6","_nodeVersion":"18.18.0","_npmVersion":"lerna/7.4.2/node@v18.18.0+x64 (darwin)","dist":{"shasum":"90ab8050ef4accf8d19269d0ca2ddff2174fe199","size":8825,"noattachment":false,"key":"/@jsdoc/salty/-/@jsdoc/salty-0.2.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/@jsdoc/salty/download/@jsdoc/salty-0.2.6.tgz"},"_npmUser":{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"},"directories":{},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/salty_0.2.6_1699832632049_0.7288375748736686"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-11-12T23:43:52.205Z","publish_time":1699832632205,"_source_registry_name":"default","_cnpm_publish_time":1699832632205},"0.2.5":{"name":"@jsdoc/salty","version":"0.2.5","description":"A drop-in replacement for (some of) TaffyDB.","keywords":["jsdoc"],"author":{"name":"Jeff Williams","email":"jeffrey.l.williams@gmail.com"},"homepage":"https://jsdoc.app/","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"type":"commonjs","dependencies":{"lodash":"^4.17.21"},"engines":{"node":">=v12.0.0"},"gitHead":"e20ec9ce0cbe9985647fcd0859a56067894a9889","_id":"@jsdoc/salty@0.2.5","_nodeVersion":"18.13.0","_npmVersion":"lerna/6.4.1/node@v18.13.0+x64 (darwin)","dist":{"shasum":"1b2fa5bb8c66485b536d86eee877c263d322f692","size":8827,"noattachment":false,"key":"/@jsdoc/salty/-/@jsdoc/salty-0.2.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/@jsdoc/salty/download/@jsdoc/salty-0.2.5.tgz"},"_npmUser":{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"},"directories":{},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/salty_0.2.5_1678319629506_0.6525594232116068"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-03-08T23:53:49.713Z","publish_time":1678319629713,"_cnpm_publish_time":1678319629713},"0.2.4":{"name":"@jsdoc/salty","version":"0.2.4","description":"A drop-in replacement for (some of) TaffyDB.","keywords":["jsdoc"],"author":{"name":"Jeff Williams","email":"jeffrey.l.williams@gmail.com"},"homepage":"https://jsdoc.app/","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"type":"commonjs","dependencies":{"lodash":"^4.17.21"},"engines":{"node":">=v12.0.0"},"gitHead":"7dee4094ce465eb28b915e27881030b5e9df89aa","_id":"@jsdoc/salty@0.2.4","_nodeVersion":"18.13.0","_npmVersion":"lerna/6.4.1/node@v18.13.0+x64 (darwin)","dist":{"shasum":"049d92e1814b7fdffde2564ecd5746fb46278d8c","size":8827,"noattachment":false,"key":"/@jsdoc/salty/-/@jsdoc/salty-0.2.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/@jsdoc/salty/download/@jsdoc/salty-0.2.4.tgz"},"_npmUser":{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"},"directories":{},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/salty_0.2.4_1677644353974_0.986819285781287"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-03-01T04:19:14.135Z","publish_time":1677644354135,"_cnpm_publish_time":1677644354135},"0.2.3":{"name":"@jsdoc/salty","version":"0.2.3","description":"A drop-in replacement for (some of) TaffyDB.","keywords":["jsdoc"],"author":{"name":"Jeff Williams","email":"jeffrey.l.williams@gmail.com"},"homepage":"https://jsdoc.app/","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"dependencies":{"lodash":"^4.17.21"},"engines":{"node":">=v12.0.0"},"gitHead":"a6f56e29f84fe78e5a2db3c2479a4094b5f9f538","_id":"@jsdoc/salty@0.2.3","_nodeVersion":"18.12.1","_npmVersion":"lerna/6.0.3/node@v18.12.1+x64 (darwin)","dist":{"shasum":"aab70c8756c1b98598bbc30867d3aa7a31b5c7d4","size":8820,"noattachment":false,"key":"/@jsdoc/salty/-/@jsdoc/salty-0.2.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/@jsdoc/salty/download/@jsdoc/salty-0.2.3.tgz"},"_npmUser":{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"},"directories":{},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/salty_0.2.3_1673900138146_0.9615370597813397"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-01-16T20:15:38.348Z","publish_time":1673900138348,"_cnpm_publish_time":1673900138348},"0.2.2":{"name":"@jsdoc/salty","version":"0.2.2","description":"A drop-in replacement for (some of) TaffyDB.","keywords":["jsdoc"],"author":{"name":"Jeff Williams","email":"jeffrey.l.williams@gmail.com"},"homepage":"https://jsdoc.app/","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"dependencies":{"lodash":"^4.17.21"},"engines":{"node":">=v12.0.0"},"gitHead":"22a935fb06706249451a73faab00da9d4650775e","_id":"@jsdoc/salty@0.2.2","_nodeVersion":"18.12.1","_npmVersion":"lerna/6.0.3/node@v18.12.1+x64 (darwin)","dist":{"shasum":"567017ddda2048c5ff921aeffd38564a0578fdca","size":8761,"noattachment":false,"key":"/@jsdoc/salty/-/@jsdoc/salty-0.2.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/@jsdoc/salty/download/@jsdoc/salty-0.2.2.tgz"},"_npmUser":{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"},"directories":{},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/salty_0.2.2_1670814023044_0.990938837619991"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-12-12T03:00:36.310Z","publish_time":1670814023203,"_cnpm_publish_time":1670814023203},"0.2.1":{"name":"@jsdoc/salty","version":"0.2.1","description":"A drop-in replacement for (some of) TaffyDB.","keywords":["jsdoc"],"author":{"name":"Jeff Williams","email":"jeffrey.l.williams@gmail.com"},"homepage":"https://jsdoc.app/","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"dependencies":{"lodash":"^4.17.21"},"engines":{"node":">=v12.0.0"},"gitHead":"b0ea115982c916087ca9aa2738d6e5c368914490","_id":"@jsdoc/salty@0.2.1","_nodeVersion":"18.12.0","_npmVersion":"lerna/6.0.1/node@v18.12.0+x64 (darwin)","dist":{"shasum":"815c487c859eca81ad3dfea540f830e1ff9d3392","size":8758,"noattachment":false,"key":"/@jsdoc/salty/-/@jsdoc/salty-0.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@jsdoc/salty/download/@jsdoc/salty-0.2.1.tgz"},"_npmUser":{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"},"directories":{},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/salty_0.2.1_1667361697172_0.9880719763190706"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-11-02T04:06:09.779Z","publish_time":1667361697366,"_cnpm_publish_time":1667361697366},"0.2.0":{"name":"@jsdoc/salty","version":"0.2.0","description":"A drop-in replacement for (some of) TaffyDB.","keywords":["jsdoc"],"author":{"name":"Jeff Williams","email":"jeffrey.l.williams@gmail.com"},"homepage":"https://jsdoc.app/","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"dependencies":{"lodash":"^4.17.21"},"engines":{"node":">=v18.12.0"},"gitHead":"12da2f7ecc542117058a144af136d0d7c1bc344e","_id":"@jsdoc/salty@0.2.0","_nodeVersion":"18.8.0","_npmVersion":"lerna/5.6.2/node@v18.8.0+x64 (darwin)","dist":{"shasum":"b1ef76a2ae5c7bf8cf4186b2fd38c5cb9a9e71ce","size":8763,"noattachment":false,"key":"/@jsdoc/salty/-/@jsdoc/salty-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@jsdoc/salty/download/@jsdoc/salty-0.2.0.tgz"},"_npmUser":{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"},"directories":{},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/salty_0.2.0_1667360951730_0.10748761652147465"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-11-02T03:56:08.495Z","publish_time":1667360951898,"_cnpm_publish_time":1667360951898},"0.1.1":{"name":"@jsdoc/salty","version":"0.1.1","description":"A drop-in replacement for (some of) TaffyDB.","keywords":["jsdoc"],"author":{"name":"Jeff Williams","email":"jeffrey.l.williams@gmail.com"},"homepage":"https://jsdoc.app/","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"dependencies":{"lodash":"^4.17.21"},"engines":{"node":">=v12.0.0"},"gitHead":"1577d7f033b5395450e133e0734cfb7c43e1be86","_id":"@jsdoc/salty@0.1.1","_nodeVersion":"18.8.0","_npmVersion":"lerna/5.6.2/node@v18.8.0+x64 (darwin)","dist":{"shasum":"6bb27d82c87289c7638a5b86fc50bdd2cb63acd4","size":8663,"noattachment":false,"key":"/@jsdoc/salty/-/@jsdoc/salty-0.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@jsdoc/salty/download/@jsdoc/salty-0.1.1.tgz"},"_npmUser":{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"},"directories":{},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/salty_0.1.1_1667186465022_0.46828752580459176"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-10-31T03:21:11.562Z","publish_time":1667186465186,"_cnpm_publish_time":1667186465186},"0.1.0":{"name":"@jsdoc/salty","version":"0.1.0","description":"A drop-in replacement for (some of) TaffyDB.","keywords":["jsdoc"],"author":{"name":"Jeff Williams","email":"jeffrey.l.williams@gmail.com"},"homepage":"https://jsdoc.app/","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/jsdoc/jsdoc.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"dependencies":{"lodash":"^4.17.21","object.hasown":"^1.1.1"},"engines":{"node":">=v12.0.0"},"gitHead":"2ca2aac425681986ea435fd3bde7e2019be8eda8","_id":"@jsdoc/salty@0.1.0","_nodeVersion":"18.8.0","_npmVersion":"lerna/5.6.2/node@v18.8.0+x64 (darwin)","dist":{"shasum":"03b67bafcd275b9c0bfcc1f11648cd011e718fc7","size":8718,"noattachment":false,"key":"/@jsdoc/salty/-/@jsdoc/salty-0.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@jsdoc/salty/download/@jsdoc/salty-0.1.0.tgz"},"_npmUser":{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"},"directories":{},"maintainers":[{"name":"hegemonic","email":"jeffrey.l.williams@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/salty_0.1.0_1667160669529_0.2717197537379954"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-10-30T20:11:15.298Z","publish_time":1667160669782,"_cnpm_publish_time":1667160669782}},"readme":"# Salty\n\nSalty is a drop-in replacement for (some of) [TaffyDB](https://github.com/typicaljoe/taffydb). It\nsupports only the TaffyDB features that JSDoc has historically used.\n\n## Why Salty?\n\nTaffyDB lets you query an array of objects, similar to the way you would query a database. JSDoc 3.x\nused TaffyDB to manage _doclets_, or objects that contain information about your code.\n\nSpecifically, after JSDoc parsed your code, it passed the doclets to your JSDoc template as a\nTaffyDB object. The template then used TaffyDB queries to remove unneeded doclets, and to retrieve\nthe doclets that were needed to generate documentation.\n\nSalty exists because TaffyDB is no longer maintained and is the subject of a\n[CVE](https://www.cve.org/CVERecord?id=CVE-2019-10790), causing TaffyDB to be flagged as a security\nrisk. There's no real security risk, but it sure looks like there is.\n\nAlso, TaffyDB [can't decide what license it uses](https://github.com/typicaljoe/taffydb/issues/166):\n\n- The [README](https://github.com/typicaljoe/taffydb/blame/d4870cee370abffe510ba598b02e4e7ad6af5d2a/README.md#L146-L156)\n  says that TaffyDB uses the [1-clause BSD License](https://opensource.org/licenses/BSD-1-Clause).\n- The [`package.json` file](https://github.com/typicaljoe/taffydb/blob/d4870cee370abffe510ba598b02e4e7ad6af5d2a/package.json#L32)\n  says that TaffyDB uses the [2-clause BSD License](https://opensource.org/licenses/BSD-2-Clause).\n- The [`License` file](https://github.com/typicaljoe/taffydb/blob/d4870cee370abffe510ba598b02e4e7ad6af5d2a/License)\n  says that TaffyDB uses the [MIT License](https://opensource.org/licenses/MIT).\n\nBy replacing TaffyDB with Salty, which uses the\n[Apache 2.0 License](https://github.com/jsdoc/jsdoc/blob/main/packages/jsdoc-salty/LICENSE), JSDoc\nresolved the purported security issue and the licensing uncertainty.\n\n## Use Salty in a JSDoc template\n\nStarting in version 4.0.0, JSDoc no longer uses the `taffydb` package as a dependency. If you use a\nJSDoc template that comes with JSDoc 4.0.0 or later, then you don't need to make any changes to the\ntemplate.\n\nOtherwise, your template might use the `taffydb` package. After you replace `taffydb` with\n`@jsdoc/salty`, your template should remain compatible with JSDoc 3.x.\n\nTo replace `taffydb` with `@jsdoc/salty`, do the following:\n\n1.  In the template's `publish.js` file, find the line or lines that require `taffydb`. They should\n    look similar to one of the following:\n\n    ```js\n    // Old-school, without object destructuring (might use `var` or `let` instead of `const`)\n    const taffy = require('taffydb').taffy;\n    // New-school, with object destructuring\n    const { taffy } = require('taffydb');\n    ```\n\n2.  Replace `taffydb` with `@jsdoc/salty`:\n\n    ```js\n    // Old-school, without object destructuring\n    const taffy = require('@jsdoc/salty').taffy;\n    // New-school, with object destructuring\n    const { taffy } = require('@jsdoc/salty');\n    ```\n\n3.  If the template has a `package.json` file that includes `taffydb` as a dependency, then remove\n    the `taffydb` dependency.\n\n4.  In the template's `package.json` file, add `@jsdoc/salty` as a dependency.\n\n5.  Run `npm install` in the template directory, then confirm that the template works as expected.\n\n## Supported TaffyDB features\n\nSalty supports only the TaffyDB features that have historically been used by JSDoc templates. That\nmeans that most TaffyDB functionality is missing.\n\nSpecifically, Salty lets you do the following:\n\n### Create a database\n\n```js\nlet db = taffy([{ a: 3 }, { a: 1, b: 'hello' }, { a: 7, b: 2 }]);\n```\n\n### Sort items in a database\n\nItems are sorted in place. Salty uses the following sort order, which differs from, but is more\npredictable than, TaffyDB:\n\n1.  Non-null, non-undefined values, in standard sort order\n2.  Null values\n3.  Explicitly undefined values: key is present, value is undefined\n4.  Implicitly undefined values: key is not present\n\n```js\n// Sort by the `a` property\ndb.sort('a');\n// Sort by the `a` property, then the `b` property\ndb.sort('a, b');\n```\n\n### Get items from a database\n\n```js\n// Get array of all items\nconst emptyMatcher = db().get();\n// Get array of items where `a` is either `1` or `3`\nconst arrayMatcher = db({ a: [1, 3] }).get();\n// Get array of items where `a` is `1` and `b` is `hello`\nconst multiMatcher = db({ a: 1 }, { b: 'hello' }).get();\n// Get array of items where `b` is undefined\nconst undefinedMatcher = db({ b: { isUndefined: true } }).get();\n// Get array of items where `b` starts with `he`\nconst leftMatcher = db({ b: { left: 'he' } }).get();\n// Get array of items where `b` ends with `lo`\nconst rightMatcher = db({ b: { right: 'lo' } }).get();\n```\n\n### Get items with a custom query function\n\nWithin the query function, `this` is bound to the current item. As a result, the custom query\nfunction cannot be an arrow function.\n\n```js\nfunction query() {\n  return this.a > 1;\n}\n\nconst items = db(query).get();\n// `items` is `[{ a: 3 }, { a: 7, b: 2 }]`\n```\n\n### Iterate over items in a database\n\n```js\n// Iterate over all items\ndb().each((item, i) => console.log(`'b' property at index ${i}: ${item.b}`));\n// Iterate over items where `b` equals `hello`\ndb({ b: 'hello' }).each((item) => console.log(`'a' property: ${item.a}`));\n```\n\n### Remove items from a database\n\n```js\n// Remove items where `a` equals `7`\ndb({ a: 7 }).remove(); // returns `1` (the number of items removed)\n// Remove items where `b` is undefined\ndb({ b: { isUndefined: true } }).remove(); // returns `1`\n// Remove items where `b` is defined\ndb({ b: { isUndefined: false } }).remove(); // returns `1`\n// Remove all items\ndb().remove();\n```\n\n## New features\n\nSalty probably won't gain any new features, ever. It exists solely to meet the requirements of\nJSDoc.\n\nThe exception is if a JSDoc template uses TaffyDB features that aren't available in Salty. If that's\nthe case, [create an issue](https://github.com/jsdoc/jsdoc/issues) with details about the template\nyou're using and the feature that's missing.\n\n## TaffyDB, JSDoc, and security\n\nIs TaffyDB a security risk? And has JSDoc ever used TaffyDB in a way that creates a security risk?\nThe answer to both questions is no.\n\nFirst, [CVE-2019-10790](https://www.cve.org/CVERecord?id=CVE-2019-10790) says that \"attackers can\nuse [the TaffyDB] vulnerability to access any data items in the DB.\" But JSDoc used TaffyDB only to\nstore data about your JavaScript code. That data is no more sensitive than the code itself.\n\nAlso, JSDoc doesn't persist the TaffyDB data to disk. It exists only while JSDoc is running.\n\nMost important of all, TaffyDB doesn't pretend to have any sort of access control. To the contrary,\nTaffyDB _intentionally_ makes it very easy to access all of the data in a DB. If your DB is stored\nin a variable named `db`, then calling `db().get()` retrieves all of the data in the DB.\n[This method is documented](https://taffydb.com/working_with_data.html) as the \"[p]refered [sic]\nmethod for extracting data.\" Because you can always access _all_ of the data, it's unclear why a bug\nthat lets you access _some_ of the data would create a security risk.\n\nSo Salty doesn't mitigate a security risk or fix a security issue. However, in general, it's not a\ngood idea to tell people to ignore CVEs; also, it can be difficult to convince your colleagues or\nemployer to ignore a specific CVE. For those reasons, it was worth the trouble to replace TaffyDB.\n\n## What's with the name?\n\nIt's a play on \"saltwater taffy.\" Hilarious!\n","_attachments":{},"homepage":"https://jsdoc.app/","bugs":{"url":"https://github.com/jsdoc/jsdoc/issues"},"license":"Apache-2.0"}