Commit fbdd391d authored by nanahira's avatar nanahira

provide Cache API thing & cmd.use(CommandUserLock("field"))

parent 91e5937e
...@@ -9,7 +9,8 @@ ...@@ -9,7 +9,8 @@
"version": "2.5.3", "version": "2.5.3",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"aragami": "^1.1.1", "@koishijs/cache": "^0.1.3",
"aragami": "^1.1.2",
"koishi-thirdeye": "^11.1.21" "koishi-thirdeye": "^11.1.21"
}, },
"devDependencies": { "devDependencies": {
...@@ -37,7 +38,7 @@ ...@@ -37,7 +38,7 @@
"ws": "^8.8.1" "ws": "^8.8.1"
}, },
"peerDependencies": { "peerDependencies": {
"koishi": "^4.11.1" "koishi": "^4.11.4"
} }
}, },
"node_modules/@ampproject/remapping": { "node_modules/@ampproject/remapping": {
...@@ -1334,24 +1335,32 @@ ...@@ -1334,24 +1335,32 @@
"node": ">= 8.0.0" "node": ">= 8.0.0"
} }
}, },
"node_modules/@koishijs/cache": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@koishijs/cache/-/cache-0.1.3.tgz",
"integrity": "sha512-pkmxKR7x5TaoSaUBIOa60NWVN8rzLagQthfLYI4ofcA/APjo6UKFqZS0TgfKZ88cLAaMr7VXUut8ItgBG2rDkg==",
"peerDependencies": {
"koishi": "^4.10.0"
}
},
"node_modules/@koishijs/core": { "node_modules/@koishijs/core": {
"version": "4.11.1", "version": "4.11.4",
"resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.11.1.tgz", "resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.11.4.tgz",
"integrity": "sha512-HrzgBnimg/fgIzxTyH8BJb7nZpgt912i4zcfvRN9kNcPwbdOpjGllCVRuhRxSEBR21OJvCYTmT0dzf1qNPd3Vg==", "integrity": "sha512-biwbprUTBreFgCyRaJc46Oenp/xcrWkxrrQ/9+YxWgSTQ7AF/a1Qz5XW3fN5wGdeHV/MhBTNdoS2y/+0V8Ew0g==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"@koishijs/utils": "^6.4.0", "@koishijs/utils": "^7.0.0",
"@minatojs/core": "^2.1.1", "@minatojs/core": "^2.1.2",
"@satorijs/core": "^2.0.1", "@satorijs/core": "^2.1.0",
"cordis": "^2.6.0", "cordis": "^2.7.2",
"cosmokit": "^1.4.0", "cosmokit": "^1.4.0",
"fastest-levenshtein": "^1.0.16" "fastest-levenshtein": "^1.0.16"
} }
}, },
"node_modules/@koishijs/loader": { "node_modules/@koishijs/loader": {
"version": "2.5.1", "version": "2.5.4",
"resolved": "https://registry.npmjs.org/@koishijs/loader/-/loader-2.5.1.tgz", "resolved": "https://registry.npmjs.org/@koishijs/loader/-/loader-2.5.4.tgz",
"integrity": "sha512-ZNyzmL/sCTENPegZBx5rPs1mb+7YOxCb9Il0vyul9zuGzSJoJklSAIoTpBRt1v6BH/eUHEwY6ngcomkxQlf6xQ==", "integrity": "sha512-MAXhmVsXch7d4RkO3enXC/RG2GXcdu8wm/Vsmv1/G7B21e3UUSr6fubY/b84NA8mfxlpW11jYPh8Y51j7vCsVQ==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"dotenv": "^16.0.3", "dotenv": "^16.0.3",
...@@ -1359,7 +1368,7 @@ ...@@ -1359,7 +1368,7 @@
"ns-require": "^1.1.4" "ns-require": "^1.1.4"
}, },
"peerDependencies": { "peerDependencies": {
"@koishijs/core": "^4.11.1" "@koishijs/core": "4.11.4"
} }
}, },
"node_modules/@koishijs/loader/node_modules/argparse": { "node_modules/@koishijs/loader/node_modules/argparse": {
...@@ -1426,21 +1435,19 @@ ...@@ -1426,21 +1435,19 @@
} }
}, },
"node_modules/@koishijs/utils": { "node_modules/@koishijs/utils": {
"version": "6.4.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/@koishijs/utils/-/utils-6.4.0.tgz", "resolved": "https://registry.npmjs.org/@koishijs/utils/-/utils-7.0.0.tgz",
"integrity": "sha512-GMIBnr4W6JZST5hB8u1sVH3+MH7ZcGIUy3IJU538Z4j/JbCoRnydNnCKggs7tB1JFHqq/7eHAsks/2WrfA/1ng==", "integrity": "sha512-xfz6aoLoCVoX+OiVsy3mpiXPS7hUPiEaTVnPqHpELu9At8Hb2yhexDSBUWmWLvZ70jmJOUNUtCTbkDd+I0S2Ig==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"cosmokit": "^1.4.0", "cosmokit": "^1.4.0",
"inaba": "^1.1.1", "inaba": "^1.1.1"
"reggol": "^1.3.4",
"schemastery": "^3.6.1"
} }
}, },
"node_modules/@minatojs/core": { "node_modules/@minatojs/core": {
"version": "2.1.1", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/@minatojs/core/-/core-2.1.1.tgz", "resolved": "https://registry.npmjs.org/@minatojs/core/-/core-2.1.2.tgz",
"integrity": "sha512-iGx1eydevDiuhaUhO/BkI0L2d+028wsVUMZ/pXi1z5IP1xZJvlr3LMrjr3zG4XdyKPO3JsdZy96G+wQSu6Jltg==", "integrity": "sha512-7VDn+G2QybsDVlmZ0wcYeB0IN8q//qO5WZSdYizTcsXx1bCKEU+AUn/UPWN3eHRXvhVNI3YRBAoEKxkp357lDw==",
"dependencies": { "dependencies": {
"cosmokit": "^1.4.0" "cosmokit": "^1.4.0"
} }
...@@ -1504,17 +1511,17 @@ ...@@ -1504,17 +1511,17 @@
} }
}, },
"node_modules/@satorijs/core": { "node_modules/@satorijs/core": {
"version": "2.0.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/@satorijs/core/-/core-2.0.1.tgz", "resolved": "https://registry.npmjs.org/@satorijs/core/-/core-2.1.1.tgz",
"integrity": "sha512-K+nNmUtFrU1uDJEn6Xov6TcaKhn8+Q9qtp6iBUh5DIhHO4hzoIHaPntvpoKJ5dfg5EyQyAi+JShTGl4voN5Ung==", "integrity": "sha512-TTg5n1Rw7MJqfbPtcdqHLebfnbpn2txS/6wGFXCTV+qIXGgJk10bahSSfd9EQgiQaRl6Qm4HM6PPpcQuGWaq6g==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"@satorijs/element": "^2.3.1", "@satorijs/element": "^2.3.1",
"cordis": "^2.6.0", "cordis": "^2.7.2",
"cordis-axios": "^2.2.1", "cordis-axios": "^3.0.0",
"cosmokit": "^1.4.0", "cosmokit": "^1.4.0",
"reggol": "^1.3.4", "reggol": "^1.3.5",
"schemastery": "^3.6.1", "schemastery": "^3.7.0",
"ws": "^8.11.0" "ws": "^8.11.0"
} }
}, },
...@@ -1528,13 +1535,13 @@ ...@@ -1528,13 +1535,13 @@
} }
}, },
"node_modules/@satorijs/satori": { "node_modules/@satorijs/satori": {
"version": "2.0.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/@satorijs/satori/-/satori-2.0.1.tgz", "resolved": "https://registry.npmjs.org/@satorijs/satori/-/satori-2.1.1.tgz",
"integrity": "sha512-Mt8r8rYr7IOWgCKMTfyXaIvZIFQ2FAUXsDlOMnhWu6Sf/Q0KFS/o/aiXFlerhSnii1ptuGAZmSxaBhsGMkPmwg==", "integrity": "sha512-zXRhnf29zABL/R8Wch7t4vtmUwXszd6eaYwZVAF+THfLk4zVkNWEYjCLQfX2sS742oDER4DPoIKbJnkYbK0Shw==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"@koa/router": "^10.1.1", "@koa/router": "^10.1.1",
"@satorijs/core": "2.0.1", "@satorijs/core": "2.1.1",
"@types/koa": "*", "@types/koa": "*",
"@types/koa__router": "*", "@types/koa__router": "*",
"@types/ws": "^8.5.3", "@types/ws": "^8.5.3",
...@@ -1546,7 +1553,6 @@ ...@@ -1546,7 +1553,6 @@
"koa-bodyparser": "^4.3.0", "koa-bodyparser": "^4.3.0",
"parseurl": "^1.3.3", "parseurl": "^1.3.3",
"path-to-regexp": "^6.2.1", "path-to-regexp": "^6.2.1",
"schemastery": "^3.6.1",
"socks-proxy-agent": "^5.0.1", "socks-proxy-agent": "^5.0.1",
"ws": "^8.11.0" "ws": "^8.11.0"
}, },
...@@ -2419,15 +2425,15 @@ ...@@ -2419,15 +2425,15 @@
} }
}, },
"node_modules/aragami": { "node_modules/aragami": {
"version": "1.1.1", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/aragami/-/aragami-1.1.1.tgz", "resolved": "https://registry.npmjs.org/aragami/-/aragami-1.1.2.tgz",
"integrity": "sha512-fFqgoNkDWpjgytosny/NPm/My1I8VjOVc+ltcKUGMMcW5Cep2Pq/2pe4ViNGhUEVCKUrlk13MdNwUgJsrYMRlw==", "integrity": "sha512-asrmtKkLOgtXMYt3TeM/lWsmbKdJwjUPDV9yb+h62FBBMFx0h+lrEQN1XL6ZIkfyggtyC0G5gv0f9G+Ul0cTUg==",
"dependencies": { "dependencies": {
"@nanahira/redlock": "^1.0.0", "@nanahira/redlock": "^1.0.0",
"better-lock": "^2.0.3", "better-lock": "^2.0.3",
"class-transformer": "^0.5.1", "class-transformer": "^0.5.1",
"encoded-buffer": "^0.2.6", "encoded-buffer": "^0.2.6",
"ioredis": "^5.2.2", "ioredis": "^5.2.3",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"lru-cache": "^7.13.1", "lru-cache": "^7.13.1",
"typed-reflector": "^1.0.11" "typed-reflector": "^1.0.11"
...@@ -2832,9 +2838,9 @@ ...@@ -2832,9 +2838,9 @@
} }
}, },
"node_modules/cluster-key-slot": { "node_modules/cluster-key-slot": {
"version": "1.1.0", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz",
"integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==", "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==",
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
...@@ -2927,9 +2933,9 @@ ...@@ -2927,9 +2933,9 @@
} }
}, },
"node_modules/content-type": { "node_modules/content-type": {
"version": "1.0.4", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
"peer": true, "peer": true,
"engines": { "engines": {
"node": ">= 0.6" "node": ">= 0.6"
...@@ -2979,30 +2985,29 @@ ...@@ -2979,30 +2985,29 @@
"peer": true "peer": true
}, },
"node_modules/cordis": { "node_modules/cordis": {
"version": "2.6.0", "version": "2.7.2",
"resolved": "https://registry.npmjs.org/cordis/-/cordis-2.6.0.tgz", "resolved": "https://registry.npmjs.org/cordis/-/cordis-2.7.2.tgz",
"integrity": "sha512-4VUY2x6ufctBr1zYAML3c+b1eXwgY94nkqLP7/icb3QVGXMBJuH4Nztakf6ADVonN5MvgJ06RRawRvmWdx3LxA==", "integrity": "sha512-bM+4P1bhIawrXRLvBMoxfWwSHebm0B3n0sM+T/FCED/iMUnEs6N9Y7lwJ2gDo2fm0wvu4JzU8cuMKrxqroq16Q==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"cosmokit": "^1.3.3" "cosmokit": "^1.4.0"
} }
}, },
"node_modules/cordis-axios": { "node_modules/cordis-axios": {
"version": "2.2.1", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/cordis-axios/-/cordis-axios-2.2.1.tgz", "resolved": "https://registry.npmjs.org/cordis-axios/-/cordis-axios-3.0.0.tgz",
"integrity": "sha512-1OBl1FKLkYa1kEYeX56E13B4VdrxUve4poEYBfsBAygYn0IvcrUauvsdW9cl1rihBXtA/X6/K8BUY9O5KyOSQg==", "integrity": "sha512-fYFw6vezgDP9n8GMCHUW+n8hPkWueX0RpGipu5lU/aRDwNzeGQaYdSv737cRh/N7cPsGqZqGJcZUgYBPzxrB7A==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"axios": "~1.1.3", "axios": "~1.1.3",
"cosmokit": "^1.4.0", "cosmokit": "^1.4.0",
"mime-db": "^1.52.0", "mime-db": "^1.52.0"
"schemastery": "^3.6.1"
}, },
"engines": { "engines": {
"node": ">=12.0.0" "node": ">=12.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"cordis": "^2.6.0" "cordis": "^2.7.2"
} }
}, },
"node_modules/cordis-decorators": { "node_modules/cordis-decorators": {
...@@ -4378,9 +4383,9 @@ ...@@ -4378,9 +4383,9 @@
} }
}, },
"node_modules/get-intrinsic": { "node_modules/get-intrinsic": {
"version": "1.1.3", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
"integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"function-bind": "^1.1.1", "function-bind": "^1.1.1",
...@@ -4732,14 +4737,14 @@ ...@@ -4732,14 +4737,14 @@
} }
}, },
"node_modules/ioredis": { "node_modules/ioredis": {
"version": "5.2.2", "version": "5.3.0",
"resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.2.2.tgz", "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.0.tgz",
"integrity": "sha512-wryKc1ur8PcCmNwfcGkw5evouzpbDXxxkMkzPK8wl4xQfQf7lHe11Jotell5ikMVAtikXJEu/OJVaoV51BggRQ==", "integrity": "sha512-Id9jKHhsILuIZpHc61QkagfVdUj2Rag5GzG1TGEvRNeM7dtTOjICgjC+tvqYxi//PuX2wjQ+Xjva2ONBuf92Pw==",
"dependencies": { "dependencies": {
"@ioredis/commands": "^1.1.1", "@ioredis/commands": "^1.1.1",
"cluster-key-slot": "^1.1.0", "cluster-key-slot": "^1.1.0",
"debug": "^4.3.4", "debug": "^4.3.4",
"denque": "^2.0.1", "denque": "^2.1.0",
"lodash.defaults": "^4.2.0", "lodash.defaults": "^4.2.0",
"lodash.isarguments": "^3.1.0", "lodash.isarguments": "^3.1.0",
"redis-errors": "^1.2.0", "redis-errors": "^1.2.0",
...@@ -6188,15 +6193,15 @@ ...@@ -6188,15 +6193,15 @@
} }
}, },
"node_modules/koishi": { "node_modules/koishi": {
"version": "4.11.1", "version": "4.11.4",
"resolved": "https://registry.npmjs.org/koishi/-/koishi-4.11.1.tgz", "resolved": "https://registry.npmjs.org/koishi/-/koishi-4.11.4.tgz",
"integrity": "sha512-sHMa8okx+kl5jHBwzT2gb4qGeOJRKG8AfLt4w5BLJwOPpvdo6cW9RiRy1uBwkXM7zf4yOvtr0+6WEu+AuD6bXQ==", "integrity": "sha512-FLngGwsCHvoPdEbzVCGB0KExxh0yJcQ5ivaepTTusqPH7oQeZHo9ROb02ncVAw7ZPpWrUDOzqlyIFdtS6OPcRg==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"@koishijs/core": "4.11.1", "@koishijs/core": "4.11.4",
"@koishijs/loader": "^2.5.1", "@koishijs/loader": "2.5.4",
"@koishijs/utils": "^6.4.0", "@koishijs/utils": "^7.0.0",
"@satorijs/satori": "^2.0.1", "@satorijs/satori": "^2.1.0",
"cac": "^6.7.14", "cac": "^6.7.14",
"chokidar": "^3.5.3", "chokidar": "^3.5.3",
"kleur": "^4.1.5", "kleur": "^4.1.5",
...@@ -6529,9 +6534,9 @@ ...@@ -6529,9 +6534,9 @@
"peer": true "peer": true
}, },
"node_modules/object-inspect": { "node_modules/object-inspect": {
"version": "1.12.2", "version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
"integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
"peer": true, "peer": true,
"funding": { "funding": {
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
...@@ -7085,12 +7090,12 @@ ...@@ -7085,12 +7090,12 @@
} }
}, },
"node_modules/reggol": { "node_modules/reggol": {
"version": "1.3.4", "version": "1.3.5",
"resolved": "https://registry.npmjs.org/reggol/-/reggol-1.3.4.tgz", "resolved": "https://registry.npmjs.org/reggol/-/reggol-1.3.5.tgz",
"integrity": "sha512-E/sL4WovP0kR5EHQx3YF4ZDsI5D5baTROXaELCN1mOCB8tEOVOR3PHr807yVcGit2BfmXMSW5KyRaUAV5K8Vzw==", "integrity": "sha512-kzkzs4nhZeiphyh+amekq25/3PndZDq+5Yt8qCJqPSyMXPC1pkwhfYCQyJdXxoRz3/uqt0+VqHulagUCVY84vA==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"cosmokit": "^1.3.6", "cosmokit": "^1.4.0",
"object-inspect": "^1.12.2", "object-inspect": "^1.12.2",
"supports-color": "^8.1.1" "supports-color": "^8.1.1"
} }
...@@ -7269,12 +7274,12 @@ ...@@ -7269,12 +7274,12 @@
} }
}, },
"node_modules/schemastery": { "node_modules/schemastery": {
"version": "3.6.1", "version": "3.7.0",
"resolved": "https://registry.npmjs.org/schemastery/-/schemastery-3.6.1.tgz", "resolved": "https://registry.npmjs.org/schemastery/-/schemastery-3.7.0.tgz",
"integrity": "sha512-Igh4oqaHco1AYmqpSgYgg411gNomSI9xE35Xo/FuzJZTMYWA5W1o+82Q5qMnt9FAQ76gZig0pea9OcHl0AM/Lw==", "integrity": "sha512-vUs5HcWdtpqlL/Z1AwvFApllJk0jLtuItkwH5DDpie3Lw71DIA0Z7ohlnPF+fVN17QxJAI5xJtud62E3/EBoBQ==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"cosmokit": "^1.3.4" "cosmokit": "^1.4.0"
} }
}, },
"node_modules/schemastery-gen": { "node_modules/schemastery-gen": {
...@@ -9472,24 +9477,30 @@ ...@@ -9472,24 +9477,30 @@
"path-to-regexp": "^6.1.0" "path-to-regexp": "^6.1.0"
} }
}, },
"@koishijs/cache": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@koishijs/cache/-/cache-0.1.3.tgz",
"integrity": "sha512-pkmxKR7x5TaoSaUBIOa60NWVN8rzLagQthfLYI4ofcA/APjo6UKFqZS0TgfKZ88cLAaMr7VXUut8ItgBG2rDkg==",
"requires": {}
},
"@koishijs/core": { "@koishijs/core": {
"version": "4.11.1", "version": "4.11.4",
"resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.11.1.tgz", "resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.11.4.tgz",
"integrity": "sha512-HrzgBnimg/fgIzxTyH8BJb7nZpgt912i4zcfvRN9kNcPwbdOpjGllCVRuhRxSEBR21OJvCYTmT0dzf1qNPd3Vg==", "integrity": "sha512-biwbprUTBreFgCyRaJc46Oenp/xcrWkxrrQ/9+YxWgSTQ7AF/a1Qz5XW3fN5wGdeHV/MhBTNdoS2y/+0V8Ew0g==",
"peer": true, "peer": true,
"requires": { "requires": {
"@koishijs/utils": "^6.4.0", "@koishijs/utils": "^7.0.0",
"@minatojs/core": "^2.1.1", "@minatojs/core": "^2.1.2",
"@satorijs/core": "^2.0.1", "@satorijs/core": "^2.1.0",
"cordis": "^2.6.0", "cordis": "^2.7.2",
"cosmokit": "^1.4.0", "cosmokit": "^1.4.0",
"fastest-levenshtein": "^1.0.16" "fastest-levenshtein": "^1.0.16"
} }
}, },
"@koishijs/loader": { "@koishijs/loader": {
"version": "2.5.1", "version": "2.5.4",
"resolved": "https://registry.npmjs.org/@koishijs/loader/-/loader-2.5.1.tgz", "resolved": "https://registry.npmjs.org/@koishijs/loader/-/loader-2.5.4.tgz",
"integrity": "sha512-ZNyzmL/sCTENPegZBx5rPs1mb+7YOxCb9Il0vyul9zuGzSJoJklSAIoTpBRt1v6BH/eUHEwY6ngcomkxQlf6xQ==", "integrity": "sha512-MAXhmVsXch7d4RkO3enXC/RG2GXcdu8wm/Vsmv1/G7B21e3UUSr6fubY/b84NA8mfxlpW11jYPh8Y51j7vCsVQ==",
"peer": true, "peer": true,
"requires": { "requires": {
"dotenv": "^16.0.3", "dotenv": "^16.0.3",
...@@ -9549,21 +9560,19 @@ ...@@ -9549,21 +9560,19 @@
"requires": {} "requires": {}
}, },
"@koishijs/utils": { "@koishijs/utils": {
"version": "6.4.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/@koishijs/utils/-/utils-6.4.0.tgz", "resolved": "https://registry.npmjs.org/@koishijs/utils/-/utils-7.0.0.tgz",
"integrity": "sha512-GMIBnr4W6JZST5hB8u1sVH3+MH7ZcGIUy3IJU538Z4j/JbCoRnydNnCKggs7tB1JFHqq/7eHAsks/2WrfA/1ng==", "integrity": "sha512-xfz6aoLoCVoX+OiVsy3mpiXPS7hUPiEaTVnPqHpELu9At8Hb2yhexDSBUWmWLvZ70jmJOUNUtCTbkDd+I0S2Ig==",
"peer": true, "peer": true,
"requires": { "requires": {
"cosmokit": "^1.4.0", "cosmokit": "^1.4.0",
"inaba": "^1.1.1", "inaba": "^1.1.1"
"reggol": "^1.3.4",
"schemastery": "^3.6.1"
} }
}, },
"@minatojs/core": { "@minatojs/core": {
"version": "2.1.1", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/@minatojs/core/-/core-2.1.1.tgz", "resolved": "https://registry.npmjs.org/@minatojs/core/-/core-2.1.2.tgz",
"integrity": "sha512-iGx1eydevDiuhaUhO/BkI0L2d+028wsVUMZ/pXi1z5IP1xZJvlr3LMrjr3zG4XdyKPO3JsdZy96G+wQSu6Jltg==", "integrity": "sha512-7VDn+G2QybsDVlmZ0wcYeB0IN8q//qO5WZSdYizTcsXx1bCKEU+AUn/UPWN3eHRXvhVNI3YRBAoEKxkp357lDw==",
"requires": { "requires": {
"cosmokit": "^1.4.0" "cosmokit": "^1.4.0"
} }
...@@ -9612,17 +9621,17 @@ ...@@ -9612,17 +9621,17 @@
} }
}, },
"@satorijs/core": { "@satorijs/core": {
"version": "2.0.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/@satorijs/core/-/core-2.0.1.tgz", "resolved": "https://registry.npmjs.org/@satorijs/core/-/core-2.1.1.tgz",
"integrity": "sha512-K+nNmUtFrU1uDJEn6Xov6TcaKhn8+Q9qtp6iBUh5DIhHO4hzoIHaPntvpoKJ5dfg5EyQyAi+JShTGl4voN5Ung==", "integrity": "sha512-TTg5n1Rw7MJqfbPtcdqHLebfnbpn2txS/6wGFXCTV+qIXGgJk10bahSSfd9EQgiQaRl6Qm4HM6PPpcQuGWaq6g==",
"peer": true, "peer": true,
"requires": { "requires": {
"@satorijs/element": "^2.3.1", "@satorijs/element": "^2.3.1",
"cordis": "^2.6.0", "cordis": "^2.7.2",
"cordis-axios": "^2.2.1", "cordis-axios": "^3.0.0",
"cosmokit": "^1.4.0", "cosmokit": "^1.4.0",
"reggol": "^1.3.4", "reggol": "^1.3.5",
"schemastery": "^3.6.1", "schemastery": "^3.7.0",
"ws": "^8.11.0" "ws": "^8.11.0"
} }
}, },
...@@ -9636,13 +9645,13 @@ ...@@ -9636,13 +9645,13 @@
} }
}, },
"@satorijs/satori": { "@satorijs/satori": {
"version": "2.0.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/@satorijs/satori/-/satori-2.0.1.tgz", "resolved": "https://registry.npmjs.org/@satorijs/satori/-/satori-2.1.1.tgz",
"integrity": "sha512-Mt8r8rYr7IOWgCKMTfyXaIvZIFQ2FAUXsDlOMnhWu6Sf/Q0KFS/o/aiXFlerhSnii1ptuGAZmSxaBhsGMkPmwg==", "integrity": "sha512-zXRhnf29zABL/R8Wch7t4vtmUwXszd6eaYwZVAF+THfLk4zVkNWEYjCLQfX2sS742oDER4DPoIKbJnkYbK0Shw==",
"peer": true, "peer": true,
"requires": { "requires": {
"@koa/router": "^10.1.1", "@koa/router": "^10.1.1",
"@satorijs/core": "2.0.1", "@satorijs/core": "2.1.1",
"@types/koa": "*", "@types/koa": "*",
"@types/koa__router": "*", "@types/koa__router": "*",
"@types/ws": "^8.5.3", "@types/ws": "^8.5.3",
...@@ -9654,7 +9663,6 @@ ...@@ -9654,7 +9663,6 @@
"koa-bodyparser": "^4.3.0", "koa-bodyparser": "^4.3.0",
"parseurl": "^1.3.3", "parseurl": "^1.3.3",
"path-to-regexp": "^6.2.1", "path-to-regexp": "^6.2.1",
"schemastery": "^3.6.1",
"socks-proxy-agent": "^5.0.1", "socks-proxy-agent": "^5.0.1",
"ws": "^8.11.0" "ws": "^8.11.0"
} }
...@@ -10384,15 +10392,15 @@ ...@@ -10384,15 +10392,15 @@
} }
}, },
"aragami": { "aragami": {
"version": "1.1.1", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/aragami/-/aragami-1.1.1.tgz", "resolved": "https://registry.npmjs.org/aragami/-/aragami-1.1.2.tgz",
"integrity": "sha512-fFqgoNkDWpjgytosny/NPm/My1I8VjOVc+ltcKUGMMcW5Cep2Pq/2pe4ViNGhUEVCKUrlk13MdNwUgJsrYMRlw==", "integrity": "sha512-asrmtKkLOgtXMYt3TeM/lWsmbKdJwjUPDV9yb+h62FBBMFx0h+lrEQN1XL6ZIkfyggtyC0G5gv0f9G+Ul0cTUg==",
"requires": { "requires": {
"@nanahira/redlock": "^1.0.0", "@nanahira/redlock": "^1.0.0",
"better-lock": "^2.0.3", "better-lock": "^2.0.3",
"class-transformer": "^0.5.1", "class-transformer": "^0.5.1",
"encoded-buffer": "^0.2.6", "encoded-buffer": "^0.2.6",
"ioredis": "^5.2.2", "ioredis": "^5.2.3",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"lru-cache": "^7.13.1", "lru-cache": "^7.13.1",
"typed-reflector": "^1.0.11" "typed-reflector": "^1.0.11"
...@@ -10698,9 +10706,9 @@ ...@@ -10698,9 +10706,9 @@
} }
}, },
"cluster-key-slot": { "cluster-key-slot": {
"version": "1.1.0", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz",
"integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==" "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="
}, },
"co": { "co": {
"version": "4.6.0", "version": "4.6.0",
...@@ -10777,9 +10785,9 @@ ...@@ -10777,9 +10785,9 @@
} }
}, },
"content-type": { "content-type": {
"version": "1.0.4", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
"peer": true "peer": true
}, },
"convert-source-map": { "convert-source-map": {
...@@ -10824,24 +10832,23 @@ ...@@ -10824,24 +10832,23 @@
"peer": true "peer": true
}, },
"cordis": { "cordis": {
"version": "2.6.0", "version": "2.7.2",
"resolved": "https://registry.npmjs.org/cordis/-/cordis-2.6.0.tgz", "resolved": "https://registry.npmjs.org/cordis/-/cordis-2.7.2.tgz",
"integrity": "sha512-4VUY2x6ufctBr1zYAML3c+b1eXwgY94nkqLP7/icb3QVGXMBJuH4Nztakf6ADVonN5MvgJ06RRawRvmWdx3LxA==", "integrity": "sha512-bM+4P1bhIawrXRLvBMoxfWwSHebm0B3n0sM+T/FCED/iMUnEs6N9Y7lwJ2gDo2fm0wvu4JzU8cuMKrxqroq16Q==",
"peer": true, "peer": true,
"requires": { "requires": {
"cosmokit": "^1.3.3" "cosmokit": "^1.4.0"
} }
}, },
"cordis-axios": { "cordis-axios": {
"version": "2.2.1", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/cordis-axios/-/cordis-axios-2.2.1.tgz", "resolved": "https://registry.npmjs.org/cordis-axios/-/cordis-axios-3.0.0.tgz",
"integrity": "sha512-1OBl1FKLkYa1kEYeX56E13B4VdrxUve4poEYBfsBAygYn0IvcrUauvsdW9cl1rihBXtA/X6/K8BUY9O5KyOSQg==", "integrity": "sha512-fYFw6vezgDP9n8GMCHUW+n8hPkWueX0RpGipu5lU/aRDwNzeGQaYdSv737cRh/N7cPsGqZqGJcZUgYBPzxrB7A==",
"peer": true, "peer": true,
"requires": { "requires": {
"axios": "~1.1.3", "axios": "~1.1.3",
"cosmokit": "^1.4.0", "cosmokit": "^1.4.0",
"mime-db": "^1.52.0", "mime-db": "^1.52.0"
"schemastery": "^3.6.1"
} }
}, },
"cordis-decorators": { "cordis-decorators": {
...@@ -11769,9 +11776,9 @@ ...@@ -11769,9 +11776,9 @@
"dev": true "dev": true
}, },
"get-intrinsic": { "get-intrinsic": {
"version": "1.1.3", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
"integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
"peer": true, "peer": true,
"requires": { "requires": {
"function-bind": "^1.1.1", "function-bind": "^1.1.1",
...@@ -12013,14 +12020,14 @@ ...@@ -12013,14 +12020,14 @@
"dev": true "dev": true
}, },
"ioredis": { "ioredis": {
"version": "5.2.2", "version": "5.3.0",
"resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.2.2.tgz", "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.0.tgz",
"integrity": "sha512-wryKc1ur8PcCmNwfcGkw5evouzpbDXxxkMkzPK8wl4xQfQf7lHe11Jotell5ikMVAtikXJEu/OJVaoV51BggRQ==", "integrity": "sha512-Id9jKHhsILuIZpHc61QkagfVdUj2Rag5GzG1TGEvRNeM7dtTOjICgjC+tvqYxi//PuX2wjQ+Xjva2ONBuf92Pw==",
"requires": { "requires": {
"@ioredis/commands": "^1.1.1", "@ioredis/commands": "^1.1.1",
"cluster-key-slot": "^1.1.0", "cluster-key-slot": "^1.1.0",
"debug": "^4.3.4", "debug": "^4.3.4",
"denque": "^2.0.1", "denque": "^2.1.0",
"lodash.defaults": "^4.2.0", "lodash.defaults": "^4.2.0",
"lodash.isarguments": "^3.1.0", "lodash.isarguments": "^3.1.0",
"redis-errors": "^1.2.0", "redis-errors": "^1.2.0",
...@@ -13148,15 +13155,15 @@ ...@@ -13148,15 +13155,15 @@
} }
}, },
"koishi": { "koishi": {
"version": "4.11.1", "version": "4.11.4",
"resolved": "https://registry.npmjs.org/koishi/-/koishi-4.11.1.tgz", "resolved": "https://registry.npmjs.org/koishi/-/koishi-4.11.4.tgz",
"integrity": "sha512-sHMa8okx+kl5jHBwzT2gb4qGeOJRKG8AfLt4w5BLJwOPpvdo6cW9RiRy1uBwkXM7zf4yOvtr0+6WEu+AuD6bXQ==", "integrity": "sha512-FLngGwsCHvoPdEbzVCGB0KExxh0yJcQ5ivaepTTusqPH7oQeZHo9ROb02ncVAw7ZPpWrUDOzqlyIFdtS6OPcRg==",
"peer": true, "peer": true,
"requires": { "requires": {
"@koishijs/core": "4.11.1", "@koishijs/core": "4.11.4",
"@koishijs/loader": "^2.5.1", "@koishijs/loader": "2.5.4",
"@koishijs/utils": "^6.4.0", "@koishijs/utils": "^7.0.0",
"@satorijs/satori": "^2.0.1", "@satorijs/satori": "^2.1.0",
"cac": "^6.7.14", "cac": "^6.7.14",
"chokidar": "^3.5.3", "chokidar": "^3.5.3",
"kleur": "^4.1.5", "kleur": "^4.1.5",
...@@ -13424,9 +13431,9 @@ ...@@ -13424,9 +13431,9 @@
"peer": true "peer": true
}, },
"object-inspect": { "object-inspect": {
"version": "1.12.2", "version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
"integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
"peer": true "peer": true
}, },
"on-finished": { "on-finished": {
...@@ -13807,12 +13814,12 @@ ...@@ -13807,12 +13814,12 @@
"dev": true "dev": true
}, },
"reggol": { "reggol": {
"version": "1.3.4", "version": "1.3.5",
"resolved": "https://registry.npmjs.org/reggol/-/reggol-1.3.4.tgz", "resolved": "https://registry.npmjs.org/reggol/-/reggol-1.3.5.tgz",
"integrity": "sha512-E/sL4WovP0kR5EHQx3YF4ZDsI5D5baTROXaELCN1mOCB8tEOVOR3PHr807yVcGit2BfmXMSW5KyRaUAV5K8Vzw==", "integrity": "sha512-kzkzs4nhZeiphyh+amekq25/3PndZDq+5Yt8qCJqPSyMXPC1pkwhfYCQyJdXxoRz3/uqt0+VqHulagUCVY84vA==",
"peer": true, "peer": true,
"requires": { "requires": {
"cosmokit": "^1.3.6", "cosmokit": "^1.4.0",
"object-inspect": "^1.12.2", "object-inspect": "^1.12.2",
"supports-color": "^8.1.1" "supports-color": "^8.1.1"
} }
...@@ -13924,12 +13931,12 @@ ...@@ -13924,12 +13931,12 @@
} }
}, },
"schemastery": { "schemastery": {
"version": "3.6.1", "version": "3.7.0",
"resolved": "https://registry.npmjs.org/schemastery/-/schemastery-3.6.1.tgz", "resolved": "https://registry.npmjs.org/schemastery/-/schemastery-3.7.0.tgz",
"integrity": "sha512-Igh4oqaHco1AYmqpSgYgg411gNomSI9xE35Xo/FuzJZTMYWA5W1o+82Q5qMnt9FAQ76gZig0pea9OcHl0AM/Lw==", "integrity": "sha512-vUs5HcWdtpqlL/Z1AwvFApllJk0jLtuItkwH5DDpie3Lw71DIA0Z7ohlnPF+fVN17QxJAI5xJtud62E3/EBoBQ==",
"peer": true, "peer": true,
"requires": { "requires": {
"cosmokit": "^1.3.4" "cosmokit": "^1.4.0"
} }
}, },
"schemastery-gen": { "schemastery-gen": {
......
...@@ -44,11 +44,12 @@ ...@@ -44,11 +44,12 @@
"testEnvironment": "node" "testEnvironment": "node"
}, },
"dependencies": { "dependencies": {
"aragami": "^1.1.1", "@koishijs/cache": "^0.1.3",
"aragami": "^1.1.2",
"koishi-thirdeye": "^11.1.21" "koishi-thirdeye": "^11.1.21"
}, },
"peerDependencies": { "peerDependencies": {
"koishi": "^4.11.1" "koishi": "^4.11.4"
}, },
"devDependencies": { "devDependencies": {
"@koishijs/plugin-console": "^5.1.0", "@koishijs/plugin-console": "^5.1.0",
...@@ -77,7 +78,8 @@ ...@@ -77,7 +78,8 @@
"koishi": { "koishi": {
"service": { "service": {
"implements": [ "implements": [
"aragami" "aragami",
"cache"
] ]
} }
} }
......
import { AragamiConfig } from './config'; import { AragamiConfig } from './config';
import { import {
DefinePlugin, DefinePlugin,
Inject,
koishiRegistrar, koishiRegistrar,
LifecycleEvents, LifecycleEvents,
PartialDeep, PartialDeep,
PluginDef,
PluginSchema, PluginSchema,
Provide, Provide,
UsePlugin,
} from 'koishi-thirdeye'; } from 'koishi-thirdeye';
import { Channel, Command, Context, Session, User } from 'koishi'; import { Channel, Command, Context, Session, User } from 'koishi';
import { Aragami, AragamiOptions, WrapDecoratorBuilder } from 'aragami'; import {
Aragami,
AragamiOptions,
CacheKey,
WrapDecoratorBuilder,
} from 'aragami';
export * from './config'; export * from './config';
export * from 'aragami'; export * from 'aragami';
import Cache from '@koishijs/cache';
declare module 'koishi' { declare module 'koishi' {
interface Context { interface Context {
...@@ -18,6 +27,50 @@ declare module 'koishi' { ...@@ -18,6 +27,50 @@ declare module 'koishi' {
} }
} }
class AdaptingCache {
table: string;
key: string;
value: any;
@CacheKey()
cacheKey() {
return `${this.table}:${this.key}`;
}
}
type CopyType<T> = { [P in keyof T]: T[P] };
@DefinePlugin()
export class AragamiCacheProvider extends Cache {
constructor(ctx: Context) {
super(ctx);
}
@Inject()
private aragami: CopyType<AragamiPlugin>;
async clear(table: string) {
return this.aragami.clear(AdaptingCache, table);
}
async get(table: string, key: string) {
const entry = await this.aragami.get(AdaptingCache, `${table}:${key}`);
return entry?.value;
}
async set(table: string, key: string, value: any, maxAge?: number) {
const entry = new AdaptingCache();
entry.table = table;
entry.key = key;
entry.value = value;
await this.aragami.set(entry, { ttl: maxAge ?? 0 });
}
async delete(table: string, key: string) {
await this.aragami.del(AdaptingCache, `${table}:${key}`);
}
}
@PluginSchema(AragamiConfig) @PluginSchema(AragamiConfig)
@Provide('aragami', { immediate: true }) @Provide('aragami', { immediate: true })
@DefinePlugin({ name: 'cache-aragami' }) @DefinePlugin({ name: 'cache-aragami' })
...@@ -29,16 +82,28 @@ export default class AragamiPlugin extends Aragami implements LifecycleEvents { ...@@ -29,16 +82,28 @@ export default class AragamiPlugin extends Aragami implements LifecycleEvents {
super(_config.getConfig()); super(_config.getConfig());
} }
@UsePlugin()
loadAdaptingProvider() {
//console.log('loadAdaptingProvider');
return PluginDef(AragamiCacheProvider);
}
onDisconnect() { onDisconnect() {
return this.destroy(); return this.destroy();
} }
private commandLock<C extends Command>( private commandLock<
cmd: C, U extends User.Field = never,
G extends Channel.Field = never,
A extends any[] = any[],
// eslint-disable-next-line @typescript-eslint/ban-types
O extends {} = {},
>(
cmd: Command<U, G, A, O>,
fields: string[], fields: string[],
info: { idFactory: (session: Session) => string; prefix: string }, info: { idFactory: (session: Session) => string; prefix: string },
) { ) {
return cmd.action((argv) => { return cmd.action((argv, ...args: any[]) => {
if (!argv.session) return argv.next(); if (!argv.session) return argv.next();
const id = info.idFactory(argv.session); const id = info.idFactory(argv.session);
if (!id) return argv.next(); if (!id) return argv.next();
...@@ -49,22 +114,43 @@ export default class AragamiPlugin extends Aragami implements LifecycleEvents { ...@@ -49,22 +114,43 @@ export default class AragamiPlugin extends Aragami implements LifecycleEvents {
}, true); }, true);
} }
commandUserLock<C extends Command>(cmd: C, fields: (keyof User)[]) { commandUserLock<
return this.commandLock(cmd.userFields(fields) as C, fields, { T extends User.Field,
U extends User.Field = never,
G extends Channel.Field = never,
A extends any[] = any[],
// eslint-disable-next-line @typescript-eslint/ban-types
O extends {} = {},
>(cmd: Command<U, G, A, O>, fields: T[]) {
return this.commandLock(cmd.userFields(fields), fields as string[], {
idFactory: (session: Session) => session.userId, idFactory: (session: Session) => session.userId,
prefix: 'user', prefix: 'user',
}); });
} }
commandChannelLock<C extends Command>(cmd: C, fields: (keyof Channel)[]) { commandChannelLock<
return this.commandLock(cmd.channelFields(fields) as C, fields, { T extends Channel.Field,
U extends User.Field = never,
G extends Channel.Field = never,
A extends any[] = any[],
// eslint-disable-next-line @typescript-eslint/ban-types
O extends {} = {},
>(cmd: Command<U, G, A, O>, fields: T[]) {
return this.commandLock(cmd.channelFields(fields), fields as string[], {
idFactory: (session: Session) => session.channelId, idFactory: (session: Session) => session.channelId,
prefix: 'channel', prefix: 'channel',
}); });
} }
commandGuildLock<C extends Command>(cmd: C, fields: (keyof Channel)[]) { commandGuildLock<
return this.commandLock(cmd.channelFields(fields) as C, fields, { T extends Channel.Field,
U extends User.Field = never,
G extends Channel.Field = never,
A extends any[] = any[],
// eslint-disable-next-line @typescript-eslint/ban-types
O extends {} = {},
>(cmd: Command<U, G, A, O>, fields: T[]) {
return this.commandLock(cmd.channelFields(fields), fields as string[], {
idFactory: (session: Session) => session.guildId || session.channelId, idFactory: (session: Session) => session.guildId || session.channelId,
prefix: 'guild', prefix: 'guild',
}); });
...@@ -75,20 +161,44 @@ export const { UseCache, UseLock } = new WrapDecoratorBuilder( ...@@ -75,20 +161,44 @@ export const { UseCache, UseLock } = new WrapDecoratorBuilder(
(o) => ((o.ctx || o.__ctx) as Context).aragami, (o) => ((o.ctx || o.__ctx) as Context).aragami,
).build(); ).build();
export const CommandUserLock = koishiRegistrar.decorateCommandTransformer( export const CommandUserLock =
(ctx, cmd, ...fields: (keyof User)[]) => <T extends User.Field>(...fields: T[]) =>
ctx.aragami.commandUserLock(cmd, fields), <
); U extends User.Field = never,
G extends Channel.Field = never,
A extends any[] = any[],
// eslint-disable-next-line @typescript-eslint/ban-types
O extends {} = {},
>(
cmd: Command<U, G, A, O>,
) =>
cmd.ctx.aragami.commandUserLock(cmd, fields);
export const CommandChannelLock = koishiRegistrar.decorateCommandTransformer( export const CommandChannelLock =
(ctx, cmd, ...fields: (keyof Channel)[]) => <T extends Channel.Field>(...fields: T[]) =>
ctx.aragami.commandChannelLock(cmd, fields), <
); U extends User.Field = never,
G extends Channel.Field = never,
A extends any[] = any[],
// eslint-disable-next-line @typescript-eslint/ban-types
O extends {} = {},
>(
cmd: Command<U, G, A, O>,
) =>
cmd.ctx.aragami.commandChannelLock(cmd, fields);
export const CommandGuildLock = koishiRegistrar.decorateCommandTransformer( export const CommandGuildLock =
(ctx, cmd, ...fields: (keyof Channel)[]) => <T extends Channel.Field>(...fields: T[]) =>
ctx.aragami.commandGuildLock(cmd, fields), <
); U extends User.Field = never,
G extends Channel.Field = never,
A extends any[] = any[],
// eslint-disable-next-line @typescript-eslint/ban-types
O extends {} = {},
>(
cmd: Command<U, G, A, O>,
) =>
cmd.ctx.aragami.commandGuildLock(cmd, fields);
export const PutLockingUser = koishiRegistrar.decorateCommandPut( export const PutLockingUser = koishiRegistrar.decorateCommandPut(
(info, ...fields: (keyof User)[]) => info.argv.session.user, (info, ...fields: (keyof User)[]) => info.argv.session.user,
......
...@@ -3,6 +3,12 @@ import TargetPlugin, { UseCache } from '../src'; ...@@ -3,6 +3,12 @@ import TargetPlugin, { UseCache } from '../src';
import { CacheKey, WithKey } from 'aragami'; import { CacheKey, WithKey } from 'aragami';
import { DefinePlugin, Provide, StarterPlugin } from 'koishi-thirdeye'; import { DefinePlugin, Provide, StarterPlugin } from 'koishi-thirdeye';
declare module '@koishijs/cache' {
interface Tables {
aragami: any;
}
}
describe('Test of plugin.', () => { describe('Test of plugin.', () => {
let app: Context; let app: Context;
...@@ -12,6 +18,8 @@ describe('Test of plugin.', () => { ...@@ -12,6 +18,8 @@ describe('Test of plugin.', () => {
// redis: { uri: 'redis://localhost:6379' }, // redis: { uri: 'redis://localhost:6379' },
}); });
await app.start(); await app.start();
// console.log(app.aragami);
// console.log(app.__cache__);
}); });
class User { class User {
...@@ -49,4 +57,14 @@ describe('Test of plugin.', () => { ...@@ -49,4 +57,14 @@ describe('Test of plugin.', () => {
await instance.getUser('Satori', 18); await instance.getUser('Satori', 18);
await expect(app.aragami.has(User, 'Satori')).resolves.toBeTruthy(); await expect(app.aragami.has(User, 'Satori')).resolves.toBeTruthy();
}); });
it('should work with builtin cache', async () => {
expect(app.__cache__).toBeDefined();
const table = app.cache('aragami');
expect(table).toBeDefined();
await table.set('foo', { bar: 'baz' }, 10);
await expect(table.get('foo')).resolves.toEqual({ bar: 'baz' });
await new Promise((resolve) => setTimeout(resolve, 15));
await expect(table.get('foo')).resolves.toBeUndefined();
});
}); });
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment