{"_id":"@depack/cache","_rev":"300026","name":"@depack/cache","description":"Computes Necessary Information To Cache A Module, And Allows To Check If It Has Been Updated.","dist-tags":{"latest":"1.2.1"},"maintainers":[{"name":"zvr","email":""}],"time":{"modified":"2024-01-31T16:06:08.000Z","created":"2019-04-04T18:01:10.476Z","1.2.1":"2020-02-26T17:44:38.264Z","1.2.0":"2020-02-26T17:38:23.604Z","1.1.0":"2019-08-02T23:50:55.481Z","1.0.0":"2019-04-04T18:01:10.476Z"},"users":{},"author":{"name":"Anton","email":"anton@adc.sh"},"repository":{"type":"git","url":"git://github.com/dpck/cache.git"},"versions":{"1.2.1":{"name":"@depack/cache","version":"1.2.1","description":"Computes Necessary Information To Cache A Module, And Allows To Check If It Has Been Updated.","main":"compile/index.js","module":"src/index.js","scripts":{"t":"zoroaster -a","test":"yarn t test/spec test/mask","spec":"yarn t test/spec","mask":"yarn t test/mask","test-compile":"yarn test -e test-compile","lib":"depack-dev src/depack -o compile/cache.js -a -c -p -s --source_map_include_content","lint":"eslint .","doc":"doc -o README.md -d -a -n _depack","d":"yarn-s d1 externs","d1":"typal types/index.js compile/index.js -u -t types","externs":"typal types/externs.js","e":"alanode"},"externs":"types/externs.js","repository":{"type":"git","url":"git://github.com/dpck/cache.git"},"typedefs":"typedefs.json","keywords":["cache","depack","modules","mtime","dependencies","update"],"author":{"name":"Anton","email":"anton@adc.sh"},"license":"MIT","bugs":{"url":"https://github.com/dpck/cache/issues"},"homepage":"https://www.compiler.page/","devDependencies":{"@depack/detect":"^1.1.0","@depack/split":"^1.0.0","alamode":"^3.5.2","documentary":"^1.37.0","erte":"^1.2.0","eslint-config-artdeco":"^1.0.1","fpj":"^1.3.1","resolve-dependency":"^1.0.3","static-analysis":"^2.1.1","temp-context":"^2.1.3","yarn-s":"^1.2.3","zoroaster":"^4.3.0"},"srcDependencies":{"erte":"^1.2.0","makepromise":"^3.1.0","resolve-dependency":"^1.0.3","static-analysis":"^1.7.1"},"licenseText":"MIT License\n\nCopyright (c) 2019 Art Deco Code Limited\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"@depack/cache@1.2.1","dist":{"shasum":"9e0aad89a449a4daa4d2730fa20beb2e5a4464dd","size":31448,"noattachment":false,"key":"/@depack/cache/-/@depack/cache-1.2.1.tgz","tarball":"http://name.csiicloud.com:7001/@depack/cache/download/@depack/cache-1.2.1.tgz"},"maintainers":[{"name":"zvr","email":""}],"_npmUser":{"name":"zvr","email":"anton@adc.sh"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cache_1.2.1_1582739078155_0.5466144183286479"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-24T16:06:11.839Z","publish_time":1582739078264,"_cnpm_publish_time":1582739078264},"1.2.0":{"name":"@depack/cache","version":"1.2.0","description":"Computes Necessary Information To Cache A Module, And Allows To Check If It Has Been Updated.","main":"compile/index.js","module":"src/index.js","scripts":{"t":"zoroaster -a","test":"yarn t test/spec test/mask","spec":"yarn t test/spec","mask":"yarn t test/mask","test-compile":"yarn test -e test-compile","lib":"depack-dev src/depack -o compile/cache.js -a -c -p -s --source_map_include_content","lint":"eslint .","doc":"doc -o README.md -d -a -n _depack","d":"yarn-s d1 externs","d1":"typal types/index.js compile/index.js -u -t types","externs":"typal types/externs.js","e":"alanode"},"externs":"types/externs.js","repository":{"type":"git","url":"git://github.com/dpck/cache.git"},"typedefs":"typedefs.json","keywords":["cache","depack","modules","mtime","dependencies","update"],"author":{"name":"Anton","email":"anton@adc.sh"},"license":"MIT","bugs":{"url":"https://github.com/dpck/cache/issues"},"homepage":"https://www.compiler.page/","devDependencies":{"@depack/detect":"^1.1.0","@depack/split":"^1.0.0","alamode":"^3.5.2","documentary":"^1.37.0","erte":"^1.2.0","eslint-config-artdeco":"^1.0.1","fpj":"^1.3.1","resolve-dependency":"^1.0.3","static-analysis":"^2.1.1","temp-context":"^2.1.3","yarn-s":"^1.2.3","zoroaster":"^4.3.0"},"srcDependencies":{"erte":"^1.2.0","makepromise":"^3.1.0","resolve-dependency":"^1.0.3","static-analysis":"^1.7.1"},"licenseText":"MIT License\n\nCopyright (c) 2019 Art Deco Code Limited\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"@depack/cache@1.2.0","dist":{"shasum":"805fdfa15315872c10a7477d0630650239baee33","size":31397,"noattachment":false,"key":"/@depack/cache/-/@depack/cache-1.2.0.tgz","tarball":"http://name.csiicloud.com:7001/@depack/cache/download/@depack/cache-1.2.0.tgz"},"maintainers":[{"name":"zvr","email":""}],"_npmUser":{"name":"zvr","email":"anton@adc.sh"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cache_1.2.0_1582738703500_0.16775063704760473"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-24T16:06:09.947Z","publish_time":1582738703604,"_cnpm_publish_time":1582738703604},"1.1.0":{"name":"@depack/cache","version":"1.1.0","description":"Computes Necessary Information To Cache A Module, And Allows To Check If It Has Been Updated.","main":"compile/index.js","module":"src/index.js","scripts":{"t":"zoroaster -a","test":"yarn t test/spec test/mask","spec":"yarn t test/spec","mask":"yarn t test/mask","test-compile":"ALAMODE_ENV=test-compile yarn test","compile":"depack-dev src/depack -o compile/cache.js -a -c -p -s -O 2018 --source_map_include_content","lint":"eslint .","doc":"NODE_DEBUG=doc doc -o README.md","d":"yarn-s d1 externs","d1":"typal compile/index.js -c","externs":"typal types/externs.js","e":"alanode"},"externs":"types/externs.js","repository":{"type":"git","url":"git://github.com/dpck/cache.git"},"keywords":["cache","depack","modules","mtime","dependencies","update"],"author":{"name":"Anton","email":"anton@adc.sh"},"license":"MIT","bugs":{"url":"https://github.com/dpck/cache/issues"},"homepage":"https://github.com/dpck/cache#readme","devDependencies":{"alamode":"^2.3.6","documentary":"^1.29.0","eslint-config-artdeco":"^1.0.1","temp-context":"^2.1.3","yarn-s":"^1.1.0","zoroaster":"^4.1.1-alpha"},"srcDependencies":{"erte":"^1.2.0","makepromise":"^3.1.0","resolve-dependency":"^1.0.3","static-analysis":"^1.7.1"},"licenseText":"MIT License\n\nCopyright (c) 2019 Art Deco Code Limited\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"@depack/cache@1.1.0","dist":{"shasum":"04e23b79c700c11872fc742e41e70705eb419ac2","size":30159,"noattachment":false,"key":"/@depack/cache/-/@depack/cache-1.1.0.tgz","tarball":"http://name.csiicloud.com:7001/@depack/cache/download/@depack/cache-1.1.0.tgz"},"maintainers":[{"name":"zvr","email":""}],"_npmUser":{"name":"zvr","email":"anton@adc.sh"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cache_1.1.0_1564789855333_0.6423502026214425"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-24T16:06:08.652Z","publish_time":1564789855481,"_cnpm_publish_time":1564789855481},"1.0.0":{"name":"@depack/cache","version":"1.0.0","description":"Computes Necessary Information To Cache A Module, And Allows To Check If It Has Been Updated.","main":"build/index.js","module":"src/index.js","scripts":{"t":"zoroaster -a","test":"yarn t test/spec test/mask","spec":"yarn t test/spec","mask":"yarn t test/mask","test-build":"ALAMODE_ENV=test-build yarn test","lint":"eslint .","doc":"NODE_DEBUG=doc doc documentary -o README.md","b":"alamode src -o build -s","d":"yarn-s d1","d1":"NODE_DEBUG=doc doc src/index.js -g","build":"yarn-s d b doc","e":"alanode"},"repository":{"type":"git","url":"git://github.com/dpck/cache.git"},"keywords":["cache","depack","modules","mtime","dependencies","update"],"author":{"name":"Anton","email":"anton@adc.sh"},"license":"MIT","bugs":{"url":"https://github.com/dpck/cache/issues"},"homepage":"https://github.com/dpck/cache#readme","devDependencies":{"alamode":"^1.9.1","documentary":"^1.23.2","eslint-config-artdeco":"^1.0.1","temp-context":"^2.1.2","yarn-s":"^1.1.0","zoroaster":"^3.11.3"},"dependencies":{"erte":"^1.1.7","makepromise":"^3.0.3","resolve-dependency":"^1.0.2","static-analysis":"^1.3.3"},"licenseText":"MIT License\n\nCopyright (c) 2019 Art Deco Code Limited\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"@depack/cache@1.0.0","dist":{"shasum":"7b8c7473dc96b410f719af80ae0be5ded9e55ad3","size":5373,"noattachment":false,"key":"/@depack/cache/-/@depack/cache-1.0.0.tgz","tarball":"http://name.csiicloud.com:7001/@depack/cache/download/@depack/cache-1.0.0.tgz"},"maintainers":[{"name":"zvr","email":""}],"_npmUser":{"name":"zvr","email":"anton@adc.sh"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cache_1.0.0_1554400870321_0.3875843947410522"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-24T16:06:06.602Z","publish_time":1554400870476,"_cnpm_publish_time":1554400870476}},"readme":"# @depack/cache\n\n[![npm version](https://badge.fury.io/js/%40depack%2Fcache.svg)](https://www.npmjs.com/package/@depack/cache)\n![Node.js CI](https://github.com/dpck/cache/workflows/Node.js%20CI/badge.svg)\n\n`@depack/cache` Computes Necessary Information To Cache A Module, And Allows To Check If It Has Been Updated. Does so with static analysis of source (mtimes), Node.JS built-ins (names) and package dependencies (versions).\n\n```sh\nyarn add @depack/cache\nnpm i @depack/cache\n```\n\n## Table Of Contents\n\n- [Table Of Contents](#table-of-contents)\n- [API](#api)\n- [`async compare(path: string, cache=: !Cache, log=: !Function): !CacheResult`](#async-comparepath-stringcache-cachelog-function-cacheresult)\n  * [`Cache`](#type-cache)\n  * [`CacheEntry`](#type-cacheentry)\n  * [`CacheResult`](#type-cacheresult)\n- [No Cache](#no-cache)\n- [Mtime Change](#mtime-change)\n- [Hash Update](#hash-update)\n- [Copyright](#copyright)\n\n<p align=\"center\"><a href=\"#table-of-contents\">\n  <img src=\"/.documentary/section-breaks/0.svg?sanitize=true\">\n</a></p>\n\n## API\n\nThe package is available by importing its default function:\n\n```js\nimport compare from '@depack/cache'\n```\n\n<p align=\"center\"><a href=\"#table-of-contents\">\n  <img src=\"/.documentary/section-breaks/1.svg?sanitize=true\">\n</a></p>\n\n## <code>async <ins>compare</ins>(</code><sub><br/>&nbsp;&nbsp;`path: string,`<br/>&nbsp;&nbsp;`cache=: !Cache,`<br/>&nbsp;&nbsp;`log=: !Function,`<br/></sub><code>): <i>!CacheResult</i></code>\nChecks the entry file's `mtime`, calculates its dependencies and compare against the values stored in the cache object. When the result is negative, the cache object must be updated with the result returned by the function.\n\n - <kbd><strong>path*</strong></kbd> <em>`string`</em>: The path to the JS file.\n - <kbd>cache</kbd> <em><code><a href=\"#type-cache\" title=\"Interface for the cache object.\">!Cache</a></code></em> (optional): Current cache object.\n - <kbd>log</kbd> <em>`!Function`</em> (optional): The function used to display what changes have been made to the dependencies.\n\n<code>!Object&lt;string, <a href=\"#type-cacheentry\" title=\"A single entry in the cache.\">CacheEntry</a>&gt;</code> __<a name=\"type-cache\">`Cache`</a>__: Interface for the cache object.\n\n\n__<a name=\"type-cacheentry\">`CacheEntry`</a>__: A single entry in the cache.\n\n\n|    Name    |             Type              |                                                 Description                                                 |\n| ---------- | ----------------------------- | ----------------------------------------------------------------------------------------------------------- |\n| __mtime*__ | <em>number</em>               | The `mtime` of the source file.                                                                             |\n| __hash*__  | <em>!Array&lt;string&gt;</em> | The analysis array containing strings with internal, external and built-in dependencies and their versions. |\n\n\n__<a name=\"type-cacheresult\">`CacheResult`</a>__: The return type of the program.\n\n\n|     Name     |             Type              |                                              Description                                               |\n| ------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------ |\n| __result*__  | <em>boolean</em>              | Whether the result of the comparison was successful.                                                   |\n| reason       | <em>string</em>               | The reason for the failed comparison. Can be either: `NO_CACHE`, `MTIME_CHANGE`, `HASH_CHANGE`.        |\n| mtime        | <em>number</em>               | The `mtime` of when the entry file was changed.                                                        |\n| currentMtime | <em>number</em>               | The `mtime` from the cache passed to the function.                                                     |\n| hash         | <em>!Array&lt;string&gt;</em> | The analysis array that is used for comparison and user-friendly display of what dependencies changed. |\n| __md5*__     | <em>string</em>               | The `md5` of the hash array.                                                                           |\n\nThere are multiple scenarios when using this package. Examples of each are given in the examples below.\n\n<p align=\"center\"><a href=\"#table-of-contents\">\n  <img src=\"/.documentary/section-breaks/2.svg?sanitize=true\" width=\"25\">\n</a></p>\n\n## No Cache\n\nThe first instance is when the cache entry does not exist. The cache can be stored in a `json` file, and read with the `require` function (but the `delete require.cache[path]` must be called first), or using `fs.readFileSync` or any other read method and then parsing the cache.\n\n_For example, given the following dir:_\n\n`example/source/index.js`\n```js\nimport { homedir } from 'os'\nimport dep from './dep'\nimport staticAnalysis from 'static-analysis'\nimport myPackage from 'myPackage'\n```\n`example/source/dep.js`\n```js\nexport default () => {\n  console.log('dep')\n}\n```\n\n_The `compare` method can be called in the following way:_\n\n```js\nimport compare from '@depack/cache'\n\n// returns empty cache\nconst readCache = () => ({})\n// updates cache\nconst writeCache = (entry) => {\n  const current = readCache()\n  const updated = { ...current, ...entry }\n  // fs.writeFileSync('cache.json', JSON.stringify(updated, null, 2))\n}\n\n;(async () => {\n  const cache = readCache()\n  const modulePath = 'example/source/index.js'\n  const res = await compare(modulePath, cache)\n  if (res.reason == 'NO_CACHE') {\n    console.log(res)\n    // do some logic\n    const { mtime, hash } = res\n    const cacheToWrite = {\n      [modulePath]: {\n        mtime, hash,\n      },\n    }\n    writeCache(cacheToWrite)\n  }\n})()\n```\n\n_It will return the result that indicates that the cache does not exist, and provide all information that should be written in cache so that it can be retrieved next time:_\n\n```js\n{\n  result: false,\n  reason: 'NO_CACHE',\n  mtime: 1554399982000,\n  hash: [\n    'os',\n    'example/source/dep.js 1554389422000',\n    'static-analysis 2.1.1',\n    'myPackage 1.0.0'\n  ],\n  md5: '980d26e614a016566682df0ddd47bb6f'\n}\n```\n\n<p align=\"center\"><a href=\"#table-of-contents\">\n  <img src=\"/.documentary/section-breaks/3.svg?sanitize=true\" width=\"25\">\n</a></p>\n\n## Mtime Change\n\nIf the module's `mtime` has changed, the result will be false, with the new `mtime` returned so that it can be updated. The current implementation is coupled to `mtime` logic, therefore when transferring onto other machines via _git_ for example, the cache will fail. It might be improved in the future.\n\n```js\nlet cache = {}\nconst { mtime, hash } = await compare(path, cache)\ncache[path] = { mtime, hash }\nawait update()\nconst res = await compare(path, cache)\nconsole.log(res)\n```\n```js\n{\n  result: false,\n  reason: 'MTIME_CHANGE',\n  mtime: 1582738908000,\n  hash: [\n    'os',\n    'example/source/dep.js 1554389422000',\n    'static-analysis 2.1.1',\n    'myPackage 1.0.0'\n  ],\n  currentMtime: 1582738907000,\n  md5: '980d26e614a016566682df0ddd47bb6f'\n}\n```\n\n<p align=\"center\"><a href=\"#table-of-contents\">\n  <img src=\"/.documentary/section-breaks/4.svg?sanitize=true\" width=\"25\">\n</a></p>\n\n## Hash Update\n\nThe hash is an array with strings that show what version of a dependency/file are used by the entry source file. They are saved in cache in the full array form rather than `md5` itself so that it is possible to log about when the changes were made and to which files. The changes will be logged using the function provided (`console.log` by default).\n\n```js\nlet cache = {}\nconst { mtime, hash } = await compare(path, cache)\ncache[path] = { mtime, hash }\nawait update()\nconst res = await compare(path, cache, console.error)\nconsole.log(res)\n```\n`stderr`\n```diff\n+ example/temp/source/dep.js 2/26/2020, 20:41:50\n+ myPackage 1.0.1\n+ path \n- example/temp/source/dep.js 2/26/2020, 20:41:49\n- myPackage 1.0.0\n```\n\n\n```js\n{\n  result: false,\n  mtime: 1582738909000,\n  hash: [\n    'os',\n    'example/temp/source/dep.js 1582738910000',\n    'static-analysis 2.1.1',\n    'myPackage 1.0.1',\n    'path'\n  ],\n  reason: 'HASH_CHANGE',\n  md5: '8ee4ba1189bd9cae5132e49a0d48856c'\n}\n```\n\n<p align=\"center\"><a href=\"#table-of-contents\">\n  <img src=\"/.documentary/section-breaks/5.svg?sanitize=true\">\n</a></p>\n\n## Copyright\n\n<table>\n  <tr>\n    <th>\n      <a href=\"https://www.artd.eco\">\n        <img width=\"100\" src=\"https://raw.githubusercontent.com/wrote/wrote/master/images/artdeco.png\"\n          alt=\"Art Deco\">\n      </a>\n    </th>\n    <th>© <a href=\"https://www.artd.eco\">Art Deco™</a> for <a href=\"https://artd.eco/depack\">Depack</a> 2020</th>\n  </tr>\n</table>\n\n<p align=\"center\"><a href=\"#table-of-contents\">\n  <img src=\"/.documentary/section-breaks/-1.svg?sanitize=true\">\n</a></p>","_attachments":{},"homepage":"https://www.compiler.page/","bugs":{"url":"https://github.com/dpck/cache/issues"},"license":"MIT"}