@effect-app/infra 0.7.0 → 0.8.1
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/CHANGELOG.md +19 -0
- package/_cjs/{lib/RequestContext.cjs → RequestContext.cjs} +0 -0
- package/_cjs/{lib/RequestContext.cjs.map → RequestContext.cjs.map} +1 -1
- package/_cjs/{lib/api → api}/authorization.jwt.cjs +1 -1
- package/_cjs/{lib/api → api}/authorization.jwt.cjs.map +1 -1
- package/_cjs/{vendor/Cache/Cache/operations/makeWith.cjs → api/codec.cjs} +16 -13
- package/_cjs/api/codec.cjs.map +1 -0
- package/_cjs/{lib/api → api}/defaultErrorHandler.cjs +1 -1
- package/_cjs/{lib/api → api}/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/{services/memQueue.cjs → api/express/makeJsonSchema.cjs} +42 -22
- package/_cjs/api/express/makeJsonSchema.cjs.map +1 -0
- package/_cjs/api/express/makeOpenApiSpecs.cjs +66 -0
- package/_cjs/api/express/makeOpenApiSpecs.cjs.map +1 -0
- package/_cjs/api/express/schema/jwt.cjs +43 -0
- package/_cjs/api/express/schema/jwt.cjs.map +1 -0
- package/_cjs/api/express/schema/requestHandler.cjs +166 -0
- package/_cjs/api/express/schema/requestHandler.cjs.map +1 -0
- package/_cjs/api/express/schema/routing.cjs +121 -0
- package/_cjs/api/express/schema/routing.cjs.map +1 -0
- package/_cjs/{lib/api → api}/reportError.cjs +5 -5
- package/_cjs/{lib/api → api}/reportError.cjs.map +1 -1
- package/_cjs/{lib/api → api}/routing.cjs +32 -32
- package/_cjs/{lib/api → api}/routing.cjs.map +1 -1
- package/_cjs/{lib/api → api}/setupRequest.cjs +2 -2
- package/_cjs/{lib/api → api}/setupRequest.cjs.map +1 -1
- package/_cjs/{lib/api → api}/util.cjs +0 -0
- package/_cjs/{lib/api → api}/util.cjs.map +1 -1
- package/_cjs/{lib/api → api}/writeDocs.cjs +5 -5
- package/_cjs/{lib/api → api}/writeDocs.cjs.map +1 -1
- package/_cjs/{lib/errorReporter.cjs → errorReporter.cjs} +1 -1
- package/_cjs/{lib/errorReporter.cjs.map → errorReporter.cjs.map} +1 -1
- package/_cjs/errors.cjs +21 -22
- package/_cjs/errors.cjs.map +1 -1
- package/_cjs/{lib/ext → ext}/Array.cjs +1 -1
- package/_cjs/{lib/ext → ext}/Array.cjs.map +1 -1
- package/_cjs/{lib/filter → filter}/types/errors.cjs +0 -0
- package/_cjs/{lib/filter → filter}/types/errors.cjs.map +0 -0
- package/_cjs/{lib/filter → filter}/types/fields.cjs +0 -0
- package/_cjs/{lib/filter → filter}/types/fields.cjs.map +0 -0
- package/_cjs/{lib/filter → filter}/types/index.cjs +0 -0
- package/_cjs/{lib/filter → filter}/types/index.cjs.map +1 -1
- package/_cjs/{lib/filter → filter}/types/path/common.cjs +0 -0
- package/_cjs/{lib/filter → filter}/types/path/common.cjs.map +0 -0
- package/_cjs/{lib/filter → filter}/types/path/eager.cjs +0 -0
- package/_cjs/{lib/filter → filter}/types/path/eager.cjs.map +0 -0
- package/_cjs/{lib/filter → filter}/types/path/index.cjs +0 -0
- package/_cjs/filter/types/path/index.cjs.map +1 -0
- package/_cjs/{lib/filter → filter}/types/utils.cjs +0 -0
- package/_cjs/{lib/filter → filter}/types/utils.cjs.map +0 -0
- package/_cjs/{lib/filter → filter}/types/validator.cjs +0 -0
- package/_cjs/{lib/filter → filter}/types/validator.cjs.map +0 -0
- package/_cjs/{lib/filter.cjs → filter.cjs} +0 -0
- package/_cjs/{lib/filter.cjs.map → filter.cjs.map} +1 -1
- package/_cjs/{lib/instrument.cjs → instrument.cjs} +1 -1
- package/_cjs/{lib/instrument.cjs.map → instrument.cjs.map} +1 -1
- package/_cjs/{lib/rateLimit.cjs → rateLimit.cjs} +1 -1
- package/_cjs/{lib/rateLimit.cjs.map → rateLimit.cjs.map} +1 -1
- package/_cjs/services/Emailer/Sendgrid.cjs +1 -1
- package/_cjs/services/Emailer/fake.cjs +1 -1
- package/_cjs/services/Repository.cjs +1 -1
- package/_cjs/services/Store/Cosmos.cjs +2 -2
- package/_cjs/services/Store/Cosmos.test.cjs +2 -2
- package/_cjs/services/Store/Disk.cjs +2 -2
- package/_cjs/services/Store/Memory.cjs +1 -1
- package/_cjs/services/Store/Redis.cjs +1 -1
- package/_cjs/services/Store/codeFilter.test.cjs +2 -2
- package/_cjs/services/Store/index.cjs +1 -1
- package/_cjs/services/Store/service.cjs +1 -1
- package/_cjs/services/Store/utils.cjs +1 -1
- package/_cjs/services/simpledb/cosmosdb.cjs +98 -0
- package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -0
- package/_cjs/services/simpledb/diskdb.cjs +118 -0
- package/_cjs/services/simpledb/diskdb.cjs.map +1 -0
- package/_cjs/services/simpledb/fileutil.cjs +36 -0
- package/_cjs/services/simpledb/fileutil.cjs.map +1 -0
- package/_cjs/{vendor/Cache/Cache/_internal/CacheState.cjs → services/simpledb/index.cjs} +31 -24
- package/_cjs/services/simpledb/index.cjs.map +1 -0
- package/_cjs/services/simpledb/memdb.cjs +74 -0
- package/_cjs/services/simpledb/memdb.cjs.map +1 -0
- package/_cjs/services/simpledb/mongodb.cjs +86 -0
- package/_cjs/services/simpledb/mongodb.cjs.map +1 -0
- package/_cjs/services/simpledb/redisdb.cjs +120 -0
- package/_cjs/services/simpledb/redisdb.cjs.map +1 -0
- package/_cjs/services/simpledb/shared.cjs +80 -0
- package/_cjs/services/simpledb/shared.cjs.map +1 -0
- package/_cjs/services/simpledb/simpledb.cjs +77 -0
- package/_cjs/services/simpledb/simpledb.cjs.map +1 -0
- package/_src/{lib/RequestContext.ts → RequestContext.ts} +0 -0
- package/_src/_global.ext.ts +5 -5
- package/_src/api/app.ts.bak +125 -0
- package/_src/{lib/api → api}/authorization.jwt.ts +1 -1
- package/_src/api/codec.ts +27 -0
- package/_src/{lib/api → api}/defaultErrorHandler.ts +1 -1
- package/_src/api/errors.ts.bak +20 -0
- package/_src/api/express/makeJsonSchema.ts +49 -0
- package/_src/api/express/makeOpenApiSpecs.ts +60 -0
- package/_src/api/express/routing.ts.bak +460 -0
- package/_src/api/express/schema/jwt.ts +38 -0
- package/_src/api/express/schema/requestHandler.ts +360 -0
- package/_src/api/express/schema/routing.ts +202 -0
- package/_src/{lib/api → api}/reportError.ts +3 -3
- package/_src/{lib/api → api}/routing.ts +7 -12
- package/_src/{lib/api → api}/setupRequest.ts +0 -0
- package/_src/{lib/api → api}/util.ts +0 -0
- package/_src/{lib/api → api}/writeDocs.ts +4 -5
- package/_src/{lib/errorReporter.ts → errorReporter.ts} +1 -1
- package/_src/errors.ts +12 -3
- package/_src/{lib/ext → ext}/Array.ts +1 -1
- package/_src/{lib/filter → filter}/types/errors.ts +0 -0
- package/_src/{lib/filter → filter}/types/fields.ts +0 -0
- package/_src/{lib/filter → filter}/types/index.ts +0 -0
- package/_src/{lib/filter → filter}/types/path/common.ts +0 -0
- package/_src/{lib/filter → filter}/types/path/eager.ts +0 -0
- package/_src/{lib/filter → filter}/types/path/index.ts +0 -0
- package/_src/{lib/filter → filter}/types/utils.ts +0 -0
- package/_src/{lib/filter → filter}/types/validator.ts +0 -0
- package/_src/{lib/filter.ts → filter.ts} +1 -1
- package/_src/{lib/instrument.ts → instrument.ts} +0 -0
- package/_src/{lib/rateLimit.ts → rateLimit.ts} +0 -0
- package/_src/services/Emailer/service.ts +1 -1
- package/_src/services/Repository.ts +1 -1
- package/_src/services/Store/Cosmos.test.ts +1 -1
- package/_src/services/Store/Disk.ts +1 -1
- package/_src/services/Store/codeFilter.test.ts +1 -1
- package/_src/services/simpledb/cosmosdb.ts +134 -0
- package/_src/services/simpledb/diskdb.ts +158 -0
- package/_src/services/simpledb/fileutil.ts +28 -0
- package/_src/services/simpledb/index.ts +6 -0
- package/_src/services/simpledb/memdb.ts +79 -0
- package/_src/services/simpledb/mongodb.ts +99 -0
- package/_src/services/simpledb/redisdb.ts +182 -0
- package/_src/services/simpledb/shared.ts +117 -0
- package/_src/services/simpledb/simpledb.ts +117 -0
- package/dist/{lib/RequestContext.d.ts → RequestContext.d.ts} +1 -1
- package/dist/RequestContext.d.ts.map +1 -0
- package/dist/RequestContext.js +52 -0
- package/dist/_global.ext.d.ts +5 -5
- package/dist/_global.ext.d.ts.map +1 -1
- package/dist/{lib/api → api}/authorization.jwt.d.ts +1 -1
- package/dist/api/authorization.jwt.d.ts.map +1 -0
- package/dist/{lib/api → api}/authorization.jwt.js +2 -2
- package/dist/api/codec.d.ts +7 -0
- package/dist/api/codec.d.ts.map +1 -0
- package/dist/api/codec.js +19 -0
- package/dist/{lib/api → api}/defaultErrorHandler.d.ts +1 -1
- package/dist/api/defaultErrorHandler.d.ts.map +1 -0
- package/dist/{lib/api → api}/defaultErrorHandler.js +2 -2
- package/dist/api/express/makeJsonSchema.d.ts +30 -0
- package/dist/api/express/makeJsonSchema.d.ts.map +1 -0
- package/dist/api/express/makeJsonSchema.js +40 -0
- package/dist/api/express/makeOpenApiSpecs.d.ts +55 -0
- package/dist/api/express/makeOpenApiSpecs.d.ts.map +1 -0
- package/dist/api/express/makeOpenApiSpecs.js +56 -0
- package/dist/api/express/schema/jwt.d.ts +5 -0
- package/dist/api/express/schema/jwt.d.ts.map +1 -0
- package/dist/api/express/schema/jwt.js +32 -0
- package/dist/api/express/schema/requestHandler.d.ts +71 -0
- package/dist/api/express/schema/requestHandler.d.ts.map +1 -0
- package/dist/api/express/schema/requestHandler.js +140 -0
- package/dist/api/express/schema/routing.d.ts +45 -0
- package/dist/api/express/schema/routing.d.ts.map +1 -0
- package/dist/api/express/schema/routing.js +95 -0
- package/dist/{lib/api → api}/reportError.d.ts +4 -4
- package/dist/api/reportError.d.ts.map +1 -0
- package/dist/{lib/api → api}/reportError.js +6 -6
- package/dist/{lib/api → api}/routing.d.ts +7 -7
- package/dist/api/routing.d.ts.map +1 -0
- package/dist/api/routing.js +249 -0
- package/dist/{lib/api → api}/setupRequest.d.ts +2 -2
- package/dist/api/setupRequest.d.ts.map +1 -0
- package/dist/{lib/api → api}/setupRequest.js +3 -3
- package/dist/{lib/api → api}/util.d.ts +0 -0
- package/dist/api/util.d.ts.map +1 -0
- package/dist/api/util.js +14 -0
- package/dist/{lib/api → api}/writeDocs.d.ts +1 -1
- package/dist/api/writeDocs.d.ts.map +1 -0
- package/dist/api/writeDocs.js +23 -0
- package/dist/{lib/errorReporter.d.ts → errorReporter.d.ts} +1 -1
- package/dist/errorReporter.d.ts.map +1 -0
- package/dist/errorReporter.js +45 -0
- package/dist/errors.d.ts +11 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +17 -3
- package/dist/{lib/ext → ext}/Array.d.ts +3 -3
- package/dist/ext/Array.d.ts.map +1 -0
- package/dist/{lib/ext → ext}/Array.js +2 -2
- package/dist/{lib/filter → filter}/types/errors.d.ts +0 -0
- package/dist/filter/types/errors.d.ts.map +1 -0
- package/dist/{lib/filter → filter}/types/errors.js +1 -1
- package/dist/{lib/filter → filter}/types/fields.d.ts +0 -0
- package/dist/filter/types/fields.d.ts.map +1 -0
- package/dist/{lib/filter → filter}/types/fields.js +1 -1
- package/dist/{lib/filter → filter}/types/index.d.ts +0 -0
- package/dist/filter/types/index.d.ts.map +1 -0
- package/dist/{lib/filter → filter}/types/index.js +1 -1
- package/dist/{lib/filter → filter}/types/path/common.d.ts +0 -0
- package/dist/filter/types/path/common.d.ts.map +1 -0
- package/dist/{lib/filter → filter}/types/path/common.js +1 -1
- package/dist/{lib/filter → filter}/types/path/eager.d.ts +0 -0
- package/dist/filter/types/path/eager.d.ts.map +1 -0
- package/dist/{lib/filter → filter}/types/path/eager.js +1 -1
- package/dist/{lib/filter → filter}/types/path/index.d.ts +0 -0
- package/dist/filter/types/path/index.d.ts.map +1 -0
- package/dist/{lib/filter → filter}/types/path/index.js +1 -1
- package/dist/{lib/filter → filter}/types/utils.d.ts +0 -0
- package/dist/filter/types/utils.d.ts.map +1 -0
- package/dist/{lib/filter → filter}/types/utils.js +1 -1
- package/dist/{lib/filter → filter}/types/validator.d.ts +0 -0
- package/dist/filter/types/validator.d.ts.map +1 -0
- package/dist/{lib/filter → filter}/types/validator.js +1 -1
- package/dist/{lib/filter.d.ts → filter.d.ts} +9 -9
- package/dist/filter.d.ts.map +1 -0
- package/dist/filter.js +171 -0
- package/dist/{lib/instrument.d.ts → instrument.d.ts} +1 -1
- package/dist/instrument.d.ts.map +1 -0
- package/dist/{lib/instrument.js → instrument.js} +2 -2
- package/dist/{lib/rateLimit.d.ts → rateLimit.d.ts} +5 -5
- package/dist/rateLimit.d.ts.map +1 -0
- package/dist/{lib/rateLimit.js → rateLimit.js} +2 -2
- package/dist/services/Emailer/Sendgrid.js +1 -1
- package/dist/services/Emailer/fake.js +1 -1
- package/dist/services/Emailer/service.d.ts +1 -1
- package/dist/services/Emailer/service.d.ts.map +1 -1
- package/dist/services/Repository.d.ts +1 -1
- package/dist/services/Repository.d.ts.map +1 -1
- package/dist/services/Repository.js +1 -1
- package/dist/services/Store/Cosmos.js +2 -2
- package/dist/services/Store/Disk.js +3 -3
- package/dist/services/Store/Memory.js +1 -1
- package/dist/services/Store/Redis.js +1 -1
- package/dist/services/Store/index.js +1 -1
- package/dist/services/Store/service.js +1 -1
- package/dist/services/Store/utils.js +1 -1
- package/dist/services/simpledb/cosmosdb.d.ts +13 -0
- package/dist/services/simpledb/cosmosdb.d.ts.map +1 -0
- package/dist/services/simpledb/cosmosdb.js +88 -0
- package/dist/services/simpledb/diskdb.d.ts +12 -0
- package/dist/services/simpledb/diskdb.d.ts.map +1 -0
- package/dist/services/simpledb/diskdb.js +96 -0
- package/dist/services/simpledb/fileutil.d.ts +7 -0
- package/dist/services/simpledb/fileutil.d.ts.map +1 -0
- package/dist/services/simpledb/fileutil.js +25 -0
- package/dist/services/simpledb/index.d.ts +7 -0
- package/dist/services/simpledb/index.d.ts.map +1 -0
- package/dist/services/simpledb/index.js +7 -0
- package/dist/services/simpledb/memdb.d.ts +12 -0
- package/dist/services/simpledb/memdb.d.ts.map +1 -0
- package/dist/services/simpledb/memdb.js +55 -0
- package/dist/services/simpledb/mongodb.d.ts +13 -0
- package/dist/services/simpledb/mongodb.d.ts.map +1 -0
- package/dist/services/simpledb/mongodb.js +55 -0
- package/dist/services/simpledb/redisdb.d.ts +25 -0
- package/dist/services/simpledb/redisdb.d.ts.map +1 -0
- package/dist/services/simpledb/redisdb.js +105 -0
- package/dist/services/simpledb/shared.d.ts +63 -0
- package/dist/services/simpledb/shared.d.ts.map +1 -0
- package/dist/services/simpledb/shared.js +65 -0
- package/dist/services/simpledb/simpledb.d.ts +23 -0
- package/dist/services/simpledb/simpledb.d.ts.map +1 -0
- package/dist/services/simpledb/simpledb.js +56 -0
- package/package.json +216 -328
- package/_cjs/ext.cjs +0 -4
- package/_cjs/ext.cjs.map +0 -1
- package/_cjs/lib/fileUtil.cjs +0 -36
- package/_cjs/lib/fileUtil.cjs.map +0 -1
- package/_cjs/lib/filter/types/path/index.cjs.map +0 -1
- package/_cjs/services/CUPS/service.cjs +0 -15
- package/_cjs/services/CUPS/service.cjs.map +0 -1
- package/_cjs/services/CUPS.cjs +0 -113
- package/_cjs/services/CUPS.cjs.map +0 -1
- package/_cjs/services/Cache.cjs +0 -39
- package/_cjs/services/Cache.cjs.map +0 -1
- package/_cjs/services/ServiceBus.cjs +0 -69
- package/_cjs/services/ServiceBus.cjs.map +0 -1
- package/_cjs/services/memQueue.cjs.map +0 -1
- package/_cjs/vendor/Cache/Cache/_internal/AtomicBoolean.cjs +0 -14
- package/_cjs/vendor/Cache/Cache/_internal/AtomicBoolean.cjs.map +0 -1
- package/_cjs/vendor/Cache/Cache/_internal/AtomicNumber.cjs +0 -29
- package/_cjs/vendor/Cache/Cache/_internal/AtomicNumber.cjs.map +0 -1
- package/_cjs/vendor/Cache/Cache/_internal/AtomicReference.cjs +0 -32
- package/_cjs/vendor/Cache/Cache/_internal/AtomicReference.cjs.map +0 -1
- package/_cjs/vendor/Cache/Cache/_internal/CacheInternal.cjs +0 -266
- package/_cjs/vendor/Cache/Cache/_internal/CacheInternal.cjs.map +0 -1
- package/_cjs/vendor/Cache/Cache/_internal/CacheState.cjs.map +0 -1
- package/_cjs/vendor/Cache/Cache/_internal/KeySet.cjs +0 -67
- package/_cjs/vendor/Cache/Cache/_internal/KeySet.cjs.map +0 -1
- package/_cjs/vendor/Cache/Cache/_internal/MapKey.cjs +0 -44
- package/_cjs/vendor/Cache/Cache/_internal/MapKey.cjs.map +0 -1
- package/_cjs/vendor/Cache/Cache/_internal/MapValue.cjs +0 -33
- package/_cjs/vendor/Cache/Cache/_internal/MapValue.cjs.map +0 -1
- package/_cjs/vendor/Cache/Cache/definition.cjs +0 -13
- package/_cjs/vendor/Cache/Cache/definition.cjs.map +0 -1
- package/_cjs/vendor/Cache/Cache/operations/make.cjs +0 -20
- package/_cjs/vendor/Cache/Cache/operations/make.cjs.map +0 -1
- package/_cjs/vendor/Cache/Cache/operations/makeWith.cjs.map +0 -1
- package/_cjs/vendor/Cache/Cache/operations.cjs +0 -28
- package/_cjs/vendor/Cache/Cache/operations.cjs.map +0 -1
- package/_cjs/vendor/Cache/Cache.cjs +0 -28
- package/_cjs/vendor/Cache/Cache.cjs.map +0 -1
- package/_cjs/vendor/Cache/CacheStats/definition.cjs +0 -13
- package/_cjs/vendor/Cache/CacheStats/definition.cjs.map +0 -1
- package/_cjs/vendor/Cache/CacheStats.cjs +0 -17
- package/_cjs/vendor/Cache/CacheStats.cjs.map +0 -1
- package/_cjs/vendor/Cache/EntryStats/definition.cjs +0 -11
- package/_cjs/vendor/Cache/EntryStats/definition.cjs.map +0 -1
- package/_cjs/vendor/Cache/EntryStats.cjs +0 -17
- package/_cjs/vendor/Cache/EntryStats.cjs.map +0 -1
- package/_cjs/vendor/Cache/Lookup/definition.cjs +0 -6
- package/_cjs/vendor/Cache/Lookup/definition.cjs.map +0 -1
- package/_cjs/vendor/Cache/Lookup.cjs +0 -17
- package/_cjs/vendor/Cache/Lookup.cjs.map +0 -1
- package/_cjs/vendor/Cache/index.cjs +0 -17
- package/_cjs/vendor/Cache/index.cjs.map +0 -1
- package/_src/ext.ts +0 -1
- package/_src/lib/fileUtil.ts +0 -56
- package/_src/services/CUPS/service.ts +0 -16
- package/_src/services/CUPS.ts +0 -105
- package/_src/services/Cache.ts +0 -45
- package/_src/services/ServiceBus.ts +0 -111
- package/_src/services/memQueue.ts +0 -30
- package/_src/vendor/Cache/Cache/_internal/AtomicBoolean.ts +0 -7
- package/_src/vendor/Cache/Cache/_internal/AtomicNumber.ts +0 -28
- package/_src/vendor/Cache/Cache/_internal/AtomicReference.ts +0 -30
- package/_src/vendor/Cache/Cache/_internal/CacheInternal.ts +0 -293
- package/_src/vendor/Cache/Cache/_internal/CacheState.ts +0 -56
- package/_src/vendor/Cache/Cache/_internal/KeySet.ts +0 -58
- package/_src/vendor/Cache/Cache/_internal/MapKey.ts +0 -43
- package/_src/vendor/Cache/Cache/_internal/MapValue.ts +0 -39
- package/_src/vendor/Cache/Cache/definition.ts +0 -112
- package/_src/vendor/Cache/Cache/operations/make.ts +0 -17
- package/_src/vendor/Cache/Cache/operations/makeWith.ts +0 -32
- package/_src/vendor/Cache/Cache/operations.ts +0 -4
- package/_src/vendor/Cache/Cache.ts +0 -4
- package/_src/vendor/Cache/CacheStats/definition.ts +0 -23
- package/_src/vendor/Cache/CacheStats.ts +0 -3
- package/_src/vendor/Cache/EntryStats/definition.ts +0 -19
- package/_src/vendor/Cache/EntryStats.ts +0 -3
- package/_src/vendor/Cache/Lookup/definition.ts +0 -15
- package/_src/vendor/Cache/Lookup.ts +0 -3
- package/_src/vendor/Cache/global.ts.bak +0 -23
- package/_src/vendor/Cache/index.ts +0 -4
- package/dist/ext.d.ts +0 -2
- package/dist/ext.d.ts.map +0 -1
- package/dist/ext.js +0 -2
- package/dist/lib/RequestContext.d.ts.map +0 -1
- package/dist/lib/RequestContext.js +0 -52
- package/dist/lib/api/authorization.jwt.d.ts.map +0 -1
- package/dist/lib/api/defaultErrorHandler.d.ts.map +0 -1
- package/dist/lib/api/reportError.d.ts.map +0 -1
- package/dist/lib/api/routing.d.ts.map +0 -1
- package/dist/lib/api/routing.js +0 -248
- package/dist/lib/api/setupRequest.d.ts.map +0 -1
- package/dist/lib/api/util.d.ts.map +0 -1
- package/dist/lib/api/util.js +0 -14
- package/dist/lib/api/writeDocs.d.ts.map +0 -1
- package/dist/lib/api/writeDocs.js +0 -23
- package/dist/lib/errorReporter.d.ts.map +0 -1
- package/dist/lib/errorReporter.js +0 -45
- package/dist/lib/ext/Array.d.ts.map +0 -1
- package/dist/lib/fileUtil.d.ts +0 -22
- package/dist/lib/fileUtil.d.ts.map +0 -1
- package/dist/lib/fileUtil.js +0 -23
- package/dist/lib/filter/types/errors.d.ts.map +0 -1
- package/dist/lib/filter/types/fields.d.ts.map +0 -1
- package/dist/lib/filter/types/index.d.ts.map +0 -1
- package/dist/lib/filter/types/path/common.d.ts.map +0 -1
- package/dist/lib/filter/types/path/eager.d.ts.map +0 -1
- package/dist/lib/filter/types/path/index.d.ts.map +0 -1
- package/dist/lib/filter/types/utils.d.ts.map +0 -1
- package/dist/lib/filter/types/validator.d.ts.map +0 -1
- package/dist/lib/filter.d.ts.map +0 -1
- package/dist/lib/filter.js +0 -171
- package/dist/lib/instrument.d.ts.map +0 -1
- package/dist/lib/rateLimit.d.ts.map +0 -1
- package/dist/services/CUPS/service.d.ts +0 -19
- package/dist/services/CUPS/service.d.ts.map +0 -1
- package/dist/services/CUPS/service.js +0 -5
- package/dist/services/CUPS.d.ts +0 -10
- package/dist/services/CUPS.d.ts.map +0 -1
- package/dist/services/CUPS.js +0 -89
- package/dist/services/Cache.d.ts +0 -28
- package/dist/services/Cache.d.ts.map +0 -1
- package/dist/services/Cache.js +0 -28
- package/dist/services/ServiceBus.d.ts +0 -26
- package/dist/services/ServiceBus.d.ts.map +0 -1
- package/dist/services/ServiceBus.js +0 -53
- package/dist/services/memQueue.d.ts +0 -18
- package/dist/services/memQueue.d.ts.map +0 -1
- package/dist/services/memQueue.js +0 -24
- package/dist/vendor/Cache/Cache/_internal/AtomicBoolean.d.ts +0 -5
- package/dist/vendor/Cache/Cache/_internal/AtomicBoolean.d.ts.map +0 -1
- package/dist/vendor/Cache/Cache/_internal/AtomicBoolean.js +0 -7
- package/dist/vendor/Cache/Cache/_internal/AtomicNumber.d.ts +0 -8
- package/dist/vendor/Cache/Cache/_internal/AtomicNumber.d.ts.map +0 -1
- package/dist/vendor/Cache/Cache/_internal/AtomicNumber.js +0 -22
- package/dist/vendor/Cache/Cache/_internal/AtomicReference.d.ts +0 -10
- package/dist/vendor/Cache/Cache/_internal/AtomicReference.d.ts.map +0 -1
- package/dist/vendor/Cache/Cache/_internal/AtomicReference.js +0 -25
- package/dist/vendor/Cache/Cache/_internal/CacheInternal.d.ts +0 -51
- package/dist/vendor/Cache/Cache/_internal/CacheInternal.d.ts.map +0 -1
- package/dist/vendor/Cache/Cache/_internal/CacheInternal.js +0 -253
- package/dist/vendor/Cache/Cache/_internal/CacheState.d.ts +0 -33
- package/dist/vendor/Cache/Cache/_internal/CacheState.d.ts.map +0 -1
- package/dist/vendor/Cache/Cache/_internal/CacheState.js +0 -21
- package/dist/vendor/Cache/Cache/_internal/KeySet.d.ts +0 -20
- package/dist/vendor/Cache/Cache/_internal/KeySet.d.ts.map +0 -1
- package/dist/vendor/Cache/Cache/_internal/KeySet.js +0 -61
- package/dist/vendor/Cache/Cache/_internal/MapKey.d.ts +0 -24
- package/dist/vendor/Cache/Cache/_internal/MapKey.d.ts.map +0 -1
- package/dist/vendor/Cache/Cache/_internal/MapKey.js +0 -37
- package/dist/vendor/Cache/Cache/_internal/MapValue.d.ts +0 -32
- package/dist/vendor/Cache/Cache/_internal/MapValue.d.ts.map +0 -1
- package/dist/vendor/Cache/Cache/_internal/MapValue.js +0 -24
- package/dist/vendor/Cache/Cache/definition.d.ts +0 -100
- package/dist/vendor/Cache/Cache/definition.d.ts.map +0 -1
- package/dist/vendor/Cache/Cache/definition.js +0 -5
- package/dist/vendor/Cache/Cache/operations/make.d.ts +0 -12
- package/dist/vendor/Cache/Cache/operations/make.d.ts.map +0 -1
- package/dist/vendor/Cache/Cache/operations/make.js +0 -12
- package/dist/vendor/Cache/Cache/operations/makeWith.d.ts +0 -14
- package/dist/vendor/Cache/Cache/operations/makeWith.d.ts.map +0 -1
- package/dist/vendor/Cache/Cache/operations/makeWith.js +0 -15
- package/dist/vendor/Cache/Cache/operations.d.ts +0 -3
- package/dist/vendor/Cache/Cache/operations.d.ts.map +0 -1
- package/dist/vendor/Cache/Cache/operations.js +0 -4
- package/dist/vendor/Cache/Cache.d.ts +0 -3
- package/dist/vendor/Cache/Cache.d.ts.map +0 -1
- package/dist/vendor/Cache/Cache.js +0 -4
- package/dist/vendor/Cache/CacheStats/definition.d.ts +0 -19
- package/dist/vendor/Cache/CacheStats/definition.d.ts.map +0 -1
- package/dist/vendor/Cache/CacheStats/definition.js +0 -6
- package/dist/vendor/Cache/CacheStats.d.ts +0 -2
- package/dist/vendor/Cache/CacheStats.d.ts.map +0 -1
- package/dist/vendor/Cache/CacheStats.js +0 -3
- package/dist/vendor/Cache/EntryStats/definition.d.ts +0 -17
- package/dist/vendor/Cache/EntryStats/definition.d.ts.map +0 -1
- package/dist/vendor/Cache/EntryStats/definition.js +0 -4
- package/dist/vendor/Cache/EntryStats.d.ts +0 -2
- package/dist/vendor/Cache/EntryStats.d.ts.map +0 -1
- package/dist/vendor/Cache/EntryStats.js +0 -3
- package/dist/vendor/Cache/Lookup/definition.d.ts +0 -17
- package/dist/vendor/Cache/Lookup/definition.d.ts.map +0 -1
- package/dist/vendor/Cache/Lookup/definition.js +0 -2
- package/dist/vendor/Cache/Lookup.d.ts +0 -2
- package/dist/vendor/Cache/Lookup.d.ts.map +0 -1
- package/dist/vendor/Cache/Lookup.js +0 -3
- package/dist/vendor/Cache/index.d.ts +0 -5
- package/dist/vendor/Cache/index.d.ts.map +0 -1
- package/dist/vendor/Cache/index.js +0 -5
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
+
const fileName_1 = "_src/services/simpledb/mongodb.ts";
|
|
3
|
+
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
4
|
+
import * as tsplus_module_2 from "@fp-ts/data/Option";
|
|
5
|
+
import * as tsplus_module_3 from "@effect-app/core/Effect";
|
|
6
|
+
import * as Mongo from "@effect-app/infra-adapters/mongo-client";
|
|
7
|
+
import { OptimisticLockException } from "./shared.js";
|
|
8
|
+
import * as simpledb from "./simpledb.js";
|
|
9
|
+
// const makeFromIndexKeys = (indexKeys: string[], unique: boolean) => indexKeys.reduce((prev, cur) => {
|
|
10
|
+
// prev[cur] = 1
|
|
11
|
+
// return prev
|
|
12
|
+
// }, {} as Record<string, number>)
|
|
13
|
+
const setup = (type, indexes) => tracer_1.withCallTrace(fileName_1 + ":17:6")(tsplus_module_1.flatMap(db => tracer_1.withCallTrace(fileName_1 + ":17:27")(tsplus_module_1.tryPromise(() => db.collection(type).createIndexes(indexes)))))(tracer_1.withCallTrace(fileName_1 + ":16:6")(tsplus_module_1.tap(db => tracer_1.withCallTrace(fileName_1 + ":16:23")(tsplus_module_1.tryPromise(() => db.createCollection(type).catch(err => console.warn(err))))))(Mongo.db));
|
|
14
|
+
export function createContext() {
|
|
15
|
+
return (type, encode, decode,
|
|
16
|
+
// schemaVersion: string,
|
|
17
|
+
indexes) => {
|
|
18
|
+
return tracer_1.withCallTrace(fileName_1 + ":27:33")(tsplus_module_1.map(() => ({
|
|
19
|
+
find: simpledb.find(find, decode, type),
|
|
20
|
+
findBy,
|
|
21
|
+
save: simpledb.storeDirectly(store, type)
|
|
22
|
+
})))(setup(type, indexes));
|
|
23
|
+
function find(id) {
|
|
24
|
+
return tracer_1.withCallTrace(fileName_1 + ":43:10")(tsplus_module_3.mapOpt(tracer_1.withCallTrace(fileName_1 + ":42:10")(tsplus_module_1.map(tsplus_module_2.fromNullable))(tracer_1.withCallTrace(fileName_1 + ":35:10")(tsplus_module_1.flatMap(db => tracer_1.withCallTrace(fileName_1 + ":36:18")(tsplus_module_1.tryPromise(() => db
|
|
25
|
+
.collection(type)
|
|
26
|
+
.findOne({ _id: id })))))(Mongo.db)), ({ data, version }) => ({ version, data })));
|
|
27
|
+
}
|
|
28
|
+
function findBy(keys) {
|
|
29
|
+
return tracer_1.withCallTrace(fileName_1 + ":52:10")(tsplus_module_3.mapOpt(tracer_1.withCallTrace(fileName_1 + ":51:10")(tsplus_module_1.map(tsplus_module_2.fromNullable))(tracer_1.withCallTrace(fileName_1 + ":48:10")(tsplus_module_1.flatMap(db => tracer_1.withCallTrace(fileName_1 + ":49:18")(tsplus_module_1.tryPromise(() => db.collection(type).findOne(keys, { projection: { _id: 1 } })))))(Mongo.db)), ({ _id }) => _id));
|
|
30
|
+
}
|
|
31
|
+
function store(record, currentVersion) {
|
|
32
|
+
return tracer_1.withCallTrace(fileName_1 + ":56:21")(tsplus_module_1.gen(function* ($) {
|
|
33
|
+
const version = tsplus_module_2.getOrElse(() => "1")(tsplus_module_2.map(cv => (parseInt(cv) + 1).toString())(currentVersion));
|
|
34
|
+
const db = yield* $(Mongo.db);
|
|
35
|
+
const data = yield* $(encode(record));
|
|
36
|
+
yield* $(tsplus_module_2.match(() => tsplus_module_1.orDie(tsplus_module_1.asUnit(tracer_1.withCallTrace(fileName_1 + ":66:22")(tsplus_module_1.tryPromise(() => db
|
|
37
|
+
.collection(type)
|
|
38
|
+
.insertOne({ _id: record.id, version, timestamp: new Date(), data }, {
|
|
39
|
+
checkKeys: false // support for keys with `.` and `$`. NOTE: you can write them, read them, but NOT query for them.
|
|
40
|
+
}))))), currentVersion => tracer_1.withCallTrace(fileName_1 + ":87:23")(tsplus_module_1.flatMap(x => {
|
|
41
|
+
if (!x.modifiedCount) {
|
|
42
|
+
return tracer_1.withCallTrace(fileName_1 + ":89:33")(tsplus_module_1.fail(new OptimisticLockException(type, record.id)));
|
|
43
|
+
}
|
|
44
|
+
return tsplus_module_3.unit;
|
|
45
|
+
}))(tsplus_module_1.orDie(tracer_1.withCallTrace(fileName_1 + ":77:22")(tsplus_module_1.tryPromise(() => db.collection(type).replaceOne({ _id: record.id, version: currentVersion }, {
|
|
46
|
+
version,
|
|
47
|
+
timestamp: new Date(),
|
|
48
|
+
data
|
|
49
|
+
}, { upsert: false }))))))(currentVersion));
|
|
50
|
+
return { version, data: record };
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ29kYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvc2ltcGxlZGIvbW9uZ29kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sS0FBSyxLQUFLLE1BQU0seUNBQXlDLENBQUE7QUFFaEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3JELE9BQU8sS0FBSyxRQUFRLE1BQU0sZUFBZSxDQUFBO0FBR3pDLHdHQUF3RztBQUN4RyxrQkFBa0I7QUFDbEIsZ0JBQWdCO0FBQ2hCLG1DQUFtQztBQUVuQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQVksRUFBRSxPQUEyQixFQUFFLEVBQUUsQ0FDMUQscUVBRVcsRUFBRSxDQUFDLEVBQUUsK0NBQUMsMkJBQWtCLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUEsR0FGcEYsaUVBQ08sRUFBRSxDQUFDLEVBQUUsK0NBQUMsMkJBQWtCLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQSxHQUQvRixLQUFLLENBQUMsRUFBRSxDQUN3RixDQUNYLENBQUE7QUFFdkYsTUFBTSxVQUFVLGFBQWE7SUFDM0IsT0FBTyxDQUNMLElBQVksRUFDWixNQUFpRCxFQUNqRCxNQUE4QztJQUM5Qyx5QkFBeUI7SUFDekIsT0FBMkIsRUFDM0IsRUFBRTtRQUNGLE9BQU8sa0VBQXlCLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDckMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDdkMsTUFBTTtZQUNOLElB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
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Effect } from "@effect/io/Effect";
|
|
2
|
+
import { Opt } from "@effect-app/core/Option";
|
|
3
|
+
import * as MO from "@effect-app/schema";
|
|
4
|
+
import * as RED from "@effect-app/infra-adapters/redis-client";
|
|
5
|
+
import type { DBRecord, Index } from "./shared.js";
|
|
6
|
+
import { CouldNotAquireDbLockException } from "./shared.js";
|
|
7
|
+
import * as simpledb from "./simpledb.js";
|
|
8
|
+
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => import("@effect/io/Effect").Effect<REncode, never, EA>, decode: (d: EA) => import("@effect/io/Effect").Effect<RDecode, EDecode, A>, schemaVersion: string, makeIndexKey: (r: A) => Index) => {
|
|
9
|
+
find: (id: string) => import("@effect/io/Effect").Effect<simpledb.RecordCache | RDecode | RED.RedisClient, simpledb.InvalidStateError, import("@fp-ts/data/Option").Option<A>>;
|
|
10
|
+
findByIndex: (index: Index) => import("@effect/io/Effect").Effect<RED.RedisClient, RED.ConnectionException, import("@fp-ts/data/Option").Option<TKey>>;
|
|
11
|
+
save: (record: A) => import("@effect/io/Effect").Effect<simpledb.RecordCache | REncode | RED.RedisClient, import("./shared.js").OptimisticLockException | simpledb.InvalidStateError | CouldNotAquireDbLockException, A>;
|
|
12
|
+
};
|
|
13
|
+
declare const RedisSerializedDBRecord_base: MO.Model<RedisSerializedDBRecord, MO.SchemaProperties<{
|
|
14
|
+
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/data/Option").None, import("@fp-ts/data/Option").None>;
|
|
15
|
+
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/data/Option").None, import("@fp-ts/data/Option").None>;
|
|
16
|
+
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/data/Option").None, import("@fp-ts/data/Option").None>;
|
|
17
|
+
}>> & MO.PropsExtensions<{
|
|
18
|
+
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/data/Option").None, import("@fp-ts/data/Option").None>;
|
|
19
|
+
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/data/Option").None, import("@fp-ts/data/Option").None>;
|
|
20
|
+
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/data/Option").None, import("@fp-ts/data/Option").None>;
|
|
21
|
+
}>;
|
|
22
|
+
export declare class RedisSerializedDBRecord extends RedisSerializedDBRecord_base {
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=redisdb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redisdb.d.ts","sourceRoot":"","sources":["../../../_src/services/simpledb/redisdb.ts"],"names":[],"mappings":";;AAGA,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAGxC,OAAO,KAAK,GAAG,MAAM,yCAAyC,CAAA;AAC9D,OAAO,KAAK,EAAgB,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAuB,6BAA6B,EAA+B,MAAM,aAAa,CAAA;AAC7G,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAIzC,wBAAgB,aAAa,CAAC,IAAI,SAAS,MAAM,EAAE,EAAE,EAAE,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,uCAErE,MAAM,mBACK,CAAC,yEACN,EAAE,6EACC,MAAM,oBACH,CAAC,KAAK,KAAK;;yBAyEN,KAAK;;EAmF/B;;;;;;;;;;AAED,qBAAa,uBAAwB,SAAQ,4BAI3C;CAAG"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
+
const fileName_1 = "_src/services/simpledb/redisdb.ts";
|
|
3
|
+
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
4
|
+
import * as tsplus_module_2 from "@effect-app/core/Effect";
|
|
5
|
+
import * as tsplus_module_3 from "@fp-ts/data/Option";
|
|
6
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
7
|
+
import { flow, pipe } from "@effect-app/core/Function";
|
|
8
|
+
import * as MO from "@effect-app/schema";
|
|
9
|
+
import * as RED from "@effect-app/infra-adapters/redis-client";
|
|
10
|
+
import { ConnectionException, CouldNotAquireDbLockException, getIndexName, getRecordName } from "./shared.js";
|
|
11
|
+
import * as simpledb from "./simpledb.js";
|
|
12
|
+
const ttl = 10 * 1000;
|
|
13
|
+
export function createContext() {
|
|
14
|
+
return (type, encode, decode, schemaVersion, makeIndexKey) => {
|
|
15
|
+
const getData = flow(encode, _ => tracer_1.withCallTrace(fileName_1 + ":22:41")(tsplus_module_1.map(JSON.stringify))(_));
|
|
16
|
+
return {
|
|
17
|
+
find: simpledb.find(find, decode, type),
|
|
18
|
+
findByIndex: getIdx,
|
|
19
|
+
save: simpledb.store(find, store, lockRedisRecord, type)
|
|
20
|
+
};
|
|
21
|
+
function find(id) {
|
|
22
|
+
return tsplus_module_1.orDie(tracer_1.withCallTrace(fileName_1 + ":30:39")(tsplus_module_2.flatMapOpt(RED.hmgetAll(getKey(id)), v => tracer_1.withCallTrace(fileName_1 + ":39:12")(tsplus_module_1.mapError(e => new ConnectionException(new Error(e.toString()))))(tracer_1.withCallTrace(fileName_1 + ":35:12")(tsplus_module_1.map(({ data, version }) => ({
|
|
23
|
+
data: JSON.parse(data),
|
|
24
|
+
version
|
|
25
|
+
})))(pipe(RedisSerializedDBRecord.Parser, MO.condemnFail)(v))))));
|
|
26
|
+
}
|
|
27
|
+
function store(record, currentVersion) {
|
|
28
|
+
const version = tsplus_module_3.getOrElse(() => "1")(tsplus_module_3.map(cv => (parseInt(cv) + 1).toString())(currentVersion));
|
|
29
|
+
return tsplus_module_3.match(() => tsplus_module_1.scoped(tracer_1.withCallTrace(fileName_1 + ":48:29")(tsplus_module_1.zipRight(tracer_1.withCallTrace(fileName_1 + ":63:22")(tsplus_module_1.map(() => ({ version, data: record })))(tsplus_module_1.orDie(tracer_1.withCallTrace(fileName_1 + ":62:16")(tsplus_module_1.zipRight(setIndex(record)))(tracer_1.withCallTrace(fileName_1 + ":55:16")(tsplus_module_1.flatMap(data => hmSetRec(getKey(record.id), {
|
|
30
|
+
version,
|
|
31
|
+
timestamp: new Date(),
|
|
32
|
+
data
|
|
33
|
+
})))(tracer_1.withCallTrace(fileName_1 + ":53:16")(tsplus_module_1.zipRight(getData(record)))(tracer_1.withCallTrace(fileName_1 + ":50:16")(tsplus_module_2.zipRightOpt(getIndex(record), tracer_1.withCallTrace(fileName_1 + ":51:24")(tsplus_module_1.fail(() => new Error("Combination already exists, abort"))))))
|
|
34
|
+
// TODO: instead use MULTI & EXEC to make it in one command?
|
|
35
|
+
))))))(lockIndex(record))), () => tracer_1.withCallTrace(fileName_1 + ":74:20")(tsplus_module_1.map(() => ({ version, data: record })))(tsplus_module_1.orDie(tracer_1.withCallTrace(fileName_1 + ":67:14")(tsplus_module_1.flatMap(data => hmSetRec(getKey(record.id), {
|
|
36
|
+
version,
|
|
37
|
+
timestamp: new Date(),
|
|
38
|
+
data
|
|
39
|
+
})))(getData(record)))))(currentVersion);
|
|
40
|
+
}
|
|
41
|
+
function getIndex(record) {
|
|
42
|
+
const index = makeIndexKey(record);
|
|
43
|
+
return getIdx(index);
|
|
44
|
+
}
|
|
45
|
+
function setIndex(record) {
|
|
46
|
+
const index = makeIndexKey(record);
|
|
47
|
+
return setIdx(index, record);
|
|
48
|
+
}
|
|
49
|
+
function lockIndex(record) {
|
|
50
|
+
const index = makeIndexKey(record);
|
|
51
|
+
return lockRedisIdx(index);
|
|
52
|
+
}
|
|
53
|
+
function getIdx(index) {
|
|
54
|
+
return tracer_1.withCallTrace(fileName_1 + ":94:52")(tsplus_module_1.map(_ => tsplus_module_3.map(i => i)(_)))(RED.hget(getIdxKey(index), index.key));
|
|
55
|
+
}
|
|
56
|
+
function setIdx(index, r) {
|
|
57
|
+
return RED.hset(getIdxKey(index), index.key, r.id);
|
|
58
|
+
}
|
|
59
|
+
function lockRedisIdx(index) {
|
|
60
|
+
const lockKey = getIdxLockKey(index);
|
|
61
|
+
// acquire
|
|
62
|
+
return tracer_1.withCallTrace(fileName_1 + ":113:11")(tsplus_module_1.acquireRelease(tracer_1.withCallTrace(fileName_1 + ":106:10")(tsplus_module_1.mapBoth(err => new CouldNotAquireDbLockException(type, lockKey, err),
|
|
63
|
+
// release
|
|
64
|
+
lock => ({
|
|
65
|
+
release: tsplus_module_1.orDie(tracer_1.withCallTrace(fileName_1 + ":110:29")(tsplus_module_1.tryPromise(() => lock.unlock())))
|
|
66
|
+
})))(tracer_1.withCallTrace(fileName_1 + ":105:10")(tsplus_module_1.flatMap(lock => tracer_1.withCallTrace(fileName_1 + ":105:33")(tsplus_module_1.tryPromise(() => lock.lock(lockKey, ttl)))))(RED.lock)), l => l.release));
|
|
67
|
+
}
|
|
68
|
+
function lockRedisRecord(id) {
|
|
69
|
+
// acquire
|
|
70
|
+
return tracer_1.withCallTrace(fileName_1 + ":134:11")(tsplus_module_1.acquireRelease(tracer_1.withCallTrace(fileName_1 + ":126:10")(tsplus_module_1.mapBoth(err => new CouldNotAquireDbLockException(type, id, err),
|
|
71
|
+
// release
|
|
72
|
+
lock => ({
|
|
73
|
+
// TODO
|
|
74
|
+
release: tsplus_module_1.orDie(tracer_1.withCallTrace(fileName_1 + ":131:29")(tsplus_module_1.tryPromise(() => lock.unlock())))
|
|
75
|
+
})))(tracer_1.withCallTrace(fileName_1 + ":121:10")(tsplus_module_1.flatMap(lock => tracer_1.withCallTrace(fileName_1 + ":122:18")(tsplus_module_1.tryPromise(() => lock.lock(getLockKey(id), ttl)))))(RED.lock)), l => l.release));
|
|
76
|
+
}
|
|
77
|
+
function getKey(id) {
|
|
78
|
+
return `v${schemaVersion}.${getRecordName(type, id)}`;
|
|
79
|
+
}
|
|
80
|
+
function getLockKey(id) {
|
|
81
|
+
return `v${schemaVersion}.locks.${getRecordName(type, id)}`;
|
|
82
|
+
}
|
|
83
|
+
function getIdxKey(index) {
|
|
84
|
+
return `v${schemaVersion}.${getIndexName(type, index.doc)}`;
|
|
85
|
+
}
|
|
86
|
+
function getIdxLockKey(index) {
|
|
87
|
+
return `v${schemaVersion}.locks.${getIndexName(type, index.doc)}_${index.key}`;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
function hmSetRec(key, val) {
|
|
91
|
+
const enc = RedisSerializedDBRecord.Encoder(val);
|
|
92
|
+
return tracer_1.withCallTrace(fileName_1 + ":157:23")(tsplus_module_1.flatMap(client => tsplus_module_1.uninterruptible(tracer_1.withCallTrace(fileName_1 + ":159:16")(tsplus_module_1.async(res => {
|
|
93
|
+
client.hmset(key, "version", enc.version, "timestamp", enc.timestamp, "data", enc.data, err => err
|
|
94
|
+
? res(tracer_1.withCallTrace(fileName_1 + ":170:30")(tsplus_module_1.fail(new ConnectionException(err))))
|
|
95
|
+
: res(tracer_1.withCallTrace(fileName_1 + ":171:23")(tsplus_module_1.sync(() => void 0))));
|
|
96
|
+
})))))(RED.client);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export class RedisSerializedDBRecord extends MO.Model()({
|
|
100
|
+
version: MO.prop(MO.string),
|
|
101
|
+
timestamp: MO.prop(MO.date),
|
|
102
|
+
data: MO.prop(MO.string)
|
|
103
|
+
}) {
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXNkYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvc2ltcGxlZGIvcmVkaXNkYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ3RELE9BQU8sS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFHeEMsT0FBTyxLQUFLLEdBQUcsTUFBTSx5Q0FBeUMsQ0FBQTtBQUU5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsNkJBQTZCLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM3RyxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQTtBQUV6QyxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFBO0FBRXJCLE1BQU0sVUFBVSxhQUFhO0lBQzNCLE9BQU8sQ0FDTCxJQUFZLEVBQ1osTUFBaUQsRUFDakQsTUFBOEMsRUFDOUMsYUFBcUIsRUFDckIsWUFBNkIsRUFDN0IsRUFBRTtRQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxrRUFBTSxJQUFJLENBQUMsU0FBUyxHQUFwQixDQUFDLENBQW9CLENBQUMsQ0FBQTtRQUN4RCxPQUFPO1lBQ0wsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDdkMsV0FBVyxFQUFFLE1BQU07WUFDbkIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDO1NBQ3pELENBQUE7UUFFRCxTQUFTLElBQUksQ0FBQyxFQUFVO1lBQ3RCLDJFQUFPLDJCQUFBLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FB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
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Effect } from "@effect/io/Effect";
|
|
2
|
+
import { Opt } from "@effect-app/core/Option";
|
|
3
|
+
import * as MO from "@effect-app/schema";
|
|
4
|
+
import type { SchemaAny } from "@effect-app/schema";
|
|
5
|
+
declare class BaseError {
|
|
6
|
+
message: string;
|
|
7
|
+
constructor(message: string);
|
|
8
|
+
}
|
|
9
|
+
export declare class CouldNotAquireDbLockException extends BaseError {
|
|
10
|
+
readonly type: string;
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly error: Error;
|
|
13
|
+
readonly _errorTag = "CouldNotAquireDbLockException";
|
|
14
|
+
constructor(type: string, id: string, error: Error);
|
|
15
|
+
}
|
|
16
|
+
export declare class OptimisticLockException extends Error {
|
|
17
|
+
readonly type: string;
|
|
18
|
+
readonly id: string;
|
|
19
|
+
readonly _errorTag = "OptimisticLockException";
|
|
20
|
+
constructor(type: string, id: string);
|
|
21
|
+
}
|
|
22
|
+
export declare class ConnectionException extends Error {
|
|
23
|
+
readonly error: Error;
|
|
24
|
+
readonly _errorTag = "ConnectionException";
|
|
25
|
+
constructor(error: Error);
|
|
26
|
+
}
|
|
27
|
+
export interface DBRecord<TKey extends string> {
|
|
28
|
+
id: TKey;
|
|
29
|
+
}
|
|
30
|
+
declare const SerializedDBRecord_base: MO.Model<SerializedDBRecord, MO.SchemaProperties<{
|
|
31
|
+
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/data/Option").None, import("@fp-ts/data/Option").None>;
|
|
32
|
+
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/data/Option").None, import("@fp-ts/data/Option").None>;
|
|
33
|
+
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/data/Option").None, import("@fp-ts/data/Option").None>;
|
|
34
|
+
}>> & MO.PropsExtensions<{
|
|
35
|
+
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/data/Option").None, import("@fp-ts/data/Option").None>;
|
|
36
|
+
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/data/Option").None, import("@fp-ts/data/Option").None>;
|
|
37
|
+
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/data/Option").None, import("@fp-ts/data/Option").None>;
|
|
38
|
+
}>;
|
|
39
|
+
export declare class SerializedDBRecord extends SerializedDBRecord_base {
|
|
40
|
+
}
|
|
41
|
+
export declare function makeSerialisedDBRecord(s: SchemaAny): MO.SchemaProperties<{
|
|
42
|
+
version: MO.Property<MO.SchemaDefaultSchema<unknown, number, number, number, {}>, "required", import("@fp-ts/data/Option").None, import("@fp-ts/data/Option").None>;
|
|
43
|
+
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/data/Option").None, import("@fp-ts/data/Option").None>;
|
|
44
|
+
data: MO.Property<MO.SchemaAny, "required", import("@fp-ts/data/Option").None, import("@fp-ts/data/Option").None>;
|
|
45
|
+
}>;
|
|
46
|
+
export interface CachedRecord<T> {
|
|
47
|
+
version: string;
|
|
48
|
+
data: T;
|
|
49
|
+
}
|
|
50
|
+
export interface Index {
|
|
51
|
+
doc: string;
|
|
52
|
+
key: string;
|
|
53
|
+
}
|
|
54
|
+
export declare function getIndexName(type: string, id: string): string;
|
|
55
|
+
export declare function getRecordName(type: string, id: string): string;
|
|
56
|
+
export declare function makeMap<TKey, T>(): EffectMap<TKey, T>;
|
|
57
|
+
export interface EffectMap<TKey, T> {
|
|
58
|
+
[Symbol.iterator](): IterableIterator<[TKey, T]>;
|
|
59
|
+
find: (k: TKey) => Effect<never, never, Opt<T>>;
|
|
60
|
+
set: (k: TKey, v: T) => Effect<never, never, void>;
|
|
61
|
+
}
|
|
62
|
+
export {};
|
|
63
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../_src/services/simpledb/shared.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAEnD,cAAM,SAAS;IACM,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;CACnC;AACD,qBAAa,6BAA8B,SAAQ,SAAS;IAE9C,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK;IAD7E,QAAQ,CAAC,SAAS,mCAAkC;gBAC/B,IAAI,EAAE,MAAM,EAAW,EAAE,EAAE,MAAM,EAAW,KAAK,EAAE,KAAK;CAG9E;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAEpC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM;IADtD,QAAQ,CAAC,SAAS,6BAA4B;gBACzB,IAAI,EAAE,MAAM,EAAW,EAAE,EAAE,MAAM;CAGvD;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAEhC,QAAQ,CAAC,KAAK,EAAE,KAAK;IADjC,QAAQ,CAAC,SAAS,yBAAwB;gBACrB,KAAK,EAAE,KAAK;CAGlC;AAED,MAAM,WAAW,QAAQ,CAAC,IAAI,SAAS,MAAM;IAC3C,EAAE,EAAE,IAAI,CAAA;CACT;;;;;;;;;;AAED,qBAAa,kBAAmB,SAAQ,uBAItC;CAAG;AAGL,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,SAAS;;;;GAMlD;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,CAAC,CAAA;CACR;AAED,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAEpD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAErD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,CAAC,wBAU9B;AAED,MAAM,WAAW,SAAS,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAChD,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/C,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;CACnD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
+
const fileName_1 = "_src/services/simpledb/shared.ts";
|
|
3
|
+
import * as tsplus_module_1 from "@fp-ts/data/Option";
|
|
4
|
+
import * as tsplus_module_2 from "@effect/io/Effect";
|
|
5
|
+
import * as MO from "@effect-app/schema";
|
|
6
|
+
class BaseError {
|
|
7
|
+
constructor(message) {
|
|
8
|
+
this.message = message;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class CouldNotAquireDbLockException extends BaseError {
|
|
12
|
+
constructor(type, id, error) {
|
|
13
|
+
super(`Couldn't lock db record ${type}: ${id}`);
|
|
14
|
+
this.type = type;
|
|
15
|
+
this.id = id;
|
|
16
|
+
this.error = error;
|
|
17
|
+
this._errorTag = "CouldNotAquireDbLockException";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export class OptimisticLockException extends Error {
|
|
21
|
+
constructor(type, id) {
|
|
22
|
+
super(`Existing ${type} ${id} record changed`);
|
|
23
|
+
this.type = type;
|
|
24
|
+
this.id = id;
|
|
25
|
+
this._errorTag = "OptimisticLockException";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export class ConnectionException extends Error {
|
|
29
|
+
constructor(error) {
|
|
30
|
+
super("A connection error ocurred");
|
|
31
|
+
this.error = error;
|
|
32
|
+
this._errorTag = "ConnectionException";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class SerializedDBRecord extends MO.Model()({
|
|
36
|
+
version: MO.prop(MO.string),
|
|
37
|
+
timestamp: MO.prop(MO.date),
|
|
38
|
+
data: MO.prop(MO.string)
|
|
39
|
+
}) {
|
|
40
|
+
}
|
|
41
|
+
// unknown -> string -> SDB?
|
|
42
|
+
export function makeSerialisedDBRecord(s) {
|
|
43
|
+
return MO.props({
|
|
44
|
+
version: MO.prop(MO.number),
|
|
45
|
+
timestamp: MO.prop(MO.date),
|
|
46
|
+
data: MO.prop(s)
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
export function getIndexName(type, id) {
|
|
50
|
+
return `${type}-idx_${id}`;
|
|
51
|
+
}
|
|
52
|
+
export function getRecordName(type, id) {
|
|
53
|
+
return `${type}-r_${id}`;
|
|
54
|
+
}
|
|
55
|
+
export function makeMap() {
|
|
56
|
+
const map = new Map();
|
|
57
|
+
return {
|
|
58
|
+
find: (k) => tracer_1.withCallTrace(fileName_1 + ":68:24")(tsplus_module_2.sync(() => tsplus_module_1.fromNullable(map.get(k)))),
|
|
59
|
+
[Symbol.iterator]: () => map[Symbol.iterator](),
|
|
60
|
+
set: (k, v) => tracer_1.withCallTrace(fileName_1 + ":71:7")(tsplus_module_2.sync(() => {
|
|
61
|
+
map.set(k, v);
|
|
62
|
+
}))
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vX3NyYy9zZXJ2aWNlcy9zaW1wbGVkYi9zaGFyZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFHeEMsTUFBTSxTQUFTO0lBQ2IsWUFBbUIsT0FBZTtRQUFmLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFBRyxDQUFDO0NBQ3ZDO0FBQ0QsTUFBTSxPQUFPLDZCQUE4QixTQUFRLFNBQVM7SUFFMUQsWUFBcUIsSUFBWSxFQUFXLEVBQVUsRUFBVyxLQUFZO1FBQzNFLEtBQUssQ0FBQywyQkFBMkIsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFENUIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFXLE9BQUUsR0FBRixFQUFFLENBQVE7UUFBVyxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBRHBFLGNBQVMsR0FBRywrQkFBK0IsQ0FBQTtJQUdwRCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsS0FBSztJQUVoRCxZQUFxQixJQUFZLEVBQVcsRUFBVTtRQUNwRCxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO1FBRDNCLFNBQUksR0FBSixJQUFJLENBQVE7UUFBVyxPQUFFLEdBQUYsRUFBRSxDQUFRO1FBRDdDLGNBQVMsR0FBRyx5QkFBeUIsQ0FBQTtJQUc5QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsS0FBSztJQUU1QyxZQUFxQixLQUFZO1FBQy9CLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO1FBRGhCLFVBQUssR0FBTCxLQUFLLENBQU87UUFEeEIsY0FBUyxHQUFHLHFCQUFxQixDQUFBO0lBRzFDLENBQUM7Q0FDRjtBQU1ELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxFQUFFLENBQUMsS0FBSyxFQUFzQixDQUFDO0lBQ3JFLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDM0IsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQztJQUMzQixJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7Q0FBRztBQUVMLDRCQUE0QjtBQUM1QixNQUFNLFVBQVUsc0JBQXNCLENBQUMsQ0FBWTtJQUNqRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDZCxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQzNCLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDM0IsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ2pCLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFZRCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQVksRUFBRSxFQUFVO0lBQ25ELE9BQU8sR0FBRyxJQUFJLFFBQVEsRUFBRSxFQUFFLENBQUE7QUFDNUIsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBWSxFQUFFLEVBQVU7SUFDcEQsT0FBTyxHQUFHLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQTtBQUMxQixDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU87SUFDckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQVcsQ0FBQTtJQUM5QixPQUFPO1FBQ0wsSUFBSSxFQUFFLENBQUMsQ0FBTyxFQUFFLEVBQUUsK0NBQUMscUJBQU8sR0FBRyxFQUFFLENBQUMsNkJBQWlCLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzdELENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDL0MsR0FBRyxFQUFFLENBQUMsQ0FBTyxFQUFFLENBQUksRUFBRSxFQUFFLDhDQUNyQixxQkFBTyxHQUFHLEVBQUU7WUFDVixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUNmLENBQUMsQ0FBQyxDQUFBO0tBQ2lCLENBQUE7QUFDekIsQ0FBQyJ9
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Effect } from "@effect/io/Effect";
|
|
2
|
+
import { Opt } from "@effect-app/core/Option";
|
|
3
|
+
import { Scope } from "@effect/io/Scope";
|
|
4
|
+
import type { CachedRecord, DBRecord, EffectMap } from "./shared.js";
|
|
5
|
+
import { OptimisticLockException } from "./shared.js";
|
|
6
|
+
export type Version = string;
|
|
7
|
+
export declare class InvalidStateError {
|
|
8
|
+
readonly message: string;
|
|
9
|
+
readonly details?: unknown;
|
|
10
|
+
readonly _tag = "InvalidStateError";
|
|
11
|
+
constructor(message: string, details?: unknown);
|
|
12
|
+
}
|
|
13
|
+
export declare function makeLiveRecordCache(): {
|
|
14
|
+
get: <T>(type: string) => import("@effect/io/Effect").Effect<never, never, EffectMap<string, CachedRecord<T>>>;
|
|
15
|
+
};
|
|
16
|
+
export interface RecordCache extends ReturnType<typeof makeLiveRecordCache> {
|
|
17
|
+
}
|
|
18
|
+
export declare const RecordCache: import("@fp-ts/data/Context").Tag<RecordCache>;
|
|
19
|
+
export declare const LiveRecordCache: import("@effect/io/Layer").Layer<never, never, RecordCache>;
|
|
20
|
+
export declare function find<R, RDecode, EDecode, E, EA, A>(tryRead: (id: string) => Effect<R, E, Opt<CachedRecord<EA>>>, decode: (d: EA) => Effect<RDecode, EDecode, A>, type: string): (id: string) => import("@effect/io/Effect").Effect<R | RDecode | RecordCache, E | InvalidStateError, import("@fp-ts/data/Option").Option<A>>;
|
|
21
|
+
export declare function storeDirectly<R, E, TKey extends string, A extends DBRecord<TKey>>(save: (r: A, version: Opt<Version>) => Effect<R, E, CachedRecord<A>>, type: string): (record: A) => import("@effect/io/Effect").Effect<R | RecordCache, E, A>;
|
|
22
|
+
export declare function store<R, E, R2, E2, TKey extends string, EA, A extends DBRecord<TKey>>(tryRead: (id: string) => Effect<R, E, Opt<CachedRecord<EA>>>, save: (r: A, version: Opt<Version>) => Effect<R, E, CachedRecord<A>>, lock: (id: string) => Effect<R2 | Scope, E2, unknown>, type: string): (record: A) => import("@effect/io/Effect").Effect<RecordCache | R | Exclude<R2, import("@effect/io/Scope").Scope>, OptimisticLockException | InvalidStateError | E | E2, A>;
|
|
23
|
+
//# sourceMappingURL=simpledb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simpledb.d.ts","sourceRoot":"","sources":["../../../_src/services/simpledb/simpledb.ts"],"names":[],"mappings":";;;AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAW,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAE9D,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAC5B,qBAAa,iBAAiB;IAEhB,QAAQ,CAAC,OAAO,EAAE,MAAM;IAAE,QAAQ,CAAC,OAAO,CAAC;IADvD,QAAQ,CAAC,IAAI,uBAAsB;gBACd,OAAO,EAAE,MAAM,EAAW,OAAO,CAAC,SAAS;CACjE;AAED,wBAAgB,mBAAmB;mBAGhB,MAAM;EAWxB;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU,CAAC,OAAO,mBAAmB,CAAC;CAAG;AAG9E,eAAO,MAAM,WAAW,gDAAqB,CAAA;AAE7C,eAAO,MAAM,eAAe,6DAAqD,CAAA;AASjF,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAChD,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAC5D,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EAC9C,IAAI,EAAE,MAAM,QAcA,MAAM,kIAOnB;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,SAAS,MAAM,EAAE,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,EAC/E,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EACpE,IAAI,EAAE,MAAM,YAGI,CAAC,+DASlB;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,SAAS,MAAM,EAAE,EAAE,EAAE,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,EACnF,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAC5D,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EACpE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,EACrD,IAAI,EAAE,MAAM,YAGI,CAAC,kKA4BlB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
+
const fileName_1 = "_src/services/simpledb/simpledb.ts";
|
|
3
|
+
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
4
|
+
import * as tsplus_module_2 from "@fp-ts/data/Context";
|
|
5
|
+
import * as tsplus_module_3 from "@effect-app/core/Effect";
|
|
6
|
+
import * as tsplus_module_4 from "@fp-ts/data/Option";
|
|
7
|
+
import { makeMap, OptimisticLockException } from "./shared.js";
|
|
8
|
+
export class InvalidStateError {
|
|
9
|
+
constructor(message, details) {
|
|
10
|
+
this.message = message;
|
|
11
|
+
this.details = details;
|
|
12
|
+
this._tag = "InvalidStateError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function makeLiveRecordCache() {
|
|
16
|
+
const m = new Map();
|
|
17
|
+
return {
|
|
18
|
+
get: (type) => tracer_1.withCallTrace(fileName_1 + ":14:7")(tsplus_module_1.sync(() => {
|
|
19
|
+
const ex = m.get(type);
|
|
20
|
+
if (!ex) {
|
|
21
|
+
const nm = makeMap();
|
|
22
|
+
m.set(type, nm);
|
|
23
|
+
return nm;
|
|
24
|
+
}
|
|
25
|
+
return ex;
|
|
26
|
+
}))
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// module tag
|
|
30
|
+
export const RecordCache = tsplus_module_2.Tag();
|
|
31
|
+
export const LiveRecordCache = tsplus_module_1.toLayer(RecordCache)(tracer_1.withCallTrace(fileName_1 + ":31:32")(tsplus_module_1.sync(() => makeLiveRecordCache())));
|
|
32
|
+
const getM = (type) => (eff) => tracer_1.withCallTrace(fileName_1 + ":35:12")(tsplus_module_1.gen(function* ($) {
|
|
33
|
+
const { get } = yield* $(tsplus_module_1.service(RecordCache));
|
|
34
|
+
return yield* $(tracer_1.withCallTrace(fileName_1 + ":37:36")(tsplus_module_1.flatMap(eff))(get(type)));
|
|
35
|
+
}));
|
|
36
|
+
export function find(tryRead, decode, type) {
|
|
37
|
+
const getCache = getM(type);
|
|
38
|
+
const read = (id) => tracer_1.withCallTrace(fileName_1 + ":55:8")(tsplus_module_3.mapOpt(tracer_1.withCallTrace(fileName_1 + ":54:8")(tsplus_module_3.tapOpt(tracer_1.withCallTrace(fileName_1 + ":48:8")(tsplus_module_3.flatMapOpt(tryRead(id), ({ data, version }) => tracer_1.withCallTrace(fileName_1 + ":49:22")(tsplus_module_1.mapBoth(err => new InvalidStateError("DB serialisation Issue", err), data => ({ data, version })))(decode(data)))), r => getCache(c => c.set(id, r)))), r => r.data));
|
|
39
|
+
return (id) => getCache(c => tracer_1.withCallTrace(fileName_1 + ":62:10")(tsplus_module_1.orElse(() => read(id)))(tracer_1.withCallTrace(fileName_1 + ":61:10")(tsplus_module_3.mapOpt(c
|
|
40
|
+
.find(id), existing => existing.data))));
|
|
41
|
+
}
|
|
42
|
+
export function storeDirectly(save, type) {
|
|
43
|
+
const getCache = getM(type);
|
|
44
|
+
return (record) => getCache(c => tracer_1.withCallTrace(fileName_1 + ":78:10")(tsplus_module_1.map(r => r.data))(tracer_1.withCallTrace(fileName_1 + ":77:10")(tsplus_module_1.tap(r => c.set(record.id, r)))(tracer_1.withCallTrace(fileName_1 + ":76:10")(tsplus_module_1.flatMap(cv => save(record, cv)))(tracer_1.withCallTrace(fileName_1 + ":75:10")(tsplus_module_3.mapOpt(c
|
|
45
|
+
.find(record.id), x => x.version))))));
|
|
46
|
+
}
|
|
47
|
+
export function store(tryRead, save, lock, type) {
|
|
48
|
+
const getCache = getM(type);
|
|
49
|
+
return (record) => getCache(c => tracer_1.withCallTrace(fileName_1 + ":96:10")(tsplus_module_1.map(r => r.data))(tracer_1.withCallTrace(fileName_1 + ":95:10")(tsplus_module_1.tap(r => c.set(record.id, r)))(tracer_1.withCallTrace(fileName_1 + ":94:10")(tsplus_module_1.flatMap(_ => tsplus_module_4.match(() => save(record, tsplus_module_4.none), confirmVersionAndSave(record))(_)))(tracer_1.withCallTrace(fileName_1 + ":93:10")(tsplus_module_3.mapOpt(c
|
|
50
|
+
.find(record.id), x => x.version))))));
|
|
51
|
+
function confirmVersionAndSave(record) {
|
|
52
|
+
return (cv) => tsplus_module_1.scoped(tracer_1.withCallTrace(fileName_1 + ":101:23")(tsplus_module_1.zipRight(tracer_1.withCallTrace(fileName_1 + ":114:12")(tsplus_module_1.zipRight(save(record, tsplus_module_4.some(cv))))(tracer_1.withCallTrace(fileName_1 + ":109:12")(tsplus_module_1.tap(({ version }) => version !== cv
|
|
53
|
+
? tracer_1.withCallTrace(fileName_1 + ":111:24")(tsplus_module_1.fail(new OptimisticLockException(type, record.id))) : tsplus_module_3.unit))(tracer_1.withCallTrace(fileName_1 + ":103:12")(tsplus_module_1.flatMap(_ => tsplus_module_4.match(() => tracer_1.withCallTrace(fileName_1 + ":105:28")(tsplus_module_1.fail(new InvalidStateError("record is gone"))), tsplus_module_1.succeed)(_)))(tryRead(record.id))))))(lock(record.id)));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL3NpbXBsZWRiL3NpbXBsZWRiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLE9BQU8sRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFHOUQsTUFBTSxPQUFPLGlCQUFpQjtJQUU1QixZQUFxQixPQUFlLEVBQVcsT0FBaUI7UUFBM0MsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUFXLFlBQU8sR0FBUCxPQUFPLENBQVU7UUFEdkQsU0FBSSxHQUFHLG1CQUFtQixDQUFBO0lBQ2dDLENBQUM7Q0FDckU7QUFFRCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE1BQU0sQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFzQyxDQUFBO0lBQ3ZELE9BQU87UUFDTCxHQUFHLEVBQUUsQ0FBSSxJQUFZLEVBQUUsRUFBRSw4Q0FDdkIscUJBQU8sR0FBRyxFQUFFO1lBQ1YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN0QixJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNQLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBbUIsQ0FBQTtnQkFDckMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7Z0JBQ2YsT0FBTyxFQUF3QyxDQUFBO2FBQ2hEO1lBQ0QsT0FBTyxFQUF3QyxDQUFBO1FBQ2pELENBQUMsQ0FBQyxDQUFBO0tBQ0wsQ0FBQTtBQUNILENBQUM7QUFJRCxhQUFhO0FBQ2IsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGdCQUFBLEdBQUcsRUFBZSxDQUFBO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyx3QkFBc0MsV0FBVyxnREFBakQsMkJBQU8sbUJBQW1CLEVBQUUsQ0FBQyxFQUFxQixDQUFBO0FBRWpGLE1BQU0sSUFBSSxHQUFHLENBQUks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
|