@effect-app/infra 0.13.0 → 0.14.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 +25 -0
- package/_cjs/api/codec.cjs +2 -4
- package/_cjs/api/codec.cjs.map +1 -1
- package/_cjs/api/defaultErrorHandler.cjs +18 -21
- package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/api/express/makeJsonSchema.cjs +4 -4
- package/_cjs/api/express/makeJsonSchema.cjs.map +1 -1
- package/_cjs/api/express/makeOpenApiSpecs.cjs +5 -7
- package/_cjs/api/express/makeOpenApiSpecs.cjs.map +1 -1
- package/_cjs/api/express/schema/requestHandler.cjs +57 -56
- package/_cjs/api/express/schema/requestHandler.cjs.map +1 -1
- package/_cjs/api/express/schema/routing.cjs +22 -22
- package/_cjs/api/express/schema/routing.cjs.map +1 -1
- package/_cjs/api/reportError.cjs +6 -17
- package/_cjs/api/reportError.cjs.map +1 -1
- package/_cjs/api/routing.cjs +70 -70
- package/_cjs/api/routing.cjs.map +1 -1
- package/_cjs/api/setupRequest.cjs +2 -4
- package/_cjs/api/setupRequest.cjs.map +1 -1
- package/_cjs/api/writeDocs.cjs +6 -8
- package/_cjs/api/writeDocs.cjs.map +1 -1
- package/_cjs/errorReporter.cjs +11 -13
- package/_cjs/errorReporter.cjs.map +1 -1
- package/_cjs/errors.cjs +1 -1
- package/_cjs/errors.cjs.map +1 -1
- package/_cjs/instrument.cjs +1 -3
- package/_cjs/instrument.cjs.map +1 -1
- package/_cjs/rateLimit.cjs +6 -8
- package/_cjs/rateLimit.cjs.map +1 -1
- package/_cjs/services/Emailer/Sendgrid.cjs +12 -18
- package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
- package/_cjs/services/Emailer/fake.cjs +4 -7
- package/_cjs/services/Emailer/fake.cjs.map +1 -1
- package/_cjs/services/Operations/live.cjs +23 -26
- package/_cjs/services/Operations/live.cjs.map +1 -1
- package/_cjs/services/Operations/service.cjs +3 -5
- package/_cjs/services/Operations/service.cjs.map +1 -1
- package/_cjs/services/Repository.cjs +28 -30
- package/_cjs/services/Repository.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +58 -58
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Disk.cjs +15 -16
- package/_cjs/services/Store/Disk.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs +14 -16
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_cjs/services/Store/Redis.cjs +22 -23
- package/_cjs/services/Store/Redis.cjs.map +1 -1
- package/_cjs/services/Store/codeFilter.test.cjs +1 -1
- package/_cjs/services/Store/index.cjs +7 -7
- package/_cjs/services/Store/index.cjs.map +1 -1
- package/_cjs/services/Store/service.cjs +2 -4
- package/_cjs/services/Store/service.cjs.map +1 -1
- package/_cjs/services/Store/utils.cjs +16 -17
- package/_cjs/services/Store/utils.cjs.map +1 -1
- package/_cjs/services/simpledb/cosmosdb.cjs +23 -25
- package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -1
- package/_cjs/services/simpledb/diskdb.cjs +20 -21
- package/_cjs/services/simpledb/diskdb.cjs.map +1 -1
- package/_cjs/services/simpledb/memdb.cjs +11 -13
- package/_cjs/services/simpledb/memdb.cjs.map +1 -1
- package/_cjs/services/simpledb/mongodb.cjs +20 -22
- package/_cjs/services/simpledb/mongodb.cjs.map +1 -1
- package/_cjs/services/simpledb/redisdb.cjs +25 -25
- package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
- package/_cjs/services/simpledb/shared.cjs +4 -6
- package/_cjs/services/simpledb/shared.cjs.map +1 -1
- package/_cjs/services/simpledb/simpledb.cjs +16 -17
- package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
- package/_src/errors.ts +1 -1
- package/_src/services/simpledb/memdb.ts +1 -1
- package/dist/RequestContext.d.ts +12 -12
- package/dist/api/codec.js +3 -5
- package/dist/api/defaultErrorHandler.js +20 -21
- package/dist/api/express/makeJsonSchema.js +3 -5
- package/dist/api/express/makeOpenApiSpecs.js +5 -7
- package/dist/api/express/schema/requestHandler.d.ts +5 -5
- package/dist/api/express/schema/requestHandler.js +50 -52
- package/dist/api/express/schema/routing.js +21 -23
- package/dist/api/reportError.js +6 -18
- package/dist/api/routing.js +65 -67
- package/dist/api/setupRequest.js +3 -5
- package/dist/api/writeDocs.js +7 -9
- package/dist/errorReporter.js +10 -12
- package/dist/errors.js +2 -2
- package/dist/instrument.js +2 -4
- package/dist/rateLimit.js +7 -9
- package/dist/services/Emailer/Sendgrid.js +15 -22
- package/dist/services/Emailer/fake.js +5 -8
- package/dist/services/Emailer/service.d.ts +1 -1
- package/dist/services/Operations/live.js +24 -27
- package/dist/services/Operations/service.js +4 -6
- package/dist/services/Repository.d.ts +4 -4
- package/dist/services/Repository.js +22 -24
- package/dist/services/Store/Cosmos.d.ts +1 -1
- package/dist/services/Store/Cosmos.js +61 -63
- package/dist/services/Store/Disk.js +16 -19
- package/dist/services/Store/Memory.d.ts +1 -1
- package/dist/services/Store/Memory.js +16 -18
- package/dist/services/Store/Redis.d.ts +1 -1
- package/dist/services/Store/Redis.js +21 -24
- package/dist/services/Store/index.js +6 -8
- package/dist/services/Store/service.d.ts +1 -1
- package/dist/services/Store/service.js +3 -5
- package/dist/services/Store/utils.d.ts +2 -2
- package/dist/services/Store/utils.js +18 -19
- package/dist/services/simpledb/cosmosdb.d.ts +2 -2
- package/dist/services/simpledb/cosmosdb.js +23 -25
- package/dist/services/simpledb/diskdb.d.ts +2 -2
- package/dist/services/simpledb/diskdb.js +18 -18
- package/dist/services/simpledb/memdb.d.ts +3 -3
- package/dist/services/simpledb/memdb.js +13 -14
- package/dist/services/simpledb/mongodb.d.ts +2 -2
- package/dist/services/simpledb/mongodb.js +18 -20
- package/dist/services/simpledb/redisdb.d.ts +8 -8
- package/dist/services/simpledb/redisdb.js +21 -23
- package/dist/services/simpledb/shared.d.ts +9 -9
- package/dist/services/simpledb/shared.js +5 -7
- package/dist/services/simpledb/simpledb.d.ts +1 -1
- package/dist/services/simpledb/simpledb.js +19 -19
- package/package.json +12 -12
- package/tsconfig.json +5 -1
|
@@ -5,10 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.RedisSerializedDBRecord = void 0;
|
|
7
7
|
exports.createContext = createContext;
|
|
8
|
-
var tracer_1 = _interopRequireWildcard(require("@effect/io/Debug"));
|
|
9
8
|
var tsplus_module_1 = _interopRequireWildcard(require("@effect/io/Effect"));
|
|
10
9
|
var tsplus_module_2 = _interopRequireWildcard(require("@effect-app/core/Effect"));
|
|
11
|
-
var tsplus_module_3 = _interopRequireWildcard(require("@fp-ts/
|
|
10
|
+
var tsplus_module_3 = _interopRequireWildcard(require("@fp-ts/core/Option"));
|
|
12
11
|
var _Function = require("@effect-app/core/Function");
|
|
13
12
|
var MO = _interopRequireWildcard(require("@effect-app/schema"));
|
|
14
13
|
var RED = _interopRequireWildcard(require("@effect-app/infra-adapters/redis-client"));
|
|
@@ -16,44 +15,45 @@ var _shared = require("./shared.cjs");
|
|
|
16
15
|
var simpledb = _interopRequireWildcard(require("./simpledb.cjs"));
|
|
17
16
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
18
17
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
19
|
-
|
|
18
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
19
|
+
|
|
20
20
|
const ttl = 10 * 1000;
|
|
21
21
|
function createContext() {
|
|
22
22
|
return (type, encode, decode, schemaVersion, makeIndexKey) => {
|
|
23
|
-
const getData = (0, _Function.flow)(encode, _ =>
|
|
23
|
+
const getData = (0, _Function.flow)(encode, _ => tsplus_module_1.map(_, JSON.stringify));
|
|
24
24
|
return {
|
|
25
25
|
find: simpledb.find(find, decode, type),
|
|
26
26
|
findByIndex: getIdx,
|
|
27
27
|
save: simpledb.store(find, store, lockRedisRecord, type)
|
|
28
28
|
};
|
|
29
29
|
function find(id) {
|
|
30
|
-
return tsplus_module_1.orDie(
|
|
30
|
+
return tsplus_module_1.orDie(tsplus_module_2.flatMapOpt(RED.hmgetAll(getKey(id)), v => tsplus_module_1.mapError(tsplus_module_1.map((0, _Function.pipe)(RedisSerializedDBRecord.Parser, MO.condemnFail)(v), ({
|
|
31
31
|
data,
|
|
32
32
|
version
|
|
33
33
|
}) => ({
|
|
34
34
|
data: JSON.parse(data),
|
|
35
35
|
version
|
|
36
|
-
}))
|
|
36
|
+
})), e => new _shared.ConnectionException(new Error(e.toString())))));
|
|
37
37
|
}
|
|
38
38
|
function store(record, currentVersion) {
|
|
39
39
|
const version = tsplus_module_3.getOrElse(() => "1")(tsplus_module_3.map(cv => (parseInt(cv) + 1).toString())(currentVersion));
|
|
40
|
-
return tsplus_module_3.match(() => tsplus_module_1.scoped(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
})))(tsplus_module_1.orDie(tracer_1.withCallTrace(fileName_1 + ":62:16")(tsplus_module_1.zipRight(setIndex(record)))(tracer_1.withCallTrace(fileName_1 + ":55:16")(tsplus_module_1.flatMap(data => hmSetRec(getKey(record.id), {
|
|
40
|
+
return tsplus_module_3.match(() => tsplus_module_1.scoped(tsplus_module_1.zipRight(lockIndex(record), tsplus_module_1.map(tsplus_module_1.orDie(tsplus_module_1.zipRight(tsplus_module_1.flatMap(tsplus_module_1.zipRight(tsplus_module_2.zipRightOpt(getIndex(record), tsplus_module_1.fail(() => new Error("Combination already exists, abort"))), getData(record))
|
|
41
|
+
// TODO: instead use MULTI & EXEC to make it in one command?
|
|
42
|
+
, data => hmSetRec(getKey(record.id), {
|
|
44
43
|
version,
|
|
45
44
|
timestamp: new Date(),
|
|
46
45
|
data
|
|
47
|
-
}))
|
|
48
|
-
// TODO: instead use MULTI & EXEC to make it in one command?
|
|
49
|
-
))))))(lockIndex(record))), () => tracer_1.withCallTrace(fileName_1 + ":74:20")(tsplus_module_1.map(() => ({
|
|
46
|
+
})), setIndex(record))), () => ({
|
|
50
47
|
version,
|
|
51
48
|
data: record
|
|
52
|
-
})))(tsplus_module_1.
|
|
49
|
+
})))), () => tsplus_module_1.map(tsplus_module_1.orDie(tsplus_module_1.flatMap(getData(record), data => hmSetRec(getKey(record.id), {
|
|
53
50
|
version,
|
|
54
51
|
timestamp: new Date(),
|
|
55
52
|
data
|
|
56
|
-
})))(
|
|
53
|
+
}))), () => ({
|
|
54
|
+
version,
|
|
55
|
+
data: record
|
|
56
|
+
})))(currentVersion);
|
|
57
57
|
}
|
|
58
58
|
function getIndex(record) {
|
|
59
59
|
const index = makeIndexKey(record);
|
|
@@ -68,7 +68,7 @@ function createContext() {
|
|
|
68
68
|
return lockRedisIdx(index);
|
|
69
69
|
}
|
|
70
70
|
function getIdx(index) {
|
|
71
|
-
return
|
|
71
|
+
return tsplus_module_1.map(RED.hget(getIdxKey(index), index.key), _ => tsplus_module_3.map(i => i)(_));
|
|
72
72
|
}
|
|
73
73
|
function setIdx(index, r) {
|
|
74
74
|
return RED.hset(getIdxKey(index), index.key, r.id);
|
|
@@ -76,20 +76,20 @@ function createContext() {
|
|
|
76
76
|
function lockRedisIdx(index) {
|
|
77
77
|
const lockKey = getIdxLockKey(index);
|
|
78
78
|
// acquire
|
|
79
|
-
return
|
|
79
|
+
return tsplus_module_1.acquireRelease(tsplus_module_1.mapBoth(tsplus_module_1.flatMap(RED.lock, lock => tsplus_module_1.tryPromise(() => lock.lock(lockKey, ttl))), err => new _shared.CouldNotAquireDbLockException(type, lockKey, err),
|
|
80
80
|
// release
|
|
81
81
|
lock => ({
|
|
82
|
-
release: tsplus_module_1.orDie(
|
|
83
|
-
}))
|
|
82
|
+
release: tsplus_module_1.orDie(tsplus_module_1.tryPromise(() => lock.unlock()))
|
|
83
|
+
})), l => l.release);
|
|
84
84
|
}
|
|
85
85
|
function lockRedisRecord(id) {
|
|
86
86
|
// acquire
|
|
87
|
-
return
|
|
87
|
+
return tsplus_module_1.acquireRelease(tsplus_module_1.mapBoth(tsplus_module_1.flatMap(RED.lock, lock => tsplus_module_1.tryPromise(() => lock.lock(getLockKey(id), ttl))), err => new _shared.CouldNotAquireDbLockException(type, id, err),
|
|
88
88
|
// release
|
|
89
89
|
lock => ({
|
|
90
90
|
// TODO
|
|
91
|
-
release: tsplus_module_1.orDie(
|
|
92
|
-
}))
|
|
91
|
+
release: tsplus_module_1.orDie(tsplus_module_1.tryPromise(() => lock.unlock()))
|
|
92
|
+
})), l => l.release);
|
|
93
93
|
}
|
|
94
94
|
function getKey(id) {
|
|
95
95
|
return `v${schemaVersion}.${(0, _shared.getRecordName)(type, id)}`;
|
|
@@ -106,9 +106,9 @@ function createContext() {
|
|
|
106
106
|
};
|
|
107
107
|
function hmSetRec(key, val) {
|
|
108
108
|
const enc = RedisSerializedDBRecord.Encoder(val);
|
|
109
|
-
return
|
|
110
|
-
client.hmset(key, "version", enc.version, "timestamp", enc.timestamp, "data", enc.data, err => err ? res(
|
|
111
|
-
})))
|
|
109
|
+
return tsplus_module_1.flatMap(RED.client, client => tsplus_module_1.uninterruptible(tsplus_module_1.async(res => {
|
|
110
|
+
client.hmset(key, "version", enc.version, "timestamp", enc.timestamp, "data", enc.data, err => err ? res(tsplus_module_1.fail(new _shared.ConnectionException(err))) : res(tsplus_module_1.sync(() => void 0)));
|
|
111
|
+
})));
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
class RedisSerializedDBRecord extends MO.Model()({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redisdb.cjs","mappings":"
|
|
1
|
+
{"version":3,"file":"redisdb.cjs","mappings":"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","names":["ttl","createContext","type","encode","decode","schemaVersion","makeIndexKey","getData","_","tsplus_module_1","JSON","stringify","find","simpledb","findByIndex","getIdx","save","store","lockRedisRecord","id","tsplus_module_2","hmgetAll","getKey","v","RedisSerializedDBRecord","Parser","MO","condemnFail","data","version","parse","e","ConnectionException","Error","toString","record","currentVersion","tsplus_module_3","cv","parseInt","hmSetRec","timestamp","Date","setIndex","getIndex","index","setIdx","lockIndex","lockRedisIdx","hget","getIdxKey","key","i","r","RED","hset","lockKey","getIdxLockKey","lock","err","CouldNotAquireDbLockException","release","unlock","l","getLockKey","doc","val","enc","Encoder","client","res","hmset","Model","prop","string","date"],"sourceRoot":"","sources":["../../../_src/services/simpledb/redisdb.ts"],"sourcesContent":[null]}
|
|
@@ -8,13 +8,11 @@ exports.getIndexName = getIndexName;
|
|
|
8
8
|
exports.getRecordName = getRecordName;
|
|
9
9
|
exports.makeMap = makeMap;
|
|
10
10
|
exports.makeSerialisedDBRecord = makeSerialisedDBRecord;
|
|
11
|
-
var
|
|
12
|
-
var tsplus_module_1 = _interopRequireWildcard(require("@fp-ts/data/Option"));
|
|
11
|
+
var tsplus_module_1 = _interopRequireWildcard(require("@fp-ts/core/Option"));
|
|
13
12
|
var tsplus_module_2 = _interopRequireWildcard(require("@effect/io/Effect"));
|
|
14
13
|
var MO = _interopRequireWildcard(require("@effect-app/schema"));
|
|
15
14
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
16
15
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
17
|
-
const fileName_1 = "packages/infra/_src/services/simpledb/shared.ts";
|
|
18
16
|
class BaseError {
|
|
19
17
|
constructor(message) {
|
|
20
18
|
this.message = message;
|
|
@@ -70,11 +68,11 @@ function getRecordName(type, id) {
|
|
|
70
68
|
function makeMap() {
|
|
71
69
|
const map = new Map();
|
|
72
70
|
return {
|
|
73
|
-
find: k =>
|
|
71
|
+
find: k => tsplus_module_2.sync(() => tsplus_module_1.fromNullable(map.get(k))),
|
|
74
72
|
[Symbol.iterator]: () => map[Symbol.iterator](),
|
|
75
|
-
set: (k, v) =>
|
|
73
|
+
set: (k, v) => tsplus_module_2.sync(() => {
|
|
76
74
|
map.set(k, v);
|
|
77
|
-
})
|
|
75
|
+
})
|
|
78
76
|
};
|
|
79
77
|
}
|
|
80
78
|
//# sourceMappingURL=shared.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.cjs","mappings":"
|
|
1
|
+
{"version":3,"file":"shared.cjs","mappings":";;;;;;;;;;;;AAAA;AAAwC;AAAA;AAGxC,MAAMA,SAAS;EACbC,YAAmBC,OAAe;IAAf,YAAO,GAAPA,OAAO;EAAW;;AAEjC,MAAOC,6BAA8B,SAAQH,SAAS;EAE1DC,YAAqBG,IAAY,EAAWC,EAAU,EAAWC,KAAY;IAC3E,KAAK,CAAC,2BAA2BF,IAAI,KAAKC,EAAE,EAAE,CAAC;IAD5B,SAAI,GAAJD,IAAI;IAAmB,OAAE,GAAFC,EAAE;IAAmB,UAAK,GAALC,KAAK;IAD7D,cAAS,GAAG,+BAA+B;EAGpD;;AACD;AAEK,MAAOC,uBAAwB,SAAQC,KAAK;EAEhDP,YAAqBG,IAAY,EAAWC,EAAU;IACpD,KAAK,CAAC,YAAYD,IAAI,IAAIC,EAAE,iBAAiB,CAAC;IAD3B,SAAI,GAAJD,IAAI;IAAmB,OAAE,GAAFC,EAAE;IADrC,cAAS,GAAG,yBAAyB;EAG9C;;AACD;AAEK,MAAOI,mBAAoB,SAAQD,KAAK;EAE5CP,YAAqBK,KAAY;IAC/B,KAAK,CAAC,4BAA4B,CAAC;IADhB,UAAK,GAALA,KAAK;IADjB,cAAS,GAAG,qBAAqB;EAG1C;;AACD;AAMK,MAAOI,kBAAmB,SAAQC,EAAE,CAACC,KAAK,EAAsB,CAAC;EACrEC,OAAO,EAAEF,EAAE,CAACG,IAAI,CAACH,EAAE,CAACI,MAAM,CAAC;EAC3BC,SAAS,EAAEL,EAAE,CAACG,IAAI,CAACH,EAAE,CAACM,IAAI,CAAC;EAC3BC,IAAI,EAAEP,EAAE,CAACG,IAAI,CAACH,EAAE,CAACI,MAAM;CACxB,CAAC;AAEF;AAAA;AACM,SAAUI,sBAAsB,CAACC,CAAY;EACjD,OAAOT,EAAE,CAACU,KAAK,CAAC;IACdR,OAAO,EAAEF,EAAE,CAACG,IAAI,CAACH,EAAE,CAACW,MAAM,CAAC;IAC3BN,SAAS,EAAEL,EAAE,CAACG,IAAI,CAACH,EAAE,CAACM,IAAI,CAAC;IAC3BC,IAAI,EAAEP,EAAE,CAACG,IAAI,CAACM,CAAC;GAChB,CAAC;AACJ;AAYM,SAAUG,YAAY,CAACnB,IAAY,EAAEC,EAAU;EACnD,OAAO,GAAGD,IAAI,QAAQC,EAAE,EAAE;AAC5B;AAEM,SAAUmB,aAAa,CAACpB,IAAY,EAAEC,EAAU;EACpD,OAAO,GAAGD,IAAI,MAAMC,EAAE,EAAE;AAC1B;AAEM,SAAUoB,OAAO;EACrB,MAAMC,GAAG,GAAG,IAAIC,GAAG,EAAW;EAC9B,OAAO;IACLC,IAAI,EAAGC,CAAO,IAAKC,qBAAO,MAAMC,6BAAiBL,GAAG,CAACM,GAAG,CAACH,CAAC,CAAC,CAAC,CAAC;IAC7D,CAACI,MAAM,CAACC,QAAQ,GAAG,MAAMR,GAAG,CAACO,MAAM,CAACC,QAAQ,CAAC,EAAE;IAC/CC,GAAG,EAAE,CAACN,CAAO,EAAEO,CAAI,KACjBN,qBAAO,MAAK;MACVJ,GAAG,CAACS,GAAG,CAACN,CAAC,EAAEO,CAAC,CAAC;IACf,CAAC;GACkB;AACzB","names":["BaseError","constructor","message","CouldNotAquireDbLockException","type","id","error","OptimisticLockException","Error","ConnectionException","SerializedDBRecord","MO","Model","version","prop","string","timestamp","date","data","makeSerialisedDBRecord","s","props","number","getIndexName","getRecordName","makeMap","map","Map","find","k","tsplus_module_2","tsplus_module_1","get","Symbol","iterator","set","v"],"sourceRoot":"","sources":["../../../_src/services/simpledb/shared.ts"],"sourcesContent":[null]}
|
|
@@ -8,15 +8,14 @@ exports.find = find;
|
|
|
8
8
|
exports.makeLiveRecordCache = makeLiveRecordCache;
|
|
9
9
|
exports.store = store;
|
|
10
10
|
exports.storeDirectly = storeDirectly;
|
|
11
|
-
var tracer_1 = _interopRequireWildcard(require("@effect/io/Debug"));
|
|
12
11
|
var tsplus_module_1 = _interopRequireWildcard(require("@effect/io/Effect"));
|
|
13
12
|
var tsplus_module_2 = _interopRequireWildcard(require("@fp-ts/data/Context"));
|
|
14
13
|
var tsplus_module_3 = _interopRequireWildcard(require("@effect-app/core/Effect"));
|
|
15
|
-
var tsplus_module_4 = _interopRequireWildcard(require("@
|
|
14
|
+
var tsplus_module_4 = _interopRequireWildcard(require("@effect-app/core/Option"));
|
|
15
|
+
var tsplus_module_5 = _interopRequireWildcard(require("@fp-ts/core/Option"));
|
|
16
16
|
var _shared = require("./shared.cjs");
|
|
17
17
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
18
18
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
19
|
-
const fileName_1 = "packages/infra/_src/services/simpledb/simpledb.ts";
|
|
20
19
|
class InvalidStateError {
|
|
21
20
|
constructor(message, details) {
|
|
22
21
|
this.message = message;
|
|
@@ -28,7 +27,7 @@ exports.InvalidStateError = InvalidStateError;
|
|
|
28
27
|
function makeLiveRecordCache() {
|
|
29
28
|
const m = new Map();
|
|
30
29
|
return {
|
|
31
|
-
get: type =>
|
|
30
|
+
get: type => tsplus_module_1.sync(() => {
|
|
32
31
|
const ex = m.get(type);
|
|
33
32
|
if (!ex) {
|
|
34
33
|
const nm = (0, _shared.makeMap)();
|
|
@@ -36,42 +35,42 @@ function makeLiveRecordCache() {
|
|
|
36
35
|
return nm;
|
|
37
36
|
}
|
|
38
37
|
return ex;
|
|
39
|
-
})
|
|
38
|
+
})
|
|
40
39
|
};
|
|
41
40
|
}
|
|
42
41
|
// module tag
|
|
43
42
|
const RecordCache = tsplus_module_2.Tag();
|
|
44
43
|
exports.RecordCache = RecordCache;
|
|
45
|
-
const LiveRecordCache =
|
|
44
|
+
const LiveRecordCache = tsplus_module_1.toLayer(tsplus_module_1.sync(() => makeLiveRecordCache()), RecordCache);
|
|
46
45
|
exports.LiveRecordCache = LiveRecordCache;
|
|
47
|
-
const getM = type => eff =>
|
|
46
|
+
const getM = type => eff => tsplus_module_1.gen(function* ($) {
|
|
48
47
|
const {
|
|
49
48
|
get
|
|
50
49
|
} = yield* $(tsplus_module_1.service(RecordCache));
|
|
51
|
-
return yield* $(
|
|
52
|
-
})
|
|
50
|
+
return yield* $(tsplus_module_1.flatMap(get(type), eff));
|
|
51
|
+
});
|
|
53
52
|
function find(tryRead, decode, type) {
|
|
54
53
|
const getCache = getM(type);
|
|
55
|
-
const read = id =>
|
|
54
|
+
const read = id => tsplus_module_3.mapOpt(tsplus_module_3.tapOpt(tsplus_module_3.flatMapOpt(tryRead(id), ({
|
|
56
55
|
data,
|
|
57
56
|
version
|
|
58
|
-
}) =>
|
|
57
|
+
}) => tsplus_module_1.mapBoth(decode(data), err => new InvalidStateError("DB serialisation Issue", err), data => ({
|
|
59
58
|
data,
|
|
60
59
|
version
|
|
61
|
-
})))
|
|
62
|
-
return id => getCache(c =>
|
|
60
|
+
}))), r => getCache(c => c.set(id, r))), r => r.data);
|
|
61
|
+
return id => getCache(c => tsplus_module_1.orElse(tsplus_module_3.mapOpt(c.find(id), existing => existing.data), () => read(id)));
|
|
63
62
|
}
|
|
64
63
|
function storeDirectly(save, type) {
|
|
65
64
|
const getCache = getM(type);
|
|
66
|
-
return record => getCache(c =>
|
|
65
|
+
return record => getCache(c => tsplus_module_1.map(tsplus_module_1.tap(tsplus_module_1.flatMap(tsplus_module_3.mapOpt(c.find(record.id), x => x.version), cv => save(record, cv)), r => c.set(record.id, r)), r => r.data));
|
|
67
66
|
}
|
|
68
67
|
function store(tryRead, save, lock, type) {
|
|
69
68
|
const getCache = getM(type);
|
|
70
|
-
return record => getCache(c =>
|
|
69
|
+
return record => getCache(c => tsplus_module_1.map(tsplus_module_1.tap(tsplus_module_1.flatMap(tsplus_module_3.mapOpt(c.find(record.id), x => x.version), _ => tsplus_module_5.match(() => save(record, tsplus_module_4.none), confirmVersionAndSave(record))(_)), r => c.set(record.id, r)), r => r.data));
|
|
71
70
|
function confirmVersionAndSave(record) {
|
|
72
|
-
return cv => tsplus_module_1.scoped(
|
|
71
|
+
return cv => tsplus_module_1.scoped(tsplus_module_1.zipRight(lock(record.id), tsplus_module_1.zipRight(tsplus_module_1.tap(tsplus_module_1.flatMap(tryRead(record.id), _ => tsplus_module_5.match(() => tsplus_module_1.fail(new InvalidStateError("record is gone")), tsplus_module_1.succeed)(_)), ({
|
|
73
72
|
version
|
|
74
|
-
}) => version !== cv ?
|
|
73
|
+
}) => version !== cv ? tsplus_module_1.fail(new _shared.OptimisticLockException(type, record.id)) : tsplus_module_3.unit), save(record, tsplus_module_5.some(cv)))));
|
|
75
74
|
}
|
|
76
75
|
}
|
|
77
76
|
//# sourceMappingURL=simpledb.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simpledb.cjs","mappings":";;;;;;;;;;;;;;;AACA;AAA8D;AAAA
|
|
1
|
+
{"version":3,"file":"simpledb.cjs","mappings":"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","names":["InvalidStateError","constructor","message","details","makeLiveRecordCache","m","Map","get","type","tsplus_module_1","ex","nm","set","RecordCache","tsplus_module_2","LiveRecordCache","getM","eff","$","find","tryRead","decode","getCache","read","id","tsplus_module_3","data","version","err","r","c","existing","storeDirectly","save","record","x","cv","store","lock","_","tsplus_module_5","confirmVersionAndSave","OptimisticLockException"],"sourceRoot":"","sources":["../../../_src/services/simpledb/simpledb.ts"],"sourcesContent":[null]}
|
package/_src/errors.ts
CHANGED
|
@@ -37,7 +37,7 @@ export class CauseException<E> extends Error {
|
|
|
37
37
|
readonly pretty: string
|
|
38
38
|
constructor(readonly exitCause: Cause<E>, readonly _tag: string) {
|
|
39
39
|
super(`An unexpected ${_tag} Exception occurred, see \`pretty\` for details.`)
|
|
40
|
-
this.pretty = exitCause.pretty
|
|
40
|
+
this.pretty = exitCause.pretty
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
toJSON() {
|
|
@@ -44,7 +44,7 @@ export function createContext<TKey extends string, EA, A extends DBRecord<TKey>>
|
|
|
44
44
|
const cr = { data: JSON.parse(sdb.data) as EA, version: sdb.version }
|
|
45
45
|
const r = yield* $(
|
|
46
46
|
decode(cr.data).flatMap(d =>
|
|
47
|
-
eq(d as unknown as V)
|
|
47
|
+
eq(keys, d as unknown as V)
|
|
48
48
|
? Effect(d)
|
|
49
49
|
: Effect.fail("not equals")
|
|
50
50
|
).exit
|
package/dist/RequestContext.d.ts
CHANGED
|
@@ -4,13 +4,13 @@ export declare const RequestId: import("@effect-app/prelude/schema").StringIdSch
|
|
|
4
4
|
};
|
|
5
5
|
export type RequestId = ParsedShapeOfCustom<typeof RequestId>;
|
|
6
6
|
declare const RequestContextParent_base: import("@effect-app/schema").MNModel<import("@effect-app/schema").SchemaProperties<{
|
|
7
|
-
_tag: import("@effect-app/schema").Property<import("@effect-app/schema").DefaultSchema<unknown, "RequestContext", "RequestContext", "RequestContext", import("@effect-app/schema").LiteralApi<["RequestContext"]>>, "required", import("@fp-ts/
|
|
7
|
+
_tag: import("@effect-app/schema").Property<import("@effect-app/schema").DefaultSchema<unknown, "RequestContext", "RequestContext", "RequestContext", import("@effect-app/schema").LiteralApi<["RequestContext"]>>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
8
8
|
id: import("@effect-app/schema").Property<import("@effect-app/prelude/schema").StringIdSchema & import("@effect-app/schema").Utils<import("@effect-app/prelude/schema").StringIdSchema> & {
|
|
9
9
|
make(this: void): import("@effect-app/prelude/schema").StringId;
|
|
10
|
-
}, "required", import("@fp-ts/
|
|
11
|
-
name: import("@effect-app/schema").Property<import("@effect-app/schema").SchemaDefaultSchema<unknown, import("@effect-app/schema").ReasonableString, string, string, import("@effect-app/schema").ApiSelfType<import("@effect-app/schema").ReasonableString>> & import("@effect-app/schema").Utils<import("@effect-app/schema").SchemaDefaultSchema<unknown, import("@effect-app/schema").ReasonableString, string, string, import("@effect-app/schema").ApiSelfType<import("@effect-app/schema").ReasonableString>>>, "required", import("@fp-ts/
|
|
12
|
-
locale: import("@effect-app/schema").Property<import("@effect-app/schema").DefaultSchema<unknown, "en" | "de", "en" | "de", "en" | "de", import("@effect-app/schema").LiteralApi<["en", "de"]>>, "required", import("@fp-ts/
|
|
13
|
-
createdAt: import("@effect-app/schema").FromProperty<import("@effect-app/schema").SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/
|
|
10
|
+
}, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
11
|
+
name: import("@effect-app/schema").Property<import("@effect-app/schema").SchemaDefaultSchema<unknown, import("@effect-app/schema").ReasonableString, string, string, import("@effect-app/schema").ApiSelfType<import("@effect-app/schema").ReasonableString>> & import("@effect-app/schema").Utils<import("@effect-app/schema").SchemaDefaultSchema<unknown, import("@effect-app/schema").ReasonableString, string, string, import("@effect-app/schema").ApiSelfType<import("@effect-app/schema").ReasonableString>>>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
12
|
+
locale: import("@effect-app/schema").Property<import("@effect-app/schema").DefaultSchema<unknown, "en" | "de", "en" | "de", "en" | "de", import("@effect-app/schema").LiteralApi<["en", "de"]>>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
13
|
+
createdAt: import("@effect-app/schema").FromProperty<import("@effect-app/schema").SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").Some<["constructor", () => Date]>>;
|
|
14
14
|
}>, RequestContextParent, RequestContextParent.ConstructorInput, RequestContextParent.Encoded, RequestContextParent.Props> & import("@effect-app/schema").PropsExtensions<RequestContextParent.Props>;
|
|
15
15
|
export declare class RequestContextParent extends RequestContextParent_base {
|
|
16
16
|
}
|
|
@@ -18,15 +18,15 @@ export declare class RequestContextParent extends RequestContextParent_base {
|
|
|
18
18
|
export type RequestContextParentConstructor = typeof RequestContextParent;
|
|
19
19
|
export declare function makeRequestId(): import("@effect-app/prelude/schema").StringId;
|
|
20
20
|
declare const RequestContext_base: import("@effect-app/schema").MNModel<import("@effect-app/schema").SchemaProperties<{
|
|
21
|
-
id: import("@effect-app/schema").Property<import("@effect-app/schema").SchemaDefaultSchema<unknown, import("@effect-app/prelude/schema").StringId, string, string, import("@effect-app/schema").ApiSelfType<import("@effect-app/prelude/schema").StringId>>, "required", import("@fp-ts/
|
|
21
|
+
id: import("@effect-app/schema").Property<import("@effect-app/schema").SchemaDefaultSchema<unknown, import("@effect-app/prelude/schema").StringId, string, string, import("@effect-app/schema").ApiSelfType<import("@effect-app/prelude/schema").StringId>>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").Some<["constructor", () => import("@effect-app/prelude/schema").StringId]>>;
|
|
22
22
|
rootId: import("@effect-app/schema").Property<import("@effect-app/prelude/schema").StringIdSchema & import("@effect-app/schema").Utils<import("@effect-app/prelude/schema").StringIdSchema> & {
|
|
23
23
|
make(this: void): import("@effect-app/prelude/schema").StringId;
|
|
24
|
-
}, "required", import("@fp-ts/
|
|
25
|
-
parent: import("@effect-app/schema").Property<typeof RequestContextParent, "optional", import("@fp-ts/
|
|
26
|
-
_tag: import("@effect-app/schema").Property<import("@effect-app/schema").DefaultSchema<unknown, "RequestContext", "RequestContext", "RequestContext", import("@effect-app/schema").LiteralApi<["RequestContext"]>>, "required", import("@fp-ts/
|
|
27
|
-
name: import("@effect-app/schema").Property<import("@effect-app/schema").SchemaDefaultSchema<unknown, import("@effect-app/schema").ReasonableString, string, string, import("@effect-app/schema").ApiSelfType<import("@effect-app/schema").ReasonableString>> & import("@effect-app/schema").Utils<import("@effect-app/schema").SchemaDefaultSchema<unknown, import("@effect-app/schema").ReasonableString, string, string, import("@effect-app/schema").ApiSelfType<import("@effect-app/schema").ReasonableString>>>, "required", import("@fp-ts/
|
|
28
|
-
locale: import("@effect-app/schema").Property<import("@effect-app/schema").DefaultSchema<unknown, "en" | "de", "en" | "de", "en" | "de", import("@effect-app/schema").LiteralApi<["en", "de"]>>, "required", import("@fp-ts/
|
|
29
|
-
createdAt: import("@effect-app/schema").FromProperty<import("@effect-app/schema").SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/
|
|
24
|
+
}, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
25
|
+
parent: import("@effect-app/schema").Property<typeof RequestContextParent, "optional", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
26
|
+
_tag: import("@effect-app/schema").Property<import("@effect-app/schema").DefaultSchema<unknown, "RequestContext", "RequestContext", "RequestContext", import("@effect-app/schema").LiteralApi<["RequestContext"]>>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
27
|
+
name: import("@effect-app/schema").Property<import("@effect-app/schema").SchemaDefaultSchema<unknown, import("@effect-app/schema").ReasonableString, string, string, import("@effect-app/schema").ApiSelfType<import("@effect-app/schema").ReasonableString>> & import("@effect-app/schema").Utils<import("@effect-app/schema").SchemaDefaultSchema<unknown, import("@effect-app/schema").ReasonableString, string, string, import("@effect-app/schema").ApiSelfType<import("@effect-app/schema").ReasonableString>>>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
28
|
+
locale: import("@effect-app/schema").Property<import("@effect-app/schema").DefaultSchema<unknown, "en" | "de", "en" | "de", "en" | "de", import("@effect-app/schema").LiteralApi<["en", "de"]>>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
29
|
+
createdAt: import("@effect-app/schema").FromProperty<import("@effect-app/schema").SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").Some<["constructor", () => Date]>>;
|
|
30
30
|
}>, RequestContext, RequestContext.ConstructorInput, RequestContext.Encoded, RequestContext.Props> & import("@effect-app/schema").PropsExtensions<RequestContext.Props>;
|
|
31
31
|
/**
|
|
32
32
|
* @tsplus type RequestContext
|
package/dist/api/codec.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
-
const fileName_1 = "packages/infra/_src/api/codec.ts";
|
|
3
1
|
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
4
2
|
import * as tsplus_module_2 from "@effect-app/core/fluent/_ext/awesome/_files/Iterable";
|
|
5
3
|
import * as MO from "@effect-app/schema";
|
|
@@ -9,11 +7,11 @@ export function makeCodec(self) {
|
|
|
9
7
|
// TODO: strict
|
|
10
8
|
const decode = (e, env) => parse(e, env);
|
|
11
9
|
const enc = Encoder.for(self);
|
|
12
|
-
const encode = (u) =>
|
|
10
|
+
const encode = (u) => tsplus_module_1.sync(() => enc(u));
|
|
13
11
|
const encodeToMap = toMap(encode);
|
|
14
12
|
return [decode, encode, encodeToMap];
|
|
15
13
|
}
|
|
16
14
|
function toMap(encode) {
|
|
17
|
-
return (a) =>
|
|
15
|
+
return (a) => tsplus_module_1.map(tsplus_module_2.ext_collectAll(a.map(task => tsplus_module_1.tuple(tsplus_module_1.sync(() => task.id), encode(task)))), _ => new Map(_));
|
|
18
16
|
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9fc3JjL2FwaS9jb2RlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUdwRCxNQUFNLFVBQVUsU0FBUyxDQU12QixJQUFxRTtJQUNyRSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUM3QyxlQUFlO0lBQ2YsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFVLEVBQUUsR0FBZSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQzdELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFN0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFjLEVBQUUsRUFBRSxDQUFDLHFCQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3ZELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNqQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQVUsQ0FBQTtBQUMvQyxDQUFDO0FBRUQsU0FBUyxLQUFLLENBQThCLE1BQXlDO0lBQ25GLE9BQU8sQ0FBQyxDQUFtQixFQUFFLEVBQUUsQ0FDN0Isb0JBQUEsK0JBQUEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLHNCQUFhLDJCQUFPLElBQUksQ0FBQyxFQUFhLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUN0RCxFQUNSLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUMzQixDQUFDIn0=
|
|
@@ -1,37 +1,36 @@
|
|
|
1
|
-
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
-
const fileName_1 = "packages/infra/_src/api/defaultErrorHandler.ts";
|
|
3
1
|
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
4
2
|
import * as tsplus_module_2 from "@effect/io/Cause";
|
|
5
3
|
import * as tsplus_module_3 from "@effect-app/core/Effect";
|
|
6
4
|
import * as tsplus_module_4 from "@effect/io/Schedule";
|
|
7
5
|
import { logRequestError } from "./reportError.js";
|
|
8
6
|
export function defaultBasicErrorHandler(_req, res, _requestContext, r2) {
|
|
9
|
-
return
|
|
7
|
+
return tsplus_module_1.catchAll(tsplus_module_1.catchTag(tsplus_module_1.tapErrorCause(r2, cause => tsplus_module_2.isFailure(cause) ? logRequestError(cause) : tsplus_module_3.unit), "ValidationError", err => tsplus_module_1.sync(() => {
|
|
10
8
|
res.status(400).send(err.errors);
|
|
11
|
-
}))
|
|
9
|
+
}))
|
|
12
10
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
13
|
-
);
|
|
11
|
+
, (err) => tsplus_module_1.flatMap(tsplus_module_1.map(tsplus_module_1.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_1.die));
|
|
14
12
|
}
|
|
15
|
-
const optimisticConcurrencySchedule = tsplus_module_4.
|
|
13
|
+
const optimisticConcurrencySchedule = tsplus_module_4.once() &&
|
|
14
|
+
tsplus_module_4.recurWhile(a => a._tag === "OptimisticConcurrencyException");
|
|
16
15
|
export function defaultErrorHandler(req, res, _, r2) {
|
|
17
16
|
const r3 = req.method === "PATCH"
|
|
18
|
-
?
|
|
17
|
+
? tsplus_module_1.retry(r2, optimisticConcurrencySchedule)
|
|
19
18
|
: r2;
|
|
20
|
-
return
|
|
19
|
+
return tsplus_module_1.catchAll(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.tapErrorCause(r3, cause => tsplus_module_2.isFailure(cause) ? logRequestError(cause) : tsplus_module_3.unit), "ValidationError", err => tsplus_module_1.sync(() => {
|
|
20
|
+
res.status(400).send(err.errors);
|
|
21
|
+
})), "NotFoundError", err => tsplus_module_1.sync(() => {
|
|
22
|
+
res.status(404).send(err);
|
|
23
|
+
})), "NotLoggedInError", err => tsplus_module_1.sync(() => {
|
|
24
|
+
res.status(401).send(err);
|
|
25
|
+
})), "UnauthorizedError", err => tsplus_module_1.sync(() => {
|
|
26
|
+
res.status(403).send(err);
|
|
27
|
+
})), "InvalidStateError", err => tsplus_module_1.sync(() => {
|
|
28
|
+
res.status(422).send(err);
|
|
29
|
+
})), "OptimisticConcurrencyException", err => tsplus_module_1.sync(() => {
|
|
21
30
|
// 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
|
|
22
31
|
res.status(412).send(err);
|
|
23
|
-
}))
|
|
24
|
-
res.status(422).send(err);
|
|
25
|
-
}))))(tracer_1.withCallTrace(fileName_1 + ":61:6")(tsplus_module_1.catchTag("UnauthorizedError", err => tracer_1.withCallTrace(fileName_1 + ":62:7")(tsplus_module_1.sync(() => {
|
|
26
|
-
res.status(403).send(err);
|
|
27
|
-
}))))(tracer_1.withCallTrace(fileName_1 + ":57:6")(tsplus_module_1.catchTag("NotLoggedInError", err => tracer_1.withCallTrace(fileName_1 + ":58:7")(tsplus_module_1.sync(() => {
|
|
28
|
-
res.status(401).send(err);
|
|
29
|
-
}))))(tracer_1.withCallTrace(fileName_1 + ":53:6")(tsplus_module_1.catchTag("NotFoundError", err => tracer_1.withCallTrace(fileName_1 + ":54:7")(tsplus_module_1.sync(() => {
|
|
30
|
-
res.status(404).send(err);
|
|
31
|
-
}))))(tracer_1.withCallTrace(fileName_1 + ":49:6")(tsplus_module_1.catchTag("ValidationError", err => tracer_1.withCallTrace(fileName_1 + ":50:7")(tsplus_module_1.sync(() => {
|
|
32
|
-
res.status(400).send(err.errors);
|
|
33
|
-
}))))(tracer_1.withCallTrace(fileName_1 + ":48:6")(tsplus_module_1.tapErrorCause(cause => tsplus_module_2.isFailure(cause) ? logRequestError(cause) : tsplus_module_3.unit))(r3)))))))
|
|
32
|
+
}))
|
|
34
33
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
35
|
-
);
|
|
34
|
+
, (err) => tsplus_module_1.flatMap(tsplus_module_1.map(tsplus_module_1.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_1.die));
|
|
36
35
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL2RlZmF1bHRFcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQVVBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLElBQXFCLEVBQ3JCLEdBQXFCLEVBQ3JCLGVBQStCLEVBQy9CLEVBQW9DO0lBRXBDLE9BQU8seUJBQUEseUJBQUEsOEJBQUEsRUFBRSxFQUNRLEtBQUssQ0FBQyxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLENBQUMsRUFDdkUsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FDakMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsK0VBQStFO01BQ3JFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FDdkIsd0JBQUEsb0JBQUEseUJBQ0UsZ0dBQWdHLEdBQUcsR0FBRyxDQUN2RyxFQUNNLEdBQUcsRUFBRSxDQUFDLEdBQWMsQ0FBQyxzQkFDTixDQUN2QixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sNkJBQTZCLEdBQUcsc0JBQWU7SUFDbkQsMkJBQXFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxnQ0FBZ0MsQ0FBQyxDQUFBO0FBRXhGLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBb0IsRUFDcEIsR0FBcUIsRUFDckIsQ0FBaUIsRUFDakIsRUFBb0M7SUFFcEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sS0FBSyxPQUFPO1FBQy9CLENBQUMsQ0FBQyxzQkFBQSxFQUFFLEVBQU8sNkJBQTZCLENBQUM7UUFDekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLE9BQU8seUJBQUEseUJBQUEseUJBQUEseUJBQUEseUJBQUEseUJBQUEseUJBQUEsOEJBQUEsRUFBRSxFQUNRLEtBQUssQ0FBQyxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLENBQUMsRUFDdkUsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FDakMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxDQUFDLEVBQ0ssZUFBZSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQy9CLHFCQUFPLEdBQUcsRUFBRTtRQUNWLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFDLEVBQ0ssa0JBQWtCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FDbEMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUMsRUFDSyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUNuQyxxQkFBTyxHQUFHLEVBQUU7UUFDVixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQyxFQUNLLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ25DLHFCQUFPLEdBQUcsRUFBRTtRQUNWLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFDLEVBQ0ssZ0NBQWdDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FDaEQscUJBQU8sR0FBRyxFQUFFO1FBQ1YsNElBQTRJO1FBQzVJLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsK0VBQStFO01BQ3JFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FDdkIsd0JBQUEsb0JBQUEseUJBQ0UsZ0dBQWdHLEdBQUcsR0FBRyxDQUN2RyxFQUNNLEdBQUcsRUFBRSxDQUFDLEdBQWMsQ0FBQyxzQkFDTixDQUN2QixDQUFBO0FBQ0wsQ0FBQyJ9
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
-
const fileName_1 = "packages/infra/_src/api/express/makeJsonSchema.ts";
|
|
3
1
|
import * as tsplus_module_1 from "@fp-ts/data/Chunk";
|
|
4
2
|
import * as tsplus_module_2 from "@effect-app/core/fluent/_ext/awesome/_files/Iterable";
|
|
5
3
|
import * as tsplus_module_3 from "@effect/io/Effect";
|
|
@@ -10,7 +8,7 @@ const rx = /:(\w+)/g;
|
|
|
10
8
|
* Work in progress JSONSchema generator.
|
|
11
9
|
*/
|
|
12
10
|
export function makeJsonSchema(r) {
|
|
13
|
-
return
|
|
11
|
+
return tsplus_module_3.map(tsplus_module_2.ext_forEach(tsplus_module_1.fromIterable(r), RS.makeFromSchema), e => {
|
|
14
12
|
const map = ({ method, path, responses, ...rest }) => ({
|
|
15
13
|
[method]: {
|
|
16
14
|
...rest,
|
|
@@ -28,7 +26,7 @@ export function makeJsonSchema(r) {
|
|
|
28
26
|
};
|
|
29
27
|
return prev;
|
|
30
28
|
})(e);
|
|
31
|
-
})
|
|
29
|
+
});
|
|
32
30
|
}
|
|
33
31
|
class Response {
|
|
34
32
|
constructor(statusCode, type // string | JSONSchema | SubSchema
|
|
@@ -37,4 +35,4 @@ class Response {
|
|
|
37
35
|
this.type = type;
|
|
38
36
|
}
|
|
39
37
|
}
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZUpzb25TY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL2FwaS9leHByZXNzL21ha2VKc29uU2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUF1RDtBQUV2RCxPQUFPLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBSXpDLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQTtBQUlwQjs7R0FFRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBa0M7SUFDL0QsT0FBTyxvQkFBQSw0QkFBQSw2QkFBbUIsQ0FBQyxDQUFDLEVBQ1gsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUM1QixDQUFDLENBQUMsRUFBRTtRQUNQLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksRUFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNSLEdBQUcsSUFBSTtnQkFDUCxTQUFTLEVBQUcsU0FBd0IsQ0FBQyxNQUFNLENBQ3pDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQTtvQkFDL0IsT0FBTyxJQUFJLENBQUE7Z0JBQ2IsQ0FBQyxFQUNELEVBQXNELENBQ3ZEO2FBQ0Y7U0FDRixDQUFDLENBQUE7UUFDRixPQUFPLHVCQUNMLEVBQTZELEVBQzdELENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ1YsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUc7Z0JBQ1gsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNiLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBUTthQUNqQixDQUFBO1lBQ0QsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDLEVBVEksQ0FBQyxDQVVQLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxNQUFNLFFBQVE7SUFDWixZQUNrQixVQUFrQixFQUNsQixJQUFTLENBQUMsa0NBQWtDOztRQUQ1QyxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2xCLFNBQUksR0FBSixJQUFJLENBQUs7SUFDeEIsQ0FBQztDQUNMIn0=
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
-
const fileName_1 = "packages/infra/_src/api/express/makeOpenApiSpecs.ts";
|
|
3
1
|
import * as tsplus_module_1 from "@effect/io/Ref";
|
|
4
2
|
import * as tsplus_module_2 from "@effect/io/Effect";
|
|
5
3
|
import { References } from "@effect-app/infra-adapters/Openapi/atlas-plutus/Schema/index";
|
|
6
4
|
import { makeJsonSchema } from "./makeJsonSchema.js";
|
|
7
5
|
export function makeOpenApiSpecs(rdescs, info) {
|
|
8
|
-
return
|
|
9
|
-
const ref = yield* $(
|
|
10
|
-
const paths = yield* $(
|
|
6
|
+
return tsplus_module_2.gen(function* ($) {
|
|
7
|
+
const ref = yield* $(tsplus_module_1.make(new Map()));
|
|
8
|
+
const paths = yield* $(tsplus_module_2.provideService(makeJsonSchema(rdescs), References, { ref }));
|
|
11
9
|
const refs = yield* $(tsplus_module_1.get(ref));
|
|
12
10
|
const parameterRefs = {}; // todos
|
|
13
11
|
const schemas = {};
|
|
@@ -49,6 +47,6 @@ export function makeOpenApiSpecs(rdescs, info) {
|
|
|
49
47
|
components
|
|
50
48
|
// test,
|
|
51
49
|
};
|
|
52
|
-
})
|
|
50
|
+
});
|
|
53
51
|
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZU9wZW5BcGlTcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvYXBpL2V4cHJlc3MvbWFrZU9wZW5BcGlTcGVjcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4REFBOEQsQ0FBQTtBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFHcEQsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixNQUFvQyxFQUNwQyxJQUFpQjtJQUVqQixPQUFPLG9CQUFXLFFBQVEsQ0FBQyxFQUFDLENBQUM7UUFDM0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUE4QyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUM5RSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsK0JBQUEsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFnQixVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDbEYsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxxQkFBQyxHQUFHLEVBQUssQ0FBQTtRQUM5QixNQUFNLGFBQWEsR0FBd0IsRUFBRSxDQUFBLENBQUMsUUFBUTtRQUN0RCxNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sZUFBZSxHQUFHO1lBQ3RCLFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsWUFBWSxFQUFFLEtBQUs7YUFDcEI7U0FDRixDQUFBLENBQUMsbURBQW1EO1FBQ3JELE1BQU0sVUFBVSxHQUFHLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLENBQUE7UUFFMUUsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbEMsZ0RBQWdEO1lBQ2hELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDN0I7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLE9BQU87WUFDaEIsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixjQUFjLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ3hCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDbkIsQ0FBQyxDQUFDO3dCQUNBLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7d0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUs7d0JBQ3pCLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7cUJBQ3RCO29CQUNELENBQUMsQ0FBQyxTQUFTO2dCQUNiLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDbkIsQ0FBQyxDQUFDO3dCQUNBLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7d0JBQ3ZCLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7cUJBQ3RCO29CQUNELENBQUMsQ0FBQyxTQUFTO2dCQUNiLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTzthQUN0QjtZQUNELElBQUksRUFBRSxFQUFFO1lBQ1IsS0FBSztZQUNMLFVBQVU7WUFDVixRQUFRO1NBQ1QsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyJ9
|