{"_id":"@ashnazg/cachomatic","_rev":"3-156219853b5d445f4865c71617867d38","name":"@ashnazg/cachomatic","dist-tags":{"latest":"0.0.3"},"versions":{"0.0.1":{"name":"@ashnazg/cachomatic","version":"0.0.1","description":"mem/disk app-side caching w/expiration","main":"cachomatic.js","author":{"name":"Alexander Mathews xander@ashnazg.com"},"license":"MIT","dependencies":{"q":"^1.5.1"},"_id":"@ashnazg/cachomatic@0.0.1","dist":{"shasum":"77ce604cc5ed66eca620808ec40068b3ef63b5e0","integrity":"sha512-fl5A0udVUlempYXMHGe8ItJLT4i42hFB4U6KVK2V7MPgwALuudeXV4+HcD2k+XxgWTDBljmSVNP6+wF1jEjLdA==","tarball":"https://registry.npmjs.org/@ashnazg/cachomatic/-/cachomatic-0.0.1.tgz","fileCount":6,"unpackedSize":10631,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfuDBnCRA9TVsSAnZWagAAwl0P/A23580mUjPrC5EIsaxg\nxMnXc2AaMOuhw1cHql5M5pJpTH8XMXvlDsstp/hYbPS/EuaHyigNTuVClh25\nCD1ZD461ud6pwmiaxQ55vsCDHaJ0dvsf8UQNz298LKNC6B92SoZqTuYJZudz\nLvM0VqqcYje2b1brv+Sm1X1WuCks+vKfW7V6coX+ILAOooaLEMnp1PTufC4f\nCivH9q/OiONEy3BEef9e4Bk1AexfTi0PhgvAPpl4yeZxa2YLzP0QQVCaH6ll\nJrOoiHvcku9KwvzvsAZLKroWZ/AvycQS780m/7+QcRSPmsPS7L3dKisUNuSh\nzPI1EkhLtYSFd/wi0Y7IxNMR3dpT6feWZte6lhU+4HDj4v1FRviPOAap7XKs\n2PCGHHcdW/6oD54BGQKD6xblGz5b8LmAFHkKlJekbPLVp6HBrtFa4DxT/Ayw\n3lYXaurrcM9dREG34QX+c+5/+2rmKD2gjK249Bv1WRoFUsQ/7T76PeQi2erB\nsStuA5arlaTmXl+J3EZor6N9F15T2H5St3bTrIvaLISjxDr0aVfq/p0gmbL1\nh0N99pXyYAMJzer4mur3FGZOEuOu0IoK46ZeNGao53oW/jxcUHI/OTo1wrMe\nVY1badvTWnF2L8C1qZqA45N6+AHSoRgYM75TbUdczGjAKL29wZjvMeUn4g1x\nx6M6\r\n=HC5d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBmiYhxg50SS1aechMjmV91ATphH2/uSL9DNyIIoqhEwIhAJyDYdCdIfhzPQoKANYj+K+7iNWfLWjiVZsSOSeWxAIZ"}]},"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cachomatic_0.0.1_1605906534779_0.25310960613148015"},"_hasShrinkwrap":false},"0.0.2":{"name":"@ashnazg/cachomatic","version":"0.0.2","description":"mem/disk app-side caching w/expiration","main":"cachomatic.js","author":{"name":"Alexander Mathews xander@ashnazg.com"},"license":"MIT","dependencies":{"q":"^1.5.1"},"_id":"@ashnazg/cachomatic@0.0.2","dist":{"shasum":"457d72162b318120660a60b7360053386aecb494","integrity":"sha512-eFilMj75Zg91WU9VMXqielwi0VoAIan3jfymG7qjUs1d3uGAQ4wiGAms4UN8kM/lot6ES3A57shNWdGr2KYTzw==","tarball":"https://registry.npmjs.org/@ashnazg/cachomatic/-/cachomatic-0.0.2.tgz","fileCount":6,"unpackedSize":10738,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfu/fECRA9TVsSAnZWagAAdSUQAItLC55bX/1sPOqII4qT\nLmiMxnCNZNxk8I7OWBWBSe/loAU8Z+JUoS9AzDeBgoS4jkYTPc6lyZ7emFn9\nWPIRXKkANLv96XP8xeDUKIycnWeP2xSdk2OkfH4He84VjaFFhdgpPcoyfnxv\nBZX088gCKrgyBAn+2yOktd2VxGz0fB08sZZoKtw+cjmhC3m00c2bt9kmV0k9\nTj6OkDljXZW89of8STQo6zbgQyP7M7sqEQVVzoF3JiAOaIx7iXdEGvtp1PaV\nKNIoL7zyXgyi6iTEIqjYdgsivpevX53mkJuLhbj6t6ovP4N4t2p5KJeb6e2u\nt0IaRN6YVnXYVfj85/AXul1PF1PpSkRlP/bQ5pLJi3jpv246O1d0QoE3ptDl\nREYIK+MGPLH+tfW47h/Zge3LHsNbe2l0uZOhWIYgJEhrrccUujjlPXNTUbeP\nIHKTXpcmSca9Zssp6UCmyH7iQCKRAemd9W4KLFLe8jMaebBMDfgCcrNbxB4V\nt1FuNScMyvz9Ua9iQ6nF/0pwfj7bwAoi6N5ulsiT0I8f4joFtBaPEQ/pFtnY\nRYM06ee9/go5f3zrFQ0p1Kmj/yFrQXfvWt0CUt1Ty5vbTjeLHlxKFyO4hvGl\nWne1UrIybaBzLtsXa0nZbXqRxj00JLCAJvcqjX5HnDh6xYAgLfPjxTMvyV1S\nwBuX\r\n=Y/pw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHK4G32UCHERpjtP7afw9bXUzyZBdcsnxQEk2UhlPxNsAiB/GBiZCgllmXJyw/0VvX4Ps26xGGgBdhA7LZnK6y0hIw=="}]},"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cachomatic_0.0.2_1606154180313_0.47461008414274874"},"_hasShrinkwrap":false},"0.0.3":{"name":"@ashnazg/cachomatic","version":"0.0.3","description":"mem/disk app-side caching w/expiration","main":"cachomatic.js","author":{"name":"Alexander Mathews xander@ashnazg.com"},"license":"MIT","dependencies":{"q":"^1.5.1"},"_id":"@ashnazg/cachomatic@0.0.3","dist":{"shasum":"ccc2655de37dd87c29913456266b4c6133a2b136","integrity":"sha512-Nv95Wu9EIq2Yo52n8PFWVSxdYMxn/rUuKRn+2WJaCllIMH+mLiZ10a4bpsxPFCq/n78iDxfMNa4fBp7NGx1LcQ==","tarball":"https://registry.npmjs.org/@ashnazg/cachomatic/-/cachomatic-0.0.3.tgz","fileCount":6,"unpackedSize":10843,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2vlsCRA9TVsSAnZWagAA7uQP/jXgapPbgF1y1lrIElsQ\nBzBb427uRCx8E/dqBM+R768YQsx7V4IEltbsNXw+k3UF8OA/gPYpdA7L4bXN\n+nEgmMD0hC7ucPeZo6+hljZJJwUPH6jyUPnC0f71v5exochkeP+kOwrRSEEp\nK9armLGLjixCBsOENsMtHboTc0PuI6V9ACBaV7YRXTiYO23sazwoiNgYR+28\nzhq2lPW3ca/Ayfi5d562z8tLi8EhZRJZ0m7KqHsVz9wopSJRYYFfE4F8X/i6\nwHzjcP68pb4lPt4qgfSYQXxSMGxzZvc/2DtFbUM+fEu/SDeH6AQ2grZYkURs\nodOcIIIWfwzUxM0fH4PGsLar9q1oRFgmt6dfkhp0O9km3V2NEaO70YEnYi3o\nyFIDQSnP7shtwKAisn0MwhSpPXso/geKV6LetFbcobJvU8V7BTHEW8fiWqRh\nTkdZn4f/u9p8+x3NmPqSVkvXHbndGDMt9vvi+8sM2bfplneL+URswjdig8bL\ndlgEQubJnkwQN8LpaCsXDUcCJWiRKjJhpfK+OThZMI/DIUR5QLNhylriUesI\nizkkqfNgrMcfZeusyQtuDcS4QK9nh+MmRsAIMDXgPXCbHRjKkUC1kLWw+5aG\nbI52K+cvL/KJdMlBcsqzSoLYgPKbJcQuDhH1RxFb/Y/iJ7d/kvXq4TmNqsF4\nQZdH\r\n=lozu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBSbo22/whnlDu8tuLhbcYs9g8Uri+v77jhZ2g9/8XKYAiEAjiZ66+itFaFigNEnXGDo15gdfVox3h5S5ApUnC1yGrI="}]},"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cachomatic_0.0.3_1608186219895_0.417539595136853"},"_hasShrinkwrap":false}},"time":{"created":"2020-11-20T21:08:54.615Z","0.0.1":"2020-11-20T21:08:55.001Z","modified":"2022-04-04T15:45:50.389Z","0.0.2":"2020-11-23T17:56:20.515Z","0.0.3":"2020-12-17T06:23:40.054Z"},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"description":"mem/disk app-side caching w/expiration","author":{"name":"Alexander Mathews xander@ashnazg.com"},"license":"MIT","readme":"---\ntitle: \"@ashnazg/cachomatic\"\nsidebar_label: \"cachomatic\"\n---\n<!--\nnote to self: it lives at ~/projects/ashnazg-npm/cachomatic/cachomatic.js\n-->\n\nI wrote a expiring-memoization decorator that has an optional disk-backed layer.\n\nIt understands promises, and excludes any non-serializable part of the underlying function's params from the cache-id.\n\n## Usage\n```\nvar {createCacheAround} = require('@ashnazg/cachomatic');\n\nasync function doWork(...whatever_args) {\n\treturn {whatever:'result'};\n}\n\n// this'll create a memory-backed cache who's entries expire after 1 day.\nvar doLessWork = createCacheAround({func:doWork});\nvar slowly_answered = await doLessWork('question');\nvar immediately_answered = await doLessWork('question');\n\n// there's a \"ttl\" conf for setting the expiration:\nvar doLeastWork = createCacheAround({\n\tfunc:doWork,\n\tttl: {\n\t\t// as long as at least _one_ of these fields is given, it's a valid TTL\n\t\tweeks: 1,\n\t\tdays: 2,\n\t\thours: 7,\n\t\tminutes: 5,\n\t\tseconds: 12,\n\t\tms: 42\n\t},\n\t/*optional onLethal(err) {handle errors yourself instead of exiting}*/\n});\n```\n\n## disk-backed\nMemory-only is good for many production cases, but as a dev, I hate having the cache empty every time I touch the server code.\n\nIf you create your wrapper with `{path: '/tmp/convenient-label'}` it'll use that as a prefix for creating one file per cache entry, resembling `$path-$integer`.\n```\nvar persistReboot = createCacheAround({\n\tfunc:doWork,\n\tpath: '/tmp/cachomatic-demo',\n\tttl: { hours: 8 }\n});\n\n```\n\n## Release 0.0.3\nthe optional hook onLethal() wasn't being called.\n\n## Release 0.0.2\nDespite the docs saying they're the same, I'm having better luke with `require('fs/promises')` than I am with `require('fs').promises`\n\n## Release 0.0.1\nFirst release. is passing my test harness, but hasn't been used in a real system yet.\n","readmeFilename":"README.md"}