@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,182 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
|
|
3
|
+
import { flow, pipe } from "@effect-app/core/Function"
|
|
4
|
+
import * as MO from "@effect-app/schema"
|
|
5
|
+
import type { Lock } from "redlock"
|
|
6
|
+
|
|
7
|
+
import * as RED from "@effect-app/infra-adapters/redis-client"
|
|
8
|
+
import type { CachedRecord, DBRecord, Index } from "./shared.js"
|
|
9
|
+
import { ConnectionException, CouldNotAquireDbLockException, getIndexName, getRecordName } from "./shared.js"
|
|
10
|
+
import * as simpledb from "./simpledb.js"
|
|
11
|
+
|
|
12
|
+
const ttl = 10 * 1000
|
|
13
|
+
|
|
14
|
+
export function createContext<TKey extends string, EA, A extends DBRecord<TKey>>() {
|
|
15
|
+
return <REncode, RDecode, EDecode>(
|
|
16
|
+
type: string,
|
|
17
|
+
encode: (record: A) => Effect<REncode, never, EA>,
|
|
18
|
+
decode: (d: EA) => Effect<RDecode, EDecode, A>,
|
|
19
|
+
schemaVersion: string,
|
|
20
|
+
makeIndexKey: (r: A) => Index
|
|
21
|
+
) => {
|
|
22
|
+
const getData = flow(encode, _ => _.map(JSON.stringify))
|
|
23
|
+
return {
|
|
24
|
+
find: simpledb.find(find, decode, type),
|
|
25
|
+
findByIndex: getIdx,
|
|
26
|
+
save: simpledb.store(find, store, lockRedisRecord, type)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function find(id: string) {
|
|
30
|
+
return RED.hmgetAll(getKey(id)).flatMapOpt(v =>
|
|
31
|
+
pipe(
|
|
32
|
+
RedisSerializedDBRecord.Parser,
|
|
33
|
+
MO.condemnFail
|
|
34
|
+
)(v)
|
|
35
|
+
.map(({ data, version }) => ({
|
|
36
|
+
data: JSON.parse(data) as EA,
|
|
37
|
+
version
|
|
38
|
+
}))
|
|
39
|
+
.mapError(e => new ConnectionException(new Error(e.toString())))
|
|
40
|
+
).orDie
|
|
41
|
+
}
|
|
42
|
+
function store(record: A, currentVersion: Opt<string>) {
|
|
43
|
+
const version = currentVersion
|
|
44
|
+
.map(cv => (parseInt(cv) + 1).toString())
|
|
45
|
+
.getOrElse(() => "1")
|
|
46
|
+
return currentVersion.match(
|
|
47
|
+
() =>
|
|
48
|
+
lockIndex(record).zipRight(
|
|
49
|
+
getIndex(record)
|
|
50
|
+
.zipRightOpt(
|
|
51
|
+
Effect.fail(() => new Error("Combination already exists, abort"))
|
|
52
|
+
)
|
|
53
|
+
.zipRight(getData(record))
|
|
54
|
+
// TODO: instead use MULTI & EXEC to make it in one command?
|
|
55
|
+
.flatMap(data =>
|
|
56
|
+
hmSetRec(getKey(record.id), {
|
|
57
|
+
version,
|
|
58
|
+
timestamp: new Date(),
|
|
59
|
+
data
|
|
60
|
+
})
|
|
61
|
+
)
|
|
62
|
+
.zipRight(setIndex(record))
|
|
63
|
+
.orDie.map(() => ({ version, data: record } as CachedRecord<A>))
|
|
64
|
+
).scoped,
|
|
65
|
+
() =>
|
|
66
|
+
getData(record)
|
|
67
|
+
.flatMap(data =>
|
|
68
|
+
hmSetRec(getKey(record.id), {
|
|
69
|
+
version,
|
|
70
|
+
timestamp: new Date(),
|
|
71
|
+
data
|
|
72
|
+
})
|
|
73
|
+
)
|
|
74
|
+
.orDie.map(() => ({ version, data: record } as CachedRecord<A>))
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function getIndex(record: A) {
|
|
79
|
+
const index = makeIndexKey(record)
|
|
80
|
+
return getIdx(index)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function setIndex(record: A) {
|
|
84
|
+
const index = makeIndexKey(record)
|
|
85
|
+
return setIdx(index, record)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function lockIndex(record: A) {
|
|
89
|
+
const index = makeIndexKey(record)
|
|
90
|
+
return lockRedisIdx(index)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function getIdx(index: Index) {
|
|
94
|
+
return RED.hget(getIdxKey(index), index.key).map(_ => _.map(i => i as TKey))
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function setIdx(index: Index, r: A) {
|
|
98
|
+
return RED.hset(getIdxKey(index), index.key, r.id)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function lockRedisIdx(index: Index) {
|
|
102
|
+
const lockKey = getIdxLockKey(index)
|
|
103
|
+
// acquire
|
|
104
|
+
return RED.lock
|
|
105
|
+
.flatMap(lock => Effect.tryPromise(() => lock.lock(lockKey, ttl) as unknown as Promise<Lock>))
|
|
106
|
+
.mapBoth(
|
|
107
|
+
err => new CouldNotAquireDbLockException(type, lockKey, err as Error),
|
|
108
|
+
// release
|
|
109
|
+
lock => ({
|
|
110
|
+
release: Effect.tryPromise(() => lock.unlock() as unknown as Promise<void>)
|
|
111
|
+
.orDie
|
|
112
|
+
})
|
|
113
|
+
).acquireRelease(
|
|
114
|
+
l => l.release
|
|
115
|
+
)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function lockRedisRecord(id: string) {
|
|
119
|
+
// acquire
|
|
120
|
+
return RED.lock
|
|
121
|
+
.flatMap(lock =>
|
|
122
|
+
Effect.tryPromise(
|
|
123
|
+
() => lock.lock(getLockKey(id), ttl) as unknown as Promise<Lock>
|
|
124
|
+
)
|
|
125
|
+
)
|
|
126
|
+
.mapBoth(
|
|
127
|
+
err => new CouldNotAquireDbLockException(type, id, err as Error),
|
|
128
|
+
// release
|
|
129
|
+
lock => ({
|
|
130
|
+
// TODO
|
|
131
|
+
release: Effect.tryPromise(() => lock.unlock() as unknown as Promise<void>)
|
|
132
|
+
.orDie
|
|
133
|
+
})
|
|
134
|
+
).acquireRelease(
|
|
135
|
+
l => l.release
|
|
136
|
+
)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function getKey(id: string) {
|
|
140
|
+
return `v${schemaVersion}.${getRecordName(type, id)}`
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function getLockKey(id: string) {
|
|
144
|
+
return `v${schemaVersion}.locks.${getRecordName(type, id)}`
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function getIdxKey(index: Index) {
|
|
148
|
+
return `v${schemaVersion}.${getIndexName(type, index.doc)}`
|
|
149
|
+
}
|
|
150
|
+
function getIdxLockKey(index: Index) {
|
|
151
|
+
return `v${schemaVersion}.locks.${getIndexName(type, index.doc)}_${index.key}`
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function hmSetRec(key: string, val: RedisSerializedDBRecord) {
|
|
156
|
+
const enc = RedisSerializedDBRecord.Encoder(val)
|
|
157
|
+
return RED.client.flatMap(
|
|
158
|
+
client =>
|
|
159
|
+
Effect.async<never, ConnectionException, void>(res => {
|
|
160
|
+
client.hmset(
|
|
161
|
+
key,
|
|
162
|
+
"version",
|
|
163
|
+
enc.version,
|
|
164
|
+
"timestamp",
|
|
165
|
+
enc.timestamp,
|
|
166
|
+
"data",
|
|
167
|
+
enc.data,
|
|
168
|
+
err =>
|
|
169
|
+
err
|
|
170
|
+
? res(Effect.fail(new ConnectionException(err)))
|
|
171
|
+
: res(Effect(void 0))
|
|
172
|
+
)
|
|
173
|
+
}).uninterruptible
|
|
174
|
+
)
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export class RedisSerializedDBRecord extends MO.Model<RedisSerializedDBRecord>()({
|
|
179
|
+
version: MO.prop(MO.string),
|
|
180
|
+
timestamp: MO.prop(MO.date),
|
|
181
|
+
data: MO.prop(MO.string)
|
|
182
|
+
}) {}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import * as MO from "@effect-app/schema"
|
|
2
|
+
import type { SchemaAny } from "@effect-app/schema"
|
|
3
|
+
|
|
4
|
+
class BaseError {
|
|
5
|
+
constructor(public message: string) {}
|
|
6
|
+
}
|
|
7
|
+
export class CouldNotAquireDbLockException extends BaseError {
|
|
8
|
+
readonly _errorTag = "CouldNotAquireDbLockException"
|
|
9
|
+
constructor(readonly type: string, readonly id: string, readonly error: Error) {
|
|
10
|
+
super(`Couldn't lock db record ${type}: ${id}`)
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export class OptimisticLockException extends Error {
|
|
15
|
+
readonly _errorTag = "OptimisticLockException"
|
|
16
|
+
constructor(readonly type: string, readonly id: string) {
|
|
17
|
+
super(`Existing ${type} ${id} record changed`)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export class ConnectionException extends Error {
|
|
22
|
+
readonly _errorTag = "ConnectionException"
|
|
23
|
+
constructor(readonly error: Error) {
|
|
24
|
+
super("A connection error ocurred")
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface DBRecord<TKey extends string> {
|
|
29
|
+
id: TKey
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export class SerializedDBRecord extends MO.Model<SerializedDBRecord>()({
|
|
33
|
+
version: MO.prop(MO.string),
|
|
34
|
+
timestamp: MO.prop(MO.date),
|
|
35
|
+
data: MO.prop(MO.string)
|
|
36
|
+
}) {}
|
|
37
|
+
|
|
38
|
+
// unknown -> string -> SDB?
|
|
39
|
+
export function makeSerialisedDBRecord(s: SchemaAny) {
|
|
40
|
+
return MO.props({
|
|
41
|
+
version: MO.prop(MO.number),
|
|
42
|
+
timestamp: MO.prop(MO.date),
|
|
43
|
+
data: MO.prop(s)
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface CachedRecord<T> {
|
|
48
|
+
version: string
|
|
49
|
+
data: T
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface Index {
|
|
53
|
+
doc: string
|
|
54
|
+
key: string
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function getIndexName(type: string, id: string) {
|
|
58
|
+
return `${type}-idx_${id}`
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function getRecordName(type: string, id: string) {
|
|
62
|
+
return `${type}-r_${id}`
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function makeMap<TKey, T>() {
|
|
66
|
+
const map = new Map<TKey, T>()
|
|
67
|
+
return {
|
|
68
|
+
find: (k: TKey) => Effect(() => Opt.fromNullable(map.get(k))),
|
|
69
|
+
[Symbol.iterator]: () => map[Symbol.iterator](),
|
|
70
|
+
set: (k: TKey, v: T) =>
|
|
71
|
+
Effect(() => {
|
|
72
|
+
map.set(k, v)
|
|
73
|
+
})
|
|
74
|
+
} as EffectMap<TKey, T>
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface EffectMap<TKey, T> {
|
|
78
|
+
[Symbol.iterator](): IterableIterator<[TKey, T]>
|
|
79
|
+
find: (k: TKey) => Effect<never, never, Opt<T>>
|
|
80
|
+
set: (k: TKey, v: T) => Effect<never, never, void>
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// export function encodeOnlyWhenStrictMatch<A, E>(
|
|
84
|
+
// encode: MO.HasEncoder<A, E>["encode_"],
|
|
85
|
+
// v: A
|
|
86
|
+
// ) {
|
|
87
|
+
// const e1 = Sync.run(encode(v, "strict"))
|
|
88
|
+
// const e2 = Sync.run(encode(v, "classic"))
|
|
89
|
+
// try {
|
|
90
|
+
// assert.deepStrictEqual(e1, e2)
|
|
91
|
+
// } catch (err) {
|
|
92
|
+
// throw new Error(
|
|
93
|
+
// // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
|
|
94
|
+
// "The strict encoding of these objects does not match the classic encoding of these objects. This means that there is a chance of a data-loss, and is probably a programming error\n" +
|
|
95
|
+
// err
|
|
96
|
+
// )
|
|
97
|
+
// }
|
|
98
|
+
// return e1
|
|
99
|
+
// }
|
|
100
|
+
|
|
101
|
+
// export function decodeOnlyWhenStrictMatch<A, E>(
|
|
102
|
+
// decode: MO.HasDecoder<A, E>["decode_"],
|
|
103
|
+
// u: unknown
|
|
104
|
+
// ) {
|
|
105
|
+
// return pipe(
|
|
106
|
+
// decode(u, "strict"),
|
|
107
|
+
// Sync.tap((v) =>
|
|
108
|
+
// pipe(
|
|
109
|
+
// decode(u),
|
|
110
|
+
// Sync.tap((v2) => {
|
|
111
|
+
// assert.deepStrictEqual(v, v2)
|
|
112
|
+
// return Sync.succeed(v2)
|
|
113
|
+
// })
|
|
114
|
+
// )
|
|
115
|
+
// )
|
|
116
|
+
// )
|
|
117
|
+
// }
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { CachedRecord, DBRecord, EffectMap } from "./shared.js"
|
|
2
|
+
import { makeMap, OptimisticLockException } from "./shared.js"
|
|
3
|
+
|
|
4
|
+
export type Version = string
|
|
5
|
+
export class InvalidStateError {
|
|
6
|
+
readonly _tag = "InvalidStateError"
|
|
7
|
+
constructor(readonly message: string, readonly details?: unknown) {}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function makeLiveRecordCache() {
|
|
11
|
+
const m = new Map<string, EffectMap<string, unknown>>()
|
|
12
|
+
return {
|
|
13
|
+
get: <T>(type: string) =>
|
|
14
|
+
Effect(() => {
|
|
15
|
+
const ex = m.get(type)
|
|
16
|
+
if (!ex) {
|
|
17
|
+
const nm = makeMap<string, unknown>()
|
|
18
|
+
m.set(type, nm)
|
|
19
|
+
return nm as EffectMap<string, CachedRecord<T>>
|
|
20
|
+
}
|
|
21
|
+
return ex as EffectMap<string, CachedRecord<T>>
|
|
22
|
+
})
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface RecordCache extends ReturnType<typeof makeLiveRecordCache> {}
|
|
27
|
+
|
|
28
|
+
// module tag
|
|
29
|
+
export const RecordCache = Tag<RecordCache>()
|
|
30
|
+
|
|
31
|
+
export const LiveRecordCache = Effect(makeLiveRecordCache()).toLayer(RecordCache)
|
|
32
|
+
|
|
33
|
+
const getM = <T>(type: string) =>
|
|
34
|
+
<R, E, A>(eff: (m: EffectMap<string, CachedRecord<T>>) => Effect<R, E, A>) =>
|
|
35
|
+
Effect.gen(function*($) {
|
|
36
|
+
const { get } = yield* $(RecordCache.access)
|
|
37
|
+
return yield* $(get<T>(type).flatMap(eff))
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
export function find<R, RDecode, EDecode, E, EA, A>(
|
|
41
|
+
tryRead: (id: string) => Effect<R, E, Opt<CachedRecord<EA>>>,
|
|
42
|
+
decode: (d: EA) => Effect<RDecode, EDecode, A>,
|
|
43
|
+
type: string
|
|
44
|
+
) {
|
|
45
|
+
const getCache = getM<A>(type)
|
|
46
|
+
const read = (id: string) =>
|
|
47
|
+
tryRead(id)
|
|
48
|
+
.flatMapOpt(({ data, version }) =>
|
|
49
|
+
decode(data).mapBoth(
|
|
50
|
+
err => new InvalidStateError("DB serialisation Issue", err),
|
|
51
|
+
data => ({ data, version })
|
|
52
|
+
)
|
|
53
|
+
)
|
|
54
|
+
.tapOpt(r => getCache(c => c.set(id, r)))
|
|
55
|
+
.mapOpt(r => r.data)
|
|
56
|
+
|
|
57
|
+
return (id: string) =>
|
|
58
|
+
getCache(c =>
|
|
59
|
+
c
|
|
60
|
+
.find(id)
|
|
61
|
+
.mapOpt(existing => existing.data)
|
|
62
|
+
.orElse(() => read(id))
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function storeDirectly<R, E, TKey extends string, A extends DBRecord<TKey>>(
|
|
67
|
+
save: (r: A, version: Opt<Version>) => Effect<R, E, CachedRecord<A>>,
|
|
68
|
+
type: string
|
|
69
|
+
) {
|
|
70
|
+
const getCache = getM<A>(type)
|
|
71
|
+
return (record: A) =>
|
|
72
|
+
getCache(c =>
|
|
73
|
+
c
|
|
74
|
+
.find(record.id)
|
|
75
|
+
.mapOpt(x => x.version)
|
|
76
|
+
.flatMap(cv => save(record, cv))
|
|
77
|
+
.tap(r => c.set(record.id, r))
|
|
78
|
+
.map(r => r.data)
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export function store<R, E, R2, E2, TKey extends string, EA, A extends DBRecord<TKey>>(
|
|
83
|
+
tryRead: (id: string) => Effect<R, E, Opt<CachedRecord<EA>>>,
|
|
84
|
+
save: (r: A, version: Opt<Version>) => Effect<R, E, CachedRecord<A>>,
|
|
85
|
+
lock: (id: string) => Effect<R2 | Scope, E2, unknown>,
|
|
86
|
+
type: string
|
|
87
|
+
) {
|
|
88
|
+
const getCache = getM<A>(type)
|
|
89
|
+
return (record: A) =>
|
|
90
|
+
getCache(c =>
|
|
91
|
+
c
|
|
92
|
+
.find(record.id)
|
|
93
|
+
.mapOpt(x => x.version)
|
|
94
|
+
.flatMap(_ => _.match(() => save(record, Opt.none), confirmVersionAndSave(record)))
|
|
95
|
+
.tap(r => c.set(record.id, r))
|
|
96
|
+
.map(r => r.data)
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
function confirmVersionAndSave(record: A) {
|
|
100
|
+
return (cv: Version) =>
|
|
101
|
+
lock(record.id).zipRight(
|
|
102
|
+
tryRead(record.id)
|
|
103
|
+
.flatMap(_ =>
|
|
104
|
+
_.match(
|
|
105
|
+
() => Effect.fail(new InvalidStateError("record is gone")),
|
|
106
|
+
Effect.succeed
|
|
107
|
+
)
|
|
108
|
+
)
|
|
109
|
+
.tap(({ version }) =>
|
|
110
|
+
version !== cv
|
|
111
|
+
? Effect.fail(new OptimisticLockException(type, record.id))
|
|
112
|
+
: Effect.unit
|
|
113
|
+
)
|
|
114
|
+
.zipRight(save(record, Opt(cv)))
|
|
115
|
+
).scoped
|
|
116
|
+
}
|
|
117
|
+
}
|
|
@@ -45,7 +45,7 @@ export declare class RequestContext extends RequestContext_base {
|
|
|
45
45
|
export type RequestContextConstructor = typeof RequestContext;
|
|
46
46
|
/**
|
|
47
47
|
* @tsplus static RequestContext.Ops Tag
|
|
48
|
-
* @tsplus location "@effect-app/infra/
|
|
48
|
+
* @tsplus location "@effect-app/infra/RequestContext"
|
|
49
49
|
*/
|
|
50
50
|
export declare const tag: import("@fp-ts/data/Context").Tag<RequestContext>;
|
|
51
51
|
export interface RequestContextParent {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequestContext.d.ts","sourceRoot":"","sources":["../_src/RequestContext.ts"],"names":[],"mappings":";AAAA,eAAO,MAAM,SAAS;;CAAW,CAAA;AACjC,MAAM,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,SAAS,CAAC,CAAA;;;;;;;;;;AAE7D,qBAAa,oBAAqB,SAAQ,yBAWxC;CAAG;AACL,oCAAoC;AACpC,MAAM,MAAM,+BAA+B,GAAG,OAAO,oBAAoB,CAAA;AAEzE,wBAAgB,aAAa,kDAE5B;;;;;;;;;;;;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,mBAUlC;IACA,MAAM,CAAC,OAAO,CACZ,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,oBAAoB,CAAC,gBAAgB;IAShD,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc;;;;;;CASrD;AAED,oCAAoC;AACpC,MAAM,MAAM,yBAAyB,GAAG,OAAO,cAAc,CAAA;;;;;AAK7D,eAAO,MAAM,GAAG,mDAAwB,CAAA;AAGxC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;IACxB,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;CAChC;AACD,yBAAiB,oBAAoB,CAAC;IACpC;;OAEG;IACH,UAAiB,OAAO;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,CAAA;QAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KACtB;IACM,MAAM,OAAO,EAAE,UAAsB,CAAA;IAC5C;;OAEG;IACH,UAAiB,cAAc;KAAG;IAClC;;OAEG;IACH,UAAiB,UAAU;QAAG,CAAC,EAAE,cAAc,CAAA;KAAE;IACjD,UAAiB,gBACf,SAAQ,uBAAuB,CAAC,OAAO,oBAAoB,CAAC;KAAG;IACjE,UAAiB,KAAM,SAAQ,gBAAgB,CAAC,OAAO,oBAAoB,CAAC;KAAG;CAChF;AACD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;IACxB,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAA;IAClD,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAC3B;AACD,yBAAiB,cAAc,CAAC;IAC9B;;OAEG;IACH,UAAiB,OAAO;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,CAAA;QAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC,OAAO,GAAG,SAAS,CAAA;QAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KACxB;IACM,MAAM,OAAO,EAAE,UAAsB,CAAA;IAC5C;;OAEG;IACH,UAAiB,cAAc;KAAG;IAClC;;OAEG;IACH,UAAiB,UAAU;QAAG,CAAC,EAAE,cAAc,CAAA;KAAE;IACjD,UAAiB,gBACf,SAAQ,uBAAuB,CAAC,OAAO,cAAc,CAAC;KAAG;IAC3D,UAAiB,KAAM,SAAQ,gBAAgB,CAAC,OAAO,cAAc,CAAC;KAAG;CAC1E"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as tsplus_module_1 from "@effect-app/prelude/schema";
|
|
2
|
+
import * as tsplus_module_2 from "@fp-ts/data/Context";
|
|
3
|
+
export const RequestId = tsplus_module_1.StringId;
|
|
4
|
+
export class RequestContextParent extends tsplus_module_1.MNModel()({
|
|
5
|
+
_tag: tsplus_module_1.prop(tsplus_module_1.literal("RequestContext")),
|
|
6
|
+
id: tsplus_module_1.prop(RequestId),
|
|
7
|
+
name: tsplus_module_1.prop(tsplus_module_1.ReasonableString),
|
|
8
|
+
locale: tsplus_module_1.prop(tsplus_module_1.literal("en", "de")),
|
|
9
|
+
createdAt: tsplus_module_1.defaultProp(tsplus_module_1.date)
|
|
10
|
+
}) {
|
|
11
|
+
}
|
|
12
|
+
export function makeRequestId() {
|
|
13
|
+
return RequestId.make();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* @tsplus type RequestContext
|
|
17
|
+
* @tsplus companion RequestContext.Ops
|
|
18
|
+
*/
|
|
19
|
+
export class RequestContext extends tsplus_module_1.MNModel()({
|
|
20
|
+
...RequestContextParent.omit("id"),
|
|
21
|
+
id: tsplus_module_1.defaultProp(RequestId, makeRequestId),
|
|
22
|
+
rootId: tsplus_module_1.prop(RequestId),
|
|
23
|
+
parent: tsplus_module_1.optProp(RequestContextParent)
|
|
24
|
+
}) {
|
|
25
|
+
static inherit(parent, newSelf) {
|
|
26
|
+
return new RequestContext({
|
|
27
|
+
...newSelf,
|
|
28
|
+
rootId: parent.rootId,
|
|
29
|
+
parent
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
static toMonitoring(self) {
|
|
33
|
+
return {
|
|
34
|
+
operationName: self.name,
|
|
35
|
+
locale: self.locale,
|
|
36
|
+
...(self.parent
|
|
37
|
+
? { parentOperationName: self.parent.name, parentLocale: self.parent.locale }
|
|
38
|
+
: {})
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* @tsplus static RequestContext.Ops Tag
|
|
44
|
+
*/
|
|
45
|
+
export const tag = tsplus_module_2.Tag();
|
|
46
|
+
(function (RequestContextParent) {
|
|
47
|
+
RequestContextParent.Encoded = { $: {} };
|
|
48
|
+
})(RequestContextParent || (RequestContextParent = {}));
|
|
49
|
+
(function (RequestContext) {
|
|
50
|
+
RequestContext.Encoded = { $: {} };
|
|
51
|
+
})(RequestContext || (RequestContext = {}));
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVxdWVzdENvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9fc3JjL1JlcXVlc3RDb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTSxDQUFDLE1BQU0sU0FBUyxtQkFBRyxRQUFRLENBQUE7QUFHakMsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGdCQUFBLE9BQU8sRUFLOUMsQ0FBQztJQUNGLElBQUksRUFBRSxnQkFBQSxJQUFJLENBQUMsZ0JBQUEsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDckMsRUFBRSxFQUFFLGdCQUFBLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDbkIsSUFBSSxFQUFFLGdCQUFBLElBQUksaUJBQUMsZ0JBQWdCLENBQUM7SUFDNUIsTUFBTSxFQUFFLGdCQUFBLElBQUksQ0FBQyxnQkFBQSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pDLFNBQVMsRUFBRSxnQkFBQSxXQUFXLGlCQUFDLElBQUksQ0FBQztDQUM3QixDQUFDO0NBQUc7QUFJTCxNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtBQUN6QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGNBQWUsU0FBUSxnQkFBQSxPQUFPLEVBS3hDLENBQUM7SUFDRixHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbEMsRUFBRSxFQUFFLGdCQUFBLFdBQVcsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDO0lBQ3pDLE1BQU0sRUFBRSxnQkFBQSxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3ZCLE1BQU0sRUFBRSxnQkFBQSxPQUFPLENBQUMsb0JBQW9CLENBQUM7Q0FDdEMsQ0FBQztJQUNBLE1BQU0sQ0FBQyxPQUFPLENBRVosTUFBc0IsRUFDdEIsT0FBOEM7UUFFOUMsT0FBTyxJQUFJLGNBQWMsQ0FBQztZQUN4QixHQUFHLE9BQU87WUFDVixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsTUFBTTtTQUNQLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFhLElBQW9CO1FBQ2xELE9BQU87WUFDTCxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFDYixDQUFDLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQzdFLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDUixDQUFBO0lBQ0gsQ0FBQztDQUNGO0FBS0Q7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZ0JBQUEsR0FBRyxFQUFrQixDQUFBO0FBU3hDLFdBQWlCLG9CQUFvQjtJQVV0Qiw0QkFBTyxHQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFBO0FBWTlDLENBQUMsRUF0QmdCLG9CQUFvQixLQUFwQixvQkFBb0IsUUFzQnBDO0FBU0QsV0FBaUIsY0FBYztJQVloQixzQkFBTyxHQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFBO0FBWTlDLENBQUMsRUF4QmdCLGNBQWMsS0FBZCxjQUFjLFFBd0I5QiJ9
|
package/dist/_global.ext.d.ts
CHANGED
|
@@ -13,22 +13,22 @@ import type {} from "@effect-app/infra/test.arbs";
|
|
|
13
13
|
/**
|
|
14
14
|
* @tsplus global
|
|
15
15
|
*/
|
|
16
|
-
import type {} from "@effect-app/infra/ext";
|
|
16
|
+
import type {} from "@effect-app/infra/ext/Array";
|
|
17
17
|
/**
|
|
18
18
|
* @tsplus global
|
|
19
19
|
*/
|
|
20
|
-
import type {} from "@effect-app/infra/
|
|
20
|
+
import type {} from "@effect-app/infra/instrument";
|
|
21
21
|
/**
|
|
22
22
|
* @tsplus global
|
|
23
23
|
*/
|
|
24
|
-
import type {} from "@effect-app/infra/
|
|
24
|
+
import type {} from "@effect-app/infra/rateLimit";
|
|
25
25
|
/**
|
|
26
26
|
* @tsplus global
|
|
27
27
|
*/
|
|
28
|
-
import type {} from "@effect-app/infra/
|
|
28
|
+
import type {} from "@effect-app/infra/api/setupRequest";
|
|
29
29
|
/**
|
|
30
30
|
* @tsplus global
|
|
31
31
|
*/
|
|
32
|
-
import {} from "@effect-app/infra/
|
|
32
|
+
import {} from "@effect-app/infra/api/reportError";
|
|
33
33
|
export {};
|
|
34
34
|
//# sourceMappingURL=_global.ext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_global.ext.d.ts","sourceRoot":"","sources":["../_src/_global.ext.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,yCAAyC,CAAA;AAC7D;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6CAA6C,CAAA;AACjE;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"_global.ext.d.ts","sourceRoot":"","sources":["../_src/_global.ext.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,yCAAyC,CAAA;AAC7D;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6CAA6C,CAAA;AACjE;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAClD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AAEjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAExD;;GAEG;AACH,OAAO,EAAE,MAAM,mCAAmC,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as Ex from "@effect-app/infra-adapters/express
|
|
1
|
+
import * as Ex from "@effect-app/infra-adapters/express";
|
|
2
2
|
export declare const checkJwt: (audience: string, issuer: string) => {
|
|
3
3
|
(req: import("express").Request<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>, res: import("express").Response<any, Record<string, any>>, next: import("express").NextFunction): Promise<any>;
|
|
4
4
|
unless: typeof import("express-unless").unless;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization.jwt.d.ts","sourceRoot":"","sources":["../../_src/api/authorization.jwt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAQxD,eAAO,MAAM,QAAQ,aAAc,MAAM,UAAU,MAAM;;;CAgBrD,CAAA;AAUJ,eAAO,MAAM,MAAM,iGAA2B,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// import { configM, UserSVC } from "@/services.js"
|
|
2
|
-
import * as Ex from "@effect-app/infra-adapters/express
|
|
2
|
+
import * as Ex from "@effect-app/infra-adapters/express";
|
|
3
3
|
import { expressjwt } from "express-jwt";
|
|
4
4
|
import jwtAuthz from "express-jwt-authz";
|
|
5
5
|
import jwksRsa from "jwks-rsa";
|
|
@@ -29,4 +29,4 @@ const demandScopes = jwtAuthz([]);
|
|
|
29
29
|
// : Ex.use(Ex.classic(checkJwt)) > Ex.use(Ex.classic(demandScopes)) // TODO
|
|
30
30
|
// )
|
|
31
31
|
export const scopes = Ex.classic(demandScopes);
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXphdGlvbi5qd3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9fc3JjL2FwaS9hdXRob3JpemF0aW9uLmp3dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtREFBbUQ7QUFDbkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3hDLE9BQU8sUUFBUSxNQUFNLG1CQUFtQixDQUFBO0FBQ3hDLE9BQU8sT0FBTyxNQUFNLFVBQVUsQ0FBQTtBQUU5QiwyQ0FBMkM7QUFDM0Msa0RBQWtEO0FBQ2xELDZCQUE2QjtBQUM3QixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxFQUFFLENBQzNELFVBQVUsQ0FBQztJQUNULG9DQUFvQztJQUNwQyxxQ0FBcUM7SUFDckMsa0RBQWtEO0lBQ2xELE1BQU0sRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDL0IsS0FBSyxFQUFFLElBQUk7UUFDWCxTQUFTLEVBQUUsSUFBSTtRQUNmLHFCQUFxQixFQUFFLENBQUM7UUFDeEIsT0FBTyxFQUFFLEdBQUcsTUFBTSx3QkFBd0I7S0FDM0MsQ0FBK0I7SUFFaEMsd0NBQXdDO0lBQ3hDLFFBQVE7SUFDUixNQUFNLEVBQUUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBQ3RCLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQztDQUN0QixDQUFDLENBQUE7QUFFSixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7QUFFakMsK0JBQStCO0FBQy9CLGFBQWE7QUFDYix3QkFBd0I7QUFDeEIsc0JBQXNCO0FBQ3RCLGtGQUFrRjtBQUNsRixJQUFJO0FBQ0osTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUEifQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Effect } from "@effect/io/Effect";
|
|
2
|
+
import * as MO from "@effect-app/schema";
|
|
3
|
+
import type { ParserEnv } from "@effect-app/schema/custom/Parser";
|
|
4
|
+
export declare function makeCodec<ParsedShape extends {
|
|
5
|
+
id: Id;
|
|
6
|
+
}, ConstructorInput, Encoded, Api, Id>(self: MO.Schema<unknown, ParsedShape, ConstructorInput, Encoded, Api>): readonly [(e: Encoded, env?: ParserEnv) => import("@effect/io/Effect").Effect<never, never, ParsedShape>, (u: ParsedShape) => import("@effect/io/Effect").Effect<never, never, Encoded>, (a: readonly ParsedShape[]) => import("@effect/io/Effect").Effect<never, never, Map<ParsedShape["id"], Encoded>>];
|
|
7
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../_src/api/codec.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAExC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAEjE,wBAAgB,SAAS,CACvB,WAAW,SAAS;IAAE,EAAE,EAAE,EAAE,CAAA;CAAE,EAC9B,gBAAgB,EAChB,OAAO,EACP,GAAG,EACH,EAAE,EACF,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,CAAC,iBAGlD,OAAO,QAAQ,SAAS,wEAGxB,WAAW,kLAG/B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
+
const fileName_1 = "_src/api/codec.ts";
|
|
3
|
+
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
4
|
+
import * as tsplus_module_2 from "@effect-app/core/fluent/_ext/awesome/_files/Iterable";
|
|
5
|
+
import * as MO from "@effect-app/schema";
|
|
6
|
+
import { Encoder, Parser } from "@effect-app/schema";
|
|
7
|
+
export function makeCodec(self) {
|
|
8
|
+
const parse = MO.condemnDie(Parser.for(self));
|
|
9
|
+
// TODO: strict
|
|
10
|
+
const decode = (e, env) => parse(e, env);
|
|
11
|
+
const enc = Encoder.for(self);
|
|
12
|
+
const encode = (u) => tracer_1.withCallTrace(fileName_1 + ":17:38")(tsplus_module_1.sync(() => enc(u)));
|
|
13
|
+
const encodeToMap = toMap(encode);
|
|
14
|
+
return [decode, encode, encodeToMap];
|
|
15
|
+
}
|
|
16
|
+
function toMap(encode) {
|
|
17
|
+
return (a) => tracer_1.withCallTrace(fileName_1 + ":26:8")(tsplus_module_1.map(_ => new Map(_)))(tsplus_module_2.ext_collectAll(a.map(task => tracer_1.withCallTrace(fileName_1 + ":24:26")(tsplus_module_1.tuple(tracer_1.withCallTrace(fileName_1 + ":24:32")(tsplus_module_1.sync(() => task.id)), encode(task))))));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9fc3JjL2FwaS9jb2RlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBR3BELE1BQU0sVUFBVSxTQUFTLENBTXZCLElBQXFFO0lBQ3JFLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzdDLGVBQWU7SUFDZixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQVUsRUFBRSxHQUFlLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDN0QsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUU3QixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQWMsRUFBRSxFQUFFLCtDQUFDLHFCQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUE7SUFDdkQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2pDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBVSxDQUFBO0FBQy9DLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBOEIsTUFBeUM7SUFDbkYsT0FBTyxDQUFDLENBQW1CLEVBQUUsRUFBRSxDQUM3QixpRUFFTyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUZ0QiwrQkFBQSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLCtDQUFDLG9FQUFhLDJCQUFPLElBQUksQ0FBQyxFQUFhLENBQUMsR0FBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQ3RELENBQ1EsQ0FBQTtBQUMzQixDQUFDIn0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect } from "@effect/io/Effect";
|
|
2
2
|
import type express from "express";
|
|
3
|
-
import type { InvalidStateError, NotFoundError, NotLoggedInError, OptimisticConcurrencyException, UnauthorizedError, ValidationError } from "
|
|
3
|
+
import type { InvalidStateError, NotFoundError, NotLoggedInError, OptimisticConcurrencyException, UnauthorizedError, ValidationError } from "../errors.js";
|
|
4
4
|
import type { RequestContext } from "../RequestContext.js";
|
|
5
5
|
export declare function defaultBasicErrorHandler<R>(_req: express.Request, res: express.Response, _requestContext: RequestContext, r2: Effect<R, ValidationError, void>): import("@effect/io/Effect").Effect<RequestContext | R, never, void>;
|
|
6
6
|
export declare function defaultErrorHandler<R>(req: express.Request, res: express.Response, _: RequestContext, r2: Effect<R, SupportedErrors, void>): import("@effect/io/Effect").Effect<RequestContext | R, never, void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultErrorHandler.d.ts","sourceRoot":"","sources":["../../_src/api/defaultErrorHandler.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,8BAA8B,EAC9B,iBAAiB,EACjB,eAAe,EAChB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAG1D,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,IAAI,EAAE,OAAO,CAAC,OAAO,EACrB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,eAAe,EAAE,cAAc,EAC/B,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,uEAgBrC;AAKD,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,GAAG,EAAE,OAAO,CAAC,OAAO,EACpB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,CAAC,EAAE,cAAc,EACjB,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,uEA0CrC;AAED,MAAM,MAAM,eAAe,GACvB,eAAe,GACf,aAAa,GACb,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,8BAA8B,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
-
const fileName_1 = "
|
|
2
|
+
const fileName_1 = "_src/api/defaultErrorHandler.ts";
|
|
3
3
|
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
4
4
|
import * as tsplus_module_2 from "@effect/io/Cause";
|
|
5
5
|
import * as tsplus_module_3 from "@effect-app/core/Effect";
|
|
@@ -34,4 +34,4 @@ export function defaultErrorHandler(req, res, _, r2) {
|
|
|
34
34
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
35
35
|
);
|
|
36
36
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL2RlZmF1bHRFcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBVUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRWxELE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsSUFBcUIsRUFDckIsR0FBcUIsRUFDckIsZUFBK0IsRUFDL0IsRUFBb0M7SUFFcEMsT0FBTyxzRUFPSyxDQUFDLEdBQVUsRUFBRSxFQUFFLENBQ3ZCLDRGQUFBLGtFQUdPLEdBQUcsRUFBRSxDQUFDLEdBQWMsaURBSDNCLHlCQUNFLGdHQUFnRyxHQUFHLEdBQUcsQ0FDdkcsRUFDMkIsQ0FDTixHQVpuQixzRUFFSyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsRUFBRSw4Q0FDakMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxDQUFBLEdBTEMsMkVBQ1UsS0FBSyxDQUFDLEVBQUUsQ0FBQywwQkFBQSxLQUFLLENBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMscUJBQVksR0FEM0UsRUFBRSxDQUMwRSxDQUk1RTtJQUNMLCtFQUErRTtLQU85RSxDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sNkJBQTZCLDZCQUNqQywyQkFBcUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGdDQUFnQyxDQUFDLEVBRGxELHNCQUFlLENBQ21DLENBQUE7QUFFeEYsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxHQUFvQixFQUNwQixHQUFxQixFQUNyQixDQUFpQixFQUNqQixFQUFvQztJQUVwQyxNQUFNLEVBQUUsR0FBRyxDQUNULEdBQUcsQ0FBQyxNQUFNLEtBQUssT0FBTztRQUNwQixDQUFDLENBQUMsb0VBQVMsNkJBQTZCLEdBQXRDLEVBQUUsQ0FBcUM7UUFDekMsQ0FBQyxDQUFDLEVBQUUsQ0FDUCxDQUFBO0lBQ0QsT0FBTyxzRUE0QkssQ0FBQyxHQUFVLEVBQUUsRUFBRSxDQUN2Qiw0RkFBQSxrRUFHTyxHQUFHLEVBQUUsQ0FBQyxHQUFjLGlEQUgzQix5QkFDRSxnR0FBZ0csR0FBRyxHQUFHLENBQ3ZHLEVBQzJCLENBQ04sR0FqQ25CLHNFQXNCSyxnQ0FBZ0MsRUFBRSxHQUFHLENBQUMsRUFBRSw4Q0FDaEQscUJBQU8sR0FBRyxFQUFFO1FBQ1YsNElBQTRJO1FBQzVJLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFBLEdBMUJDLHNFQWtCSyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsRUFBRSw4Q0FDbkMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUEsR0FyQkMsc0VBY0ssbUJBQW1CLEVBQUUsR0FBRyxDQUFDLEVBQUUsOENBQ25DLHFCQUFPLEdBQUcsRUFBRTtRQUNWLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFBLEdBakJDLHNFQVVLLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxFQUFFLDhDQUNsQyxxQkFBTyxHQUFHLEVBQUU7UUFDVixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQSxHQWJDLHNFQU1LLGVBQWUsRUFBRSxHQUFHLENBQUMsRUFBRSw4Q0FDL0IscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUEsR0FUQyxzRUFFSyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsRUFBRSw4Q0FDakMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxDQUFBLEdBTEMsMkVBQ1UsS0FBSyxDQUFDLEVBQUUsQ0FBQywwQkFBQSxLQUFLLENBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMscUJBQVksR0FEM0UsRUFBRSxDQUMwRSxDQUk1RSxDQUlBLENBSUEsQ0FJQSxDQUlBLENBS0E7SUFDTCwrRUFBK0U7S0FPOUUsQ0FBQTtBQUNMLENBQUMifQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Chunk } from "@fp-ts/data/Chunk";
|
|
2
|
+
import * as RS from "./schema/routing.js";
|
|
3
|
+
type Methods = "GET" | "PUT" | "POST" | "PATCH" | "DELETE";
|
|
4
|
+
/**
|
|
5
|
+
* Work in progress JSONSchema generator.
|
|
6
|
+
*/
|
|
7
|
+
export declare function makeJsonSchema(r: Iterable<RS.RouteDescriptorAny>): import("@effect/io/Effect").Effect<never, never, Record<string, Record<Methods, {
|
|
8
|
+
[x: string]: {
|
|
9
|
+
responses: any;
|
|
10
|
+
tags: readonly string[] | undefined;
|
|
11
|
+
description: string | undefined;
|
|
12
|
+
summary: string | undefined;
|
|
13
|
+
operationId: string | undefined;
|
|
14
|
+
parameters: {
|
|
15
|
+
name: string;
|
|
16
|
+
in: import("@effect-app/infra-adapters/Openapi/atlas-plutus").ParameterLocation;
|
|
17
|
+
required: boolean;
|
|
18
|
+
schema: import("@effect-app/infra-adapters/Openapi/atlas-plutus").SubSchema | undefined;
|
|
19
|
+
}[];
|
|
20
|
+
requestBody: {
|
|
21
|
+
content: {
|
|
22
|
+
"application/json": {
|
|
23
|
+
schema: import("@effect-app/infra-adapters/Openapi/atlas-plutus").JSONSchema;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
} | undefined;
|
|
27
|
+
};
|
|
28
|
+
}>>>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=makeJsonSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makeJsonSchema.d.ts","sourceRoot":"","sources":["../../../_src/api/express/makeJsonSchema.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEzC,KAAK,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;AAM1D;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;KA4BhE"}
|