@pangza/express 0.0.0-stage → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. package/Application/callbackArgs.d.ts +5 -0
  2. package/Application/callbackArgs.d.ts.map +1 -0
  3. package/Application/callbackArgs.js +98 -0
  4. package/Application/callbackArgs.js.map +1 -0
  5. package/Application/decorators.d.ts +29 -0
  6. package/Application/decorators.d.ts.map +1 -0
  7. package/Application/decorators.js +181 -0
  8. package/Application/decorators.js.map +1 -0
  9. package/Application/index.d.ts +58 -0
  10. package/Application/index.d.ts.map +1 -0
  11. package/Application/index.js +573 -0
  12. package/Application/index.js.map +1 -0
  13. package/Application/interceptors.d.ts +27 -0
  14. package/Application/interceptors.d.ts.map +1 -0
  15. package/Application/interceptors.js +58 -0
  16. package/Application/interceptors.js.map +1 -0
  17. package/Application/lifecycle.d.ts +8 -0
  18. package/Application/lifecycle.d.ts.map +1 -0
  19. package/Application/lifecycle.js +96 -0
  20. package/Application/lifecycle.js.map +1 -0
  21. package/Application/metadata.d.ts +32 -0
  22. package/Application/metadata.d.ts.map +1 -0
  23. package/Application/metadata.js +230 -0
  24. package/Application/metadata.js.map +1 -0
  25. package/Application/processGuards.d.ts +2 -0
  26. package/Application/processGuards.d.ts.map +1 -0
  27. package/Application/processGuards.js +18 -0
  28. package/Application/processGuards.js.map +1 -0
  29. package/Application/types.d.ts +42 -0
  30. package/Application/types.d.ts.map +1 -0
  31. package/Application/types.js +13 -0
  32. package/Application/types.js.map +1 -0
  33. package/Application/warmup.d.ts +2 -0
  34. package/Application/warmup.d.ts.map +1 -0
  35. package/Application/warmup.js +78 -0
  36. package/Application/warmup.js.map +1 -0
  37. package/Auth/AuthUtil.d.ts +36 -0
  38. package/Auth/AuthUtil.d.ts.map +1 -0
  39. package/Auth/AuthUtil.js +305 -0
  40. package/Auth/AuthUtil.js.map +1 -0
  41. package/Auth/context.d.ts +5 -0
  42. package/Auth/context.d.ts.map +1 -0
  43. package/Auth/context.js +10 -0
  44. package/Auth/context.js.map +1 -0
  45. package/Auth/errors.d.ts +15 -0
  46. package/Auth/errors.d.ts.map +1 -0
  47. package/Auth/errors.js +34 -0
  48. package/Auth/errors.js.map +1 -0
  49. package/Auth/flag.d.ts +2 -0
  50. package/Auth/flag.d.ts.map +1 -0
  51. package/Auth/flag.js +5 -0
  52. package/Auth/flag.js.map +1 -0
  53. package/Auth/index.d.ts +11 -0
  54. package/Auth/index.d.ts.map +1 -0
  55. package/Auth/index.js +128 -0
  56. package/Auth/index.js.map +1 -0
  57. package/Auth/store.d.ts +47 -0
  58. package/Auth/store.d.ts.map +1 -0
  59. package/Auth/store.js +151 -0
  60. package/Auth/store.js.map +1 -0
  61. package/Auth/token.d.ts +10 -0
  62. package/Auth/token.d.ts.map +1 -0
  63. package/Auth/token.js +74 -0
  64. package/Auth/token.js.map +1 -0
  65. package/Auth/types.d.ts +76 -0
  66. package/Auth/types.d.ts.map +1 -0
  67. package/Auth/types.js +3 -0
  68. package/Auth/types.js.map +1 -0
  69. package/Exception/decorators.d.ts +4 -0
  70. package/Exception/decorators.d.ts.map +1 -0
  71. package/Exception/decorators.js +40 -0
  72. package/Exception/decorators.js.map +1 -0
  73. package/Exception/handler.d.ts +3 -0
  74. package/Exception/handler.d.ts.map +1 -0
  75. package/Exception/handler.js +96 -0
  76. package/Exception/handler.js.map +1 -0
  77. package/Exception/index.d.ts +9 -0
  78. package/Exception/index.d.ts.map +1 -0
  79. package/Exception/index.js +34 -0
  80. package/Exception/index.js.map +1 -0
  81. package/Exception/registry.d.ts +6 -0
  82. package/Exception/registry.d.ts.map +1 -0
  83. package/Exception/registry.js +60 -0
  84. package/Exception/registry.js.map +1 -0
  85. package/Exception/types.d.ts +27 -0
  86. package/Exception/types.d.ts.map +1 -0
  87. package/Exception/types.js +15 -0
  88. package/Exception/types.js.map +1 -0
  89. package/Json/ObjectMapper.d.ts +13 -0
  90. package/Json/ObjectMapper.d.ts.map +1 -0
  91. package/Json/ObjectMapper.js +184 -0
  92. package/Json/ObjectMapper.js.map +1 -0
  93. package/Json/beanKeys.d.ts +3 -0
  94. package/Json/beanKeys.d.ts.map +1 -0
  95. package/Json/beanKeys.js +29 -0
  96. package/Json/beanKeys.js.map +1 -0
  97. package/Json/convert.d.ts +11 -0
  98. package/Json/convert.d.ts.map +1 -0
  99. package/Json/convert.js +89 -0
  100. package/Json/convert.js.map +1 -0
  101. package/Json/decorators.d.ts +15 -0
  102. package/Json/decorators.d.ts.map +1 -0
  103. package/Json/decorators.js +80 -0
  104. package/Json/decorators.js.map +1 -0
  105. package/Json/index.d.ts +13 -0
  106. package/Json/index.d.ts.map +1 -0
  107. package/Json/index.js +39 -0
  108. package/Json/index.js.map +1 -0
  109. package/Json/types.d.ts +27 -0
  110. package/Json/types.d.ts.map +1 -0
  111. package/Json/types.js +11 -0
  112. package/Json/types.js.map +1 -0
  113. package/Log/decorators.d.ts +3 -0
  114. package/Log/decorators.d.ts.map +1 -0
  115. package/Log/decorators.js +10 -0
  116. package/Log/decorators.js.map +1 -0
  117. package/Log/flag.d.ts +2 -0
  118. package/Log/flag.d.ts.map +1 -0
  119. package/Log/flag.js +5 -0
  120. package/Log/flag.js.map +1 -0
  121. package/Log/index.d.ts +9 -0
  122. package/Log/index.d.ts.map +1 -0
  123. package/Log/index.js +33 -0
  124. package/Log/index.js.map +1 -0
  125. package/Log/ip.d.ts +14 -0
  126. package/Log/ip.d.ts.map +1 -0
  127. package/Log/ip.js +125 -0
  128. package/Log/ip.js.map +1 -0
  129. package/Log/recorder.d.ts +18 -0
  130. package/Log/recorder.d.ts.map +1 -0
  131. package/Log/recorder.js +144 -0
  132. package/Log/recorder.js.map +1 -0
  133. package/Log/types.d.ts +53 -0
  134. package/Log/types.d.ts.map +1 -0
  135. package/Log/types.js +21 -0
  136. package/Log/types.js.map +1 -0
  137. package/Logger/index.d.ts +18 -0
  138. package/Logger/index.d.ts.map +1 -0
  139. package/Logger/index.js +150 -0
  140. package/Logger/index.js.map +1 -0
  141. package/Logger/types.d.ts +13 -0
  142. package/Logger/types.d.ts.map +1 -0
  143. package/Logger/types.js +3 -0
  144. package/Logger/types.js.map +1 -0
  145. package/ORM/BaseMapper.d.ts +54 -0
  146. package/ORM/BaseMapper.d.ts.map +1 -0
  147. package/ORM/BaseMapper.js +593 -0
  148. package/ORM/BaseMapper.js.map +1 -0
  149. package/ORM/DataSource.d.ts +47 -0
  150. package/ORM/DataSource.d.ts.map +1 -0
  151. package/ORM/DataSource.js +336 -0
  152. package/ORM/DataSource.js.map +1 -0
  153. package/ORM/Db.d.ts +43 -0
  154. package/ORM/Db.d.ts.map +1 -0
  155. package/ORM/Db.js +198 -0
  156. package/ORM/Db.js.map +1 -0
  157. package/ORM/IdType.d.ts +10 -0
  158. package/ORM/IdType.d.ts.map +1 -0
  159. package/ORM/IdType.js +22 -0
  160. package/ORM/IdType.js.map +1 -0
  161. package/ORM/QueryWrapper.d.ts +58 -0
  162. package/ORM/QueryWrapper.d.ts.map +1 -0
  163. package/ORM/QueryWrapper.js +289 -0
  164. package/ORM/QueryWrapper.js.map +1 -0
  165. package/ORM/config.d.ts +6 -0
  166. package/ORM/config.d.ts.map +1 -0
  167. package/ORM/config.js +70 -0
  168. package/ORM/config.js.map +1 -0
  169. package/ORM/dialect.d.ts +24 -0
  170. package/ORM/dialect.d.ts.map +1 -0
  171. package/ORM/dialect.js +169 -0
  172. package/ORM/dialect.js.map +1 -0
  173. package/ORM/enable.d.ts +4 -0
  174. package/ORM/enable.d.ts.map +1 -0
  175. package/ORM/enable.js +23 -0
  176. package/ORM/enable.js.map +1 -0
  177. package/ORM/entityDecorators.d.ts +39 -0
  178. package/ORM/entityDecorators.d.ts.map +1 -0
  179. package/ORM/entityDecorators.js +131 -0
  180. package/ORM/entityDecorators.js.map +1 -0
  181. package/ORM/errors.d.ts +9 -0
  182. package/ORM/errors.d.ts.map +1 -0
  183. package/ORM/errors.js +20 -0
  184. package/ORM/errors.js.map +1 -0
  185. package/ORM/fieldSelect.d.ts +25 -0
  186. package/ORM/fieldSelect.d.ts.map +1 -0
  187. package/ORM/fieldSelect.js +49 -0
  188. package/ORM/fieldSelect.js.map +1 -0
  189. package/ORM/fill.d.ts +6 -0
  190. package/ORM/fill.d.ts.map +1 -0
  191. package/ORM/fill.js +45 -0
  192. package/ORM/fill.js.map +1 -0
  193. package/ORM/flag.d.ts +4 -0
  194. package/ORM/flag.d.ts.map +1 -0
  195. package/ORM/flag.js +14 -0
  196. package/ORM/flag.js.map +1 -0
  197. package/ORM/hydrate.d.ts +12 -0
  198. package/ORM/hydrate.d.ts.map +1 -0
  199. package/ORM/hydrate.js +304 -0
  200. package/ORM/hydrate.js.map +1 -0
  201. package/ORM/identifier.d.ts +8 -0
  202. package/ORM/identifier.d.ts.map +1 -0
  203. package/ORM/identifier.js +47 -0
  204. package/ORM/identifier.js.map +1 -0
  205. package/ORM/index.d.ts +41 -0
  206. package/ORM/index.d.ts.map +1 -0
  207. package/ORM/index.js +119 -0
  208. package/ORM/index.js.map +1 -0
  209. package/ORM/relation.d.ts +53 -0
  210. package/ORM/relation.d.ts.map +1 -0
  211. package/ORM/relation.js +143 -0
  212. package/ORM/relation.js.map +1 -0
  213. package/ORM/resultMap.d.ts +3 -0
  214. package/ORM/resultMap.d.ts.map +1 -0
  215. package/ORM/resultMap.js +21 -0
  216. package/ORM/resultMap.js.map +1 -0
  217. package/ORM/security.d.ts +5 -0
  218. package/ORM/security.d.ts.map +1 -0
  219. package/ORM/security.js +39 -0
  220. package/ORM/security.js.map +1 -0
  221. package/ORM/sqlDecorators.d.ts +15 -0
  222. package/ORM/sqlDecorators.d.ts.map +1 -0
  223. package/ORM/sqlDecorators.js +106 -0
  224. package/ORM/sqlDecorators.js.map +1 -0
  225. package/ORM/sqlLog.d.ts +20 -0
  226. package/ORM/sqlLog.d.ts.map +1 -0
  227. package/ORM/sqlLog.js +172 -0
  228. package/ORM/sqlLog.js.map +1 -0
  229. package/ORM/sqlTemplate.d.ts +13 -0
  230. package/ORM/sqlTemplate.d.ts.map +1 -0
  231. package/ORM/sqlTemplate.js +89 -0
  232. package/ORM/sqlTemplate.js.map +1 -0
  233. package/ORM/table.d.ts +8 -0
  234. package/ORM/table.d.ts.map +1 -0
  235. package/ORM/table.js +45 -0
  236. package/ORM/table.js.map +1 -0
  237. package/ORM/tableSearch.d.ts +43 -0
  238. package/ORM/tableSearch.d.ts.map +1 -0
  239. package/ORM/tableSearch.js +205 -0
  240. package/ORM/tableSearch.js.map +1 -0
  241. package/ORM/transactional.d.ts +7 -0
  242. package/ORM/transactional.d.ts.map +1 -0
  243. package/ORM/transactional.js +43 -0
  244. package/ORM/transactional.js.map +1 -0
  245. package/ORM/types.d.ts +92 -0
  246. package/ORM/types.d.ts.map +1 -0
  247. package/ORM/types.js +3 -0
  248. package/ORM/types.js.map +1 -0
  249. package/ORM/xml/MapperXml.d.ts +10 -0
  250. package/ORM/xml/MapperXml.d.ts.map +1 -0
  251. package/ORM/xml/MapperXml.js +79 -0
  252. package/ORM/xml/MapperXml.js.map +1 -0
  253. package/ORM/xml/execute.d.ts +10 -0
  254. package/ORM/xml/execute.d.ts.map +1 -0
  255. package/ORM/xml/execute.js +53 -0
  256. package/ORM/xml/execute.js.map +1 -0
  257. package/ORM/xml/index.d.ts +11 -0
  258. package/ORM/xml/index.d.ts.map +1 -0
  259. package/ORM/xml/index.js +29 -0
  260. package/ORM/xml/index.js.map +1 -0
  261. package/ORM/xml/loadMappers.d.ts +10 -0
  262. package/ORM/xml/loadMappers.d.ts.map +1 -0
  263. package/ORM/xml/loadMappers.js +162 -0
  264. package/ORM/xml/loadMappers.js.map +1 -0
  265. package/ORM/xml/parseMapperXml.d.ts +3 -0
  266. package/ORM/xml/parseMapperXml.d.ts.map +1 -0
  267. package/ORM/xml/parseMapperXml.js +217 -0
  268. package/ORM/xml/parseMapperXml.js.map +1 -0
  269. package/ORM/xml/registry.d.ts +15 -0
  270. package/ORM/xml/registry.d.ts.map +1 -0
  271. package/ORM/xml/registry.js +57 -0
  272. package/ORM/xml/registry.js.map +1 -0
  273. package/ORM/xml/renderSql.d.ts +4 -0
  274. package/ORM/xml/renderSql.d.ts.map +1 -0
  275. package/ORM/xml/renderSql.js +178 -0
  276. package/ORM/xml/renderSql.js.map +1 -0
  277. package/ORM/xml/types.d.ts +50 -0
  278. package/ORM/xml/types.d.ts.map +1 -0
  279. package/ORM/xml/types.js +3 -0
  280. package/ORM/xml/types.js.map +1 -0
  281. package/ORM/xml/xmlMapper.d.ts +10 -0
  282. package/ORM/xml/xmlMapper.d.ts.map +1 -0
  283. package/ORM/xml/xmlMapper.js +44 -0
  284. package/ORM/xml/xmlMapper.js.map +1 -0
  285. package/README.md +41 -2
  286. package/Redis/Redis.d.ts +65 -0
  287. package/Redis/Redis.d.ts.map +1 -0
  288. package/Redis/Redis.js +622 -0
  289. package/Redis/Redis.js.map +1 -0
  290. package/Redis/cache.d.ts +4 -0
  291. package/Redis/cache.d.ts.map +1 -0
  292. package/Redis/cache.js +70 -0
  293. package/Redis/cache.js.map +1 -0
  294. package/Redis/decorators.d.ts +5 -0
  295. package/Redis/decorators.d.ts.map +1 -0
  296. package/Redis/decorators.js +20 -0
  297. package/Redis/decorators.js.map +1 -0
  298. package/Redis/enable.d.ts +4 -0
  299. package/Redis/enable.d.ts.map +1 -0
  300. package/Redis/enable.js +22 -0
  301. package/Redis/enable.js.map +1 -0
  302. package/Redis/errors.d.ts +9 -0
  303. package/Redis/errors.d.ts.map +1 -0
  304. package/Redis/errors.js +20 -0
  305. package/Redis/errors.js.map +1 -0
  306. package/Redis/flag.d.ts +4 -0
  307. package/Redis/flag.d.ts.map +1 -0
  308. package/Redis/flag.js +14 -0
  309. package/Redis/flag.js.map +1 -0
  310. package/Redis/index.d.ts +11 -0
  311. package/Redis/index.d.ts.map +1 -0
  312. package/Redis/index.js +42 -0
  313. package/Redis/index.js.map +1 -0
  314. package/Redis/rateLimit.d.ts +8 -0
  315. package/Redis/rateLimit.d.ts.map +1 -0
  316. package/Redis/rateLimit.js +82 -0
  317. package/Redis/rateLimit.js.map +1 -0
  318. package/Redis/redisson/RCountDownLatch.d.ts +12 -0
  319. package/Redis/redisson/RCountDownLatch.d.ts.map +1 -0
  320. package/Redis/redisson/RCountDownLatch.js +48 -0
  321. package/Redis/redisson/RCountDownLatch.js.map +1 -0
  322. package/Redis/redisson/RFairLock.d.ts +4 -0
  323. package/Redis/redisson/RFairLock.d.ts.map +1 -0
  324. package/Redis/redisson/RFairLock.js +29 -0
  325. package/Redis/redisson/RFairLock.js.map +1 -0
  326. package/Redis/redisson/RLock.d.ts +34 -0
  327. package/Redis/redisson/RLock.d.ts.map +1 -0
  328. package/Redis/redisson/RLock.js +146 -0
  329. package/Redis/redisson/RLock.js.map +1 -0
  330. package/Redis/redisson/RMultiLock.d.ts +15 -0
  331. package/Redis/redisson/RMultiLock.d.ts.map +1 -0
  332. package/Redis/redisson/RMultiLock.js +90 -0
  333. package/Redis/redisson/RMultiLock.js.map +1 -0
  334. package/Redis/redisson/RReadWriteLock.d.ts +9 -0
  335. package/Redis/redisson/RReadWriteLock.d.ts.map +1 -0
  336. package/Redis/redisson/RReadWriteLock.js +51 -0
  337. package/Redis/redisson/RReadWriteLock.js.map +1 -0
  338. package/Redis/redisson/RSemaphore.d.ts +13 -0
  339. package/Redis/redisson/RSemaphore.d.ts.map +1 -0
  340. package/Redis/redisson/RSemaphore.js +54 -0
  341. package/Redis/redisson/RSemaphore.js.map +1 -0
  342. package/Redis/redisson/Redisson.d.ts +30 -0
  343. package/Redis/redisson/Redisson.d.ts.map +1 -0
  344. package/Redis/redisson/Redisson.js +93 -0
  345. package/Redis/redisson/Redisson.js.map +1 -0
  346. package/Redis/redisson/index.d.ts +12 -0
  347. package/Redis/redisson/index.d.ts.map +1 -0
  348. package/Redis/redisson/index.js +32 -0
  349. package/Redis/redisson/index.js.map +1 -0
  350. package/Redis/redisson/objects.d.ts +116 -0
  351. package/Redis/redisson/objects.d.ts.map +1 -0
  352. package/Redis/redisson/objects.js +384 -0
  353. package/Redis/redisson/objects.js.map +1 -0
  354. package/Redis/redisson/scripts.d.ts +13 -0
  355. package/Redis/redisson/scripts.d.ts.map +1 -0
  356. package/Redis/redisson/scripts.js +187 -0
  357. package/Redis/redisson/scripts.js.map +1 -0
  358. package/Redis/redisson/types.d.ts +129 -0
  359. package/Redis/redisson/types.d.ts.map +1 -0
  360. package/Redis/redisson/types.js +8 -0
  361. package/Redis/redisson/types.js.map +1 -0
  362. package/Redis/redisson/utils.d.ts +9 -0
  363. package/Redis/redisson/utils.d.ts.map +1 -0
  364. package/Redis/redisson/utils.js +78 -0
  365. package/Redis/redisson/utils.js.map +1 -0
  366. package/Redis/types.d.ts +82 -0
  367. package/Redis/types.d.ts.map +1 -0
  368. package/Redis/types.js +23 -0
  369. package/Redis/types.js.map +1 -0
  370. package/Service/BaseService.d.ts +18 -0
  371. package/Service/BaseService.d.ts.map +1 -0
  372. package/Service/BaseService.js +46 -0
  373. package/Service/BaseService.js.map +1 -0
  374. package/Service/MapperType.d.ts +18 -0
  375. package/Service/MapperType.d.ts.map +1 -0
  376. package/Service/MapperType.js +46 -0
  377. package/Service/MapperType.js.map +1 -0
  378. package/Service/bean.d.ts +16 -0
  379. package/Service/bean.d.ts.map +1 -0
  380. package/Service/bean.js +72 -0
  381. package/Service/bean.js.map +1 -0
  382. package/Service/container.d.ts +18 -0
  383. package/Service/container.d.ts.map +1 -0
  384. package/Service/container.js +66 -0
  385. package/Service/container.js.map +1 -0
  386. package/Service/decorators.d.ts +12 -0
  387. package/Service/decorators.d.ts.map +1 -0
  388. package/Service/decorators.js +148 -0
  389. package/Service/decorators.js.map +1 -0
  390. package/Service/index.d.ts +11 -0
  391. package/Service/index.d.ts.map +1 -0
  392. package/Service/index.js +32 -0
  393. package/Service/index.js.map +1 -0
  394. package/Service/types.d.ts +19 -0
  395. package/Service/types.d.ts.map +1 -0
  396. package/Service/types.js +18 -0
  397. package/Service/types.js.map +1 -0
  398. package/Validate/decorators.d.ts +18 -0
  399. package/Validate/decorators.d.ts.map +1 -0
  400. package/Validate/decorators.js +77 -0
  401. package/Validate/decorators.js.map +1 -0
  402. package/Validate/engine.d.ts +5 -0
  403. package/Validate/engine.d.ts.map +1 -0
  404. package/Validate/engine.js +78 -0
  405. package/Validate/engine.js.map +1 -0
  406. package/Validate/index.d.ts +6 -0
  407. package/Validate/index.d.ts.map +1 -0
  408. package/Validate/index.js +28 -0
  409. package/Validate/index.js.map +1 -0
  410. package/Validate/rules.d.ts +11 -0
  411. package/Validate/rules.d.ts.map +1 -0
  412. package/Validate/rules.js +120 -0
  413. package/Validate/rules.js.map +1 -0
  414. package/Validate/types.d.ts +22 -0
  415. package/Validate/types.d.ts.map +1 -0
  416. package/Validate/types.js +17 -0
  417. package/Validate/types.js.map +1 -0
  418. package/config/index.d.ts +104 -0
  419. package/config/index.d.ts.map +1 -0
  420. package/config/index.js +330 -0
  421. package/config/index.js.map +1 -0
  422. package/encrypt/AESUtil.d.ts +5 -0
  423. package/encrypt/AESUtil.d.ts.map +1 -0
  424. package/encrypt/AESUtil.js +36 -0
  425. package/encrypt/AESUtil.js.map +1 -0
  426. package/encrypt/DynamicAesKeyManager.d.ts +9 -0
  427. package/encrypt/DynamicAesKeyManager.d.ts.map +1 -0
  428. package/encrypt/DynamicAesKeyManager.js +46 -0
  429. package/encrypt/DynamicAesKeyManager.js.map +1 -0
  430. package/encrypt/index.d.ts +3 -0
  431. package/encrypt/index.d.ts.map +1 -0
  432. package/encrypt/index.js +8 -0
  433. package/encrypt/index.js.map +1 -0
  434. package/index.d.ts +31 -0
  435. package/index.d.ts.map +1 -0
  436. package/index.js +260 -0
  437. package/index.js.map +1 -0
  438. package/langchain/decorators.d.ts +2 -0
  439. package/langchain/decorators.d.ts.map +1 -0
  440. package/langchain/decorators.js +6 -0
  441. package/langchain/decorators.js.map +1 -0
  442. package/langchain/index.d.ts +1 -0
  443. package/langchain/index.d.ts.map +1 -0
  444. package/langchain/index.js +2 -0
  445. package/langchain/index.js.map +1 -0
  446. package/package.json +110 -4
  447. package/schedule/ScheduleManager.d.ts +25 -0
  448. package/schedule/ScheduleManager.d.ts.map +1 -0
  449. package/schedule/ScheduleManager.js +125 -0
  450. package/schedule/ScheduleManager.js.map +1 -0
  451. package/types/enums.d.ts +11 -0
  452. package/types/enums.d.ts.map +1 -0
  453. package/types/enums.js +15 -0
  454. package/types/enums.js.map +1 -0
  455. package/utils/case.d.ts +6 -0
  456. package/utils/case.d.ts.map +1 -0
  457. package/utils/case.js +32 -0
  458. package/utils/case.js.map +1 -0
  459. package/utils/entity/PageResult/index.d.ts +20 -0
  460. package/utils/entity/PageResult/index.d.ts.map +1 -0
  461. package/utils/entity/PageResult/index.js +15 -0
  462. package/utils/entity/PageResult/index.js.map +1 -0
  463. package/utils/entity/ResponseData/index.d.ts +11 -0
  464. package/utils/entity/ResponseData/index.d.ts.map +1 -0
  465. package/utils/entity/ResponseData/index.js +25 -0
  466. package/utils/entity/ResponseData/index.js.map +1 -0
  467. package/utils/id.d.ts +2 -0
  468. package/utils/id.d.ts.map +1 -0
  469. package/utils/id.js +9 -0
  470. package/utils/id.js.map +1 -0
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RedissonLock = void 0;
7
+ const Redis_1 = __importDefault(require("../Redis"));
8
+ const errors_1 = require("../errors");
9
+ const scripts_1 = require("./scripts");
10
+ const types_1 = require("./types");
11
+ const utils_1 = require("./utils");
12
+ class RedissonLock {
13
+ constructor(name, clientId, config = types_1.defaultRedissonConfig, hooks, storageName) {
14
+ this.name = name;
15
+ this.clientId = clientId;
16
+ this.storageName = storageName;
17
+ this.renewTimer = null;
18
+ this.heldThreadId = null;
19
+ this.watchdogTimeout = config.lockWatchdogTimeout;
20
+ this.watchInterval = config.lockWatchInterval;
21
+ this.doAcquire =
22
+ hooks?.acquire ??
23
+ ((threadId, leaseMs) => (0, utils_1.evalNumber)(scripts_1.LOCK_ACQUIRE_LUA, [this.lockKey()], [
24
+ leaseMs,
25
+ this.field(threadId),
26
+ ]));
27
+ this.doUnlock =
28
+ hooks?.unlock ??
29
+ ((threadId, leaseMs) => this.unlockInner(scripts_1.LOCK_UNLOCK_LUA, threadId, leaseMs));
30
+ }
31
+ lockKey() {
32
+ return Redis_1.default.key(this.storageName ?? this.name);
33
+ }
34
+ channel() {
35
+ return (0, utils_1.channelName)(this.storageName ?? this.name);
36
+ }
37
+ field(threadId) {
38
+ return `${this.clientId}:${threadId}`;
39
+ }
40
+ async unlockInner(script, threadId, leaseMs) {
41
+ const result = await (0, utils_1.evalScript)(script, [this.lockKey(), this.channel()], [
42
+ "0",
43
+ leaseMs,
44
+ this.field(threadId),
45
+ ]);
46
+ if (result === null || result === undefined)
47
+ return null;
48
+ return Number(result);
49
+ }
50
+ async lock(leaseTimeMs) {
51
+ const ok = await this.tryLock(-1, leaseTimeMs);
52
+ if (!ok)
53
+ throw new errors_1.LockError(`获取锁失败: ${this.name}`);
54
+ }
55
+ async tryLock(waitTimeMs, leaseTimeMs) {
56
+ const threadId = this.heldThreadId ?? (0, utils_1.currentThreadId)(this.clientId);
57
+ return (0, utils_1.runWithThreadIdAsync)(threadId, async () => {
58
+ const wait = waitTimeMs === undefined ? 0 : waitTimeMs;
59
+ const useWatchdog = leaseTimeMs === undefined || leaseTimeMs < 0;
60
+ const lease = useWatchdog
61
+ ? this.watchdogTimeout
62
+ : Math.max(1, leaseTimeMs);
63
+ const deadline = wait < 0 ? Number.POSITIVE_INFINITY : Date.now() + Math.max(0, wait);
64
+ for (;;) {
65
+ const ttl = await this.doAcquire(threadId, lease);
66
+ if (ttl === null) {
67
+ this.heldThreadId = threadId;
68
+ if (useWatchdog)
69
+ this.scheduleWatchdog(threadId, lease);
70
+ return true;
71
+ }
72
+ if (Date.now() >= deadline)
73
+ return false;
74
+ const remain = Math.min(Math.max(ttl > 0 ? ttl : this.watchInterval, this.watchInterval), Math.max(0, deadline - Date.now()));
75
+ if (remain <= 0)
76
+ return false;
77
+ const notified = await (0, utils_1.waitNotify)(this.channel(), Math.min(remain, 3000));
78
+ if (!notified) {
79
+ await (0, utils_1.sleep)(Math.min(this.watchInterval, remain));
80
+ }
81
+ }
82
+ });
83
+ }
84
+ scheduleWatchdog(threadId, leaseMs) {
85
+ this.cancelWatchdog();
86
+ const every = Math.max(100, Math.floor(leaseMs / 3));
87
+ this.renewTimer = setInterval(() => {
88
+ void (0, utils_1.evalNumber)(scripts_1.LOCK_RENEW_LUA, [this.lockKey()], [
89
+ leaseMs,
90
+ this.field(threadId),
91
+ ]).then((ok) => {
92
+ if (ok !== 1)
93
+ this.cancelWatchdog();
94
+ });
95
+ }, every);
96
+ if (typeof this.renewTimer === "object" && "unref" in this.renewTimer) {
97
+ this.renewTimer.unref?.();
98
+ }
99
+ }
100
+ cancelWatchdog() {
101
+ if (this.renewTimer) {
102
+ clearInterval(this.renewTimer);
103
+ this.renewTimer = null;
104
+ }
105
+ }
106
+ async unlock() {
107
+ const threadId = this.heldThreadId ?? (0, utils_1.currentThreadId)(this.clientId);
108
+ const result = await this.doUnlock(threadId, this.watchdogTimeout);
109
+ if (result === null) {
110
+ throw new errors_1.LockError(`无法解锁(非持有者): ${this.name}`);
111
+ }
112
+ if (result === 1) {
113
+ this.cancelWatchdog();
114
+ this.heldThreadId = null;
115
+ }
116
+ }
117
+ async forceUnlock() {
118
+ this.cancelWatchdog();
119
+ this.heldThreadId = null;
120
+ const n = await (0, utils_1.evalNumber)(scripts_1.LOCK_FORCE_UNLOCK_LUA, [this.lockKey(), this.channel()], ["0"]);
121
+ return n === 1;
122
+ }
123
+ async isLocked() {
124
+ const client = await Redis_1.default.getClient();
125
+ const n = await client.exists(this.lockKey());
126
+ return Number(n) > 0;
127
+ }
128
+ async isHeldByCurrentThread() {
129
+ const threadId = this.heldThreadId ?? (0, utils_1.currentThreadId)(this.clientId);
130
+ const client = await Redis_1.default.getClient();
131
+ const n = await client.hExists(this.lockKey(), this.field(threadId));
132
+ return Number(n) === 1;
133
+ }
134
+ async getHoldCount() {
135
+ const threadId = this.heldThreadId ?? (0, utils_1.currentThreadId)(this.clientId);
136
+ const client = await Redis_1.default.getClient();
137
+ const v = await client.hGet(this.lockKey(), this.field(threadId));
138
+ return v == null ? 0 : Number(v);
139
+ }
140
+ async remainTimeToLive() {
141
+ const client = await Redis_1.default.getClient();
142
+ return client.pTTL(this.lockKey());
143
+ }
144
+ }
145
+ exports.RedissonLock = RedissonLock;
146
+ //# sourceMappingURL=RLock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RLock.js","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/RLock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { RLock } from "./types";
2
+ export declare class RedissonMultiLock implements RLock {
3
+ private readonly locks;
4
+ readonly name: string;
5
+ constructor(locks: RLock[]);
6
+ lock(leaseTimeMs?: number): Promise<void>;
7
+ tryLock(waitTimeMs?: number, leaseTimeMs?: number): Promise<boolean>;
8
+ unlock(): Promise<void>;
9
+ forceUnlock(): Promise<boolean>;
10
+ isLocked(): Promise<boolean>;
11
+ isHeldByCurrentThread(): Promise<boolean>;
12
+ getHoldCount(): Promise<number>;
13
+ remainTimeToLive(): Promise<number>;
14
+ }
15
+ //# sourceMappingURL=RMultiLock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RMultiLock.d.ts","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/RMultiLock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKrC,qBAAa,iBAAkB,YAAW,KAAK;IAGjC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFlC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEO,KAAK,EAAE,KAAK,EAAE;IAKrC,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA8BpE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAMvB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAQ/B,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAO5B,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;IAOzC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ/B,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;CAO1C"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RedissonMultiLock = void 0;
4
+ const errors_1 = require("../errors");
5
+ class RedissonMultiLock {
6
+ constructor(locks) {
7
+ this.locks = locks;
8
+ if (!locks.length)
9
+ throw new errors_1.LockError("MultiLock 至少需要一把锁");
10
+ this.name = locks.map((l) => l.name).join(",");
11
+ }
12
+ async lock(leaseTimeMs) {
13
+ const ok = await this.tryLock(-1, leaseTimeMs);
14
+ if (!ok)
15
+ throw new errors_1.LockError(`获取联锁失败: ${this.name}`);
16
+ }
17
+ async tryLock(waitTimeMs, leaseTimeMs) {
18
+ const acquired = [];
19
+ try {
20
+ for (const lock of this.locks) {
21
+ const ok = await lock.tryLock(waitTimeMs, leaseTimeMs);
22
+ if (!ok) {
23
+ for (const a of acquired.reverse()) {
24
+ try {
25
+ await a.unlock();
26
+ }
27
+ catch {
28
+ }
29
+ }
30
+ return false;
31
+ }
32
+ acquired.push(lock);
33
+ }
34
+ return true;
35
+ }
36
+ catch (e) {
37
+ for (const a of acquired.reverse()) {
38
+ try {
39
+ await a.unlock();
40
+ }
41
+ catch {
42
+ }
43
+ }
44
+ throw e;
45
+ }
46
+ }
47
+ async unlock() {
48
+ for (const lock of [...this.locks].reverse()) {
49
+ await lock.unlock();
50
+ }
51
+ }
52
+ async forceUnlock() {
53
+ let any = false;
54
+ for (const lock of [...this.locks].reverse()) {
55
+ if (await lock.forceUnlock())
56
+ any = true;
57
+ }
58
+ return any;
59
+ }
60
+ async isLocked() {
61
+ for (const lock of this.locks) {
62
+ if (!(await lock.isLocked()))
63
+ return false;
64
+ }
65
+ return true;
66
+ }
67
+ async isHeldByCurrentThread() {
68
+ for (const lock of this.locks) {
69
+ if (!(await lock.isHeldByCurrentThread()))
70
+ return false;
71
+ }
72
+ return true;
73
+ }
74
+ async getHoldCount() {
75
+ let min = Number.POSITIVE_INFINITY;
76
+ for (const lock of this.locks) {
77
+ min = Math.min(min, await lock.getHoldCount());
78
+ }
79
+ return Number.isFinite(min) ? min : 0;
80
+ }
81
+ async remainTimeToLive() {
82
+ let min = Number.POSITIVE_INFINITY;
83
+ for (const lock of this.locks) {
84
+ min = Math.min(min, await lock.remainTimeToLive());
85
+ }
86
+ return Number.isFinite(min) ? min : -2;
87
+ }
88
+ }
89
+ exports.RedissonMultiLock = RedissonMultiLock;
90
+ //# sourceMappingURL=RMultiLock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RMultiLock.js","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/RMultiLock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { RedissonConfig, RLock, RReadWriteLock } from "./types";
2
+ export declare class RedissonReadWriteLock implements RReadWriteLock {
3
+ private readonly read;
4
+ private readonly write;
5
+ constructor(name: string, clientId: string, config?: Required<RedissonConfig>);
6
+ readLock(): RLock;
7
+ writeLock(): RLock;
8
+ }
9
+ //# sourceMappingURL=RReadWriteLock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RReadWriteLock.d.ts","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/RReadWriteLock.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAIrE,qBAAa,qBAAsB,YAAW,cAAc;IAC1D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAG5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,QAAQ,CAAC,cAAc,CAAyB;IAsD1D,QAAQ,IAAI,KAAK;IAIjB,SAAS,IAAI,KAAK;CAGnB"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RedissonReadWriteLock = void 0;
7
+ const Redis_1 = __importDefault(require("../Redis"));
8
+ const scripts_1 = require("./scripts");
9
+ const RLock_1 = require("./RLock");
10
+ const types_1 = require("./types");
11
+ const utils_1 = require("./utils");
12
+ class RedissonReadWriteLock {
13
+ constructor(name, clientId, config = types_1.defaultRedissonConfig) {
14
+ const storage = `${name}:rwlock`;
15
+ const key = () => Redis_1.default.key(storage);
16
+ const ch = () => (0, utils_1.channelName)(storage);
17
+ const field = (threadId) => `${clientId}:${threadId}`;
18
+ this.read = new RLock_1.RedissonLock(`${name}:read`, clientId, config, {
19
+ acquire: (threadId, leaseMs) => (0, utils_1.evalNumber)(scripts_1.READ_LOCK_ACQUIRE_LUA, [key()], [
20
+ leaseMs,
21
+ field(threadId),
22
+ ]),
23
+ unlock: async (threadId, leaseMs) => {
24
+ const result = await (0, utils_1.evalScript)(scripts_1.READ_LOCK_UNLOCK_LUA, [key(), ch()], ["0", field(threadId), leaseMs]);
25
+ if (result === null || result === undefined)
26
+ return null;
27
+ return Number(result);
28
+ },
29
+ }, storage);
30
+ this.write = new RLock_1.RedissonLock(`${name}:write`, clientId, config, {
31
+ acquire: (threadId, leaseMs) => (0, utils_1.evalNumber)(scripts_1.WRITE_LOCK_ACQUIRE_LUA, [key()], [
32
+ leaseMs,
33
+ field(threadId),
34
+ ]),
35
+ unlock: async (threadId, leaseMs) => {
36
+ const result = await (0, utils_1.evalScript)(scripts_1.WRITE_LOCK_UNLOCK_LUA, [key(), ch()], ["0", field(threadId), leaseMs]);
37
+ if (result === null || result === undefined)
38
+ return null;
39
+ return Number(result);
40
+ },
41
+ }, storage);
42
+ }
43
+ readLock() {
44
+ return this.read;
45
+ }
46
+ writeLock() {
47
+ return this.write;
48
+ }
49
+ }
50
+ exports.RedissonReadWriteLock = RedissonReadWriteLock;
51
+ //# sourceMappingURL=RReadWriteLock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RReadWriteLock.js","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/RReadWriteLock.ts"],"names":[],"mappings":";;;;;;AAAA,qDAA6B;AAC7B,uCAKmB;AACnB,mCAAuC;AAEvC,mCAAgD;AAChD,mCAA8D;AAE9D,MAAa,qBAAqB;IAIhC,YACE,IAAY,EACZ,QAAgB,EAChB,SAAmC,6BAAqB;QAExD,MAAM,OAAO,GAAG,GAAG,IAAI,SAAS,CAAC;QACjC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,IAAA,mBAAW,EAAC,OAAO,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAE9D,IAAI,CAAC,IAAI,GAAG,IAAI,oBAAY,CAC1B,GAAG,IAAI,OAAO,EACd,QAAQ,EACR,MAAM,EACN;YACE,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAC7B,IAAA,kBAAU,EAAC,+BAAqB,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE;gBACzC,OAAO;gBACP,KAAK,CAAC,QAAQ,CAAC;aAChB,CAAC;YACJ,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;gBAClC,MAAM,MAAM,GAAG,MAAM,IAAA,kBAAU,EAC7B,8BAAoB,EACpB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EACb,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAChC,CAAC;gBACF,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;oBAAE,OAAO,IAAI,CAAC;gBACzD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;SACF,EACD,OAAO,CACR,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAY,CAC3B,GAAG,IAAI,QAAQ,EACf,QAAQ,EACR,MAAM,EACN;YACE,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAC7B,IAAA,kBAAU,EAAC,gCAAsB,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE;gBAC1C,OAAO;gBACP,KAAK,CAAC,QAAQ,CAAC;aAChB,CAAC;YACJ,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;gBAClC,MAAM,MAAM,GAAG,MAAM,IAAA,kBAAU,EAC7B,+BAAqB,EACrB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EACb,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAChC,CAAC;gBACF,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;oBAAE,OAAO,IAAI,CAAC;gBACzD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;SACF,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF;AApED,sDAoEC"}
@@ -0,0 +1,13 @@
1
+ import type { RSemaphore } from "./types";
2
+ export declare class RedissonSemaphore implements RSemaphore {
3
+ readonly name: string;
4
+ constructor(name: string);
5
+ private key;
6
+ private channel;
7
+ trySetPermits(permits: number): Promise<boolean>;
8
+ availablePermits(): Promise<number>;
9
+ acquire(permits?: number): Promise<void>;
10
+ tryAcquire(permits?: number, waitTimeMs?: number): Promise<boolean>;
11
+ release(permits?: number): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=RSemaphore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RSemaphore.d.ts","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/RSemaphore.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAS1C,qBAAa,iBAAkB,YAAW,UAAU;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;IAEjC,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,OAAO;IAIT,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhD,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKnC,OAAO,CAAC,OAAO,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,UAAU,CAAC,OAAO,SAAI,EAAE,UAAU,SAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBzD,OAAO,CAAC,OAAO,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAO1C"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RedissonSemaphore = void 0;
7
+ const Redis_1 = __importDefault(require("../Redis"));
8
+ const scripts_1 = require("./scripts");
9
+ const utils_1 = require("./utils");
10
+ class RedissonSemaphore {
11
+ constructor(name) {
12
+ this.name = name;
13
+ }
14
+ key() {
15
+ return Redis_1.default.key(`semaphore:${this.name}`);
16
+ }
17
+ channel() {
18
+ return (0, utils_1.channelName)(`semaphore:${this.name}`);
19
+ }
20
+ async trySetPermits(permits) {
21
+ return Redis_1.default.setNX(`semaphore:${this.name}`, String(Math.max(0, permits)));
22
+ }
23
+ async availablePermits() {
24
+ const v = await Redis_1.default.get(`semaphore:${this.name}`);
25
+ return v == null ? 0 : Number(v);
26
+ }
27
+ async acquire(permits = 1) {
28
+ const ok = await this.tryAcquire(permits, -1);
29
+ if (!ok)
30
+ throw new Error(`获取信号量失败: ${this.name}`);
31
+ }
32
+ async tryAcquire(permits = 1, waitTimeMs = 0) {
33
+ const n = Math.max(1, permits);
34
+ const deadline = waitTimeMs < 0
35
+ ? Number.POSITIVE_INFINITY
36
+ : Date.now() + Math.max(0, waitTimeMs);
37
+ for (;;) {
38
+ const ok = await (0, utils_1.evalNumber)(scripts_1.SEMAPHORE_TRY_ACQUIRE_LUA, [this.key()], [0, n]);
39
+ if (ok === 1)
40
+ return true;
41
+ if (Date.now() >= deadline)
42
+ return false;
43
+ const remain = Math.max(0, deadline - Date.now());
44
+ const notified = await (0, utils_1.waitNotify)(this.channel(), Math.min(remain, 2000));
45
+ if (!notified)
46
+ await (0, utils_1.sleep)(Math.min(50, remain));
47
+ }
48
+ }
49
+ async release(permits = 1) {
50
+ await (0, utils_1.evalScript)(scripts_1.SEMAPHORE_RELEASE_LUA, [this.key(), this.channel()], [Math.max(1, permits)]);
51
+ }
52
+ }
53
+ exports.RedissonSemaphore = RedissonSemaphore;
54
+ //# sourceMappingURL=RSemaphore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RSemaphore.js","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/RSemaphore.ts"],"names":[],"mappings":";;;;;;AAAA,qDAA6B;AAC7B,uCAGmB;AAEnB,mCAMiB;AAEjB,MAAa,iBAAiB;IAC5B,YAAqB,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAE7B,GAAG;QACT,OAAO,eAAK,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAEO,OAAO;QACb,OAAO,IAAA,mBAAW,EAAC,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAe;QACjC,OAAO,eAAK,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,CAAC,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC;QACvB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/B,MAAM,QAAQ,GACZ,UAAU,GAAG,CAAC;YACZ,CAAC,CAAC,MAAM,CAAC,iBAAiB;YAC1B,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAE3C,SAAS,CAAC;YAER,MAAM,EAAE,GAAG,MAAM,IAAA,kBAAU,EACzB,mCAAyB,EACzB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EACZ,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,IAAI,EAAE,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC1B,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;gBAAE,OAAO,KAAK,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,MAAM,IAAA,kBAAU,EAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1E,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC;QACvB,MAAM,IAAA,kBAAU,EACd,+BAAqB,EACrB,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAC5B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CACvB,CAAC;IACJ,CAAC;CACF;AAtDD,8CAsDC"}
@@ -0,0 +1,30 @@
1
+ import type { RAtomicLong, RBitSet, RBucket, RCountDownLatch, RList, RLock, RMap, RQueue, RRateLimiter, RReadWriteLock, RScoredSortedSet, RSemaphore, RSet, RTopic, RedissonConfig } from "./types";
2
+ declare class RedissonClient {
3
+ private readonly clientId;
4
+ private config;
5
+ constructor(config?: RedissonConfig);
6
+ configure(config: RedissonConfig): void;
7
+ getClientId(): string;
8
+ getLock(name: string): RLock;
9
+ getFairLock(name: string): RLock;
10
+ getReadWriteLock(name: string): RReadWriteLock;
11
+ getMultiLock(...locks: RLock[]): RLock;
12
+ getSemaphore(name: string): RSemaphore;
13
+ getCountDownLatch(name: string): RCountDownLatch;
14
+ getAtomicLong(name: string): RAtomicLong;
15
+ getBucket<T = unknown>(name: string): RBucket<T>;
16
+ getMap<V = string>(name: string): RMap<V>;
17
+ getSet(name: string): RSet;
18
+ getList(name: string): RList;
19
+ getScoredSortedSet(name: string): RScoredSortedSet;
20
+ getTopic(name: string): RTopic;
21
+ getRateLimiter(name: string): RRateLimiter;
22
+ getBitSet(name: string): RBitSet;
23
+ getQueue(name: string): RQueue;
24
+ withLock<T>(name: string, fn: () => Promise<T> | T, leaseTimeMs?: number): Promise<T>;
25
+ }
26
+ export declare const Redisson: RedissonClient;
27
+ export declare function createRedisson(config?: RedissonConfig): RedissonClient;
28
+ export type { RedissonClient };
29
+ export declare function randomLockToken(): string;
30
+ //# sourceMappingURL=Redisson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Redisson.d.ts","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/Redisson.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EACV,WAAW,EACX,OAAO,EACP,OAAO,EACP,eAAe,EACf,KAAK,EACL,KAAK,EACL,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,IAAI,EACJ,MAAM,EACN,cAAc,EACf,MAAM,SAAS,CAAC;AAYjB,cAAM,cAAc;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,MAAM,CAA2B;gBAE7B,MAAM,GAAE,cAAmB;IAMvC,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAIvC,WAAW,IAAI,MAAM;IAMrB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAI5B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAIhC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IAI9C,YAAY,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK;IAMtC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAItC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAMhD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAIxC,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhD,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAIzC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAI5B,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;IAIlD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI9B,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY;IAI1C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIhC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOxB,QAAQ,CAAC,CAAC,EACd,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACxB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,CAAC;CASd;AAGD,eAAO,MAAM,QAAQ,gBAAuB,CAAC;AAG7C,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,cAAc,CAEtE;AAED,YAAY,EAAE,cAAc,EAAE,CAAC;AAG/B,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Redisson = void 0;
4
+ exports.createRedisson = createRedisson;
5
+ exports.randomLockToken = randomLockToken;
6
+ const crypto_1 = require("crypto");
7
+ const RFairLock_1 = require("./RFairLock");
8
+ const RLock_1 = require("./RLock");
9
+ const RMultiLock_1 = require("./RMultiLock");
10
+ const RReadWriteLock_1 = require("./RReadWriteLock");
11
+ const RCountDownLatch_1 = require("./RCountDownLatch");
12
+ const RSemaphore_1 = require("./RSemaphore");
13
+ const objects_1 = require("./objects");
14
+ const types_1 = require("./types");
15
+ const utils_1 = require("./utils");
16
+ class RedissonClient {
17
+ constructor(config = {}) {
18
+ this.clientId = (0, utils_1.createClientId)();
19
+ this.config = { ...types_1.defaultRedissonConfig, ...config };
20
+ }
21
+ configure(config) {
22
+ this.config = { ...this.config, ...config };
23
+ }
24
+ getClientId() {
25
+ return this.clientId;
26
+ }
27
+ getLock(name) {
28
+ return new RLock_1.RedissonLock(name, this.clientId, this.config);
29
+ }
30
+ getFairLock(name) {
31
+ return (0, RFairLock_1.createFairLock)(name, this.clientId, this.config);
32
+ }
33
+ getReadWriteLock(name) {
34
+ return new RReadWriteLock_1.RedissonReadWriteLock(name, this.clientId, this.config);
35
+ }
36
+ getMultiLock(...locks) {
37
+ return new RMultiLock_1.RedissonMultiLock(locks);
38
+ }
39
+ getSemaphore(name) {
40
+ return new RSemaphore_1.RedissonSemaphore(name);
41
+ }
42
+ getCountDownLatch(name) {
43
+ return new RCountDownLatch_1.RedissonCountDownLatch(name);
44
+ }
45
+ getAtomicLong(name) {
46
+ return new objects_1.RedissonAtomicLong(name);
47
+ }
48
+ getBucket(name) {
49
+ return new objects_1.RedissonBucket(name);
50
+ }
51
+ getMap(name) {
52
+ return new objects_1.RedissonMap(name);
53
+ }
54
+ getSet(name) {
55
+ return new objects_1.RedissonSet(name);
56
+ }
57
+ getList(name) {
58
+ return new objects_1.RedissonList(name);
59
+ }
60
+ getScoredSortedSet(name) {
61
+ return new objects_1.RedissonScoredSortedSet(name);
62
+ }
63
+ getTopic(name) {
64
+ return new objects_1.RedissonTopic(name);
65
+ }
66
+ getRateLimiter(name) {
67
+ return new objects_1.RedissonRateLimiter(name);
68
+ }
69
+ getBitSet(name) {
70
+ return new objects_1.RedissonBitSet(name);
71
+ }
72
+ getQueue(name) {
73
+ return new objects_1.RedissonQueue(name);
74
+ }
75
+ async withLock(name, fn, leaseTimeMs) {
76
+ const lock = this.getLock(name);
77
+ await lock.lock(leaseTimeMs);
78
+ try {
79
+ return await fn();
80
+ }
81
+ finally {
82
+ await lock.unlock();
83
+ }
84
+ }
85
+ }
86
+ exports.Redisson = new RedissonClient();
87
+ function createRedisson(config) {
88
+ return new RedissonClient(config);
89
+ }
90
+ function randomLockToken() {
91
+ return (0, crypto_1.randomBytes)(8).toString("hex");
92
+ }
93
+ //# sourceMappingURL=Redisson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Redisson.js","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/Redisson.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export { Redisson, createRedisson } from "./Redisson";
2
+ export type { RedissonClient } from "./Redisson";
3
+ export { RedissonLock } from "./RLock";
4
+ export { createFairLock } from "./RFairLock";
5
+ export { RedissonReadWriteLock } from "./RReadWriteLock";
6
+ export { RedissonMultiLock } from "./RMultiLock";
7
+ export { RedissonSemaphore } from "./RSemaphore";
8
+ export { RedissonCountDownLatch } from "./RCountDownLatch";
9
+ export { RedissonAtomicLong, RedissonBucket, RedissonMap, RedissonSet, RedissonList, RedissonScoredSortedSet, RedissonTopic, RedissonRateLimiter, RedissonBitSet, RedissonQueue, } from "./objects";
10
+ export type { RedissonConfig, RLock, RReadWriteLock, RSemaphore, RCountDownLatch, RAtomicLong, RBucket, RMap, RSet, RList, RScoredSortedSet, RTopic, RRateLimiter, RBitSet, RQueue, } from "./types";
11
+ export { defaultRedissonConfig } from "./types";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,uBAAuB,EACvB,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,cAAc,EACd,KAAK,EACL,cAAc,EACd,UAAU,EACV,eAAe,EACf,WAAW,EACX,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,gBAAgB,EAChB,MAAM,EACN,YAAY,EACZ,OAAO,EACP,MAAM,GACP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultRedissonConfig = exports.RedissonQueue = exports.RedissonBitSet = exports.RedissonRateLimiter = exports.RedissonTopic = exports.RedissonScoredSortedSet = exports.RedissonList = exports.RedissonSet = exports.RedissonMap = exports.RedissonBucket = exports.RedissonAtomicLong = exports.RedissonCountDownLatch = exports.RedissonSemaphore = exports.RedissonMultiLock = exports.RedissonReadWriteLock = exports.createFairLock = exports.RedissonLock = exports.createRedisson = exports.Redisson = void 0;
4
+ var Redisson_1 = require("./Redisson");
5
+ Object.defineProperty(exports, "Redisson", { enumerable: true, get: function () { return Redisson_1.Redisson; } });
6
+ Object.defineProperty(exports, "createRedisson", { enumerable: true, get: function () { return Redisson_1.createRedisson; } });
7
+ var RLock_1 = require("./RLock");
8
+ Object.defineProperty(exports, "RedissonLock", { enumerable: true, get: function () { return RLock_1.RedissonLock; } });
9
+ var RFairLock_1 = require("./RFairLock");
10
+ Object.defineProperty(exports, "createFairLock", { enumerable: true, get: function () { return RFairLock_1.createFairLock; } });
11
+ var RReadWriteLock_1 = require("./RReadWriteLock");
12
+ Object.defineProperty(exports, "RedissonReadWriteLock", { enumerable: true, get: function () { return RReadWriteLock_1.RedissonReadWriteLock; } });
13
+ var RMultiLock_1 = require("./RMultiLock");
14
+ Object.defineProperty(exports, "RedissonMultiLock", { enumerable: true, get: function () { return RMultiLock_1.RedissonMultiLock; } });
15
+ var RSemaphore_1 = require("./RSemaphore");
16
+ Object.defineProperty(exports, "RedissonSemaphore", { enumerable: true, get: function () { return RSemaphore_1.RedissonSemaphore; } });
17
+ var RCountDownLatch_1 = require("./RCountDownLatch");
18
+ Object.defineProperty(exports, "RedissonCountDownLatch", { enumerable: true, get: function () { return RCountDownLatch_1.RedissonCountDownLatch; } });
19
+ var objects_1 = require("./objects");
20
+ Object.defineProperty(exports, "RedissonAtomicLong", { enumerable: true, get: function () { return objects_1.RedissonAtomicLong; } });
21
+ Object.defineProperty(exports, "RedissonBucket", { enumerable: true, get: function () { return objects_1.RedissonBucket; } });
22
+ Object.defineProperty(exports, "RedissonMap", { enumerable: true, get: function () { return objects_1.RedissonMap; } });
23
+ Object.defineProperty(exports, "RedissonSet", { enumerable: true, get: function () { return objects_1.RedissonSet; } });
24
+ Object.defineProperty(exports, "RedissonList", { enumerable: true, get: function () { return objects_1.RedissonList; } });
25
+ Object.defineProperty(exports, "RedissonScoredSortedSet", { enumerable: true, get: function () { return objects_1.RedissonScoredSortedSet; } });
26
+ Object.defineProperty(exports, "RedissonTopic", { enumerable: true, get: function () { return objects_1.RedissonTopic; } });
27
+ Object.defineProperty(exports, "RedissonRateLimiter", { enumerable: true, get: function () { return objects_1.RedissonRateLimiter; } });
28
+ Object.defineProperty(exports, "RedissonBitSet", { enumerable: true, get: function () { return objects_1.RedissonBitSet; } });
29
+ Object.defineProperty(exports, "RedissonQueue", { enumerable: true, get: function () { return objects_1.RedissonQueue; } });
30
+ var types_1 = require("./types");
31
+ Object.defineProperty(exports, "defaultRedissonConfig", { enumerable: true, get: function () { return types_1.defaultRedissonConfig; } });
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/index.ts"],"names":[],"mappings":";;;AAAA,uCAAsD;AAA7C,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AAEjC,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AACvB,mDAAyD;AAAhD,uHAAA,qBAAqB,OAAA;AAC9B,2CAAiD;AAAxC,+GAAA,iBAAiB,OAAA;AAC1B,2CAAiD;AAAxC,+GAAA,iBAAiB,OAAA;AAC1B,qDAA2D;AAAlD,yHAAA,sBAAsB,OAAA;AAC/B,qCAWmB;AAVjB,6GAAA,kBAAkB,OAAA;AAClB,yGAAA,cAAc,OAAA;AACd,sGAAA,WAAW,OAAA;AACX,sGAAA,WAAW,OAAA;AACX,uGAAA,YAAY,OAAA;AACZ,kHAAA,uBAAuB,OAAA;AACvB,wGAAA,aAAa,OAAA;AACb,8GAAA,mBAAmB,OAAA;AACnB,yGAAA,cAAc,OAAA;AACd,wGAAA,aAAa,OAAA;AAmBf,iCAAgD;AAAvC,8GAAA,qBAAqB,OAAA"}