Commit fbdd391d authored by nanahira's avatar nanahira

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

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