@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.
- package/Application/callbackArgs.d.ts +5 -0
- package/Application/callbackArgs.d.ts.map +1 -0
- package/Application/callbackArgs.js +98 -0
- package/Application/callbackArgs.js.map +1 -0
- package/Application/decorators.d.ts +29 -0
- package/Application/decorators.d.ts.map +1 -0
- package/Application/decorators.js +181 -0
- package/Application/decorators.js.map +1 -0
- package/Application/index.d.ts +58 -0
- package/Application/index.d.ts.map +1 -0
- package/Application/index.js +573 -0
- package/Application/index.js.map +1 -0
- package/Application/interceptors.d.ts +27 -0
- package/Application/interceptors.d.ts.map +1 -0
- package/Application/interceptors.js +58 -0
- package/Application/interceptors.js.map +1 -0
- package/Application/lifecycle.d.ts +8 -0
- package/Application/lifecycle.d.ts.map +1 -0
- package/Application/lifecycle.js +96 -0
- package/Application/lifecycle.js.map +1 -0
- package/Application/metadata.d.ts +32 -0
- package/Application/metadata.d.ts.map +1 -0
- package/Application/metadata.js +230 -0
- package/Application/metadata.js.map +1 -0
- package/Application/processGuards.d.ts +2 -0
- package/Application/processGuards.d.ts.map +1 -0
- package/Application/processGuards.js +18 -0
- package/Application/processGuards.js.map +1 -0
- package/Application/types.d.ts +42 -0
- package/Application/types.d.ts.map +1 -0
- package/Application/types.js +13 -0
- package/Application/types.js.map +1 -0
- package/Application/warmup.d.ts +2 -0
- package/Application/warmup.d.ts.map +1 -0
- package/Application/warmup.js +78 -0
- package/Application/warmup.js.map +1 -0
- package/Auth/AuthUtil.d.ts +36 -0
- package/Auth/AuthUtil.d.ts.map +1 -0
- package/Auth/AuthUtil.js +305 -0
- package/Auth/AuthUtil.js.map +1 -0
- package/Auth/context.d.ts +5 -0
- package/Auth/context.d.ts.map +1 -0
- package/Auth/context.js +10 -0
- package/Auth/context.js.map +1 -0
- package/Auth/errors.d.ts +15 -0
- package/Auth/errors.d.ts.map +1 -0
- package/Auth/errors.js +34 -0
- package/Auth/errors.js.map +1 -0
- package/Auth/flag.d.ts +2 -0
- package/Auth/flag.d.ts.map +1 -0
- package/Auth/flag.js +5 -0
- package/Auth/flag.js.map +1 -0
- package/Auth/index.d.ts +11 -0
- package/Auth/index.d.ts.map +1 -0
- package/Auth/index.js +128 -0
- package/Auth/index.js.map +1 -0
- package/Auth/store.d.ts +47 -0
- package/Auth/store.d.ts.map +1 -0
- package/Auth/store.js +151 -0
- package/Auth/store.js.map +1 -0
- package/Auth/token.d.ts +10 -0
- package/Auth/token.d.ts.map +1 -0
- package/Auth/token.js +74 -0
- package/Auth/token.js.map +1 -0
- package/Auth/types.d.ts +76 -0
- package/Auth/types.d.ts.map +1 -0
- package/Auth/types.js +3 -0
- package/Auth/types.js.map +1 -0
- package/Exception/decorators.d.ts +4 -0
- package/Exception/decorators.d.ts.map +1 -0
- package/Exception/decorators.js +40 -0
- package/Exception/decorators.js.map +1 -0
- package/Exception/handler.d.ts +3 -0
- package/Exception/handler.d.ts.map +1 -0
- package/Exception/handler.js +96 -0
- package/Exception/handler.js.map +1 -0
- package/Exception/index.d.ts +9 -0
- package/Exception/index.d.ts.map +1 -0
- package/Exception/index.js +34 -0
- package/Exception/index.js.map +1 -0
- package/Exception/registry.d.ts +6 -0
- package/Exception/registry.d.ts.map +1 -0
- package/Exception/registry.js +60 -0
- package/Exception/registry.js.map +1 -0
- package/Exception/types.d.ts +27 -0
- package/Exception/types.d.ts.map +1 -0
- package/Exception/types.js +15 -0
- package/Exception/types.js.map +1 -0
- package/Json/ObjectMapper.d.ts +13 -0
- package/Json/ObjectMapper.d.ts.map +1 -0
- package/Json/ObjectMapper.js +184 -0
- package/Json/ObjectMapper.js.map +1 -0
- package/Json/beanKeys.d.ts +3 -0
- package/Json/beanKeys.d.ts.map +1 -0
- package/Json/beanKeys.js +29 -0
- package/Json/beanKeys.js.map +1 -0
- package/Json/convert.d.ts +11 -0
- package/Json/convert.d.ts.map +1 -0
- package/Json/convert.js +89 -0
- package/Json/convert.js.map +1 -0
- package/Json/decorators.d.ts +15 -0
- package/Json/decorators.d.ts.map +1 -0
- package/Json/decorators.js +80 -0
- package/Json/decorators.js.map +1 -0
- package/Json/index.d.ts +13 -0
- package/Json/index.d.ts.map +1 -0
- package/Json/index.js +39 -0
- package/Json/index.js.map +1 -0
- package/Json/types.d.ts +27 -0
- package/Json/types.d.ts.map +1 -0
- package/Json/types.js +11 -0
- package/Json/types.js.map +1 -0
- package/Log/decorators.d.ts +3 -0
- package/Log/decorators.d.ts.map +1 -0
- package/Log/decorators.js +10 -0
- package/Log/decorators.js.map +1 -0
- package/Log/flag.d.ts +2 -0
- package/Log/flag.d.ts.map +1 -0
- package/Log/flag.js +5 -0
- package/Log/flag.js.map +1 -0
- package/Log/index.d.ts +9 -0
- package/Log/index.d.ts.map +1 -0
- package/Log/index.js +33 -0
- package/Log/index.js.map +1 -0
- package/Log/ip.d.ts +14 -0
- package/Log/ip.d.ts.map +1 -0
- package/Log/ip.js +125 -0
- package/Log/ip.js.map +1 -0
- package/Log/recorder.d.ts +18 -0
- package/Log/recorder.d.ts.map +1 -0
- package/Log/recorder.js +144 -0
- package/Log/recorder.js.map +1 -0
- package/Log/types.d.ts +53 -0
- package/Log/types.d.ts.map +1 -0
- package/Log/types.js +21 -0
- package/Log/types.js.map +1 -0
- package/Logger/index.d.ts +18 -0
- package/Logger/index.d.ts.map +1 -0
- package/Logger/index.js +150 -0
- package/Logger/index.js.map +1 -0
- package/Logger/types.d.ts +13 -0
- package/Logger/types.d.ts.map +1 -0
- package/Logger/types.js +3 -0
- package/Logger/types.js.map +1 -0
- package/ORM/BaseMapper.d.ts +54 -0
- package/ORM/BaseMapper.d.ts.map +1 -0
- package/ORM/BaseMapper.js +593 -0
- package/ORM/BaseMapper.js.map +1 -0
- package/ORM/DataSource.d.ts +47 -0
- package/ORM/DataSource.d.ts.map +1 -0
- package/ORM/DataSource.js +336 -0
- package/ORM/DataSource.js.map +1 -0
- package/ORM/Db.d.ts +43 -0
- package/ORM/Db.d.ts.map +1 -0
- package/ORM/Db.js +198 -0
- package/ORM/Db.js.map +1 -0
- package/ORM/IdType.d.ts +10 -0
- package/ORM/IdType.d.ts.map +1 -0
- package/ORM/IdType.js +22 -0
- package/ORM/IdType.js.map +1 -0
- package/ORM/QueryWrapper.d.ts +58 -0
- package/ORM/QueryWrapper.d.ts.map +1 -0
- package/ORM/QueryWrapper.js +289 -0
- package/ORM/QueryWrapper.js.map +1 -0
- package/ORM/config.d.ts +6 -0
- package/ORM/config.d.ts.map +1 -0
- package/ORM/config.js +70 -0
- package/ORM/config.js.map +1 -0
- package/ORM/dialect.d.ts +24 -0
- package/ORM/dialect.d.ts.map +1 -0
- package/ORM/dialect.js +169 -0
- package/ORM/dialect.js.map +1 -0
- package/ORM/enable.d.ts +4 -0
- package/ORM/enable.d.ts.map +1 -0
- package/ORM/enable.js +23 -0
- package/ORM/enable.js.map +1 -0
- package/ORM/entityDecorators.d.ts +39 -0
- package/ORM/entityDecorators.d.ts.map +1 -0
- package/ORM/entityDecorators.js +131 -0
- package/ORM/entityDecorators.js.map +1 -0
- package/ORM/errors.d.ts +9 -0
- package/ORM/errors.d.ts.map +1 -0
- package/ORM/errors.js +20 -0
- package/ORM/errors.js.map +1 -0
- package/ORM/fieldSelect.d.ts +25 -0
- package/ORM/fieldSelect.d.ts.map +1 -0
- package/ORM/fieldSelect.js +49 -0
- package/ORM/fieldSelect.js.map +1 -0
- package/ORM/fill.d.ts +6 -0
- package/ORM/fill.d.ts.map +1 -0
- package/ORM/fill.js +45 -0
- package/ORM/fill.js.map +1 -0
- package/ORM/flag.d.ts +4 -0
- package/ORM/flag.d.ts.map +1 -0
- package/ORM/flag.js +14 -0
- package/ORM/flag.js.map +1 -0
- package/ORM/hydrate.d.ts +12 -0
- package/ORM/hydrate.d.ts.map +1 -0
- package/ORM/hydrate.js +304 -0
- package/ORM/hydrate.js.map +1 -0
- package/ORM/identifier.d.ts +8 -0
- package/ORM/identifier.d.ts.map +1 -0
- package/ORM/identifier.js +47 -0
- package/ORM/identifier.js.map +1 -0
- package/ORM/index.d.ts +41 -0
- package/ORM/index.d.ts.map +1 -0
- package/ORM/index.js +119 -0
- package/ORM/index.js.map +1 -0
- package/ORM/relation.d.ts +53 -0
- package/ORM/relation.d.ts.map +1 -0
- package/ORM/relation.js +143 -0
- package/ORM/relation.js.map +1 -0
- package/ORM/resultMap.d.ts +3 -0
- package/ORM/resultMap.d.ts.map +1 -0
- package/ORM/resultMap.js +21 -0
- package/ORM/resultMap.js.map +1 -0
- package/ORM/security.d.ts +5 -0
- package/ORM/security.d.ts.map +1 -0
- package/ORM/security.js +39 -0
- package/ORM/security.js.map +1 -0
- package/ORM/sqlDecorators.d.ts +15 -0
- package/ORM/sqlDecorators.d.ts.map +1 -0
- package/ORM/sqlDecorators.js +106 -0
- package/ORM/sqlDecorators.js.map +1 -0
- package/ORM/sqlLog.d.ts +20 -0
- package/ORM/sqlLog.d.ts.map +1 -0
- package/ORM/sqlLog.js +172 -0
- package/ORM/sqlLog.js.map +1 -0
- package/ORM/sqlTemplate.d.ts +13 -0
- package/ORM/sqlTemplate.d.ts.map +1 -0
- package/ORM/sqlTemplate.js +89 -0
- package/ORM/sqlTemplate.js.map +1 -0
- package/ORM/table.d.ts +8 -0
- package/ORM/table.d.ts.map +1 -0
- package/ORM/table.js +45 -0
- package/ORM/table.js.map +1 -0
- package/ORM/tableSearch.d.ts +43 -0
- package/ORM/tableSearch.d.ts.map +1 -0
- package/ORM/tableSearch.js +205 -0
- package/ORM/tableSearch.js.map +1 -0
- package/ORM/transactional.d.ts +7 -0
- package/ORM/transactional.d.ts.map +1 -0
- package/ORM/transactional.js +43 -0
- package/ORM/transactional.js.map +1 -0
- package/ORM/types.d.ts +92 -0
- package/ORM/types.d.ts.map +1 -0
- package/ORM/types.js +3 -0
- package/ORM/types.js.map +1 -0
- package/ORM/xml/MapperXml.d.ts +10 -0
- package/ORM/xml/MapperXml.d.ts.map +1 -0
- package/ORM/xml/MapperXml.js +79 -0
- package/ORM/xml/MapperXml.js.map +1 -0
- package/ORM/xml/execute.d.ts +10 -0
- package/ORM/xml/execute.d.ts.map +1 -0
- package/ORM/xml/execute.js +53 -0
- package/ORM/xml/execute.js.map +1 -0
- package/ORM/xml/index.d.ts +11 -0
- package/ORM/xml/index.d.ts.map +1 -0
- package/ORM/xml/index.js +29 -0
- package/ORM/xml/index.js.map +1 -0
- package/ORM/xml/loadMappers.d.ts +10 -0
- package/ORM/xml/loadMappers.d.ts.map +1 -0
- package/ORM/xml/loadMappers.js +162 -0
- package/ORM/xml/loadMappers.js.map +1 -0
- package/ORM/xml/parseMapperXml.d.ts +3 -0
- package/ORM/xml/parseMapperXml.d.ts.map +1 -0
- package/ORM/xml/parseMapperXml.js +217 -0
- package/ORM/xml/parseMapperXml.js.map +1 -0
- package/ORM/xml/registry.d.ts +15 -0
- package/ORM/xml/registry.d.ts.map +1 -0
- package/ORM/xml/registry.js +57 -0
- package/ORM/xml/registry.js.map +1 -0
- package/ORM/xml/renderSql.d.ts +4 -0
- package/ORM/xml/renderSql.d.ts.map +1 -0
- package/ORM/xml/renderSql.js +178 -0
- package/ORM/xml/renderSql.js.map +1 -0
- package/ORM/xml/types.d.ts +50 -0
- package/ORM/xml/types.d.ts.map +1 -0
- package/ORM/xml/types.js +3 -0
- package/ORM/xml/types.js.map +1 -0
- package/ORM/xml/xmlMapper.d.ts +10 -0
- package/ORM/xml/xmlMapper.d.ts.map +1 -0
- package/ORM/xml/xmlMapper.js +44 -0
- package/ORM/xml/xmlMapper.js.map +1 -0
- package/README.md +41 -2
- package/Redis/Redis.d.ts +65 -0
- package/Redis/Redis.d.ts.map +1 -0
- package/Redis/Redis.js +622 -0
- package/Redis/Redis.js.map +1 -0
- package/Redis/cache.d.ts +4 -0
- package/Redis/cache.d.ts.map +1 -0
- package/Redis/cache.js +70 -0
- package/Redis/cache.js.map +1 -0
- package/Redis/decorators.d.ts +5 -0
- package/Redis/decorators.d.ts.map +1 -0
- package/Redis/decorators.js +20 -0
- package/Redis/decorators.js.map +1 -0
- package/Redis/enable.d.ts +4 -0
- package/Redis/enable.d.ts.map +1 -0
- package/Redis/enable.js +22 -0
- package/Redis/enable.js.map +1 -0
- package/Redis/errors.d.ts +9 -0
- package/Redis/errors.d.ts.map +1 -0
- package/Redis/errors.js +20 -0
- package/Redis/errors.js.map +1 -0
- package/Redis/flag.d.ts +4 -0
- package/Redis/flag.d.ts.map +1 -0
- package/Redis/flag.js +14 -0
- package/Redis/flag.js.map +1 -0
- package/Redis/index.d.ts +11 -0
- package/Redis/index.d.ts.map +1 -0
- package/Redis/index.js +42 -0
- package/Redis/index.js.map +1 -0
- package/Redis/rateLimit.d.ts +8 -0
- package/Redis/rateLimit.d.ts.map +1 -0
- package/Redis/rateLimit.js +82 -0
- package/Redis/rateLimit.js.map +1 -0
- package/Redis/redisson/RCountDownLatch.d.ts +12 -0
- package/Redis/redisson/RCountDownLatch.d.ts.map +1 -0
- package/Redis/redisson/RCountDownLatch.js +48 -0
- package/Redis/redisson/RCountDownLatch.js.map +1 -0
- package/Redis/redisson/RFairLock.d.ts +4 -0
- package/Redis/redisson/RFairLock.d.ts.map +1 -0
- package/Redis/redisson/RFairLock.js +29 -0
- package/Redis/redisson/RFairLock.js.map +1 -0
- package/Redis/redisson/RLock.d.ts +34 -0
- package/Redis/redisson/RLock.d.ts.map +1 -0
- package/Redis/redisson/RLock.js +146 -0
- package/Redis/redisson/RLock.js.map +1 -0
- package/Redis/redisson/RMultiLock.d.ts +15 -0
- package/Redis/redisson/RMultiLock.d.ts.map +1 -0
- package/Redis/redisson/RMultiLock.js +90 -0
- package/Redis/redisson/RMultiLock.js.map +1 -0
- package/Redis/redisson/RReadWriteLock.d.ts +9 -0
- package/Redis/redisson/RReadWriteLock.d.ts.map +1 -0
- package/Redis/redisson/RReadWriteLock.js +51 -0
- package/Redis/redisson/RReadWriteLock.js.map +1 -0
- package/Redis/redisson/RSemaphore.d.ts +13 -0
- package/Redis/redisson/RSemaphore.d.ts.map +1 -0
- package/Redis/redisson/RSemaphore.js +54 -0
- package/Redis/redisson/RSemaphore.js.map +1 -0
- package/Redis/redisson/Redisson.d.ts +30 -0
- package/Redis/redisson/Redisson.d.ts.map +1 -0
- package/Redis/redisson/Redisson.js +93 -0
- package/Redis/redisson/Redisson.js.map +1 -0
- package/Redis/redisson/index.d.ts +12 -0
- package/Redis/redisson/index.d.ts.map +1 -0
- package/Redis/redisson/index.js +32 -0
- package/Redis/redisson/index.js.map +1 -0
- package/Redis/redisson/objects.d.ts +116 -0
- package/Redis/redisson/objects.d.ts.map +1 -0
- package/Redis/redisson/objects.js +384 -0
- package/Redis/redisson/objects.js.map +1 -0
- package/Redis/redisson/scripts.d.ts +13 -0
- package/Redis/redisson/scripts.d.ts.map +1 -0
- package/Redis/redisson/scripts.js +187 -0
- package/Redis/redisson/scripts.js.map +1 -0
- package/Redis/redisson/types.d.ts +129 -0
- package/Redis/redisson/types.d.ts.map +1 -0
- package/Redis/redisson/types.js +8 -0
- package/Redis/redisson/types.js.map +1 -0
- package/Redis/redisson/utils.d.ts +9 -0
- package/Redis/redisson/utils.d.ts.map +1 -0
- package/Redis/redisson/utils.js +78 -0
- package/Redis/redisson/utils.js.map +1 -0
- package/Redis/types.d.ts +82 -0
- package/Redis/types.d.ts.map +1 -0
- package/Redis/types.js +23 -0
- package/Redis/types.js.map +1 -0
- package/Service/BaseService.d.ts +18 -0
- package/Service/BaseService.d.ts.map +1 -0
- package/Service/BaseService.js +46 -0
- package/Service/BaseService.js.map +1 -0
- package/Service/MapperType.d.ts +18 -0
- package/Service/MapperType.d.ts.map +1 -0
- package/Service/MapperType.js +46 -0
- package/Service/MapperType.js.map +1 -0
- package/Service/bean.d.ts +16 -0
- package/Service/bean.d.ts.map +1 -0
- package/Service/bean.js +72 -0
- package/Service/bean.js.map +1 -0
- package/Service/container.d.ts +18 -0
- package/Service/container.d.ts.map +1 -0
- package/Service/container.js +66 -0
- package/Service/container.js.map +1 -0
- package/Service/decorators.d.ts +12 -0
- package/Service/decorators.d.ts.map +1 -0
- package/Service/decorators.js +148 -0
- package/Service/decorators.js.map +1 -0
- package/Service/index.d.ts +11 -0
- package/Service/index.d.ts.map +1 -0
- package/Service/index.js +32 -0
- package/Service/index.js.map +1 -0
- package/Service/types.d.ts +19 -0
- package/Service/types.d.ts.map +1 -0
- package/Service/types.js +18 -0
- package/Service/types.js.map +1 -0
- package/Validate/decorators.d.ts +18 -0
- package/Validate/decorators.d.ts.map +1 -0
- package/Validate/decorators.js +77 -0
- package/Validate/decorators.js.map +1 -0
- package/Validate/engine.d.ts +5 -0
- package/Validate/engine.d.ts.map +1 -0
- package/Validate/engine.js +78 -0
- package/Validate/engine.js.map +1 -0
- package/Validate/index.d.ts +6 -0
- package/Validate/index.d.ts.map +1 -0
- package/Validate/index.js +28 -0
- package/Validate/index.js.map +1 -0
- package/Validate/rules.d.ts +11 -0
- package/Validate/rules.d.ts.map +1 -0
- package/Validate/rules.js +120 -0
- package/Validate/rules.js.map +1 -0
- package/Validate/types.d.ts +22 -0
- package/Validate/types.d.ts.map +1 -0
- package/Validate/types.js +17 -0
- package/Validate/types.js.map +1 -0
- package/config/index.d.ts +104 -0
- package/config/index.d.ts.map +1 -0
- package/config/index.js +330 -0
- package/config/index.js.map +1 -0
- package/encrypt/AESUtil.d.ts +5 -0
- package/encrypt/AESUtil.d.ts.map +1 -0
- package/encrypt/AESUtil.js +36 -0
- package/encrypt/AESUtil.js.map +1 -0
- package/encrypt/DynamicAesKeyManager.d.ts +9 -0
- package/encrypt/DynamicAesKeyManager.d.ts.map +1 -0
- package/encrypt/DynamicAesKeyManager.js +46 -0
- package/encrypt/DynamicAesKeyManager.js.map +1 -0
- package/encrypt/index.d.ts +3 -0
- package/encrypt/index.d.ts.map +1 -0
- package/encrypt/index.js +8 -0
- package/encrypt/index.js.map +1 -0
- package/index.d.ts +31 -0
- package/index.d.ts.map +1 -0
- package/index.js +260 -0
- package/index.js.map +1 -0
- package/langchain/decorators.d.ts +2 -0
- package/langchain/decorators.d.ts.map +1 -0
- package/langchain/decorators.js +6 -0
- package/langchain/decorators.js.map +1 -0
- package/langchain/index.d.ts +1 -0
- package/langchain/index.d.ts.map +1 -0
- package/langchain/index.js +2 -0
- package/langchain/index.js.map +1 -0
- package/package.json +110 -4
- package/schedule/ScheduleManager.d.ts +25 -0
- package/schedule/ScheduleManager.d.ts.map +1 -0
- package/schedule/ScheduleManager.js +125 -0
- package/schedule/ScheduleManager.js.map +1 -0
- package/types/enums.d.ts +11 -0
- package/types/enums.d.ts.map +1 -0
- package/types/enums.js +15 -0
- package/types/enums.js.map +1 -0
- package/utils/case.d.ts +6 -0
- package/utils/case.d.ts.map +1 -0
- package/utils/case.js +32 -0
- package/utils/case.js.map +1 -0
- package/utils/entity/PageResult/index.d.ts +20 -0
- package/utils/entity/PageResult/index.d.ts.map +1 -0
- package/utils/entity/PageResult/index.js +15 -0
- package/utils/entity/PageResult/index.js.map +1 -0
- package/utils/entity/ResponseData/index.d.ts +11 -0
- package/utils/entity/ResponseData/index.d.ts.map +1 -0
- package/utils/entity/ResponseData/index.js +25 -0
- package/utils/entity/ResponseData/index.js.map +1 -0
- package/utils/id.d.ts +2 -0
- package/utils/id.d.ts.map +1 -0
- package/utils/id.js +9 -0
- package/utils/id.js.map +1 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.COUNTDOWN_COUNTDOWN_LUA = exports.SEMAPHORE_RELEASE_LUA = exports.SEMAPHORE_TRY_ACQUIRE_LUA = exports.WRITE_LOCK_UNLOCK_LUA = exports.WRITE_LOCK_ACQUIRE_LUA = exports.READ_LOCK_UNLOCK_LUA = exports.READ_LOCK_ACQUIRE_LUA = exports.FAIR_LOCK_ACQUIRE_LUA = exports.LOCK_FORCE_UNLOCK_LUA = exports.LOCK_UNLOCK_LUA = exports.LOCK_RENEW_LUA = exports.LOCK_ACQUIRE_LUA = void 0;
|
|
4
|
+
exports.LOCK_ACQUIRE_LUA = `
|
|
5
|
+
if (redis.call('exists', KEYS[1]) == 0) then
|
|
6
|
+
redis.call('hincrby', KEYS[1], ARGV[2], 1);
|
|
7
|
+
redis.call('pexpire', KEYS[1], ARGV[1]);
|
|
8
|
+
return nil;
|
|
9
|
+
end;
|
|
10
|
+
if (redis.call('hexists', KEYS[1], ARGV[2]) == 1) then
|
|
11
|
+
redis.call('hincrby', KEYS[1], ARGV[2], 1);
|
|
12
|
+
redis.call('pexpire', KEYS[1], ARGV[1]);
|
|
13
|
+
return nil;
|
|
14
|
+
end;
|
|
15
|
+
return redis.call('pttl', KEYS[1]);
|
|
16
|
+
`.trim();
|
|
17
|
+
exports.LOCK_RENEW_LUA = `
|
|
18
|
+
if (redis.call('hexists', KEYS[1], ARGV[2]) == 1) then
|
|
19
|
+
redis.call('pexpire', KEYS[1], ARGV[1]);
|
|
20
|
+
return 1;
|
|
21
|
+
end;
|
|
22
|
+
return 0;
|
|
23
|
+
`.trim();
|
|
24
|
+
exports.LOCK_UNLOCK_LUA = `
|
|
25
|
+
if (redis.call('hexists', KEYS[1], ARGV[3]) == 0) then
|
|
26
|
+
return nil;
|
|
27
|
+
end;
|
|
28
|
+
local counter = redis.call('hincrby', KEYS[1], ARGV[3], -1);
|
|
29
|
+
if (counter > 0) then
|
|
30
|
+
redis.call('pexpire', KEYS[1], ARGV[2]);
|
|
31
|
+
return 0;
|
|
32
|
+
else
|
|
33
|
+
redis.call('del', KEYS[1]);
|
|
34
|
+
redis.call('publish', KEYS[2], ARGV[1]);
|
|
35
|
+
return 1;
|
|
36
|
+
end;
|
|
37
|
+
`.trim();
|
|
38
|
+
exports.LOCK_FORCE_UNLOCK_LUA = `
|
|
39
|
+
if (redis.call('del', KEYS[1]) == 1) then
|
|
40
|
+
redis.call('publish', KEYS[2], ARGV[1]);
|
|
41
|
+
return 1;
|
|
42
|
+
end;
|
|
43
|
+
return 0;
|
|
44
|
+
`.trim();
|
|
45
|
+
exports.FAIR_LOCK_ACQUIRE_LUA = `
|
|
46
|
+
while (true) do
|
|
47
|
+
local first = redis.call('lindex', KEYS[2], 0);
|
|
48
|
+
if first == false then
|
|
49
|
+
break;
|
|
50
|
+
end;
|
|
51
|
+
if redis.call('exists', KEYS[3] .. first) == 0 then
|
|
52
|
+
redis.call('lpop', KEYS[2]);
|
|
53
|
+
else
|
|
54
|
+
break;
|
|
55
|
+
end;
|
|
56
|
+
end;
|
|
57
|
+
if (redis.call('exists', KEYS[1]) == 0) then
|
|
58
|
+
local first = redis.call('lindex', KEYS[2], 0);
|
|
59
|
+
if first == false or first == ARGV[2] then
|
|
60
|
+
redis.call('hincrby', KEYS[1], ARGV[2], 1);
|
|
61
|
+
redis.call('pexpire', KEYS[1], ARGV[1]);
|
|
62
|
+
if first == ARGV[2] then
|
|
63
|
+
redis.call('lpop', KEYS[2]);
|
|
64
|
+
end;
|
|
65
|
+
redis.call('del', KEYS[3] .. ARGV[2]);
|
|
66
|
+
return nil;
|
|
67
|
+
end;
|
|
68
|
+
end;
|
|
69
|
+
if (redis.call('hexists', KEYS[1], ARGV[2]) == 1) then
|
|
70
|
+
redis.call('hincrby', KEYS[1], ARGV[2], 1);
|
|
71
|
+
redis.call('pexpire', KEYS[1], ARGV[1]);
|
|
72
|
+
return nil;
|
|
73
|
+
end;
|
|
74
|
+
if (redis.call('exists', KEYS[3] .. ARGV[2]) == 0) then
|
|
75
|
+
redis.call('rpush', KEYS[2], ARGV[2]);
|
|
76
|
+
redis.call('set', KEYS[3] .. ARGV[2], 1, 'px', ARGV[3]);
|
|
77
|
+
end;
|
|
78
|
+
return redis.call('pttl', KEYS[1]);
|
|
79
|
+
`.trim();
|
|
80
|
+
exports.READ_LOCK_ACQUIRE_LUA = `
|
|
81
|
+
local mode = redis.call('hget', KEYS[1], 'mode');
|
|
82
|
+
if (mode == false) then
|
|
83
|
+
redis.call('hset', KEYS[1], 'mode', 'read');
|
|
84
|
+
redis.call('hset', KEYS[1], ARGV[2], 1);
|
|
85
|
+
redis.call('hset', KEYS[1], 'r:' .. ARGV[2], 1);
|
|
86
|
+
redis.call('pexpire', KEYS[1], ARGV[1]);
|
|
87
|
+
return nil;
|
|
88
|
+
end;
|
|
89
|
+
if (mode == 'read') then
|
|
90
|
+
local ind = redis.call('hget', KEYS[1], 'r:' .. ARGV[2]);
|
|
91
|
+
local c = redis.call('hincrby', KEYS[1], ARGV[2], 1);
|
|
92
|
+
if (c == 1) then
|
|
93
|
+
redis.call('hset', KEYS[1], 'r:' .. ARGV[2], 1);
|
|
94
|
+
end;
|
|
95
|
+
redis.call('pexpire', KEYS[1], ARGV[1]);
|
|
96
|
+
return nil;
|
|
97
|
+
end;
|
|
98
|
+
return redis.call('pttl', KEYS[1]);
|
|
99
|
+
`.trim();
|
|
100
|
+
exports.READ_LOCK_UNLOCK_LUA = `
|
|
101
|
+
local mode = redis.call('hget', KEYS[1], 'mode');
|
|
102
|
+
if (mode == false) then
|
|
103
|
+
return 1;
|
|
104
|
+
end;
|
|
105
|
+
local c = redis.call('hincrby', KEYS[1], ARGV[2], -1);
|
|
106
|
+
if (c == 0) then
|
|
107
|
+
redis.call('hdel', KEYS[1], ARGV[2]);
|
|
108
|
+
redis.call('hdel', KEYS[1], 'r:' .. ARGV[2]);
|
|
109
|
+
end;
|
|
110
|
+
local remain = 0;
|
|
111
|
+
local t = redis.call('hgetall', KEYS[1]);
|
|
112
|
+
for i = 1, #t, 2 do
|
|
113
|
+
if string.sub(t[i], 1, 2) == 'r:' then
|
|
114
|
+
remain = remain + 1;
|
|
115
|
+
end;
|
|
116
|
+
end;
|
|
117
|
+
if (remain == 0) then
|
|
118
|
+
redis.call('del', KEYS[1]);
|
|
119
|
+
redis.call('publish', KEYS[2], ARGV[1]);
|
|
120
|
+
return 1;
|
|
121
|
+
end;
|
|
122
|
+
redis.call('pexpire', KEYS[1], ARGV[3]);
|
|
123
|
+
return 0;
|
|
124
|
+
`.trim();
|
|
125
|
+
exports.WRITE_LOCK_ACQUIRE_LUA = `
|
|
126
|
+
local mode = redis.call('hget', KEYS[1], 'mode');
|
|
127
|
+
if (mode == false) then
|
|
128
|
+
redis.call('hset', KEYS[1], 'mode', 'write');
|
|
129
|
+
redis.call('hset', KEYS[1], ARGV[2], 1);
|
|
130
|
+
redis.call('pexpire', KEYS[1], ARGV[1]);
|
|
131
|
+
return nil;
|
|
132
|
+
end;
|
|
133
|
+
if (mode == 'write') then
|
|
134
|
+
if (redis.call('hexists', KEYS[1], ARGV[2]) == 1) then
|
|
135
|
+
redis.call('hincrby', KEYS[1], ARGV[2], 1);
|
|
136
|
+
redis.call('pexpire', KEYS[1], ARGV[1]);
|
|
137
|
+
return nil;
|
|
138
|
+
end;
|
|
139
|
+
end;
|
|
140
|
+
return redis.call('pttl', KEYS[1]);
|
|
141
|
+
`.trim();
|
|
142
|
+
exports.WRITE_LOCK_UNLOCK_LUA = `
|
|
143
|
+
local mode = redis.call('hget', KEYS[1], 'mode');
|
|
144
|
+
if (mode ~= 'write') then
|
|
145
|
+
return nil;
|
|
146
|
+
end;
|
|
147
|
+
if (redis.call('hexists', KEYS[1], ARGV[2]) == 0) then
|
|
148
|
+
return nil;
|
|
149
|
+
end;
|
|
150
|
+
local c = redis.call('hincrby', KEYS[1], ARGV[2], -1);
|
|
151
|
+
if (c > 0) then
|
|
152
|
+
redis.call('pexpire', KEYS[1], ARGV[3]);
|
|
153
|
+
return 0;
|
|
154
|
+
end;
|
|
155
|
+
redis.call('del', KEYS[1]);
|
|
156
|
+
redis.call('publish', KEYS[2], ARGV[1]);
|
|
157
|
+
return 1;
|
|
158
|
+
`.trim();
|
|
159
|
+
exports.SEMAPHORE_TRY_ACQUIRE_LUA = `
|
|
160
|
+
local available = tonumber(redis.call('get', KEYS[1]) or ARGV[1]);
|
|
161
|
+
if available == nil then
|
|
162
|
+
available = tonumber(ARGV[1]);
|
|
163
|
+
redis.call('set', KEYS[1], available);
|
|
164
|
+
end;
|
|
165
|
+
local permits = tonumber(ARGV[2]);
|
|
166
|
+
if available >= permits then
|
|
167
|
+
redis.call('set', KEYS[1], available - permits);
|
|
168
|
+
return 1;
|
|
169
|
+
end;
|
|
170
|
+
return 0;
|
|
171
|
+
`.trim();
|
|
172
|
+
exports.SEMAPHORE_RELEASE_LUA = `
|
|
173
|
+
local available = tonumber(redis.call('get', KEYS[1]) or '0');
|
|
174
|
+
redis.call('set', KEYS[1], available + tonumber(ARGV[1]));
|
|
175
|
+
redis.call('publish', KEYS[2], '1');
|
|
176
|
+
return available + tonumber(ARGV[1]);
|
|
177
|
+
`.trim();
|
|
178
|
+
exports.COUNTDOWN_COUNTDOWN_LUA = `
|
|
179
|
+
local v = redis.call('decr', KEYS[1]);
|
|
180
|
+
if v <= 0 then
|
|
181
|
+
redis.call('del', KEYS[1]);
|
|
182
|
+
redis.call('publish', KEYS[2], '0');
|
|
183
|
+
return 0;
|
|
184
|
+
end;
|
|
185
|
+
return v;
|
|
186
|
+
`.trim();
|
|
187
|
+
//# sourceMappingURL=scripts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/scripts.ts"],"names":[],"mappings":";;;AACa,QAAA,gBAAgB,GAAG;;;;;;;;;;;;CAY/B,CAAC,IAAI,EAAE,CAAC;AAGI,QAAA,cAAc,GAAG;;;;;;CAM7B,CAAC,IAAI,EAAE,CAAC;AAMI,QAAA,eAAe,GAAG;;;;;;;;;;;;;CAa9B,CAAC,IAAI,EAAE,CAAC;AAEI,QAAA,qBAAqB,GAAG;;;;;;CAMpC,CAAC,IAAI,EAAE,CAAC;AAGI,QAAA,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCpC,CAAC,IAAI,EAAE,CAAC;AAGI,QAAA,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;CAmBpC,CAAC,IAAI,EAAE,CAAC;AAEI,QAAA,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBnC,CAAC,IAAI,EAAE,CAAC;AAGI,QAAA,sBAAsB,GAAG;;;;;;;;;;;;;;;;CAgBrC,CAAC,IAAI,EAAE,CAAC;AAEI,QAAA,qBAAqB,GAAG;;;;;;;;;;;;;;;;CAgBpC,CAAC,IAAI,EAAE,CAAC;AAEI,QAAA,yBAAyB,GAAG;;;;;;;;;;;;CAYxC,CAAC,IAAI,EAAE,CAAC;AAEI,QAAA,qBAAqB,GAAG;;;;;CAKpC,CAAC,IAAI,EAAE,CAAC;AAEI,QAAA,uBAAuB,GAAG;;;;;;;;CAQtC,CAAC,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
export interface RedissonConfig {
|
|
2
|
+
lockWatchdogTimeout?: number;
|
|
3
|
+
lockWatchInterval?: number;
|
|
4
|
+
}
|
|
5
|
+
export declare const defaultRedissonConfig: Required<RedissonConfig>;
|
|
6
|
+
export interface RLock {
|
|
7
|
+
readonly name: string;
|
|
8
|
+
lock(leaseTimeMs?: number): Promise<void>;
|
|
9
|
+
tryLock(waitTimeMs?: number, leaseTimeMs?: number): Promise<boolean>;
|
|
10
|
+
unlock(): Promise<void>;
|
|
11
|
+
forceUnlock(): Promise<boolean>;
|
|
12
|
+
isLocked(): Promise<boolean>;
|
|
13
|
+
isHeldByCurrentThread(): Promise<boolean>;
|
|
14
|
+
getHoldCount(): Promise<number>;
|
|
15
|
+
remainTimeToLive(): Promise<number>;
|
|
16
|
+
}
|
|
17
|
+
export interface RReadWriteLock {
|
|
18
|
+
readLock(): RLock;
|
|
19
|
+
writeLock(): RLock;
|
|
20
|
+
}
|
|
21
|
+
export interface RSemaphore {
|
|
22
|
+
readonly name: string;
|
|
23
|
+
trySetPermits(permits: number): Promise<boolean>;
|
|
24
|
+
acquire(permits?: number): Promise<void>;
|
|
25
|
+
tryAcquire(permits?: number, waitTimeMs?: number): Promise<boolean>;
|
|
26
|
+
release(permits?: number): Promise<void>;
|
|
27
|
+
availablePermits(): Promise<number>;
|
|
28
|
+
}
|
|
29
|
+
export interface RCountDownLatch {
|
|
30
|
+
readonly name: string;
|
|
31
|
+
trySetCount(count: number): Promise<boolean>;
|
|
32
|
+
countDown(): Promise<void>;
|
|
33
|
+
await(waitTimeMs?: number): Promise<boolean>;
|
|
34
|
+
getCount(): Promise<number>;
|
|
35
|
+
}
|
|
36
|
+
export interface RAtomicLong {
|
|
37
|
+
readonly name: string;
|
|
38
|
+
get(): Promise<number>;
|
|
39
|
+
set(value: number): Promise<void>;
|
|
40
|
+
getAndSet(value: number): Promise<number>;
|
|
41
|
+
incrementAndGet(): Promise<number>;
|
|
42
|
+
decrementAndGet(): Promise<number>;
|
|
43
|
+
addAndGet(delta: number): Promise<number>;
|
|
44
|
+
compareAndSet(expect: number, update: number): Promise<boolean>;
|
|
45
|
+
delete(): Promise<boolean>;
|
|
46
|
+
}
|
|
47
|
+
export interface RBucket<T = unknown> {
|
|
48
|
+
readonly name: string;
|
|
49
|
+
get(): Promise<T | null>;
|
|
50
|
+
set(value: T, ttlSeconds?: number): Promise<void>;
|
|
51
|
+
getAndDelete(): Promise<T | null>;
|
|
52
|
+
compareAndSet(expect: T, update: T): Promise<boolean>;
|
|
53
|
+
trySet(value: T, ttlSeconds?: number): Promise<boolean>;
|
|
54
|
+
delete(): Promise<boolean>;
|
|
55
|
+
isExists(): Promise<boolean>;
|
|
56
|
+
expire(ttlSeconds: number): Promise<boolean>;
|
|
57
|
+
}
|
|
58
|
+
export interface RMap<V = string> {
|
|
59
|
+
readonly name: string;
|
|
60
|
+
get(key: string): Promise<V | undefined>;
|
|
61
|
+
put(key: string, value: V): Promise<void>;
|
|
62
|
+
putAll(entries: Record<string, V>): Promise<void>;
|
|
63
|
+
remove(key: string): Promise<boolean>;
|
|
64
|
+
containsKey(key: string): Promise<boolean>;
|
|
65
|
+
readAllMap(): Promise<Record<string, V>>;
|
|
66
|
+
size(): Promise<number>;
|
|
67
|
+
clear(): Promise<void>;
|
|
68
|
+
}
|
|
69
|
+
export interface RSet {
|
|
70
|
+
readonly name: string;
|
|
71
|
+
add(...members: string[]): Promise<number>;
|
|
72
|
+
remove(...members: string[]): Promise<number>;
|
|
73
|
+
contains(member: string): Promise<boolean>;
|
|
74
|
+
readAll(): Promise<string[]>;
|
|
75
|
+
size(): Promise<number>;
|
|
76
|
+
clear(): Promise<void>;
|
|
77
|
+
}
|
|
78
|
+
export interface RList {
|
|
79
|
+
readonly name: string;
|
|
80
|
+
add(...values: string[]): Promise<number>;
|
|
81
|
+
get(index: number): Promise<string | null>;
|
|
82
|
+
range(start: number, stop: number): Promise<string[]>;
|
|
83
|
+
remove(count: number, value: string): Promise<number>;
|
|
84
|
+
size(): Promise<number>;
|
|
85
|
+
clear(): Promise<void>;
|
|
86
|
+
}
|
|
87
|
+
export interface RScoredSortedSet {
|
|
88
|
+
readonly name: string;
|
|
89
|
+
add(score: number, value: string): Promise<boolean>;
|
|
90
|
+
addAll(members: Array<{
|
|
91
|
+
score: number;
|
|
92
|
+
value: string;
|
|
93
|
+
}>): Promise<number>;
|
|
94
|
+
remove(...values: string[]): Promise<number>;
|
|
95
|
+
rank(value: string): Promise<number | null>;
|
|
96
|
+
score(value: string): Promise<number | null>;
|
|
97
|
+
valueRange(start: number, stop: number): Promise<string[]>;
|
|
98
|
+
valueRangeByScore(min: number, max: number): Promise<string[]>;
|
|
99
|
+
size(): Promise<number>;
|
|
100
|
+
clear(): Promise<void>;
|
|
101
|
+
}
|
|
102
|
+
export interface RTopic {
|
|
103
|
+
readonly name: string;
|
|
104
|
+
publish(message: string): Promise<number>;
|
|
105
|
+
addListener(listener: (message: string) => void): Promise<() => Promise<void>>;
|
|
106
|
+
}
|
|
107
|
+
export interface RRateLimiter {
|
|
108
|
+
readonly name: string;
|
|
109
|
+
trySetRate(rate: number, rateIntervalMs: number): Promise<boolean>;
|
|
110
|
+
tryAcquire(permits?: number): Promise<boolean>;
|
|
111
|
+
availablePermits(): Promise<number>;
|
|
112
|
+
}
|
|
113
|
+
export interface RBitSet {
|
|
114
|
+
readonly name: string;
|
|
115
|
+
get(bitIndex: number): Promise<boolean>;
|
|
116
|
+
set(bitIndex: number, value?: boolean): Promise<boolean>;
|
|
117
|
+
clear(bitIndex?: number): Promise<void>;
|
|
118
|
+
cardinality(): Promise<number>;
|
|
119
|
+
size(): Promise<number>;
|
|
120
|
+
}
|
|
121
|
+
export interface RQueue {
|
|
122
|
+
readonly name: string;
|
|
123
|
+
offer(...values: string[]): Promise<number>;
|
|
124
|
+
poll(): Promise<string | null>;
|
|
125
|
+
peek(): Promise<string | null>;
|
|
126
|
+
size(): Promise<number>;
|
|
127
|
+
clear(): Promise<void>;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/types.ts"],"names":[],"mappings":";;;AAQa,QAAA,qBAAqB,GAA6B;IAC7D,mBAAmB,EAAE,KAAM;IAC3B,iBAAiB,EAAE,EAAE;CACtB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function createClientId(): string;
|
|
2
|
+
export declare function currentThreadId(clientId: string): string;
|
|
3
|
+
export declare function runWithThreadIdAsync<T>(threadId: string, fn: () => Promise<T>): Promise<T>;
|
|
4
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
5
|
+
export declare function channelName(lockName: string): string;
|
|
6
|
+
export declare function evalScript(script: string, keys: string[], args: Array<string | number>): Promise<unknown>;
|
|
7
|
+
export declare function evalNumber(script: string, keys: string[], args: Array<string | number>): Promise<number | null>;
|
|
8
|
+
export declare function waitNotify(channel: string, timeoutMs: number): Promise<boolean>;
|
|
9
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/utils.ts"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAOD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAGD,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAC3B,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIxB;AAGD,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAuBlB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
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.createClientId = createClientId;
|
|
7
|
+
exports.currentThreadId = currentThreadId;
|
|
8
|
+
exports.runWithThreadIdAsync = runWithThreadIdAsync;
|
|
9
|
+
exports.sleep = sleep;
|
|
10
|
+
exports.channelName = channelName;
|
|
11
|
+
exports.evalScript = evalScript;
|
|
12
|
+
exports.evalNumber = evalNumber;
|
|
13
|
+
exports.waitNotify = waitNotify;
|
|
14
|
+
const async_hooks_1 = require("async_hooks");
|
|
15
|
+
const crypto_1 = require("crypto");
|
|
16
|
+
const Redis_1 = __importDefault(require("../Redis"));
|
|
17
|
+
function createClientId() {
|
|
18
|
+
return `${process.pid}-${(0, crypto_1.randomBytes)(8).toString("hex")}`;
|
|
19
|
+
}
|
|
20
|
+
const threadAls = new async_hooks_1.AsyncLocalStorage();
|
|
21
|
+
let threadSeq = 0;
|
|
22
|
+
function currentThreadId(clientId) {
|
|
23
|
+
const existing = threadAls.getStore();
|
|
24
|
+
if (existing)
|
|
25
|
+
return existing;
|
|
26
|
+
threadSeq += 1;
|
|
27
|
+
return `${clientId}:${threadSeq}`;
|
|
28
|
+
}
|
|
29
|
+
async function runWithThreadIdAsync(threadId, fn) {
|
|
30
|
+
return threadAls.run(threadId, fn);
|
|
31
|
+
}
|
|
32
|
+
function sleep(ms) {
|
|
33
|
+
return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
|
|
34
|
+
}
|
|
35
|
+
function channelName(lockName) {
|
|
36
|
+
return `pangza_lock_channel:{${lockName}}`;
|
|
37
|
+
}
|
|
38
|
+
async function evalScript(script, keys, args) {
|
|
39
|
+
const client = await Redis_1.default.getClient();
|
|
40
|
+
return client.eval(script, {
|
|
41
|
+
keys,
|
|
42
|
+
arguments: args.map(String),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
async function evalNumber(script, keys, args) {
|
|
46
|
+
const result = await evalScript(script, keys, args);
|
|
47
|
+
if (result === null || result === undefined)
|
|
48
|
+
return null;
|
|
49
|
+
return Number(result);
|
|
50
|
+
}
|
|
51
|
+
async function waitNotify(channel, timeoutMs) {
|
|
52
|
+
if (timeoutMs <= 0)
|
|
53
|
+
return false;
|
|
54
|
+
let settled = false;
|
|
55
|
+
let unsub = null;
|
|
56
|
+
return new Promise((resolve) => {
|
|
57
|
+
const timer = setTimeout(() => {
|
|
58
|
+
if (settled)
|
|
59
|
+
return;
|
|
60
|
+
settled = true;
|
|
61
|
+
void unsub?.();
|
|
62
|
+
resolve(false);
|
|
63
|
+
}, timeoutMs);
|
|
64
|
+
void Redis_1.default.subscribe(channel, () => {
|
|
65
|
+
if (settled)
|
|
66
|
+
return;
|
|
67
|
+
settled = true;
|
|
68
|
+
clearTimeout(timer);
|
|
69
|
+
void unsub?.();
|
|
70
|
+
resolve(true);
|
|
71
|
+
}).then((u) => {
|
|
72
|
+
unsub = u;
|
|
73
|
+
if (settled)
|
|
74
|
+
void u();
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/framework/Redis/redisson/utils.ts"],"names":[],"mappings":"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"}
|
package/Redis/types.d.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export interface RedisTlsConfig {
|
|
2
|
+
enabled?: boolean;
|
|
3
|
+
rejectUnauthorized?: boolean;
|
|
4
|
+
ca?: string;
|
|
5
|
+
cert?: string;
|
|
6
|
+
key?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface RedisNodeEndpoint {
|
|
9
|
+
host: string;
|
|
10
|
+
port?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface RedisClusterConfig {
|
|
13
|
+
nodes?: RedisNodeEndpoint[];
|
|
14
|
+
useReplicas?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface RedisSentinelConfig {
|
|
17
|
+
name?: string;
|
|
18
|
+
nodes?: RedisNodeEndpoint[];
|
|
19
|
+
}
|
|
20
|
+
export type RedisMode = "standalone" | "cluster" | "sentinel";
|
|
21
|
+
export interface RedisConfig {
|
|
22
|
+
host?: string;
|
|
23
|
+
port?: number;
|
|
24
|
+
password?: string;
|
|
25
|
+
username?: string;
|
|
26
|
+
db?: number;
|
|
27
|
+
keyPrefix?: string;
|
|
28
|
+
connectTimeout?: number;
|
|
29
|
+
reconnect?: boolean;
|
|
30
|
+
maxReconnectDelay?: number;
|
|
31
|
+
tls?: RedisTlsConfig;
|
|
32
|
+
mode?: RedisMode;
|
|
33
|
+
cluster?: RedisClusterConfig;
|
|
34
|
+
sentinel?: RedisSentinelConfig;
|
|
35
|
+
}
|
|
36
|
+
export declare const defaultRedisConfig: Required<Pick<RedisConfig, "host" | "port" | "db" | "keyPrefix" | "connectTimeout" | "reconnect" | "maxReconnectDelay" | "mode">> & RedisConfig;
|
|
37
|
+
export declare const RateLimiterType: {
|
|
38
|
+
readonly DEFAULT: "DEFAULT";
|
|
39
|
+
readonly IP: "IP";
|
|
40
|
+
readonly USER: "USER";
|
|
41
|
+
};
|
|
42
|
+
export type RateLimiterTypeValue = (typeof RateLimiterType)[keyof typeof RateLimiterType];
|
|
43
|
+
export type RateLimitMode = "fixed" | "sliding";
|
|
44
|
+
export interface RateLimitOption {
|
|
45
|
+
time?: number;
|
|
46
|
+
count?: number;
|
|
47
|
+
key?: string;
|
|
48
|
+
type?: RateLimiterTypeValue | "DEFAULT" | "IP" | "USER";
|
|
49
|
+
mode?: RateLimitMode;
|
|
50
|
+
}
|
|
51
|
+
export interface RepeatSubmitOption {
|
|
52
|
+
interval?: number;
|
|
53
|
+
message?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface CacheableOption {
|
|
56
|
+
key?: string;
|
|
57
|
+
ttl?: number;
|
|
58
|
+
keyGenerator?: (...args: unknown[]) => string;
|
|
59
|
+
}
|
|
60
|
+
export interface CacheEvictOption {
|
|
61
|
+
key?: string;
|
|
62
|
+
keyGenerator?: (...args: unknown[]) => string;
|
|
63
|
+
allEntries?: boolean;
|
|
64
|
+
}
|
|
65
|
+
export interface TryLockOption {
|
|
66
|
+
ttlMs?: number;
|
|
67
|
+
token?: string;
|
|
68
|
+
}
|
|
69
|
+
export interface WithLockOption extends TryLockOption {
|
|
70
|
+
renewIntervalMs?: number;
|
|
71
|
+
}
|
|
72
|
+
export interface LockHandle {
|
|
73
|
+
key: string;
|
|
74
|
+
token: string;
|
|
75
|
+
release: () => Promise<boolean>;
|
|
76
|
+
renew: (ttlMs: number) => Promise<boolean>;
|
|
77
|
+
}
|
|
78
|
+
export declare const RATE_LIMIT_KEY = "rateLimiter:";
|
|
79
|
+
export declare const REPEAT_SUBMIT_KEY = "repeat:submit:";
|
|
80
|
+
export declare const CACHE_KEY = "cache:";
|
|
81
|
+
export declare const LOCK_KEY = "lock:";
|
|
82
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/framework/Redis/types.ts"],"names":[],"mappings":"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"}
|
package/Redis/types.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LOCK_KEY = exports.CACHE_KEY = exports.REPEAT_SUBMIT_KEY = exports.RATE_LIMIT_KEY = exports.RateLimiterType = exports.defaultRedisConfig = void 0;
|
|
4
|
+
exports.defaultRedisConfig = {
|
|
5
|
+
host: "127.0.0.1",
|
|
6
|
+
port: 6379,
|
|
7
|
+
db: 0,
|
|
8
|
+
keyPrefix: "pangza:",
|
|
9
|
+
connectTimeout: 3000,
|
|
10
|
+
reconnect: true,
|
|
11
|
+
maxReconnectDelay: 10000,
|
|
12
|
+
mode: "standalone",
|
|
13
|
+
};
|
|
14
|
+
exports.RateLimiterType = {
|
|
15
|
+
DEFAULT: "DEFAULT",
|
|
16
|
+
IP: "IP",
|
|
17
|
+
USER: "USER",
|
|
18
|
+
};
|
|
19
|
+
exports.RATE_LIMIT_KEY = "rateLimiter:";
|
|
20
|
+
exports.REPEAT_SUBMIT_KEY = "repeat:submit:";
|
|
21
|
+
exports.CACHE_KEY = "cache:";
|
|
22
|
+
exports.LOCK_KEY = "lock:";
|
|
23
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/framework/Redis/types.ts"],"names":[],"mappings":";;;AAuEa,QAAA,kBAAkB,GAaf;IACd,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,IAAI;IACV,EAAE,EAAE,CAAC;IACL,SAAS,EAAE,SAAS;IACpB,cAAc,EAAE,IAAI;IACpB,SAAS,EAAE,IAAI;IACf,iBAAiB,EAAE,KAAK;IACxB,IAAI,EAAE,YAAY;CACnB,CAAC;AAGW,QAAA,eAAe,GAAG;IAC7B,OAAO,EAAE,SAAS;IAClB,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,MAAM;CACJ,CAAC;AA4EE,QAAA,cAAc,GAAG,cAAc,CAAC;AAChC,QAAA,iBAAiB,GAAG,gBAAgB,CAAC;AACrC,QAAA,SAAS,GAAG,QAAQ,CAAC;AACrB,QAAA,QAAQ,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { QueryWrapper } from "../ORM";
|
|
2
|
+
import type { IPage, PageQuery } from "../ORM";
|
|
3
|
+
import type { IService } from "./types";
|
|
4
|
+
export declare class BaseService<T extends Record<string, any> = Record<string, any>> implements IService<T> {
|
|
5
|
+
selectById(_id: string | number): Promise<T | null>;
|
|
6
|
+
selectOne(_wrapper?: QueryWrapper): Promise<T | null>;
|
|
7
|
+
selectList(_wrapper?: QueryWrapper, _limit?: number): Promise<T[]>;
|
|
8
|
+
selectCount(_wrapper?: QueryWrapper): Promise<number>;
|
|
9
|
+
selectPage(_page?: PageQuery, _wrapper?: QueryWrapper): Promise<IPage<T>>;
|
|
10
|
+
insert(_entity: Partial<T>): Promise<number>;
|
|
11
|
+
saveBatch(_entities: Array<Partial<T>>): Promise<number>;
|
|
12
|
+
updateById(_entity: Partial<T>): Promise<number>;
|
|
13
|
+
update(_entity: Partial<T>, _wrapper: QueryWrapper): Promise<number>;
|
|
14
|
+
deleteById(_id: string | number): Promise<number>;
|
|
15
|
+
deleteByIds(_ids: Array<string | number>): Promise<number>;
|
|
16
|
+
delete(_wrapper: QueryWrapper): Promise<number>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=BaseService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseService.d.ts","sourceRoot":"","sources":["../../../../src/framework/Service/BaseService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAUxC,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAC1E,YAAW,QAAQ,CAAC,CAAC,CAAC;IAEtB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAGnD,SAAS,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAGrD,UAAU,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAGlE,WAAW,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAGrD,UAAU,CACR,KAAK,CAAC,EAAE,SAAS,EACjB,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAGpB,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAG5C,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAGxD,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAGhD,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAGpE,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAGjD,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAG1D,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;CAGhD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseService = void 0;
|
|
4
|
+
function notWired(name) {
|
|
5
|
+
throw new Error(`[Service] 方法未注入,请使用 @Service(Mapper): ${name}`);
|
|
6
|
+
}
|
|
7
|
+
class BaseService {
|
|
8
|
+
selectById(_id) {
|
|
9
|
+
return notWired("selectById");
|
|
10
|
+
}
|
|
11
|
+
selectOne(_wrapper) {
|
|
12
|
+
return notWired("selectOne");
|
|
13
|
+
}
|
|
14
|
+
selectList(_wrapper, _limit) {
|
|
15
|
+
return notWired("selectList");
|
|
16
|
+
}
|
|
17
|
+
selectCount(_wrapper) {
|
|
18
|
+
return notWired("selectCount");
|
|
19
|
+
}
|
|
20
|
+
selectPage(_page, _wrapper) {
|
|
21
|
+
return notWired("selectPage");
|
|
22
|
+
}
|
|
23
|
+
insert(_entity) {
|
|
24
|
+
return notWired("insert");
|
|
25
|
+
}
|
|
26
|
+
saveBatch(_entities) {
|
|
27
|
+
return notWired("saveBatch");
|
|
28
|
+
}
|
|
29
|
+
updateById(_entity) {
|
|
30
|
+
return notWired("updateById");
|
|
31
|
+
}
|
|
32
|
+
update(_entity, _wrapper) {
|
|
33
|
+
return notWired("update");
|
|
34
|
+
}
|
|
35
|
+
deleteById(_id) {
|
|
36
|
+
return notWired("deleteById");
|
|
37
|
+
}
|
|
38
|
+
deleteByIds(_ids) {
|
|
39
|
+
return notWired("deleteByIds");
|
|
40
|
+
}
|
|
41
|
+
delete(_wrapper) {
|
|
42
|
+
return notWired("delete");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.BaseService = BaseService;
|
|
46
|
+
//# sourceMappingURL=BaseService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseService.js","sourceRoot":"","sources":["../../../../src/framework/Service/BaseService.ts"],"names":[],"mappings":";;;AAIA,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC;AAMD,MAAa,WAAW;IAGtB,UAAU,CAAC,GAAoB;QAC7B,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IACD,SAAS,CAAC,QAAuB;QAC/B,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IACD,UAAU,CAAC,QAAuB,EAAE,MAAe;QACjD,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IACD,WAAW,CAAC,QAAuB;QACjC,OAAO,QAAQ,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IACD,UAAU,CACR,KAAiB,EACjB,QAAuB;QAEvB,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,CAAC,OAAmB;QACxB,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IACD,SAAS,CAAC,SAA4B;QACpC,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IACD,UAAU,CAAC,OAAmB;QAC5B,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,CAAC,OAAmB,EAAE,QAAsB;QAChD,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IACD,UAAU,CAAC,GAAoB;QAC7B,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IACD,WAAW,CAAC,IAA4B;QACtC,OAAO,QAAQ,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,CAAC,QAAsB;QAC3B,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;CACF;AA1CD,kCA0CC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { QueryWrapper } from "../ORM";
|
|
2
|
+
import type { IPage, PageQuery } from "../ORM";
|
|
3
|
+
import type { IService } from "./types";
|
|
4
|
+
export declare class MapperType<T extends Record<string, any> = Record<string, any>> implements IService<T> {
|
|
5
|
+
selectById(_id: string | number): Promise<T | null>;
|
|
6
|
+
selectOne(_wrapper?: QueryWrapper): Promise<T | null>;
|
|
7
|
+
selectList(_wrapper?: QueryWrapper, _limit?: number): Promise<T[]>;
|
|
8
|
+
selectCount(_wrapper?: QueryWrapper): Promise<number>;
|
|
9
|
+
selectPage(_page?: PageQuery, _wrapper?: QueryWrapper): Promise<IPage<T>>;
|
|
10
|
+
insert(_entity: Partial<T>): Promise<number>;
|
|
11
|
+
saveBatch(_entities: Array<Partial<T>>): Promise<number>;
|
|
12
|
+
updateById(_entity: Partial<T>): Promise<number>;
|
|
13
|
+
update(_entity: Partial<T>, _wrapper: QueryWrapper): Promise<number>;
|
|
14
|
+
deleteById(_id: string | number): Promise<number>;
|
|
15
|
+
deleteByIds(_ids: Array<string | number>): Promise<number>;
|
|
16
|
+
delete(_wrapper: QueryWrapper): Promise<number>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=MapperType.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MapperType.d.ts","sourceRoot":"","sources":["../../../../src/framework/Service/MapperType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAUxC,qBAAa,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACzE,YAAW,QAAQ,CAAC,CAAC,CAAC;IAEtB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAGnD,SAAS,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAGrD,UAAU,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAGlE,WAAW,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAGrD,UAAU,CACR,KAAK,CAAC,EAAE,SAAS,EACjB,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAGpB,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAG5C,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAGxD,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAGhD,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAGpE,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAGjD,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAG1D,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;CAGhD"}
|