@effect-app/infra 0.198.2 → 0.199.0
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 +17 -0
- package/_cjs/RequestContext.cjs +14 -9
- package/_cjs/RequestContext.cjs.map +1 -1
- package/_cjs/_ext/Array.cjs +3 -7
- package/_cjs/_ext/Array.cjs.map +1 -1
- package/_cjs/api/reportError.cjs +3 -6
- package/_cjs/api/reportError.cjs.map +1 -1
- package/_cjs/api/routing/base.cjs +27 -61
- package/_cjs/api/routing/base.cjs.map +1 -1
- package/_cjs/api/routing/defaultErrorHandler.cjs +14 -21
- package/_cjs/api/routing/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/api/routing/makeRequestHandler.cjs +44 -51
- package/_cjs/api/routing/makeRequestHandler.cjs.map +1 -1
- package/_cjs/api/routing/match.cjs +6 -13
- package/_cjs/api/routing/match.cjs.map +1 -1
- package/_cjs/api/{express → routing}/schema/jwt.cjs +3 -4
- package/_cjs/api/routing/schema/jwt.cjs.map +1 -0
- package/_cjs/api/routing/schema/routing.cjs +136 -0
- package/_cjs/api/routing/schema/routing.cjs.map +1 -0
- package/_cjs/api/setupRequest.cjs +16 -22
- package/_cjs/api/setupRequest.cjs.map +1 -1
- package/_cjs/errorReporter.cjs +16 -17
- package/_cjs/errorReporter.cjs.map +1 -1
- package/_cjs/errors.cjs +2 -4
- package/_cjs/errors.cjs.map +1 -1
- package/_cjs/filter/types/path/index.cjs +0 -2
- package/_cjs/filter/types/path/index.cjs.map +1 -1
- package/_cjs/filter.cjs +35 -0
- package/_cjs/filter.cjs.map +1 -1
- package/_cjs/logger/jsonLogger.cjs +9 -15
- package/_cjs/logger/jsonLogger.cjs.map +1 -1
- package/_cjs/logger/logFmtLogger.cjs +7 -11
- package/_cjs/logger/logFmtLogger.cjs.map +1 -1
- package/_cjs/logger/shared.cjs +6 -8
- package/_cjs/logger/shared.cjs.map +1 -1
- package/_cjs/rateLimit.cjs +9 -12
- package/_cjs/rateLimit.cjs.map +1 -1
- package/_cjs/services/Emailer/Sendgrid.cjs +9 -16
- package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
- package/_cjs/services/Emailer/fake.cjs +5 -8
- package/_cjs/services/Emailer/fake.cjs.map +1 -1
- package/_cjs/services/Emailer/service.cjs +2 -4
- package/_cjs/services/Emailer/service.cjs.map +1 -1
- package/_cjs/services/Operations/live.cjs +29 -42
- package/_cjs/services/Operations/live.cjs.map +1 -1
- package/_cjs/services/Operations/service.cjs +15 -15
- package/_cjs/services/Operations/service.cjs.map +1 -1
- package/_cjs/services/QueueMaker/errors.cjs +8 -12
- package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
- package/_cjs/services/QueueMaker/memQueue.cjs +27 -33
- package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs +31 -40
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
- package/_cjs/services/QueueMaker/service.cjs +7 -9
- package/_cjs/services/QueueMaker/service.cjs.map +1 -1
- package/_cjs/services/Repository/dsl.cjs +11 -14
- package/_cjs/services/Repository/dsl.cjs.map +1 -1
- package/_cjs/services/Repository/ext.cjs +62 -71
- package/_cjs/services/Repository/ext.cjs.map +1 -1
- package/_cjs/services/RepositoryBase.cjs +171 -169
- package/_cjs/services/RepositoryBase.cjs.map +1 -1
- package/_cjs/services/RequestContextContainer.cjs +17 -23
- package/_cjs/services/RequestContextContainer.cjs.map +1 -1
- package/_cjs/services/Store/ContextMapContainer.cjs +10 -16
- package/_cjs/services/Store/ContextMapContainer.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos/query.cjs +5 -9
- package/_cjs/services/Store/Cosmos/query.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +58 -68
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Disk.cjs +34 -36
- package/_cjs/services/Store/Disk.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs +55 -65
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_cjs/services/Store/codeFilter.cjs +2 -4
- package/_cjs/services/Store/codeFilter.cjs.map +1 -1
- package/_cjs/services/Store/codeFilter.test.cjs +13 -12
- package/_cjs/services/Store/codeFilter.test.cjs.map +1 -1
- package/_cjs/services/Store/filterApi/query.cjs +2 -4
- package/_cjs/services/Store/filterApi/query.cjs.map +1 -1
- package/_cjs/services/Store/index.cjs +6 -9
- package/_cjs/services/Store/index.cjs.map +1 -1
- package/_cjs/services/Store/service.cjs +5 -7
- package/_cjs/services/Store/service.cjs.map +1 -1
- package/_cjs/services/Store/utils.cjs +16 -20
- package/_cjs/services/Store/utils.cjs.map +1 -1
- package/_cjs/services/query.cjs +4 -1
- package/_cjs/services/query.cjs.map +1 -1
- package/_cjs/test.arbs.cjs +3 -4
- package/_cjs/test.arbs.cjs.map +1 -1
- package/dist/RequestContext.d.ts +20 -20
- package/dist/RequestContext.d.ts.map +1 -1
- package/dist/RequestContext.js +15 -8
- package/dist/_ext/Array.d.ts +2 -3
- package/dist/_ext/Array.d.ts.map +1 -1
- package/dist/_ext/Array.js +5 -5
- package/dist/api/reportError.d.ts +5 -5
- package/dist/api/reportError.d.ts.map +1 -1
- package/dist/api/reportError.js +6 -6
- package/dist/api/routing/base.d.ts +11 -15
- package/dist/api/routing/base.d.ts.map +1 -1
- package/dist/api/routing/base.js +48 -67
- package/dist/api/routing/defaultErrorHandler.d.ts +4 -6
- package/dist/api/routing/defaultErrorHandler.d.ts.map +1 -1
- package/dist/api/routing/defaultErrorHandler.js +26 -28
- package/dist/api/routing/makeRequestHandler.d.ts +6 -7
- package/dist/api/routing/makeRequestHandler.d.ts.map +1 -1
- package/dist/api/routing/makeRequestHandler.js +69 -59
- package/dist/api/routing/match.d.ts +7 -8
- package/dist/api/routing/match.d.ts.map +1 -1
- package/dist/api/routing/match.js +7 -11
- package/dist/api/routing/schema/jwt.d.ts +4 -0
- package/dist/api/routing/schema/jwt.d.ts.map +1 -0
- package/dist/api/routing/schema/jwt.js +11 -0
- package/dist/api/{express → routing}/schema/routing.d.ts +2 -2
- package/dist/api/routing/schema/routing.d.ts.map +1 -0
- package/dist/api/routing/schema/routing.js +123 -0
- package/dist/api/routing.js +3 -1
- package/dist/api/setupRequest.d.ts +3 -5
- package/dist/api/setupRequest.d.ts.map +1 -1
- package/dist/api/setupRequest.js +20 -24
- package/dist/errorReporter.d.ts +4 -4
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +20 -17
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +3 -3
- package/dist/filter/types/path/index.d.ts +2 -2
- package/dist/filter/types/path/index.d.ts.map +1 -1
- package/dist/filter/types/path/index.js +2 -3
- package/dist/filter/types.js +2 -1
- package/dist/filter.d.ts.map +1 -1
- package/dist/filter.js +36 -1
- package/dist/logger/jsonLogger.d.ts +2 -1
- package/dist/logger/jsonLogger.d.ts.map +1 -1
- package/dist/logger/jsonLogger.js +9 -13
- package/dist/logger/logFmtLogger.d.ts +2 -1
- package/dist/logger/logFmtLogger.d.ts.map +1 -1
- package/dist/logger/logFmtLogger.js +9 -11
- package/dist/logger/shared.d.ts +2 -1
- package/dist/logger/shared.d.ts.map +1 -1
- package/dist/logger/shared.js +7 -9
- package/dist/rateLimit.d.ts +7 -10
- package/dist/rateLimit.d.ts.map +1 -1
- package/dist/rateLimit.js +17 -16
- package/dist/services/Emailer/Sendgrid.d.ts +1 -2
- package/dist/services/Emailer/Sendgrid.d.ts.map +1 -1
- package/dist/services/Emailer/Sendgrid.js +16 -20
- package/dist/services/Emailer/fake.d.ts +2 -2
- package/dist/services/Emailer/fake.d.ts.map +1 -1
- package/dist/services/Emailer/fake.js +10 -8
- package/dist/services/Emailer/service.d.ts +7 -10
- package/dist/services/Emailer/service.d.ts.map +1 -1
- package/dist/services/Emailer/service.js +3 -3
- package/dist/services/Operations/live.d.ts +2 -3
- package/dist/services/Operations/live.d.ts.map +1 -1
- package/dist/services/Operations/live.js +44 -51
- package/dist/services/Operations/service.d.ts +14 -19
- package/dist/services/Operations/service.d.ts.map +1 -1
- package/dist/services/Operations/service.js +23 -28
- package/dist/services/QueueMaker/errors.d.ts +5 -7
- package/dist/services/QueueMaker/errors.d.ts.map +1 -1
- package/dist/services/QueueMaker/errors.js +11 -11
- package/dist/services/QueueMaker/memQueue.d.ts +6 -9
- package/dist/services/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/memQueue.js +37 -39
- package/dist/services/QueueMaker/sbqueue.d.ts +6 -9
- package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/sbqueue.js +41 -39
- package/dist/services/QueueMaker/service.d.ts +2 -4
- package/dist/services/QueueMaker/service.d.ts.map +1 -1
- package/dist/services/QueueMaker/service.js +8 -8
- package/dist/services/Repository/dsl.d.ts +8 -10
- package/dist/services/Repository/dsl.d.ts.map +1 -1
- package/dist/services/Repository/dsl.js +12 -13
- package/dist/services/Repository/ext.d.ts +34 -62
- package/dist/services/Repository/ext.d.ts.map +1 -1
- package/dist/services/Repository/ext.js +59 -70
- package/dist/services/RepositoryBase.d.ts +41 -47
- package/dist/services/RepositoryBase.d.ts.map +1 -1
- package/dist/services/RepositoryBase.js +182 -194
- package/dist/services/RequestContextContainer.d.ts +13 -21
- package/dist/services/RequestContextContainer.d.ts.map +1 -1
- package/dist/services/RequestContextContainer.js +21 -25
- package/dist/services/Store/ContextMapContainer.d.ts +11 -18
- package/dist/services/Store/ContextMapContainer.d.ts.map +1 -1
- package/dist/services/Store/ContextMapContainer.js +17 -18
- package/dist/services/Store/Cosmos/query.d.ts +3 -2
- package/dist/services/Store/Cosmos/query.d.ts.map +1 -1
- package/dist/services/Store/Cosmos/query.js +10 -11
- package/dist/services/Store/Cosmos.d.ts +2 -3
- package/dist/services/Store/Cosmos.d.ts.map +1 -1
- package/dist/services/Store/Cosmos.js +107 -90
- package/dist/services/Store/Disk.d.ts +4 -4
- package/dist/services/Store/Disk.d.ts.map +1 -1
- package/dist/services/Store/Disk.js +54 -50
- package/dist/services/Store/Memory.d.ts +6 -8
- package/dist/services/Store/Memory.d.ts.map +1 -1
- package/dist/services/Store/Memory.js +93 -89
- package/dist/services/Store/codeFilter.d.ts.map +1 -1
- package/dist/services/Store/codeFilter.js +3 -3
- package/dist/services/Store/codeFilter.test.d.ts.map +1 -1
- package/dist/services/Store/filterApi/query.d.ts +1 -1
- package/dist/services/Store/filterApi/query.d.ts.map +1 -1
- package/dist/services/Store/filterApi/query.js +3 -3
- package/dist/services/Store/index.d.ts +1 -2
- package/dist/services/Store/index.d.ts.map +1 -1
- package/dist/services/Store/index.js +7 -8
- package/dist/services/Store/service.d.ts +20 -23
- package/dist/services/Store/service.d.ts.map +1 -1
- package/dist/services/Store/service.js +6 -6
- package/dist/services/Store/utils.d.ts +3 -3
- package/dist/services/Store/utils.d.ts.map +1 -1
- package/dist/services/Store/utils.js +26 -28
- package/dist/services/query.d.ts +6 -6
- package/dist/services/query.d.ts.map +1 -1
- package/dist/services/query.js +5 -3
- package/dist/test.arbs.d.ts +0 -2
- package/dist/test.arbs.d.ts.map +1 -1
- package/dist/test.arbs.js +3 -4
- package/package.json +28 -168
- package/src/RequestContext.ts +1 -0
- package/src/_ext/Array.ts +5 -2
- package/src/api/reportError.ts +14 -10
- package/src/api/routing/base.ts +77 -110
- package/src/api/routing/defaultErrorHandler.ts +64 -54
- package/src/api/routing/makeRequestHandler.ts +165 -135
- package/src/api/routing/match.ts +14 -8
- package/src/api/{express → routing}/schema/jwt.ts +6 -5
- package/src/api/{express → routing}/schema/routing.ts +2 -1
- package/src/api/setupRequest.ts +30 -24
- package/src/errorReporter.ts +12 -11
- package/src/errors.ts +1 -0
- package/src/filter/types/path/index.ts +2 -2
- package/src/logger/jsonLogger.ts +6 -5
- package/src/logger/logFmtLogger.ts +4 -5
- package/src/logger/shared.ts +4 -3
- package/src/rateLimit.ts +37 -34
- package/src/services/Emailer/Sendgrid.ts +12 -10
- package/src/services/Emailer/fake.ts +7 -4
- package/src/services/Emailer/service.ts +4 -1
- package/src/services/Operations/live.ts +66 -59
- package/src/services/Operations/service.ts +41 -34
- package/src/services/QueueMaker/errors.ts +15 -11
- package/src/services/QueueMaker/memQueue.ts +59 -40
- package/src/services/QueueMaker/sbqueue.ts +54 -33
- package/src/services/QueueMaker/service.ts +7 -6
- package/src/services/Repository/dsl.ts +12 -8
- package/src/services/Repository/ext.ts +52 -44
- package/src/services/RepositoryBase.ts +278 -240
- package/src/services/RequestContextContainer.ts +30 -18
- package/src/services/Store/ContextMapContainer.ts +26 -13
- package/src/services/Store/Cosmos/query.ts +17 -11
- package/src/services/Store/Cosmos.ts +209 -168
- package/src/services/Store/Disk.ts +69 -53
- package/src/services/Store/Memory.ts +138 -97
- package/src/services/Store/{Redis.ts → Redis.ts.bak} +7 -5
- package/src/services/Store/codeFilter.test.ts +61 -36
- package/src/services/Store/codeFilter.ts +1 -0
- package/src/services/Store/filterApi/query.ts +1 -0
- package/src/services/Store/index.ts +7 -6
- package/src/services/Store/service.ts +4 -1
- package/src/services/Store/utils.ts +25 -23
- package/src/services/query.ts +3 -2
- package/src/services/simpledb/{cosmosdb.ts → cosmosdb.ts.bak} +1 -0
- package/src/services/simpledb/{diskdb.ts → diskdb.ts.bak} +2 -1
- package/src/services/simpledb/{memdb.ts → memdb.ts.bak} +3 -2
- package/src/services/simpledb/{mongodb.ts → mongodb.ts.bak} +1 -0
- package/src/services/simpledb/{redisdb.ts → redisdb.ts.bak} +17 -14
- package/src/services/simpledb/{shared.ts → shared.ts.bak} +2 -1
- package/src/services/simpledb/{simpledb.ts → simpledb.ts.bak} +6 -2
- package/tsconfig.json +4 -21
- package/tsconfig.json.bak +0 -4
- package/_cjs/_global.cjs +0 -6
- package/_cjs/_global.cjs.map +0 -1
- package/_cjs/_global.ext.cjs +0 -5
- package/_cjs/_global.ext.cjs.map +0 -1
- package/_cjs/_global.schema.cjs +0 -5
- package/_cjs/_global.schema.cjs.map +0 -1
- package/_cjs/api/defaultErrorHandler.cjs +0 -37
- package/_cjs/api/defaultErrorHandler.cjs.map +0 -1
- package/_cjs/api/express/schema/jwt.cjs.map +0 -1
- package/_cjs/api/express/schema/routing.cjs +0 -23
- package/_cjs/api/express/schema/routing.cjs.map +0 -1
- package/_cjs/api/http.cjs +0 -42
- package/_cjs/api/http.cjs.map +0 -1
- package/_cjs/services/Store/Redis.cjs +0 -73
- package/_cjs/services/Store/Redis.cjs.map +0 -1
- package/_cjs/services/simpledb/cosmosdb.cjs +0 -109
- package/_cjs/services/simpledb/cosmosdb.cjs.map +0 -1
- package/_cjs/services/simpledb/diskdb.cjs +0 -125
- package/_cjs/services/simpledb/diskdb.cjs.map +0 -1
- package/_cjs/services/simpledb/index.cjs +0 -38
- package/_cjs/services/simpledb/index.cjs.map +0 -1
- package/_cjs/services/simpledb/memdb.cjs +0 -72
- package/_cjs/services/simpledb/memdb.cjs.map +0 -1
- package/_cjs/services/simpledb/mongodb.cjs +0 -99
- package/_cjs/services/simpledb/mongodb.cjs.map +0 -1
- package/_cjs/services/simpledb/redisdb.cjs +0 -135
- package/_cjs/services/simpledb/redisdb.cjs.map +0 -1
- package/_cjs/services/simpledb/shared.cjs +0 -79
- package/_cjs/services/simpledb/shared.cjs.map +0 -1
- package/_cjs/services/simpledb/simpledb.cjs +0 -85
- package/_cjs/services/simpledb/simpledb.cjs.map +0 -1
- package/dist/_global.d.ts +0 -10
- package/dist/_global.d.ts.map +0 -1
- package/dist/_global.ext.d.ts +0 -34
- package/dist/_global.ext.d.ts.map +0 -1
- package/dist/_global.ext.js +0 -6
- package/dist/_global.js +0 -12
- package/dist/_global.schema.d.ts +0 -6
- package/dist/_global.schema.d.ts.map +0 -1
- package/dist/_global.schema.js +0 -9
- package/dist/api/defaultErrorHandler.d.ts +0 -6
- package/dist/api/defaultErrorHandler.d.ts.map +0 -1
- package/dist/api/defaultErrorHandler.js +0 -34
- package/dist/api/express/schema/jwt.d.ts +0 -6
- package/dist/api/express/schema/jwt.d.ts.map +0 -1
- package/dist/api/express/schema/jwt.js +0 -11
- package/dist/api/express/schema/routing.d.ts.map +0 -1
- package/dist/api/express/schema/routing.js +0 -10
- package/dist/api/http.d.ts +0 -16
- package/dist/api/http.d.ts.map +0 -1
- package/dist/api/http.js +0 -12
- package/dist/services/Store/Redis.d.ts +0 -6
- package/dist/services/Store/Redis.d.ts.map +0 -1
- package/dist/services/Store/Redis.js +0 -76
- package/dist/services/simpledb/cosmosdb.d.ts +0 -14
- package/dist/services/simpledb/cosmosdb.d.ts.map +0 -1
- package/dist/services/simpledb/cosmosdb.js +0 -103
- package/dist/services/simpledb/diskdb.d.ts +0 -12
- package/dist/services/simpledb/diskdb.d.ts.map +0 -1
- package/dist/services/simpledb/diskdb.js +0 -109
- package/dist/services/simpledb/index.d.ts +0 -7
- package/dist/services/simpledb/index.d.ts.map +0 -1
- package/dist/services/simpledb/index.js +0 -7
- package/dist/services/simpledb/memdb.d.ts +0 -11
- package/dist/services/simpledb/memdb.d.ts.map +0 -1
- package/dist/services/simpledb/memdb.js +0 -58
- package/dist/services/simpledb/mongodb.d.ts +0 -13
- package/dist/services/simpledb/mongodb.d.ts.map +0 -1
- package/dist/services/simpledb/mongodb.js +0 -68
- package/dist/services/simpledb/redisdb.d.ts +0 -35
- package/dist/services/simpledb/redisdb.d.ts.map +0 -1
- package/dist/services/simpledb/redisdb.js +0 -126
- package/dist/services/simpledb/shared.d.ts +0 -87
- package/dist/services/simpledb/shared.d.ts.map +0 -1
- package/dist/services/simpledb/shared.js +0 -52
- package/dist/services/simpledb/simpledb.d.ts +0 -23
- package/dist/services/simpledb/simpledb.d.ts.map +0 -1
- package/dist/services/simpledb/simpledb.js +0 -69
- package/src/_global.ext.ts +0 -36
- package/src/_global.schema.ts +0 -10
- package/src/_global.ts +0 -14
- package/src/api/defaultErrorHandler.ts +0 -59
- package/src/api/express/makeJsonSchema.test.ts.bak +0 -76
- package/src/api/express/makeJsonSchema.ts.bak +0 -166
- package/src/api/express/makeOpenApiSpecs.ts.bak +0 -62
- package/src/api/http.ts +0 -26
- package/tsplus.config.json +0 -9
- /package/src/services/simpledb/{index.ts → index.ts.bak} +0 -0
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "effect/Effect";
|
|
2
|
-
import * as tsplus_module_2 from "effect/Option";
|
|
3
|
-
import * as tsplus_module_3 from "@effect-app/core/Effect";
|
|
4
|
-
import { MongoClient } from "@effect-app/infra-adapters/mongo-client";
|
|
5
|
-
import { OptimisticLockException } from "./shared.js";
|
|
6
|
-
import * as simpledb from "./simpledb.js";
|
|
7
|
-
// const makeFromIndexKeys = (indexKeys: string[], unique: boolean) => indexKeys.reduce((prev, cur) => {
|
|
8
|
-
// prev[cur] = 1
|
|
9
|
-
// return prev
|
|
10
|
-
// }, {} as Record<string, number>)
|
|
11
|
-
const setup = (type, indexes) => MongoClient
|
|
12
|
-
.tap(({ db }) => tsplus_module_1.tryPromise(() => db.createCollection(type).catch((err) => console.warn(err))))
|
|
13
|
-
.flatMap(({ db }) => tsplus_module_1.tryPromise(() => db.collection(type).createIndexes(indexes)));
|
|
14
|
-
export function createContext() {
|
|
15
|
-
return (type, encode, decode,
|
|
16
|
-
// schemaVersion: string,
|
|
17
|
-
indexes) => {
|
|
18
|
-
return setup(type, indexes).map(() => ({
|
|
19
|
-
find: simpledb.find(find, decode, type),
|
|
20
|
-
findBy,
|
|
21
|
-
save: simpledb.storeDirectly(store, type)
|
|
22
|
-
}));
|
|
23
|
-
function find(id) {
|
|
24
|
-
return tsplus_module_3.mapOption(MongoClient
|
|
25
|
-
.flatMap(({ db }) => tsplus_module_1.tryPromise(() => db
|
|
26
|
-
.collection(type)
|
|
27
|
-
.findOne({ _id: { equals: id } })))
|
|
28
|
-
.map(tsplus_module_2.fromNullable), ({ data, version }) => ({ version, data }));
|
|
29
|
-
}
|
|
30
|
-
function findBy(keys) {
|
|
31
|
-
return tsplus_module_3.mapOption(MongoClient
|
|
32
|
-
.flatMap(({ db }) => tsplus_module_1.tryPromise(() => db.collection(type).findOne(keys, { projection: { _id: 1 } })))
|
|
33
|
-
.map(tsplus_module_2.fromNullable), ({ _id }) => _id);
|
|
34
|
-
}
|
|
35
|
-
function store(record, currentVersion) {
|
|
36
|
-
return tsplus_module_1.gen(function* ($) {
|
|
37
|
-
const version = currentVersion
|
|
38
|
-
.map((cv) => (parseInt(cv) + 1).toString())
|
|
39
|
-
.getOrElse(() => "1");
|
|
40
|
-
const { db } = yield* $(MongoClient);
|
|
41
|
-
const data = yield* $(encode(record));
|
|
42
|
-
yield* $(tsplus_module_2.match(currentVersion, {
|
|
43
|
-
onNone: () => tsplus_module_1.tryPromise(() => db
|
|
44
|
-
.collection(type)
|
|
45
|
-
.insertOne({ _id: record.id, version, timestamp: new Date(), data }, {
|
|
46
|
-
checkKeys: false // support for keys with `.` and `$`. NOTE: you can write them, read them, but NOT query for them.
|
|
47
|
-
}))
|
|
48
|
-
.asUnit
|
|
49
|
-
.orDie,
|
|
50
|
-
onSome: (currentVersion) => tsplus_module_1.tryPromise(() => db.collection(type).replaceOne({ _id: record.id, version: currentVersion }, {
|
|
51
|
-
version,
|
|
52
|
-
timestamp: new Date(),
|
|
53
|
-
data
|
|
54
|
-
}, { upsert: false }))
|
|
55
|
-
.orDie
|
|
56
|
-
.flatMap((x) => {
|
|
57
|
-
if (!x.modifiedCount) {
|
|
58
|
-
return new OptimisticLockException(type, record.id);
|
|
59
|
-
}
|
|
60
|
-
return tsplus_module_1.unit;
|
|
61
|
-
})
|
|
62
|
-
}));
|
|
63
|
-
return { version, data: record };
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ29kYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9zaW1wbGVkYi9tb25nb2RiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUdyRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDckQsT0FBTyxLQUFLLFFBQVEsTUFBTSxlQUFlLENBQUE7QUFHekMsd0dBQXdHO0FBQ3hHLGtCQUFrQjtBQUNsQixnQkFBZ0I7QUFDaEIsbUNBQW1DO0FBRW5DLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBWSxFQUFFLE9BQTJCLEVBQUUsRUFBRSxDQUMxRCxXQUFXO0tBQ1IsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsMkJBQWtCLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3JHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLDJCQUFrQixHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFN0YsTUFBTSxVQUFVLGFBQWE7SUFDM0IsT0FBTyxDQUNMLElBQVksRUFDWixNQUFpRCxFQUNqRCxNQUE4QztJQUM5Qyx5QkFBeUI7SUFDekIsT0FBMkIsRUFDM0IsRUFBRTtRQUNGLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNyQyxJQUFJLEVBQUUsUUFBUSxDQUFD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
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { Effect } from "effect/Effect";
|
|
2
|
-
import { Option } from "@effect-app/core/Option";
|
|
3
|
-
import { RedisClient } from "@effect-app/infra-adapters/redis-client";
|
|
4
|
-
import * as S from "effect-app/schema";
|
|
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) => Effect<EA, never, REncode>, decode: (d: EA) => Effect<A, EDecode, RDecode>, schemaVersion: string, makeIndexKey: (r: A) => Index) => {
|
|
9
|
-
find: (id: string) => import("effect/Effect").Effect<import("effect/Option").Option<A>, simpledb.InvalidStateError, RedisClient | simpledb.RecordCache | RDecode>;
|
|
10
|
-
findByIndex: (index: Index) => import("effect/Effect").Effect<import("effect/Option").Option<TKey>, import("@effect-app/infra-adapters/redis-client").ConnectionException, RedisClient>;
|
|
11
|
-
save: (record: A) => import("effect/Effect").Effect<A, CouldNotAquireDbLockException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, RedisClient | simpledb.RecordCache | REncode>;
|
|
12
|
-
};
|
|
13
|
-
declare const RedisSerializedDBRecord_base: S.EnhancedClass<{
|
|
14
|
-
readonly data: string;
|
|
15
|
-
readonly version: string;
|
|
16
|
-
readonly timestamp: Date;
|
|
17
|
-
}, {
|
|
18
|
-
readonly data: string;
|
|
19
|
-
readonly version: string;
|
|
20
|
-
readonly timestamp: string;
|
|
21
|
-
}, never, {
|
|
22
|
-
readonly data: string;
|
|
23
|
-
readonly version: string;
|
|
24
|
-
readonly timestamp: Date;
|
|
25
|
-
}, RedisSerializedDBRecord, {
|
|
26
|
-
version: S.Schema<string, string, never>;
|
|
27
|
-
timestamp: S.Schema<Date, string, never> & {
|
|
28
|
-
withDefault: S.Schema<Date, string, never> & S.ConstructorPropertyDescriptor<Date, string, never>;
|
|
29
|
-
};
|
|
30
|
-
data: S.Schema<string, string, never>;
|
|
31
|
-
}, {}, {}>;
|
|
32
|
-
export declare class RedisSerializedDBRecord extends RedisSerializedDBRecord_base {
|
|
33
|
-
}
|
|
34
|
-
export {};
|
|
35
|
-
//# sourceMappingURL=redisdb.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redisdb.d.ts","sourceRoot":"","sources":["../../../src/services/simpledb/redisdb.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAA;AACrE,OAAO,KAAK,CAAC,MAAM,mBAAmB,CAAA;AAEtC,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,KAAK,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,cACrC,EAAE,KAAK,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,iBAC/B,MAAM,oBACH,CAAC,KAAK,KAAK;;yBAsFN,KAAK;;EAwF/B;;;;;;;;;;;;;;;;;;;;AAED,qBAAa,uBAAwB,SAAQ,4BAI3C;CAAG"}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "@effect/schema/Schema";
|
|
2
|
-
import * as tsplus_module_2 from "effect/Effect";
|
|
3
|
-
import * as tsplus_module_3 from "@effect-app/core/Effect";
|
|
4
|
-
import * as tsplus_module_4 from "effect/Option";
|
|
5
|
-
import * as tsplus_module_5 from "@effect/schema/Parser";
|
|
6
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
7
|
-
import { flow } from "@effect-app/core/Function";
|
|
8
|
-
import { RedisClient } from "@effect-app/infra-adapters/redis-client";
|
|
9
|
-
import * as S from "effect-app/schema";
|
|
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, (_) => _.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_3.flatMapOption(RedisClient
|
|
23
|
-
.flatMap((_) => _.hmgetAll(getKey(id))), (v) => tsplus_module_2.mapError(tsplus_module_1.decodeUnknown(RedisSerializedDBRecord)(v)
|
|
24
|
-
.map(({ data, version }) => ({
|
|
25
|
-
data: JSON.parse(data),
|
|
26
|
-
version
|
|
27
|
-
})), (e) => new ConnectionException(new Error(e.toString()))))
|
|
28
|
-
.orDie;
|
|
29
|
-
}
|
|
30
|
-
function store(record, currentVersion) {
|
|
31
|
-
const version = currentVersion
|
|
32
|
-
.map((cv) => (parseInt(cv) + 1).toString())
|
|
33
|
-
.getOrElse(() => "1");
|
|
34
|
-
return tsplus_module_4.match(currentVersion, {
|
|
35
|
-
onNone: () => tsplus_module_2.scoped(tsplus_module_2.zipRight(lockIndex(record), tsplus_module_2.zipRight(tsplus_module_2.zipRight(tsplus_module_3.zipRightOption(getIndex(record), tsplus_module_2.fail(() => new Error("Combination already exists, abort"))), getData(record))
|
|
36
|
-
// TODO: instead use MULTI & EXEC to make it in one command?
|
|
37
|
-
.flatMap((data) => hmSetRec(getKey(record.id), new RedisSerializedDBRecord({
|
|
38
|
-
version,
|
|
39
|
-
timestamp: new Date(),
|
|
40
|
-
data
|
|
41
|
-
}))), setIndex(record))
|
|
42
|
-
.orDie
|
|
43
|
-
.map(() => ({ version, data: record })))),
|
|
44
|
-
onSome: () => getData(record)
|
|
45
|
-
.flatMap((data) => hmSetRec(getKey(record.id), new RedisSerializedDBRecord({
|
|
46
|
-
version,
|
|
47
|
-
timestamp: new Date(),
|
|
48
|
-
data
|
|
49
|
-
})))
|
|
50
|
-
.orDie
|
|
51
|
-
.map(() => ({ version, data: record }))
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
function getIndex(record) {
|
|
55
|
-
const index = makeIndexKey(record);
|
|
56
|
-
return getIdx(index);
|
|
57
|
-
}
|
|
58
|
-
function setIndex(record) {
|
|
59
|
-
const index = makeIndexKey(record);
|
|
60
|
-
return setIdx(index, record);
|
|
61
|
-
}
|
|
62
|
-
function lockIndex(record) {
|
|
63
|
-
const index = makeIndexKey(record);
|
|
64
|
-
return lockRedisIdx(index);
|
|
65
|
-
}
|
|
66
|
-
function getIdx(index) {
|
|
67
|
-
return RedisClient.flatMap((_) => _.hget(getIdxKey(index), index.key).map((_) => _.map((i) => i)));
|
|
68
|
-
}
|
|
69
|
-
function setIdx(index, r) {
|
|
70
|
-
return RedisClient.flatMap((_) => _.hset(getIdxKey(index), index.key, r.id));
|
|
71
|
-
}
|
|
72
|
-
function lockRedisIdx(index) {
|
|
73
|
-
const lockKey = getIdxLockKey(index);
|
|
74
|
-
// acquire
|
|
75
|
-
return tsplus_module_2.acquireRelease(tsplus_module_2.mapBoth(RedisClient
|
|
76
|
-
.flatMap(({ lock }) => tsplus_module_2.tryPromise(() => lock.lock(lockKey, ttl))), {
|
|
77
|
-
onFailure: (err) => new CouldNotAquireDbLockException(type, lockKey, err),
|
|
78
|
-
// release
|
|
79
|
-
onSuccess: (lock) => ({
|
|
80
|
-
release: tsplus_module_2.tryPromise(() => lock.unlock())
|
|
81
|
-
.orDie
|
|
82
|
-
})
|
|
83
|
-
}), (l) => l.release);
|
|
84
|
-
}
|
|
85
|
-
function lockRedisRecord(id) {
|
|
86
|
-
// acquire
|
|
87
|
-
return tsplus_module_2.acquireRelease(tsplus_module_2.mapBoth(RedisClient
|
|
88
|
-
.flatMap(({ lock }) => tsplus_module_2.tryPromise(() => lock.lock(getLockKey(id), ttl))), {
|
|
89
|
-
onFailure: (err) => new CouldNotAquireDbLockException(type, id, err),
|
|
90
|
-
// release
|
|
91
|
-
onSuccess: (lock) => ({
|
|
92
|
-
// TODO
|
|
93
|
-
release: tsplus_module_2.tryPromise(() => lock.unlock())
|
|
94
|
-
.orDie
|
|
95
|
-
})
|
|
96
|
-
}), (l) => l.release);
|
|
97
|
-
}
|
|
98
|
-
function getKey(id) {
|
|
99
|
-
return `v${schemaVersion}.${getRecordName(type, id)}`;
|
|
100
|
-
}
|
|
101
|
-
function getLockKey(id) {
|
|
102
|
-
return `v${schemaVersion}.locks.${getRecordName(type, id)}`;
|
|
103
|
-
}
|
|
104
|
-
function getIdxKey(index) {
|
|
105
|
-
return `v${schemaVersion}.${getIndexName(type, index.doc)}`;
|
|
106
|
-
}
|
|
107
|
-
function getIdxLockKey(index) {
|
|
108
|
-
return `v${schemaVersion}.locks.${getIndexName(type, index.doc)}_${index.key}`;
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
function hmSetRec(key, val) {
|
|
112
|
-
const enc = tsplus_module_5.encodeSync(RedisSerializedDBRecord)(val);
|
|
113
|
-
return RedisClient.flatMap(({ client }) => tsplus_module_2.uninterruptible(tsplus_module_2.async((res) => {
|
|
114
|
-
client.hmset(key, "version", enc.version, "timestamp", enc.timestamp, "data", enc.data, (err) => err
|
|
115
|
-
? res(new ConnectionException(err))
|
|
116
|
-
: res(tsplus_module_2.sync(() => void 0)));
|
|
117
|
-
})));
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
export class RedisSerializedDBRecord extends S.Class()({
|
|
121
|
-
version: S.string,
|
|
122
|
-
timestamp: S.Date,
|
|
123
|
-
data: S.string
|
|
124
|
-
}) {
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXNkYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9zaW1wbGVkYi9yZWRpc2RiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUE7QUFDckUsT0FBTyxLQUFLLENBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUd0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsNkJBQTZCLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM3RyxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQTtBQUV6QyxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFBO0FBRXJCLE1BQU0sVUFBVSxhQUFhO0lBQzNCLE9BQU8sQ0FDTCxJQUFZLEVBQ1osTUFBaUQsRUFDakQsTUFBOEMsRUFDOUMsYUFBcUIsRUFDckIsWUFBNkIsRUFDN0IsRUFBRTtRQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7UUFDMUQsT0FBTztZQUNMLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ3ZDLFdBQVcsRUFBRSxNQUFNO1lBQ25CLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQztTQUN6RCxDQUFBO1FBRUQsU0FBUyxJQUFJLENBQUMsRUFBVTtZQUN0QixPQUFPLDhCQUFBLFdBQVc7aUJBQ2YsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQzNCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDaEIseUJBQUEsOEJBQUEsdUJBQXVCLEVBQ04sQ0FBQyxDQUFDO2lCQUNoQixHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFPO2dCQUM1QixPQUFPO2FBQ1IsQ0FBQyxDQUFDLEVBQ08sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksbUJBQW1CLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNyRTtpQkFDQSxLQUFLLENBQUE7UUFDVixDQUFDO1FBQ0QsU0FBUyxLQUFLLENBQUMsTUFBUyxFQUFFLGNBQThCO1lBQ3RELE1BQU0sT0FBTyxHQUFHLGNBQWM7aUJBQzNCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7aUJBQzFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUN2QixPQUFPLHNCQUFBLGNBQWMsRUFDbkI7Z0JBQ0UsTUFBTSxFQUFFLEdBQUcsRUFBRSx3QkFDWCx5QkFBQSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBRWIseUJBQUEseUJBQUEsK0JBQUEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUVaLHFCQUFZLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FDbEUsRUFDUyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzFCLDREQUE0RDtxQkFDM0QsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDaEIsUUFBUSxDQUNOLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQ2pCLElBQUksdUJBQXVCLENBQUM7b0JBQzFCLE9BQU87b0JBQ1AsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO29CQUNyQixJQUFJO2lCQUNMLENBQUMsQ0FDSCxDQUNGLEVBQ1MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUMxQixLQUFLO3FCQUNMLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQXNCLENBQUEsQ0FBQyxDQUM3RCxDQUNNO2dCQUNYLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FDWCxPQUFPLENBQUMsTUFBTSxDQUFDO3FCQUNaLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2hCLFFBQVEsQ0FDTixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUNqQixJQUFJLHVCQUF1QixDQUFDO29CQUMxQixPQUFPO29CQUNQLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTtvQkFDckIsSUFBSTtpQkFDTCxDQUFDLENBQ0gsQ0FDRjtxQkFDQSxLQUFLO3FCQUNMLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQXNCLENBQUEsQ0FBQzthQUMvRCxDQUNGLENBQUE7UUFDSCxDQUFDO1FBRUQsU0FBUyxRQUFRLENBQUMsTUFBUztZQUN6QixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDbEMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdEIsQ0FBQztRQUVELFNBQVMsUUFBUSxDQUFDLE1BQVM7WUFDekIsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2xDLE9BQU8sTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUM5QixDQUFDO1FBRUQsU0FBUyxTQUFTLENBQUMsTUFBUztZQUMxQixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDbEMsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDNUIsQ0FBQztRQUVELFNBQVMsTUFBTSxDQUFDLEtBQVk7WUFDMUIsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDNUcsQ0FBQztRQUVELFNBQVMsTUFBTSxDQUFDLEtBQVksRUFBRSxDQUFJO1lBQ2hDLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUM5RSxDQUFDO1FBRUQsU0FBUyxZQUFZLENBQUMsS0FBWTtZQUNoQyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDcEMsVUFBVTtZQUNWLE9BQU8sK0JBQUEsd0JBQUEsV0FBVztpQkFDZixPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQywyQkFBa0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUE2QixDQUFDLENBQUMsRUFDM0Y7Z0JBQ1AsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLDZCQUE2QixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBWSxDQUFDO2dCQUNsRixVQUFVO2dCQUNWLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDcEIsT0FBTyxFQUFFLDJCQUNLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQThCLENBQUM7eUJBQzNELEtBQUs7aUJBQ1QsQ0FBQzthQUNILENBQUMsRUFFQSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDakIsQ0FBQTtRQUNMLENBQUM7UUFFRCxTQUFTLGVBQWUsQ0FBQyxFQUFVO1lBQ2pDLFVBQVU7WUFDVixPQUFPLCtCQUFBLHdCQUFBLFdBQVc7aUJBQ2YsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQ3BCLDJCQUNFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBNkIsQ0FDakUsQ0FDRixFQUNRO2dCQUNQLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQVksQ0FBQztnQkFDN0UsVUFBVTtnQkFDVixTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3BCLE9BQU87b0JBQ1AsT0FBTyxFQUFFLDJCQUNLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQThCLENBQUM7eUJBQzNELEtBQUs7aUJBQ1QsQ0FBQzthQUNILENBQUMsRUFFQSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDakIsQ0FBQTtRQUNMLENBQUM7UUFFRCxTQUFTLE1BQU0sQ0FBQyxFQUFVO1lBQ3hCLE9BQU8sSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFBO1FBQ3ZELENBQUM7UUFFRCxTQUFTLFVBQVUsQ0FBQyxFQUFVO1lBQzVCLE9BQU8sSUFBSSxhQUFhLFVBQVUsYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFBO1FBQzdELENBQUM7UUFFRCxTQUFTLFNBQVMsQ0FBQyxLQUFZO1lBQzdCLE9BQU8sSUFBSSxhQUFhLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQTtRQUM3RCxDQUFDO1FBQ0QsU0FBUyxhQUFhLENBQUMsS0FBWTtZQUNqQyxPQUFPLElBQUksYUFBYSxVQUFVLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNoRixDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsU0FBUyxRQUFRLENBQUMsR0FBVyxFQUFFLEdBQTRCO1FBQ3pELE1BQU0sR0FBRyxHQUFHLDJCQUFBLHVCQUF1QixFQUFZLEdBQUcsQ0FBQyxDQUFBO1FBQ25ELE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxpQ0FDeEMsc0JBQ29DLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxDQUFDLEtBQUssQ0FDVixHQUFHLEVBQ0gsU0FBUyxFQUNULEdBQUcsQ0FBQyxPQUFPLEVBQ1gsV0FBVyxFQUNYLEdBQUcsQ0FBQyxTQUFTLEVBQ2IsTUFBTSxFQUNOLEdBQUcsQ0FBQyxJQUFJLEVBQ1IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLEdBQUc7Z0JBQ0QsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsR0FBRyxDQUFDLHFCQUFZLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDckMsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUNjLENBQ25CLENBQUE7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxDQUFDLENBQUMsS0FBSyxFQUEyQixDQUFDO0lBQzlFLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTTtJQUNqQixTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUk7SUFDakIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNO0NBQ2YsQ0FBQztDQUFHIn0=
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { Data } from "effect";
|
|
2
|
-
import { Schema } from "effect-app/schema";
|
|
3
|
-
import { Effect } from "effect/Effect";
|
|
4
|
-
import { Option } from "@effect-app/core/Option";
|
|
5
|
-
import * as S from "effect-app/schema";
|
|
6
|
-
declare const CouldNotAquireDbLockException_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
|
|
7
|
-
readonly _tag: "CouldNotAquireDbLockException";
|
|
8
|
-
} & Readonly<A>;
|
|
9
|
-
export declare class CouldNotAquireDbLockException extends CouldNotAquireDbLockException_base<{
|
|
10
|
-
type: string;
|
|
11
|
-
id: string;
|
|
12
|
-
error: Error;
|
|
13
|
-
message: string;
|
|
14
|
-
}> {
|
|
15
|
-
constructor(type: string, id: string, error: Error);
|
|
16
|
-
}
|
|
17
|
-
declare const OptimisticLockException_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
|
|
18
|
-
readonly _tag: "OptimisticLockException";
|
|
19
|
-
} & Readonly<A>;
|
|
20
|
-
export declare class OptimisticLockException extends OptimisticLockException_base<{
|
|
21
|
-
type: string;
|
|
22
|
-
id: string;
|
|
23
|
-
message: string;
|
|
24
|
-
}> {
|
|
25
|
-
constructor(type: string, id: string);
|
|
26
|
-
}
|
|
27
|
-
declare const ConnectionException_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
|
|
28
|
-
readonly _tag: "ConnectionException";
|
|
29
|
-
} & Readonly<A>;
|
|
30
|
-
export declare class ConnectionException extends ConnectionException_base<{
|
|
31
|
-
cause: Error;
|
|
32
|
-
message: string;
|
|
33
|
-
}> {
|
|
34
|
-
readonly _errorTag = "ConnectionException";
|
|
35
|
-
constructor(cause: Error);
|
|
36
|
-
}
|
|
37
|
-
export interface DBRecord<TKey extends string> {
|
|
38
|
-
id: TKey;
|
|
39
|
-
}
|
|
40
|
-
declare const SerializedDBRecord_base: S.EnhancedClass<{
|
|
41
|
-
readonly data: string;
|
|
42
|
-
readonly version: string;
|
|
43
|
-
readonly timestamp: Date;
|
|
44
|
-
}, {
|
|
45
|
-
readonly data: string;
|
|
46
|
-
readonly version: string;
|
|
47
|
-
readonly timestamp: string;
|
|
48
|
-
}, never, {
|
|
49
|
-
readonly data: string;
|
|
50
|
-
readonly version: string;
|
|
51
|
-
readonly timestamp: Date;
|
|
52
|
-
}, SerializedDBRecord, {
|
|
53
|
-
version: S.Schema<string, string, never>;
|
|
54
|
-
timestamp: S.Schema<Date, string, never> & {
|
|
55
|
-
withDefault: S.Schema<Date, string, never> & S.ConstructorPropertyDescriptor<Date, string, never>;
|
|
56
|
-
};
|
|
57
|
-
data: S.Schema<string, string, never>;
|
|
58
|
-
}, {}, {}>;
|
|
59
|
-
export declare class SerializedDBRecord extends SerializedDBRecord_base {
|
|
60
|
-
}
|
|
61
|
-
export declare function makeSerialisedDBRecord(s: Schema<any>): S.Schema<{
|
|
62
|
-
readonly data: any;
|
|
63
|
-
readonly version: number;
|
|
64
|
-
readonly timestamp: Date;
|
|
65
|
-
}, {
|
|
66
|
-
readonly data: any;
|
|
67
|
-
readonly version: number;
|
|
68
|
-
readonly timestamp: string;
|
|
69
|
-
}, never>;
|
|
70
|
-
export interface CachedRecord<T> {
|
|
71
|
-
version: string;
|
|
72
|
-
data: T;
|
|
73
|
-
}
|
|
74
|
-
export interface Index {
|
|
75
|
-
doc: string;
|
|
76
|
-
key: string;
|
|
77
|
-
}
|
|
78
|
-
export declare function getIndexName(type: string, id: string): string;
|
|
79
|
-
export declare function getRecordName(type: string, id: string): string;
|
|
80
|
-
export declare function makeMap<TKey, T>(): EffectMap<TKey, T>;
|
|
81
|
-
export interface EffectMap<TKey, T> {
|
|
82
|
-
[Symbol.iterator](): IterableIterator<[TKey, T]>;
|
|
83
|
-
find: (k: TKey) => Effect<Option<T>>;
|
|
84
|
-
set: (k: TKey, v: T) => Effect<void>;
|
|
85
|
-
}
|
|
86
|
-
export {};
|
|
87
|
-
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/services/simpledb/shared.ts"],"names":[],"mappings":";;;;AAAA,OAAO,KAAK,CAAC,MAAM,mBAAmB,CAAA;;;;AAEtC,qBAAa,6BACX,SAAQ,mCAAkD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;gBAE1G,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAGnD;;;;AAED,qBAAa,uBACX,SAAQ,6BAA4C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;gBAEtF,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;CAGrC;;;;AAED,qBAAa,mBAAoB,SAAQ,yBAAwC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;IACjH,QAAQ,CAAC,SAAS,yBAAwB;gBAC9B,KAAK,EAAE,KAAK;CAGzB;AAED,MAAM,WAAW,QAAQ,CAAC,IAAI,SAAS,MAAM;IAC3C,EAAE,EAAE,IAAI,CAAA;CACT;;;;;;;;;;;;;;;;;;;;AAED,qBAAa,kBAAmB,SAAQ,uBAItC;CAAG;AAIL,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;;;;;;;;UAMpD;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,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAA;CACrC"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "effect";
|
|
2
|
-
import * as tsplus_module_2 from "effect/Option";
|
|
3
|
-
import * as tsplus_module_3 from "effect/Effect";
|
|
4
|
-
import * as S from "effect-app/schema";
|
|
5
|
-
export class CouldNotAquireDbLockException extends tsplus_module_1.Data.TaggedError("CouldNotAquireDbLockException") {
|
|
6
|
-
constructor(type, id, error) {
|
|
7
|
-
super({ type, id, error, message: `Couldn't lock db record ${type}: ${id}` });
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
export class OptimisticLockException extends tsplus_module_1.Data.TaggedError("OptimisticLockException") {
|
|
11
|
-
constructor(type, id) {
|
|
12
|
-
super({ type, id, message: `Existing ${type} ${id} record changed` });
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
export class ConnectionException extends tsplus_module_1.Data.TaggedError("ConnectionException") {
|
|
16
|
-
_errorTag = "ConnectionException";
|
|
17
|
-
constructor(cause) {
|
|
18
|
-
super({ cause, message: "A connection error ocurred" });
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
export class SerializedDBRecord extends S.Class()({
|
|
22
|
-
version: S.string,
|
|
23
|
-
timestamp: S.Date,
|
|
24
|
-
data: S.string
|
|
25
|
-
}) {
|
|
26
|
-
}
|
|
27
|
-
// unknown -> string -> SDB?
|
|
28
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
29
|
-
export function makeSerialisedDBRecord(s) {
|
|
30
|
-
return S.struct({
|
|
31
|
-
version: S.number,
|
|
32
|
-
timestamp: S.Date,
|
|
33
|
-
data: s
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
export function getIndexName(type, id) {
|
|
37
|
-
return `${type}-idx_${id}`;
|
|
38
|
-
}
|
|
39
|
-
export function getRecordName(type, id) {
|
|
40
|
-
return `${type}-r_${id}`;
|
|
41
|
-
}
|
|
42
|
-
export function makeMap() {
|
|
43
|
-
const map = new Map();
|
|
44
|
-
return {
|
|
45
|
-
find: (k) => tsplus_module_3.sync(() => tsplus_module_2.fromNullable(map.get(k))),
|
|
46
|
-
[Symbol.iterator]: () => map[Symbol.iterator](),
|
|
47
|
-
set: (k, v) => tsplus_module_3.sync(() => {
|
|
48
|
-
map.set(k, v);
|
|
49
|
-
})
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3NpbXBsZWRiL3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxPQUFPLEtBQUssQ0FBQyxNQUFNLG1CQUFtQixDQUFBO0FBRXRDLE1BQU0sT0FBTyw2QkFDWCxTQUFRLGdCQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsK0JBQStCLENBQThEO0lBRXRILFlBQVksSUFBWSxFQUFFLEVBQVUsRUFBRSxLQUFZO1FBQ2hELEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsSUFBSSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUMvRSxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sdUJBQ1gsU0FBUSxnQkFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFnRDtJQUVsRyxZQUFZLElBQVksRUFBRSxFQUFVO1FBQ2xDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksSUFBSSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZFLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxnQkFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFvQztJQUN4RyxTQUFTLEdBQUcscUJBQXFCLENBQUE7SUFDMUMsWUFBWSxLQUFZO1FBQ3RCLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsQ0FBQyxDQUFBO0lBQ3pELENBQUM7Q0FDRjtBQU1ELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxDQUFDLENBQUMsS0FBSyxFQUFzQixDQUFDO0lBQ3BFLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTTtJQUNqQixTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUk7SUFDakIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNO0NBQ2YsQ0FBQztDQUFHO0FBRUwsNEJBQTRCO0FBQzVCLDhEQUE4RDtBQUM5RCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsQ0FBYztJQUNuRCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDZCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU07UUFDakIsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJO1FBQ2pCLElBQUksRUFBRSxDQUFDO0tBQ1IsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQVlELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBWSxFQUFFLEVBQVU7SUFDbkQsT0FBTyxHQUFHLElBQUksUUFBUSxFQUFFLEVBQUUsQ0FBQTtBQUM1QixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUFZLEVBQUUsRUFBVTtJQUNwRCxPQUFPLEdBQUcsSUFBSSxNQUFNLEVBQUUsRUFBRSxDQUFBO0FBQzFCLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTztJQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBVyxDQUFBO0lBQzlCLE9BQU87UUFDTCxJQUFJLEVBQUUsQ0FBQyxDQUFPLEVBQUUsRUFBRSxDQUFDLHFCQUFZLEdBQUcsRUFBRSxDQUFDLDZCQUFvQixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUMvQyxHQUFHLEVBQUUsQ0FBQyxDQUFPLEVBQUUsQ0FBSSxFQUFFLEVBQUUsQ0FDckIscUJBQVksR0FBRyxFQUFFO1lBQ2YsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDZixDQUFDLENBQUM7S0FDaUIsQ0FBQTtBQUN6QixDQUFDIn0=
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Effect } from "effect/Effect";
|
|
2
|
-
import { Option } from "@effect-app/core/Option";
|
|
3
|
-
import { Scope } from "effect/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/Effect").Effect<EffectMap<string, CachedRecord<T>>, never, never>;
|
|
15
|
-
};
|
|
16
|
-
export interface RecordCache extends ReturnType<typeof makeLiveRecordCache> {
|
|
17
|
-
}
|
|
18
|
-
export declare const RecordCache: import("effect/Context").Tag<RecordCache, RecordCache>;
|
|
19
|
-
export declare const LiveRecordCache: import("effect/Layer").Layer<RecordCache, never, never>;
|
|
20
|
-
export declare function find<R, RDecode, EDecode, E, EA, A>(tryRead: (id: string) => Effect<Option<CachedRecord<EA>>, E, R>, decode: (d: EA) => Effect<A, EDecode, RDecode>, type: string): (id: string) => import("effect/Effect").Effect<import("effect/Option").Option<A>, InvalidStateError | E, RecordCache | R | RDecode>;
|
|
21
|
-
export declare function storeDirectly<R, E, TKey extends string, A extends DBRecord<TKey>>(save: (r: A, version: Option<Version>) => Effect<CachedRecord<A>, E, R>, type: string): (record: A) => import("effect/Effect").Effect<A, E, RecordCache | R>;
|
|
22
|
-
export declare function store<R, E, R2, E2, TKey extends string, EA, A extends DBRecord<TKey>>(tryRead: (id: string) => Effect<Option<CachedRecord<EA>>, E, R>, save: (r: A, version: Option<Version>) => Effect<CachedRecord<A>, E, R>, lock: (id: string) => Effect<unknown, E2, R2 | Scope>, type: string): (record: A) => import("effect/Effect").Effect<A, OptimisticLockException | InvalidStateError | E | E2, RecordCache | R | Exclude<R2, import("effect/Scope").Scope>>;
|
|
23
|
-
//# sourceMappingURL=simpledb.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,wDAAmD,CAAA;AAE3E,eAAO,MAAM,eAAe,yDAAgE,CAAA;AAQ5F,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAChD,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/D,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAC9C,IAAI,EAAE,MAAM,QAcA,MAAM,yHAOnB;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,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACvE,IAAI,EAAE,MAAM,YAGI,CAAC,2DASlB;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,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/D,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACvE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,EACrD,IAAI,EAAE,MAAM,YAGI,CAAC,0JA6BlB"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "effect/Effect";
|
|
2
|
-
import * as tsplus_module_2 from "effect/Context";
|
|
3
|
-
import * as tsplus_module_3 from "effect/Layer";
|
|
4
|
-
import * as tsplus_module_4 from "@effect-app/core/Effect";
|
|
5
|
-
import * as tsplus_module_5 from "effect/Option";
|
|
6
|
-
import { makeMap, OptimisticLockException } from "./shared.js";
|
|
7
|
-
export class InvalidStateError {
|
|
8
|
-
message;
|
|
9
|
-
details;
|
|
10
|
-
_tag = "InvalidStateError";
|
|
11
|
-
constructor(message, details) {
|
|
12
|
-
this.message = message;
|
|
13
|
-
this.details = details;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
export function makeLiveRecordCache() {
|
|
17
|
-
const m = new Map();
|
|
18
|
-
return {
|
|
19
|
-
get: (type) => tsplus_module_1.sync(() => {
|
|
20
|
-
const ex = m.get(type);
|
|
21
|
-
if (!ex) {
|
|
22
|
-
const nm = makeMap();
|
|
23
|
-
m.set(type, nm);
|
|
24
|
-
return nm;
|
|
25
|
-
}
|
|
26
|
-
return ex;
|
|
27
|
-
})
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
// module tag
|
|
31
|
-
export const RecordCache = tsplus_module_2.GenericTag("@services/RecordCache");
|
|
32
|
-
export const LiveRecordCache = tsplus_module_3.effect(RecordCache)(tsplus_module_1.sync(() => makeLiveRecordCache()));
|
|
33
|
-
const getM = (type) => (eff) => tsplus_module_1.gen(function* ($) {
|
|
34
|
-
const { get } = yield* $(RecordCache);
|
|
35
|
-
return yield* $(get(type).flatMap(eff));
|
|
36
|
-
});
|
|
37
|
-
export function find(tryRead, decode, type) {
|
|
38
|
-
const getCache = getM(type);
|
|
39
|
-
const read = (id) => tsplus_module_4.mapOption(tsplus_module_4.tapOption(tsplus_module_4.flatMapOption(tryRead(id), ({ data, version }) => tsplus_module_1.mapBoth(decode(data), {
|
|
40
|
-
onFailure: (err) => new InvalidStateError("DB serialisation Issue", err),
|
|
41
|
-
onSuccess: (data) => ({ data, version })
|
|
42
|
-
})), (r) => getCache((c) => c.set(id, r))), (r) => r.data);
|
|
43
|
-
return (id) => getCache((c) => tsplus_module_1.orElse(tsplus_module_4.mapOption(c
|
|
44
|
-
.find(id), (existing) => existing.data), () => read(id)));
|
|
45
|
-
}
|
|
46
|
-
export function storeDirectly(save, type) {
|
|
47
|
-
const getCache = getM(type);
|
|
48
|
-
return (record) => getCache((c) => tsplus_module_4.mapOption(c
|
|
49
|
-
.find(record.id), (x) => x.version)
|
|
50
|
-
.flatMap((cv) => save(record, cv))
|
|
51
|
-
.tap((r) => c.set(record.id, r))
|
|
52
|
-
.map((r) => r.data));
|
|
53
|
-
}
|
|
54
|
-
export function store(tryRead, save, lock, type) {
|
|
55
|
-
const getCache = getM(type);
|
|
56
|
-
return (record) => getCache((c) => tsplus_module_4.mapOption(c
|
|
57
|
-
.find(record.id), (x) => x.version)
|
|
58
|
-
.flatMap((_) => tsplus_module_5.match(_, { onNone: () => save(record, tsplus_module_5.none()), onSome: confirmVersionAndSave(record) }))
|
|
59
|
-
.tap((r) => c.set(record.id, r))
|
|
60
|
-
.map((r) => r.data));
|
|
61
|
-
function confirmVersionAndSave(record) {
|
|
62
|
-
return (cv) => tsplus_module_1.scoped(tsplus_module_1.zipRight(lock(record.id), tsplus_module_1.zipRight(tryRead(record.id)
|
|
63
|
-
.flatMap((_) => tsplus_module_5.match(_, { onNone: () => tsplus_module_1.fail(new InvalidStateError("record is gone")), onSome: tsplus_module_1.succeed }))
|
|
64
|
-
.tap(({ version }) => version !== cv
|
|
65
|
-
? new OptimisticLockException(type, record.id)
|
|
66
|
-
: tsplus_module_1.unit), save(record, tsplus_module_5.some(cv)))));
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvc2ltcGxlZGIvc2ltcGxlZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRzlELE1BQU0sT0FBTyxpQkFBaUI7SUFFUDtJQUEwQjtJQUR0QyxJQUFJLEdBQUcsbUJBQW1CLENBQUE7SUFDbkMsWUFBcUIsT0FBZSxFQUFXLE9BQWlCO1FBQTNDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFBVyxZQUFPLEdBQVAsT0FBTyxDQUFVO0lBQUcsQ0FBQztDQUNyRTtBQUVELE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsTUFBTSxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQXNDLENBQUE7SUFDdkQsT0FBTztRQUNMLEdBQUcsRUFBRSxDQUFJLElBQVksRUFBRSxFQUFFLENBQ3ZCLHFCQUFZLEdBQUcsRUFBRTtZQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDdEIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNSLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBbUIsQ0FBQTtnQkFDckMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7Z0JBQ2YsT0FBTyxFQUF3QyxDQUFBO1lBQ2pELENBQUM7WUFDRCxPQUFPLEVBQXdDLENBQUE7UUFDakQsQ0FBQyxDQUFDO0tBQ0wsQ0FBQTtBQUNILENBQUM7QUFJRCxhQUFhO0FBQ2IsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGdCQUFBLFVBQVUsQ0FBYyx1QkFBdUIsQ0FBQyxDQUFBO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyx1QkFBaUQsV0FBVyxFQUE1RCxxQkFBWSxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFD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
|
package/src/_global.ext.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @tsplus global
|
|
3
|
-
*/
|
|
4
|
-
import type {} from "@effect-app/infra/services/Emailer/fake"
|
|
5
|
-
/**
|
|
6
|
-
* @tsplus global
|
|
7
|
-
*/
|
|
8
|
-
import type {} from "@effect-app/infra/services/Emailer/Sendgrid"
|
|
9
|
-
/**
|
|
10
|
-
* @tsplus global
|
|
11
|
-
*/
|
|
12
|
-
import type {} from "@effect-app/infra/services/Operations/live"
|
|
13
|
-
/**
|
|
14
|
-
* @tsplus global
|
|
15
|
-
*/
|
|
16
|
-
import type {} from "@effect-app/infra/services/QueueMaker/errors"
|
|
17
|
-
|
|
18
|
-
import "@effect-app/infra/test.arbs"
|
|
19
|
-
/**
|
|
20
|
-
* @tsplus global
|
|
21
|
-
*/
|
|
22
|
-
import type {} from "@effect-app/infra/_ext/Array"
|
|
23
|
-
/**
|
|
24
|
-
* @tsplus global
|
|
25
|
-
*/
|
|
26
|
-
import type {} from "@effect-app/infra/rateLimit"
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* @tsplus global
|
|
30
|
-
*/
|
|
31
|
-
import type {} from "@effect-app/infra/api/setupRequest"
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* @tsplus global
|
|
35
|
-
*/
|
|
36
|
-
import {} from "@effect-app/infra/api/reportError"
|
package/src/_global.schema.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/* eslint-disable import/no-duplicates */
|
|
2
|
-
/* eslint-disable unused-imports/no-unused-imports */
|
|
3
|
-
// Required for tsplus with project references in vscode..
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @tsplus global
|
|
7
|
-
*/
|
|
8
|
-
import { Delete, Get, Patch, Post, Put, Req } from "effect-app/schema"
|
|
9
|
-
|
|
10
|
-
import "effect-app/_global.schema"
|
package/src/_global.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/* eslint-disable import/no-duplicates */
|
|
2
|
-
/* eslint-disable unused-imports/no-unused-imports */
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @tsplus global
|
|
6
|
-
*/
|
|
7
|
-
import "effect-app/_global"
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @tsplus global
|
|
11
|
-
*/
|
|
12
|
-
import "@effect-app/infra-adapters/_global"
|
|
13
|
-
|
|
14
|
-
import "./_global.ext.js"
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import type { SupportedErrors, ValidationError } from "effect-app/client/errors"
|
|
2
|
-
import type express from "express"
|
|
3
|
-
import { logError } from "../errorReporter.js"
|
|
4
|
-
|
|
5
|
-
const logRequestError = logError("Request")
|
|
6
|
-
|
|
7
|
-
export function defaultBasicErrorHandler<R>(
|
|
8
|
-
_req: express.Request,
|
|
9
|
-
res: express.Response,
|
|
10
|
-
r2: Effect<void, ValidationError, R>
|
|
11
|
-
) {
|
|
12
|
-
const sendError = (code: number) => (body: unknown) => Effect.sync(() => res.status(code).send(body))
|
|
13
|
-
return r2
|
|
14
|
-
.tapErrorCause((cause) => cause.isFailure() ? logRequestError(cause) : Effect.unit)
|
|
15
|
-
.catchTag("ValidationError", (err) => sendError(400)(err.errors))
|
|
16
|
-
// final catch all; expecting never so that unhandled known errors will show up
|
|
17
|
-
.catchAll((err: never) =>
|
|
18
|
-
Effect
|
|
19
|
-
.logError(
|
|
20
|
-
"Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err
|
|
21
|
-
)
|
|
22
|
-
.map(() => err as unknown)
|
|
23
|
-
.flatMap(Effect.die)
|
|
24
|
-
)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const optimisticConcurrencySchedule = Schedule.once
|
|
28
|
-
&& Schedule.recurWhile<SupportedErrors>((a) => a._tag === "OptimisticConcurrencyException")
|
|
29
|
-
|
|
30
|
-
export function defaultErrorHandler<R>(
|
|
31
|
-
req: express.Request,
|
|
32
|
-
res: express.Response,
|
|
33
|
-
r2: Effect<void, SupportedErrors, R>
|
|
34
|
-
) {
|
|
35
|
-
const r3 = req.method === "PATCH"
|
|
36
|
-
? r2.retry(optimisticConcurrencySchedule)
|
|
37
|
-
: r2
|
|
38
|
-
const sendError = (code: number) => (body: unknown) => Effect.sync(() => res.status(code).send(body))
|
|
39
|
-
return r3
|
|
40
|
-
.tapErrorCause((cause) => cause.isFailure() ? logRequestError(cause) : Effect.unit)
|
|
41
|
-
.catchTags({
|
|
42
|
-
"ValidationError": (err) => sendError(400)(err.errors),
|
|
43
|
-
"NotFoundError": sendError(404),
|
|
44
|
-
"NotLoggedInError": sendError(401),
|
|
45
|
-
"UnauthorizedError": sendError(403),
|
|
46
|
-
"InvalidStateError": sendError(422),
|
|
47
|
-
// 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
|
|
48
|
-
"OptimisticConcurrencyException": sendError(412)
|
|
49
|
-
})
|
|
50
|
-
// final catch all; expecting never so that unhandled known errors will show up
|
|
51
|
-
.catchAll((err: never) =>
|
|
52
|
-
Effect
|
|
53
|
-
.logError(
|
|
54
|
-
"Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err
|
|
55
|
-
)
|
|
56
|
-
.map(() => err as unknown)
|
|
57
|
-
.flatMap(Effect.die)
|
|
58
|
-
)
|
|
59
|
-
}
|