mirror of
https://github.com/unraid/api.git
synced 2026-02-13 19:48:29 -06:00
On FAT32, `fs.stat()` updates accesstime, which means file reads are also writes, which means we can't use `usePoll` without degrading users' flash drives. To keep file reads lazy without a larger refactor, I override `getters.dynamix()` as the entrypoint to re-read the boot drive's dynamix config. Consecutive calls to `getters.dynamix()` are a common access pattern, which means we have to memoize to avoid many redundant file reads, so I used a TTL cache with a 250ms lifetime, hoping to scope config files to each request. `getters.dynamix()` is also used synchonously, so bit the bullet and switched away from async reads for simplicity, considering that most reads will be occurring from memory, even during cache misses. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added a TTL memoized loader utility with exported types. * Added a public function to load Dynamix configuration at startup. * **Refactor** * Startup now uses the deterministic, cached config loader; runtime file-watch for Dynamix config removed. * Simplified config state handling and load-status reporting for more predictable startup behavior. * **Tests** * Added tests for TTL caching, eviction, keying, and conditional caching. * **Chores** * Bumped package versions and updated changelog. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
73 lines
2.0 KiB
JSON
73 lines
2.0 KiB
JSON
{
|
|
"name": "@unraid/shared",
|
|
"version": "4.25.3",
|
|
"main": "dist/index.js",
|
|
"types": "dist/index.d.ts",
|
|
"type": "module",
|
|
"exports": {
|
|
".": {
|
|
"types": "./dist/index.d.ts",
|
|
"import": "./dist/index.js"
|
|
},
|
|
"./*": {
|
|
"types": "./dist/*.d.ts",
|
|
"import": "./dist/*"
|
|
}
|
|
},
|
|
"files": [
|
|
"dist"
|
|
],
|
|
"scripts": {
|
|
"build": "rimraf dist && tsc --project tsconfig.build.json",
|
|
"prepare": "npm run build",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest"
|
|
},
|
|
"keywords": [],
|
|
"author": "Lime Technology, Inc. <unraid.net>",
|
|
"license": "GPL-2.0-or-later",
|
|
"description": "Shared utilities and types for Unraid API ecosystem",
|
|
"devDependencies": {
|
|
"@graphql-tools/utils": "10.9.1",
|
|
"@jsonforms/core": "3.6.0",
|
|
"@nestjs/common": "11.1.6",
|
|
"@nestjs/graphql": "13.1.0",
|
|
"@nestjs/testing": "11.1.6",
|
|
"@types/bun": "1.2.21",
|
|
"@types/lodash-es": "4.17.12",
|
|
"@types/node": "22.18.0",
|
|
"@types/ws": "8.18.1",
|
|
"class-transformer": "0.5.1",
|
|
"class-validator": "0.14.2",
|
|
"graphql": "16.11.0",
|
|
"graphql-scalars": "1.24.2",
|
|
"graphql-ws": "6.0.6",
|
|
"lodash-es": "4.17.21",
|
|
"nest-authz": "2.17.0",
|
|
"pify": "6.1.0",
|
|
"rimraf": "6.0.1",
|
|
"type-fest": "5.0.0",
|
|
"typescript": "5.9.2",
|
|
"vitest": "3.2.4",
|
|
"ws": "8.18.3"
|
|
},
|
|
"peerDependencies": {
|
|
"@apollo/client": "3.14.0",
|
|
"@graphql-tools/utils": "10.9.1",
|
|
"@jsonforms/core": "3.6.0",
|
|
"@nestjs/common": "11.1.6",
|
|
"@nestjs/config": "4.0.2",
|
|
"@nestjs/graphql": "13.1.0",
|
|
"atomically": "2.0.3",
|
|
"class-validator": "0.14.2",
|
|
"graphql": "16.11.0",
|
|
"graphql-scalars": "1.24.2",
|
|
"graphql-ws": "6.0.6",
|
|
"lodash-es": "4.17.21",
|
|
"nest-authz": "2.17.0",
|
|
"rxjs": "7.8.2",
|
|
"undici": "7.15.0",
|
|
"ws": "8.18.3"
|
|
}
|
|
}
|