{"_id":"@b4moss/cachian","_rev":"5-a7d0ace57bf9574d17a4c7408fca58bf","name":"@b4moss/cachian","dist-tags":{"latest":"0.5.0"},"versions":{"0.1.0":{"name":"@b4moss/cachian","version":"0.1.0","keywords":["cache","localStorage","indexedDB","browser","ttl"],"license":"MIT","_id":"@b4moss/cachian@0.1.0","maintainers":[{"name":"b4m-oss","email":"kohki.shikata@gmail.com"}],"homepage":"https://github.com/b4moss/cachian#readme","bugs":{"url":"https://github.com/b4moss/cachian/issues"},"dist":{"shasum":"01d2e1ce4803df90ed1c681fb18f7c1f4e15b8d9","tarball":"https://registry.npmjs.org/@b4moss/cachian/-/cachian-0.1.0.tgz","fileCount":15,"integrity":"sha512-Rhtrnfbgl1gmcDtwgbBNl/LR689PsbShDFOZfDefD4X/XvmpM/pWo7vC+6mWOyA8iosxIZp3wL1Pcqn2rfvIKw==","signatures":[{"sig":"MEUCIQCH4eALxhMCi4peeEEbQkA2PWXL3eU6kYOHgzED8/HtfgIgS4Tt9Ts/noC7IEsVdXMPp2DY7Ai3Z+RjQ7TRmA26ycU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48806},"main":"./dist/cachian.cjs","type":"module","types":"./dist/src/index.d.ts","unpkg":"./dist/cachian.iife.min.js","module":"./dist/cachian.js","engines":{"node":">=24"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/cachian.js","require":"./dist/cachian.cjs"}},"gitHead":"6c214e1c23442ab40e422f65867234dca80796fe","scripts":{"dev":"vite build --watch","test":"vitest run --coverage","build":"node ./scripts/build.mjs"},"_npmUser":{"name":"b4m-oss","email":"kohki.shikata@gmail.com"},"jsdelivr":"./dist/cachian.iife.min.js","repository":{"url":"git+https://github.com/b4moss/cachian.git","type":"git"},"_npmVersion":"10.9.7","description":"Universal browser cache helper with localStorage and IndexedDB backends","directories":{},"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","vitest":"^4.1.10","typescript":"^5.9.3","fake-indexeddb":"^6.2.5","vite-plugin-dts":"^5.0.3","@vitest/coverage-v8":"^4"},"_npmOperationalInternal":{"tmp":"tmp/cachian_0.1.0_1788592084887_0.5337159613447262","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@b4moss/cachian","version":"0.2.0","keywords":["cache","localStorage","indexedDB","browser","ttl"],"license":"MIT","_id":"@b4moss/cachian@0.2.0","maintainers":[{"name":"b4m-oss","email":"kohki.shikata@gmail.com"}],"homepage":"https://github.com/b4moss/cachian#readme","bugs":{"url":"https://github.com/b4moss/cachian/issues"},"dist":{"shasum":"16cb2a20a5541d811d6f43fc50ad96ae9736d651","tarball":"https://registry.npmjs.org/@b4moss/cachian/-/cachian-0.2.0.tgz","fileCount":15,"integrity":"sha512-UNOQxR2S27W1jyYzs7bmILeqLGnjTayp630J6GzJ/QupOep5jezf/8tf4bkwvb9xeihpRrKPSiwBiD4h5x64Pg==","signatures":[{"sig":"MEUCIDFwo2O9bsJG3QGoSjmnYsgAz6KRnWSR+F7C5yOk1gPVAiEAuGURaDE7eebXdHl5rIiZtMfxXhXpcZ6eO9lzlykzMyA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@b4moss%2fcachian@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48838},"main":"./dist/cachian.cjs","type":"module","types":"./dist/src/index.d.ts","unpkg":"./dist/cachian.iife.min.js","module":"./dist/cachian.js","engines":{"node":">=24"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/cachian.js","require":"./dist/cachian.cjs"}},"gitHead":"3a2d3d4394ba3d501c7e9be58cb49e2aa710e066","scripts":{"dev":"vite build --watch","test":"vitest run --coverage","build":"node ./scripts/build.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:22c74e75-bfb9-454c-8979-f2802e7b8daa"}},"jsdelivr":"./dist/cachian.iife.min.js","repository":{"url":"git+https://github.com/b4moss/cachian.git","type":"git"},"_npmVersion":"12.0.2","description":"Universal browser cache helper with localStorage and IndexedDB backends","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","vitest":"^4.1.10","typescript":"^5.9.3","fake-indexeddb":"^6.2.5","vite-plugin-dts":"^5.0.3","@vitest/coverage-v8":"^4"},"_npmOperationalInternal":{"tmp":"tmp/cachian_0.2.0_1788593999716_0.43914972463844015","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@b4moss/cachian","version":"0.3.1","keywords":["cache","localStorage","indexedDB","browser","ttl"],"license":"MIT","_id":"@b4moss/cachian@0.3.1","maintainers":[{"name":"b4m-oss","email":"kohki.shikata@gmail.com"}],"homepage":"https://github.com/b4moss/cachian#readme","bugs":{"url":"https://github.com/b4moss/cachian/issues"},"dist":{"shasum":"6e8812fbcbafe1acd0829ac1f5023ac1ef2635c0","tarball":"https://registry.npmjs.org/@b4moss/cachian/-/cachian-0.3.1.tgz","fileCount":16,"integrity":"sha512-xQOPA+ie+yjMZVmzNJIvxPOlDF2ypLLSRFWRWO7AvjtGDWKHhaGss3p4OlF6OFGsgL6c27OS0f+kFZzYhHS6sg==","signatures":[{"sig":"MEQCIH3vzre9noHqreWjcX3nRNlmJqpWQJoJ8WxVUqUkMS/mAiAQ4JJtHYHhWxZ+7+OzrhgiStBjOoUauRg5g4GruvOmqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@b4moss%2fcachian@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":66990},"main":"./dist/cachian.cjs","type":"module","types":"./dist/src/index.d.ts","unpkg":"./dist/cachian.iife.min.js","module":"./dist/cachian.js","engines":{"node":">=24"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/cachian.js","require":"./dist/cachian.cjs"}},"gitHead":"613ca872c3b9ae147ebba19f161e700d205d24fb","scripts":{"dev":"vite build --watch","test":"vitest run --coverage","build":"node ./scripts/build.mjs","ci:local":"act pull_request -W .github/workflows/ci.yml","ci:local:fallback":"npm ci && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:22c74e75-bfb9-454c-8979-f2802e7b8daa"}},"jsdelivr":"./dist/cachian.iife.min.js","repository":{"url":"git+https://github.com/b4moss/cachian.git","type":"git"},"_npmVersion":"12.0.2","description":"Universal browser cache helper with localStorage and IndexedDB backends","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","vitest":"^4.1.10","typescript":"^5.9.3","fake-indexeddb":"^6.2.5","vite-plugin-dts":"^5.0.3","@vitest/coverage-v8":"^4"},"_npmOperationalInternal":{"tmp":"tmp/cachian_0.3.1_1788598639012_0.6148929555391223","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@b4moss/cachian","version":"0.4.0","keywords":["cache","localStorage","indexedDB","browser","ttl"],"license":"MIT","_id":"@b4moss/cachian@0.4.0","maintainers":[{"name":"b4m-oss","email":"kohki.shikata@gmail.com"}],"homepage":"https://github.com/b4moss/cachian#readme","bugs":{"url":"https://github.com/b4moss/cachian/issues"},"dist":{"shasum":"88287850cbfc984f97f055b4b870db0fbf632ebc","tarball":"https://registry.npmjs.org/@b4moss/cachian/-/cachian-0.4.0.tgz","fileCount":61,"integrity":"sha512-KgdxDb2PhVE0nvaJO2peTBwQ/PGtsaBIuiU/0sh0qRCdvEM24t2qWadAxEAJyr1Pw5MuN/7G5AgD0EGiEXeU1g==","signatures":[{"sig":"MEQCIBe3vxmGkFTQ/F8uZZwxr6Yk9SrdvIIAjX92GC4tzDF/AiAlPiILLtzs/eCPqmxWbvLJHS19YQTczQl1RUbge/SuIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@b4moss%2fcachian@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":86109},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","unpkg":"./dist/cachian.iife.min.js","module":"./dist/index.js","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./methods/get":{"types":"./dist/methods/get.d.ts","import":"./dist/methods/get.js","require":"./dist/methods/get.cjs"},"./methods/has":{"types":"./dist/methods/has.d.ts","import":"./dist/methods/has.js","require":"./dist/methods/has.cjs"},"./methods/set":{"types":"./dist/methods/set.d.ts","import":"./dist/methods/set.js","require":"./dist/methods/set.cjs"},"./methods/clear":{"types":"./dist/methods/clear.d.ts","import":"./dist/methods/clear.js","require":"./dist/methods/clear.cjs"},"./methods/purge":{"types":"./dist/methods/purge.d.ts","import":"./dist/methods/purge.js","require":"./dist/methods/purge.cjs"},"./methods/remove":{"types":"./dist/methods/remove.d.ts","import":"./dist/methods/remove.js","require":"./dist/methods/remove.cjs"},"./methods/update":{"types":"./dist/methods/update.d.ts","import":"./dist/methods/update.js","require":"./dist/methods/update.cjs"},"./methods/upsert":{"types":"./dist/methods/upsert.d.ts","import":"./dist/methods/upsert.js","require":"./dist/methods/upsert.cjs"},"./drivers/indexedDB":{"types":"./dist/drivers/indexedDB.d.ts","import":"./dist/drivers/indexedDB.js","require":"./dist/drivers/indexedDB.cjs"},"./drivers/localStorage":{"types":"./dist/drivers/localStorage.d.ts","import":"./dist/drivers/localStorage.js","require":"./dist/drivers/localStorage.cjs"}},"gitHead":"baf26e631359571d93a7be76842f070d36c11bf1","scripts":{"dev":"vite build --watch","test":"vitest run --coverage","build":"node ./scripts/build.mjs","ci:local":"act pull_request -W .github/workflows/ci.yml","ci:local:fallback":"npm ci && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:22c74e75-bfb9-454c-8979-f2802e7b8daa"}},"jsdelivr":"./dist/cachian.iife.min.js","repository":{"url":"git+https://github.com/b4moss/cachian.git","type":"git"},"_npmVersion":"12.0.2","description":"Universal browser cache helper with localStorage and IndexedDB backends","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","vitest":"^4.1.10","typescript":"^5.9.3","fake-indexeddb":"^6.2.5","vite-plugin-dts":"^5.0.3","@vitest/coverage-v8":"^4"},"_npmOperationalInternal":{"tmp":"tmp/cachian_0.4.0_1788675019428_0.6641771369485727","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@b4moss/cachian","version":"0.5.0","description":"Universal browser cache helper with localStorage and IndexedDB backends","type":"module","sideEffects":false,"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","unpkg":"./dist/cachian.iife.min.js","jsdelivr":"./dist/cachian.iife.min.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./drivers/localStorage":{"types":"./dist/drivers/localStorage.d.ts","import":"./dist/drivers/localStorage.js","require":"./dist/drivers/localStorage.cjs"},"./drivers/indexedDB":{"types":"./dist/drivers/indexedDB.d.ts","import":"./dist/drivers/indexedDB.js","require":"./dist/drivers/indexedDB.cjs"},"./methods/get":{"types":"./dist/methods/get.d.ts","import":"./dist/methods/get.js","require":"./dist/methods/get.cjs"},"./methods/set":{"types":"./dist/methods/set.d.ts","import":"./dist/methods/set.js","require":"./dist/methods/set.cjs"},"./methods/update":{"types":"./dist/methods/update.d.ts","import":"./dist/methods/update.js","require":"./dist/methods/update.cjs"},"./methods/upsert":{"types":"./dist/methods/upsert.d.ts","import":"./dist/methods/upsert.js","require":"./dist/methods/upsert.cjs"},"./methods/remove":{"types":"./dist/methods/remove.d.ts","import":"./dist/methods/remove.js","require":"./dist/methods/remove.cjs"},"./methods/has":{"types":"./dist/methods/has.d.ts","import":"./dist/methods/has.js","require":"./dist/methods/has.cjs"},"./methods/clear":{"types":"./dist/methods/clear.d.ts","import":"./dist/methods/clear.js","require":"./dist/methods/clear.cjs"},"./methods/purge":{"types":"./dist/methods/purge.d.ts","import":"./dist/methods/purge.js","require":"./dist/methods/purge.cjs"}},"scripts":{"dev":"vite build --watch","build":"node ./scripts/build.mjs","test":"vitest run --coverage","ci:local":"act pull_request -W .github/workflows/ci.yml","ci:local:fallback":"npm ci && npm test && npm run build"},"keywords":["cache","localStorage","indexedDB","browser","ttl"],"license":"MIT","engines":{"node":">=24"},"repository":{"type":"git","url":"git+https://github.com/b4moss/cachian.git"},"publishConfig":{"access":"public","provenance":true},"devDependencies":{"@vitest/coverage-v8":"^4","fake-indexeddb":"^6.2.5","typescript":"^5.9.3","vite":"^8.2.2","vite-plugin-dts":"^5.0.3","vitest":"^4.1.10"},"gitHead":"36ea8b70a95e69e09e267963d84977666ef30d9f","_id":"@b4moss/cachian@0.5.0","bugs":{"url":"https://github.com/b4moss/cachian/issues"},"homepage":"https://github.com/b4moss/cachian#readme","_nodeVersion":"24.20.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-amDzda227jYUXFIFv1da7y0/ygYgcVoYJs08NRbdMW9DLhttDKzXMJHPbThYOe7dqbup5Jv4YlyuYrQB/R0Pig==","shasum":"bcfea3fc2da62780fdd67200888157c70068bcb0","tarball":"https://registry.npmjs.org/@b4moss/cachian/-/cachian-0.5.0.tgz","fileCount":61,"unpackedSize":88453,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@b4moss%2fcachian@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDayb1vc399+cOMdIGv+nfKiDDimTrDilkVZ2cKqaXDDAiBQPu9LC9TIvKCIlyozsELPkHxfRexfEjQjcgEPeb98Zw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:22c74e75-bfb9-454c-8979-f2802e7b8daa"}},"directories":{},"maintainers":[{"name":"b4m-oss","email":"kohki.shikata@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cachian_0.5.0_1788681581696_0.5690548406373137"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-05T07:08:04.744Z","modified":"2026-09-06T07:59:42.122Z","0.1.0":"2026-09-05T07:08:05.019Z","0.2.0":"2026-09-05T07:39:59.855Z","0.3.1":"2026-09-05T08:57:19.145Z","0.4.0":"2026-09-06T06:10:19.617Z","0.5.0":"2026-09-06T07:59:41.832Z"},"bugs":{"url":"https://github.com/b4moss/cachian/issues"},"license":"MIT","homepage":"https://github.com/b4moss/cachian#readme","keywords":["cache","localStorage","indexedDB","browser","ttl"],"repository":{"type":"git","url":"git+https://github.com/b4moss/cachian.git"},"description":"Universal browser cache helper with localStorage and IndexedDB backends","maintainers":[{"name":"b4m-oss","email":"kohki.shikata@gmail.com"}],"readme":"# @b4moss/cachian\n\n[![CI](https://github.com/b4moss/cachian/actions/workflows/ci.yml/badge.svg)](https://github.com/b4moss/cachian/actions/workflows/ci.yml)\n[![Coverage](https://img.shields.io/codecov/c/github/b4moss/cachian)](https://codecov.io/gh/b4moss/cachian)\n[![npm](https://img.shields.io/npm/v/@b4moss/cachian)](https://www.npmjs.com/package/@b4moss/cachian)\n[![Release](https://img.shields.io/github/v/release/b4moss/cachian?include_prereleases&filter=v*)](https://github.com/b4moss/cachian/releases)\n[![License](https://img.shields.io/github/license/b4moss/cachian)](https://github.com/b4moss/cachian/blob/main/LICENSE)\n[![OpenSSF Scorecard](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fapi.scorecard.dev%2Fprojects%2Fgithub.com%2Fb4moss%2Fcachian&label=OpenSSF%20Scorecard&query=$.score)](https://scorecard.dev/viewer/?uri=github.com/b4moss/cachian)\n\n[日本語](./README_ja.md)\n\nTree-shakeable **browser-only** cache helper. Pick a **driver** (localStorage / IndexedDB) and only the **methods** you need (`get` / `set` / `remove` / …).\n\nExtracted and generalized from the cache logic in [`@b4moss/jp-local-gov-id`](https://github.com/b4moss/jp-local-gov-id).\n\nCI/CD: [docs/ci-cd.md](./docs/ci-cd.md)\n\n## Install\n\n```bash\nnpm install @b4moss/cachian\n```\n\n## Usage\n\n```ts\nimport { createCache } from \"@b4moss/cachian\";\nimport { localStorageDriver } from \"@b4moss/cachian/drivers/localStorage\";\nimport { get } from \"@b4moss/cachian/methods/get\";\nimport { set } from \"@b4moss/cachian/methods/set\";\nimport { remove } from \"@b4moss/cachian/methods/remove\";\n\nconst cache = createCache({\n  driver: localStorageDriver(),\n  methods: [get, set, remove],\n});\n\nawait cache.set(\"https://example.com/data.json\", { hello: \"world\" });\nconst data = await cache.get(\"https://example.com/data.json\");\n```\n\nBrowser only: drivers throw `CachianEnvironmentError` when the backend API is unavailable (e.g. Node / SSR). Importing modules alone is safe — create the driver / cache only in the browser (or guard with `typeof window !== \"undefined\"`).\n\n### IndexedDB\n\n```ts\nimport { indexedDBDriver } from \"@b4moss/cachian/drivers/indexedDB\";\n\nconst cache = createCache({\n  driver: indexedDBDriver({ dbName: \"my-app\", storeName: \"cache\" }),\n  methods: [get, set, remove],\n});\n```\n\n### Options (`createCache`)\n\n| Option | Default | Description |\n|--------|---------|-------------|\n| `driver` | _(required)_ | Storage adapter from a driver factory |\n| `methods` | _(required)_ | Non-empty list of method defs to attach |\n| `enabled` | `true` | When `false`, reads miss and writes are no-ops |\n| `ttlSeconds` | `31536000` (1 year) | Default TTL for `set` |\n| `keyPrefix` | `\"\"` | Prefix for physical keys |\n\n### Methods (subpath imports)\n\n| Import | Attaches |\n|--------|----------|\n| `@b4moss/cachian/methods/get` | `get` |\n| `@b4moss/cachian/methods/set` | `set` |\n| `@b4moss/cachian/methods/update` | `update` |\n| `@b4moss/cachian/methods/upsert` | `upsert` |\n| `@b4moss/cachian/methods/remove` | `remove` |\n| `@b4moss/cachian/methods/has` | `has` |\n| `@b4moss/cachian/methods/clear` | `clear` |\n| `@b4moss/cachian/methods/purge` | `purge` |\n\nEntry shape in storage: `{ expiresAt: number, data: unknown, createdAt?: number }` (localStorage stores JSON strings; IndexedDB stores objects). New `set` writes always include `createdAt`.\n\n### Writes: `set` / `update` / `upsert`\n\n```ts\nawait cache.set(\"k\", value); // always writes a new entry (resets createdAt / expiresAt)\nawait cache.update(\"k\", value); // updates only if a valid entry exists; otherwise no-op\nawait cache.upsert(\"k\", value); // set on miss, update on hit\n```\n\n`update` / hit-path `upsert` keep `createdAt`. Without `ttlSeconds`, they also keep `expiresAt`.\n\n### Purge\n\n```ts\nimport { purge } from \"@b4moss/cachian/methods/purge\";\n\nconst cache = createCache({\n  driver: localStorageDriver(),\n  methods: [get, set, purge],\n});\n\nawait cache.purge({ all: true });\nawait cache.purge({ keys: [\"a\", \"b\"] });\nawait cache.purge({ olderThan: { hours: 1, mins: 30 } });\nawait cache.purge({ createdBefore: \"2024-06-01T00:00:00.000Z\" });\nawait cache.purge({ expired: true });\n```\n\nLegacy entries without `createdAt` are left alone by `olderThan` and absolute-time modes, but **are removed** by `{ expired: true }` when `expiresAt` is past. Mixing `olderThan` with `createdBefore` / `createdAfter`, or mixing `{ expired: true }` with any other mode, throws `TypeError`.\n\n## Breaking changes (v0.4)\n\n- `createCache()` no longer returns a fixed full API; pass `driver` + `methods`.\n- `storage: \"localStorage\" | \"indexedDB\"` string option removed — use driver factories.\n- Drivers and methods are **not** re-exported from the package root (import subpaths).\n\n## License\n\nMIT\n","readmeFilename":"README.md"}