@effect-app/infra 0.24.2 → 0.25.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 +20 -0
- package/_cjs/_ext/Array.cjs +2 -3
- package/_cjs/_ext/Array.cjs.map +1 -1
- package/_cjs/api/codec.cjs +1 -1
- package/_cjs/api/codec.cjs.map +1 -1
- package/_cjs/api/defaultErrorHandler.cjs +17 -18
- 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 +2 -2
- package/_cjs/api/express/makeOpenApiSpecs.cjs.map +1 -1
- package/_cjs/api/express/schema/requestHandler.cjs +45 -45
- package/_cjs/api/express/schema/requestHandler.cjs.map +1 -1
- package/_cjs/api/express/schema/routing.cjs +19 -19
- package/_cjs/api/express/schema/routing.cjs.map +1 -1
- package/_cjs/api/reportError.cjs +2 -2
- package/_cjs/api/reportError.cjs.map +1 -1
- package/_cjs/api/routing.cjs +54 -54
- package/_cjs/api/routing.cjs.map +1 -1
- package/_cjs/api/setupRequest.cjs +2 -2
- package/_cjs/api/setupRequest.cjs.map +1 -1
- package/_cjs/api/writeDocs.cjs +6 -6
- package/_cjs/api/writeDocs.cjs.map +1 -1
- package/_cjs/errorReporter.cjs +4 -4
- package/_cjs/errorReporter.cjs.map +1 -1
- package/_cjs/instrument.cjs +1 -1
- package/_cjs/instrument.cjs.map +1 -1
- package/_cjs/rateLimit.cjs +8 -8
- package/_cjs/rateLimit.cjs.map +1 -1
- package/_cjs/services/Emailer/Sendgrid.cjs +7 -8
- package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
- package/_cjs/services/Emailer/fake.cjs +4 -5
- package/_cjs/services/Emailer/fake.cjs.map +1 -1
- package/_cjs/services/Operations/live.cjs +10 -10
- package/_cjs/services/Operations/live.cjs.map +1 -1
- package/_cjs/services/Operations/service.cjs +3 -3
- package/_cjs/services/Operations/service.cjs.map +1 -1
- package/_cjs/services/QueueMaker/errors.cjs +3 -3
- package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
- package/_cjs/services/QueueMaker/memQueue.cjs +10 -11
- package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs +5 -5
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
- package/_cjs/services/Repository.cjs +21 -21
- package/_cjs/services/Repository.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +45 -45
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Disk.cjs +23 -24
- package/_cjs/services/Store/Disk.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs +28 -28
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_cjs/services/Store/Redis.cjs +16 -17
- package/_cjs/services/Store/Redis.cjs.map +1 -1
- package/_cjs/services/Store/codeFilter.test.cjs +5 -5
- package/_cjs/services/Store/codeFilter.test.cjs.map +1 -1
- package/_cjs/services/Store/index.cjs +4 -4
- package/_cjs/services/Store/index.cjs.map +1 -1
- package/_cjs/services/Store/utils.cjs +4 -4
- package/_cjs/services/Store/utils.cjs.map +1 -1
- package/_cjs/services/simpledb/cosmosdb.cjs +19 -19
- package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -1
- package/_cjs/services/simpledb/diskdb.cjs +18 -18
- package/_cjs/services/simpledb/diskdb.cjs.map +1 -1
- package/_cjs/services/simpledb/memdb.cjs +9 -9
- package/_cjs/services/simpledb/memdb.cjs.map +1 -1
- package/_cjs/services/simpledb/mongodb.cjs +16 -16
- package/_cjs/services/simpledb/mongodb.cjs.map +1 -1
- package/_cjs/services/simpledb/redisdb.cjs +20 -20
- package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
- package/_cjs/services/simpledb/simpledb.cjs +9 -9
- package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
- package/_src/RequestContext.ts +2 -2
- package/_src/rateLimit.ts +4 -4
- package/_src/services/Store/Cosmos.ts +3 -3
- package/_src/services/Store/Disk.ts +5 -5
- package/_src/services/Store/Memory.ts +5 -5
- package/_src/services/Store/Redis.ts +2 -2
- package/_src/services/Store/service.ts +1 -1
- package/dist/RequestContext.d.ts +2 -2
- package/dist/_ext/Array.js +3 -4
- package/dist/api/codec.js +2 -2
- package/dist/api/defaultErrorHandler.js +18 -18
- package/dist/api/express/makeJsonSchema.js +5 -5
- package/dist/api/express/makeOpenApiSpecs.js +2 -2
- package/dist/api/express/schema/requestHandler.js +41 -41
- package/dist/api/express/schema/routing.js +20 -20
- package/dist/api/reportError.js +4 -4
- package/dist/api/routing.js +63 -63
- package/dist/api/setupRequest.js +3 -3
- package/dist/api/writeDocs.js +7 -7
- package/dist/errorReporter.js +3 -3
- package/dist/instrument.js +2 -2
- package/dist/rateLimit.d.ts +3 -3
- package/dist/rateLimit.js +9 -9
- package/dist/services/Emailer/Sendgrid.js +8 -9
- package/dist/services/Emailer/fake.js +5 -6
- package/dist/services/Operations/live.js +12 -12
- package/dist/services/Operations/service.js +4 -4
- package/dist/services/QueueMaker/errors.js +4 -4
- package/dist/services/QueueMaker/memQueue.js +10 -10
- package/dist/services/QueueMaker/sbqueue.js +5 -5
- package/dist/services/Repository.d.ts +14 -14
- package/dist/services/Repository.js +15 -15
- package/dist/services/Store/Cosmos.d.ts +1 -1
- package/dist/services/Store/Cosmos.js +47 -47
- package/dist/services/Store/Disk.d.ts +1 -1
- package/dist/services/Store/Disk.js +26 -27
- package/dist/services/Store/Memory.d.ts +2 -2
- package/dist/services/Store/Memory.d.ts.map +1 -1
- package/dist/services/Store/Memory.js +30 -30
- package/dist/services/Store/Redis.d.ts +1 -1
- package/dist/services/Store/Redis.js +17 -18
- package/dist/services/Store/index.js +5 -5
- package/dist/services/Store/service.d.ts +1 -1
- package/dist/services/Store/service.d.ts.map +1 -1
- package/dist/services/Store/utils.js +5 -5
- package/dist/services/simpledb/cosmosdb.js +19 -19
- package/dist/services/simpledb/diskdb.js +15 -15
- package/dist/services/simpledb/memdb.js +10 -10
- package/dist/services/simpledb/mongodb.js +15 -15
- package/dist/services/simpledb/redisdb.js +17 -17
- package/dist/services/simpledb/simpledb.js +12 -12
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simpledb.cjs","mappings":";;;;;;;;;;;;;;;AACA;AAA8D;AAAA;AAGxD,MAAOA,iBAAiB;EAE5BC,YAAqBC,OAAe,EAAWC,OAAiB;IAA3C,YAAO,GAAPD,OAAO;IAAmB,YAAO,GAAPC,OAAO;IAD7C,SAAI,GAAG,mBAAmB;EACgC;;AACpE;AAEK,SAAUC,mBAAmB;EACjC,MAAMC,CAAC,GAAG,IAAIC,GAAG,EAAsC;EACvD,OAAO;IACLC,GAAG,EAAMC,IAAY,IACnBC,qBAAY,MAAK;MACf,MAAMC,EAAE,GAAGL,CAAC,CAACE,GAAG,CAACC,IAAI,CAAC;MACtB,IAAI,CAACE,EAAE,EAAE;QACP,MAAMC,EAAE,GAAG,mBAAO,GAAmB;QACrCN,CAAC,CAACO,GAAG,CAACJ,IAAI,EAAEG,EAAE,CAAC;QACf,OAAOA,EAAwC;;MAEjD,OAAOD,EAAwC;IACjD,CAAC;GACJ;AACH;AAIA;AACO,MAAMG,WAAW,GAAGC,mBAAG,EAAe;AAAA;AAEtC,MAAMC,eAAe,
|
|
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/RequestContext.ts
CHANGED
|
@@ -88,7 +88,7 @@ export namespace RequestContextParent {
|
|
|
88
88
|
}
|
|
89
89
|
export const Encoded: EncodedOps = { $: {} }
|
|
90
90
|
/**
|
|
91
|
-
* @tsplus type RequestContextParent.Encoded.
|
|
91
|
+
* @tsplus type RequestContextParent.Encoded.Ops
|
|
92
92
|
*/
|
|
93
93
|
export interface EncodedAspects {}
|
|
94
94
|
/**
|
|
@@ -123,7 +123,7 @@ export namespace RequestContext {
|
|
|
123
123
|
}
|
|
124
124
|
export const Encoded: EncodedOps = { $: {} }
|
|
125
125
|
/**
|
|
126
|
-
* @tsplus type RequestContext.Encoded.
|
|
126
|
+
* @tsplus type RequestContext.Encoded.Ops
|
|
127
127
|
*/
|
|
128
128
|
export interface EncodedAspects {}
|
|
129
129
|
/**
|
package/_src/rateLimit.ts
CHANGED
|
@@ -49,7 +49,7 @@ export function SEM_withPermitsDuration(permits: number, duration: Duration) {
|
|
|
49
49
|
|
|
50
50
|
/**
|
|
51
51
|
* @tsplus pipeable Iterable batchPar
|
|
52
|
-
* @tsplus static Collection.
|
|
52
|
+
* @tsplus static Collection.Ops batchPar
|
|
53
53
|
*/
|
|
54
54
|
export function batchPar<R, E, A, R2, E2, A2, T>(
|
|
55
55
|
n: number,
|
|
@@ -66,7 +66,7 @@ export function batchPar<R, E, A, R2, E2, A2, T>(
|
|
|
66
66
|
|
|
67
67
|
/**
|
|
68
68
|
* @tsplus pipeable Iterable batch
|
|
69
|
-
* @tsplus static Collection.
|
|
69
|
+
* @tsplus static Collection.Ops batch
|
|
70
70
|
*/
|
|
71
71
|
export function batch<R, E, A, R2, E2, A2, T>(
|
|
72
72
|
n: number,
|
|
@@ -83,7 +83,7 @@ export function batch<R, E, A, R2, E2, A2, T>(
|
|
|
83
83
|
|
|
84
84
|
// /**
|
|
85
85
|
// * @tsplus pipeable Iterable rateLimit
|
|
86
|
-
// * @tsplus static Collection.
|
|
86
|
+
// * @tsplus static Collection.Ops rateLimit
|
|
87
87
|
// */
|
|
88
88
|
// export function rateLimit(
|
|
89
89
|
// n: number,
|
|
@@ -103,7 +103,7 @@ export function batch<R, E, A, R2, E2, A2, T>(
|
|
|
103
103
|
|
|
104
104
|
/**
|
|
105
105
|
* @tsplus pipeable Iterable naiveRateLimit
|
|
106
|
-
* @tsplus static Collection.
|
|
106
|
+
* @tsplus static Collection.Ops naiveRateLimit
|
|
107
107
|
*/
|
|
108
108
|
|
|
109
109
|
export function naiveRateLimit(
|
|
@@ -27,7 +27,7 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
27
27
|
return {
|
|
28
28
|
make: <Id extends string, PM extends PersistenceModelType<Id>, Id2 extends Id>(
|
|
29
29
|
name: string,
|
|
30
|
-
|
|
30
|
+
seed?: Effect<never, never, ReadonlyMap<Id2, PM>>,
|
|
31
31
|
config?: StoreConfig<PM>
|
|
32
32
|
) =>
|
|
33
33
|
Effect.gen(function*($) {
|
|
@@ -334,8 +334,8 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
334
334
|
|
|
335
335
|
if (!marker.isSome()) {
|
|
336
336
|
console.log("Creating mock data for " + name)
|
|
337
|
-
if (
|
|
338
|
-
const m = yield* $(
|
|
337
|
+
if (seed) {
|
|
338
|
+
const m = yield* $(seed)
|
|
339
339
|
yield* $(
|
|
340
340
|
Effect([...m.values()].toNonEmpty)
|
|
341
341
|
.flatMapOpt(a =>
|
|
@@ -12,7 +12,7 @@ function makeDiskStoreInt<Id extends string, Id2 extends Id, PM extends Persiste
|
|
|
12
12
|
namespace: string,
|
|
13
13
|
dir: string,
|
|
14
14
|
name: string,
|
|
15
|
-
|
|
15
|
+
seed?: Effect<never, never, ReadonlyMap<Id2, PM>>
|
|
16
16
|
) {
|
|
17
17
|
return Effect.gen(function*($) {
|
|
18
18
|
const file = dir + "/" + prefix + name + (namespace === "primary" ? "" : "-" + namespace) + ".json"
|
|
@@ -28,7 +28,7 @@ function makeDiskStoreInt<Id extends string, Id2 extends Id, PM extends Persiste
|
|
|
28
28
|
makeMemoryStoreInt<Id, Id, PM>(
|
|
29
29
|
name,
|
|
30
30
|
!fs.existsSync(file)
|
|
31
|
-
?
|
|
31
|
+
? seed ?? Effect(new Map())
|
|
32
32
|
: fsStore.get.map(x => new Map(x.map(x => [x.id, x] as const)))
|
|
33
33
|
)
|
|
34
34
|
)
|
|
@@ -73,12 +73,12 @@ export function makeDiskStore({ prefix }: StorageConfig) {
|
|
|
73
73
|
return {
|
|
74
74
|
make: <Id extends string, Id2 extends Id, PM extends PersistenceModelType<Id>>(
|
|
75
75
|
name: string,
|
|
76
|
-
|
|
76
|
+
seed?: Effect<never, never, ReadonlyMap<Id2, PM>>,
|
|
77
77
|
config?: StoreConfig<PM>
|
|
78
78
|
) =>
|
|
79
79
|
Effect.gen(function*($) {
|
|
80
80
|
const storesSem = Semaphore.unsafeMake(1)
|
|
81
|
-
const primary = yield* $(makeDiskStoreInt(prefix, "primary", dir, name,
|
|
81
|
+
const primary = yield* $(makeDiskStoreInt(prefix, "primary", dir, name, seed))
|
|
82
82
|
const stores = new Map<string, Store<PM, Id>>([["primary", primary]])
|
|
83
83
|
const getStore = !config?.allowNamespace ? Effect.succeed(primary) : storeId.get.flatMap(namespace => {
|
|
84
84
|
const store = stores.get(namespace)
|
|
@@ -92,7 +92,7 @@ export function makeDiskStore({ prefix }: StorageConfig) {
|
|
|
92
92
|
Effect.suspendSucceed(() => {
|
|
93
93
|
const existing = stores.get(namespace)
|
|
94
94
|
if (existing) return Effect(existing)
|
|
95
|
-
return makeDiskStoreInt<Id, Id2, PM>(prefix, namespace, dir, name,
|
|
95
|
+
return makeDiskStoreInt<Id, Id2, PM>(prefix, namespace, dir, name, seed).tap(store =>
|
|
96
96
|
Effect.sync(() => stores.set(namespace, store))
|
|
97
97
|
)
|
|
98
98
|
})
|
|
@@ -30,11 +30,11 @@ export const restoreFromRequestContext = RequestContext.Tag.accessWithEffect(ctx
|
|
|
30
30
|
|
|
31
31
|
export function makeMemoryStoreInt<Id extends string, Id2 extends Id, PM extends PersistenceModelType<Id>>(
|
|
32
32
|
name: string,
|
|
33
|
-
|
|
33
|
+
seed?: Effect<never, never, ReadonlyMap<Id2, PM>>
|
|
34
34
|
) {
|
|
35
35
|
return Effect.gen(function*($) {
|
|
36
36
|
const updateETag = makeUpdateETag(name)
|
|
37
|
-
const items: ReadonlyMap<Id, PM> = yield* $(
|
|
37
|
+
const items: ReadonlyMap<Id, PM> = yield* $(seed ?? Effect(new Map<Id, PM>()))
|
|
38
38
|
const makeStore = (): ReadonlyMap<Id, PM> => new Map([...items.entries()].map(([id, e]) => [id, makeETag(e)]))
|
|
39
39
|
const store = Ref.unsafeMake(makeStore())
|
|
40
40
|
const sem = Semaphore.unsafeMake(1)
|
|
@@ -80,12 +80,12 @@ export function makeMemoryStoreInt<Id extends string, Id2 extends Id, PM extends
|
|
|
80
80
|
export const makeMemoryStore = () => ({
|
|
81
81
|
make: <Id extends string, Id2 extends Id, PM extends PersistenceModelType<Id>>(
|
|
82
82
|
name: string,
|
|
83
|
-
|
|
83
|
+
seed?: Effect<never, never, ReadonlyMap<Id2, PM>>,
|
|
84
84
|
config?: StoreConfig<PM>
|
|
85
85
|
) =>
|
|
86
86
|
Effect.gen(function*($) {
|
|
87
87
|
const storesSem = Semaphore.unsafeMake(1)
|
|
88
|
-
const primary = yield* $(makeMemoryStoreInt<Id, Id2, PM>(name,
|
|
88
|
+
const primary = yield* $(makeMemoryStoreInt<Id, Id2, PM>(name, seed))
|
|
89
89
|
const stores = new Map([["primary", primary]])
|
|
90
90
|
const getStore = !config?.allowNamespace ? Effect.succeed(primary) : storeId.get.flatMap(namespace => {
|
|
91
91
|
const store = stores.get(namespace)
|
|
@@ -98,7 +98,7 @@ export const makeMemoryStore = () => ({
|
|
|
98
98
|
return storesSem.withPermits(1)(Effect.suspendSucceed(() => {
|
|
99
99
|
const store = stores.get(namespace)
|
|
100
100
|
if (store) return Effect(store)
|
|
101
|
-
return makeMemoryStoreInt(name,
|
|
101
|
+
return makeMemoryStoreInt(name, seed).tap(store => Effect.sync(() => stores.set(namespace, store)))
|
|
102
102
|
}))
|
|
103
103
|
})
|
|
104
104
|
const s: Store<PM, Id> = {
|
|
@@ -13,7 +13,7 @@ export function makeRedisStore({ prefix }: StorageConfig) {
|
|
|
13
13
|
return {
|
|
14
14
|
make: <Id extends string, PM extends PersistenceModelType<Id>, Id2 extends Id>(
|
|
15
15
|
name: string,
|
|
16
|
-
|
|
16
|
+
seed?: Effect<never, never, ReadonlyMap<Id2, PM>>,
|
|
17
17
|
_config?: StoreConfig<PM>
|
|
18
18
|
) =>
|
|
19
19
|
Effect.gen(function*($) {
|
|
@@ -22,7 +22,7 @@ export function makeRedisStore({ prefix }: StorageConfig) {
|
|
|
22
22
|
const key = `${prefix}${name}`
|
|
23
23
|
const current = yield* $(RedisClient.get(key).orDie.provideService(RedisClient.RedisClient, redis))
|
|
24
24
|
if (!current.isSome()) {
|
|
25
|
-
const m = yield* $(
|
|
25
|
+
const m = yield* $(seed ?? Effect(new Map()))
|
|
26
26
|
yield* $(
|
|
27
27
|
RedisClient.set(key, JSON.stringify({ data: [...m.values()].map(e => makeETag(e)) }))
|
|
28
28
|
.orDie
|
|
@@ -78,7 +78,7 @@ export interface Store<PM extends PersistenceModelType<Id>, Id extends string> {
|
|
|
78
78
|
export interface StoreMaker {
|
|
79
79
|
make: <E extends PersistenceModelType<Id>, Id extends string, Id2 extends Id>(
|
|
80
80
|
name: string,
|
|
81
|
-
|
|
81
|
+
seed?: Effect<never, never, ReadonlyMap<Id2, E>>,
|
|
82
82
|
config?: StoreConfig<E>
|
|
83
83
|
) => Effect<never, never, Store<E, Id>>
|
|
84
84
|
}
|
package/dist/RequestContext.d.ts
CHANGED
|
@@ -70,7 +70,7 @@ export declare namespace RequestContextParent {
|
|
|
70
70
|
}
|
|
71
71
|
const Encoded: EncodedOps;
|
|
72
72
|
/**
|
|
73
|
-
* @tsplus type RequestContextParent.Encoded.
|
|
73
|
+
* @tsplus type RequestContextParent.Encoded.Ops
|
|
74
74
|
*/
|
|
75
75
|
interface EncodedAspects {
|
|
76
76
|
}
|
|
@@ -109,7 +109,7 @@ export declare namespace RequestContext {
|
|
|
109
109
|
}
|
|
110
110
|
const Encoded: EncodedOps;
|
|
111
111
|
/**
|
|
112
|
-
* @tsplus type RequestContext.Encoded.
|
|
112
|
+
* @tsplus type RequestContext.Encoded.Ops
|
|
113
113
|
*/
|
|
114
114
|
interface EncodedAspects {
|
|
115
115
|
}
|
package/dist/_ext/Array.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "@effect/data/Chunk";
|
|
2
|
-
import * as tsplus_module_2 from "@effect-app/
|
|
3
|
-
import * as tsplus_module_3 from "@effect-app/prelude/_ext/misc";
|
|
2
|
+
import * as tsplus_module_2 from "@effect-app/prelude/_ext/misc";
|
|
4
3
|
import { inspect } from "util";
|
|
5
4
|
import { NotFoundError } from "../errors.js";
|
|
6
5
|
/**
|
|
@@ -11,7 +10,7 @@ import { NotFoundError } from "../errors.js";
|
|
|
11
10
|
* @tsplus fluent ReadonlyArray getFirstById
|
|
12
11
|
*/
|
|
13
12
|
export function getFirstById_(a, id, type) {
|
|
14
|
-
return
|
|
13
|
+
return tsplus_module_2.encaseMaybeInEffect_(tsplus_module_1.findFirst(tsplus_module_1.fromIterable(a), _ => _.id === id), () => new NotFoundError(type, id));
|
|
15
14
|
}
|
|
16
15
|
/**
|
|
17
16
|
* @tsplus fluent Object.Ops inspect
|
|
@@ -19,4 +18,4 @@ export function getFirstById_(a, id, type) {
|
|
|
19
18
|
export function RecordInspect(o, showHidden, depth, color) {
|
|
20
19
|
return inspect(o.subject, showHidden, depth, color);
|
|
21
20
|
}
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9fc3JjL19leHQvQXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzlCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFNUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsQ0FBYyxFQUNkLEVBQU0sRUFDTixJQUFVO0lBRVYsT0FBTyxxQ0FBQSwwQkFBQSw2QkFBbUIsQ0FBQyxDQUFDLEVBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUNaLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ3RELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQzNCLENBQWdCLEVBQ2hCLFVBQWdDLEVBQ2hDLEtBQWlDLEVBQ2pDLEtBQTJCO0lBRTNCLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUNyRCxDQUFDIn0=
|
package/dist/api/codec.js
CHANGED
|
@@ -12,6 +12,6 @@ export function makeCodec(self) {
|
|
|
12
12
|
return [decode, encode, encodeToMap];
|
|
13
13
|
}
|
|
14
14
|
function toMap(encode) {
|
|
15
|
-
return (a) => tsplus_module_1.map(
|
|
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(_));
|
|
16
16
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9fc3JjL2FwaS9jb2RlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUdwRCxNQUFNLFVBQVUsU0FBUyxDQU12QixJQUFxRTtJQUNyRSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUM3QyxlQUFlO0lBQ2YsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFVLEVBQUUsR0FBZSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQzdELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFN0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFjLEVBQUUsRUFBRSxDQUFDLDJCQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNqQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQVUsQ0FBQTtBQUMvQyxDQUFDO0FBRUQsU0FBUyxLQUFLLENBQThCLE1BQXlDO0lBQ25GLE9BQU8sQ0FBQyxDQUFtQixFQUFFLEVBQUUsQ0FDN0Isb0JBQUEsK0JBQUEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLHNCQUFhLDJCQUFPLElBQUksQ0FBQyxFQUFhLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUN0RCxFQUNSLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUMzQixDQUFDIn0=
|
|
@@ -5,32 +5,32 @@ import * as tsplus_module_4 from "@effect/io/Debug";
|
|
|
5
5
|
import * as tsplus_module_5 from "@effect/io/Schedule";
|
|
6
6
|
import { logRequestError } from "./reportError.js";
|
|
7
7
|
export function defaultBasicErrorHandler(_req, res, _requestContext, r2) {
|
|
8
|
-
return tsplus_module_4.untraced(() => tsplus_module_1.catchAll(
|
|
8
|
+
return tsplus_module_4.untraced(() => 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(() => {
|
|
9
9
|
res.status(400).send(err.errors);
|
|
10
|
-
}))
|
|
10
|
+
}))
|
|
11
11
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
12
|
-
));
|
|
12
|
+
, (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)));
|
|
13
13
|
}
|
|
14
14
|
const optimisticConcurrencySchedule = tsplus_module_5.intersect(tsplus_module_5.recurWhile(a => a._tag === "OptimisticConcurrencyException"))(tsplus_module_5.once());
|
|
15
15
|
export function defaultErrorHandler(req, res, _, r2) {
|
|
16
16
|
const r3 = req.method === "PATCH"
|
|
17
|
-
? tsplus_module_1.retry(optimisticConcurrencySchedule)
|
|
17
|
+
? tsplus_module_1.retry(r2, optimisticConcurrencySchedule)
|
|
18
18
|
: r2;
|
|
19
|
-
return tsplus_module_4.untraced(() => tsplus_module_1.catchAll((
|
|
19
|
+
return tsplus_module_4.untraced(() => 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(() => {
|
|
20
30
|
// 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
|
|
21
31
|
res.status(412).send(err);
|
|
22
|
-
}))
|
|
23
|
-
res.status(422).send(err);
|
|
24
|
-
}))(tsplus_module_1.catchTag("UnauthorizedError", err => tsplus_module_1.sync(() => {
|
|
25
|
-
res.status(403).send(err);
|
|
26
|
-
}))(tsplus_module_1.catchTag("NotLoggedInError", err => tsplus_module_1.sync(() => {
|
|
27
|
-
res.status(401).send(err);
|
|
28
|
-
}))(tsplus_module_1.catchTag("NotFoundError", err => tsplus_module_1.sync(() => {
|
|
29
|
-
res.status(404).send(err);
|
|
30
|
-
}))(tsplus_module_1.catchTag("ValidationError", err => tsplus_module_1.sync(() => {
|
|
31
|
-
res.status(400).send(err.errors);
|
|
32
|
-
}))(tsplus_module_1.tapErrorCause(cause => tsplus_module_2.isFailure(cause) ? logRequestError(cause) : tsplus_module_3.unit)(r3)))))))
|
|
32
|
+
}))
|
|
33
33
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
34
|
-
));
|
|
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)));
|
|
35
35
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL2RlZmF1bHRFcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFVQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFbEQsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxJQUFxQixFQUNyQixHQUFxQixFQUNyQixlQUErQixFQUMvQixFQUFvQztJQUVwQyxPQUFPLHlCQUFlLEdBQUcsRUFBRSxDQUN6Qix5QkFBQSx5QkFBQSw4QkFBQSxFQUFFLEVBQ2UsS0FBSyxDQUFDLEVBQUUsQ0FBQywwQkFBQSxLQUFLLENBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMscUJBQVksQ0FBQyxFQUN2RSxpQkFBaUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUNqQyxxQkFBWSxHQUFHLEVBQUU7UUFDZixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDTCwrRUFBK0U7TUFDckUsQ0FBQyxHQUFVLEVBQUUsRUFBRSxDQUN2Qix3QkFBQSxvQkFBQSx5QkFDRSxnR0FBZ0csR0FBRyxHQUFHLENBQ3ZHLEVBQ00sR0FBRyxFQUFFLENBQUMsR0FBYyxDQUFDLHNCQUNOLENBQ3ZCLENBQ0osQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLDZCQUE2Qiw2QkFDakMsMkJBQXFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxnQ0FBZ0MsQ0FBQyxFQURsRCxzQkFBZSxDQUNtQyxDQUFBO0FBRXhGLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBb0IsRUFDcEIsR0FBcUIsRUFDckIsQ0FBaUIsRUFDakIsRUFBb0M7SUFFcEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sS0FBSyxPQUFPO1FBQy9CLENBQUMsQ0FBQyxzQkFBQSxFQUFFLEVBQU8sNkJBQTZCLENBQUM7UUFDekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLE9BQU8seUJBQWUsR0FBRyxFQUFFLENBQ3pCLHlCQUFBLHlCQUFBLHlCQUFBLHlCQUFBLHlCQUFBLHlCQUFBLHlCQUFBLDhCQUFBLEVBQUUsRUFDZSxLQUFLLENBQUMsRUFBRSxDQUFDLDBCQUFBLEtBQUssQ0FBWSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxxQkFBWSxDQUFDLEVBQ3ZFLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ2pDLHFCQUFZLEdBQUcsRUFBRTtRQUNmLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsQyxDQUFDLENBQUMsQ0FBQyxFQUNLLGVBQWUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUMvQixxQkFBWSxHQUFHLEVBQUU7UUFDZixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQyxFQUNLLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ2xDLHFCQUFZLEdBQUcsRUFBRTtRQUNmLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFDLEVBQ0ssbUJBQW1CLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FDbkMscUJBQVksR0FBRyxFQUFFO1FBQ2YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUMsRUFDSyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUNuQyxxQkFBWSxHQUFHLEVBQUU7UUFDZixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQyxFQUNLLGdDQUFnQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ2hELHFCQUFZLEdBQUcsRUFBRTtRQUNmLDRJQUE0STtRQUM1SSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLCtFQUErRTtNQUNyRSxDQUFDLEdBQVUsRUFBRSxFQUFFLENBQ3ZCLHdCQUFBLG9CQUFBLHlCQUNFLGdHQUFnRyxHQUFHLEdBQUcsQ0FDdkcsRUFDTSxHQUFHLEVBQUUsQ0FBQyxHQUFjLENBQUMsc0JBQ04sQ0FDdkIsQ0FDSixDQUFBO0FBQ0gsQ0FBQyJ9
|
|
@@ -8,7 +8,7 @@ const rx = /:(\w+)/g;
|
|
|
8
8
|
* Work in progress JSONSchema generator.
|
|
9
9
|
*/
|
|
10
10
|
export function makeJsonSchema(r) {
|
|
11
|
-
return tsplus_module_3.map(e => {
|
|
11
|
+
return tsplus_module_3.map(tsplus_module_2.ext_forEach(tsplus_module_1.fromIterable(r), RS.makeFromSchema), e => {
|
|
12
12
|
const map = ({ method, path, responses, ...rest }) => ({
|
|
13
13
|
[method]: {
|
|
14
14
|
...rest,
|
|
@@ -18,15 +18,15 @@ export function makeJsonSchema(r) {
|
|
|
18
18
|
}, {})
|
|
19
19
|
}
|
|
20
20
|
});
|
|
21
|
-
return tsplus_module_1.reduce({}, (prev, e) => {
|
|
21
|
+
return tsplus_module_1.reduce(e, {}, (prev, e) => {
|
|
22
22
|
const path = e.path.split("?")[0].replace(rx, (_a, b) => `{${b}}`);
|
|
23
23
|
prev[path] = {
|
|
24
24
|
...prev[path],
|
|
25
25
|
...map(e)
|
|
26
26
|
};
|
|
27
27
|
return prev;
|
|
28
|
-
})
|
|
29
|
-
})
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
30
|
}
|
|
31
31
|
class Response {
|
|
32
32
|
constructor(statusCode, type // string | JSONSchema | SubSchema
|
|
@@ -35,4 +35,4 @@ class Response {
|
|
|
35
35
|
this.type = type;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZUpzb25TY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL2FwaS9leHByZXNzL21ha2VKc29uU2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUF1RDtBQUV2RCxPQUFPLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBSXpDLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQTtBQUlwQjs7R0FFRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBa0M7SUFDL0QsT0FBTyxvQkFBQSw0QkFBQSw2QkFBbUIsQ0FBQyxDQUFDLEVBQ1gsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUM1QixDQUFDLENBQUMsRUFBRTtRQUNQLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksRUFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNSLEdBQUcsSUFBSTtnQkFDUCxTQUFTLEVBQUcsU0FBd0IsQ0FBQyxNQUFNLENBQ3pDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQTtvQkFDL0IsT0FBTyxJQUFJLENBQUE7Z0JBQ2IsQ0FBQyxFQUNELEVBQXNELENBQ3ZEO2FBQ0Y7U0FDRixDQUFDLENBQUE7UUFDRixPQUFPLHVCQUFBLENBQUMsRUFDTixFQUE2RCxFQUM3RCxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNWLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHO2dCQUNYLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDYixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQVE7YUFDakIsQ0FBQTtZQUNELE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQyxDQUNGLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxNQUFNLFFBQVE7SUFDWixZQUNrQixVQUFrQixFQUNsQixJQUFTLENBQUMsa0NBQWtDOztRQUQ1QyxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2xCLFNBQUksR0FBSixJQUFJLENBQUs7SUFDeEIsQ0FBQztDQUNMIn0=
|
|
@@ -5,7 +5,7 @@ import { makeJsonSchema } from "./makeJsonSchema.js";
|
|
|
5
5
|
export function makeOpenApiSpecs(rdescs, info) {
|
|
6
6
|
return tsplus_module_2.gen(function* ($) {
|
|
7
7
|
const ref = yield* $(tsplus_module_1.make(new Map()));
|
|
8
|
-
const paths = yield* $(tsplus_module_2.provideService(References, { ref })
|
|
8
|
+
const paths = yield* $(tsplus_module_2.provideService(makeJsonSchema(rdescs), References, { ref }));
|
|
9
9
|
const refs = yield* $(tsplus_module_1.get(ref));
|
|
10
10
|
const parameterRefs = {}; // todos
|
|
11
11
|
const schemas = {};
|
|
@@ -49,4 +49,4 @@ export function makeOpenApiSpecs(rdescs, info) {
|
|
|
49
49
|
};
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZU9wZW5BcGlTcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvYXBpL2V4cHJlc3MvbWFrZU9wZW5BcGlTcGVjcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4REFBOEQsQ0FBQTtBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFHcEQsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixNQUFvQyxFQUNwQyxJQUFpQjtJQUVqQixPQUFPLG9CQUFXLFFBQVEsQ0FBQyxFQUFDLENBQUM7UUFDM0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUE4QyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUM5RSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsK0JBQUEsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFnQixVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDbEYsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxxQkFBQyxHQUFHLEVBQUssQ0FBQTtRQUM5QixNQUFNLGFBQWEsR0FBd0IsRUFBRSxDQUFBLENBQUMsUUFBUTtRQUN0RCxNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sZUFBZSxHQUFHO1lBQ3RCLFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsWUFBWSxFQUFFLEtBQUs7YUFDcEI7U0FDRixDQUFBLENBQUMsbURBQW1EO1FBQ3JELE1BQU0sVUFBVSxHQUFHLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLENBQUE7UUFFMUUsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbEMsZ0RBQWdEO1lBQ2hELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDN0I7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLE9BQU87WUFDaEIsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixjQUFjLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ3hCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDbkIsQ0FBQyxDQUFDO3dCQUNBLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7d0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUs7d0JBQ3pCLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7cUJBQ3RCO29CQUNELENBQUMsQ0FBQyxTQUFTO2dCQUNiLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDbkIsQ0FBQyxDQUFDO3dCQUNBLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7d0JBQ3ZCLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7cUJBQ3RCO29CQUNELENBQUMsQ0FBQyxTQUFTO2dCQUNiLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTzthQUN0QjtZQUNELElBQUksRUFBRSxFQUFFO1lBQ1IsS0FBSztZQUNMLFVBQVU7WUFDVixRQUFRO1NBQ1QsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyJ9
|
|
@@ -29,7 +29,38 @@ export function decodeErrors(x) {
|
|
|
29
29
|
// )
|
|
30
30
|
// const structValidation = DSL.structF(ValidationApplicative)
|
|
31
31
|
export function parseRequestParams(parsers) {
|
|
32
|
-
return ({ body, cookies, headers, params, query }) => tsplus_module_1.flatMap(({
|
|
32
|
+
return ({ body, cookies, headers, params, query }) => tsplus_module_1.flatMap(tsplus_module_1.struct({
|
|
33
|
+
body: tsplus_module_1.flatMap(tsplus_module_1.exit(parsers
|
|
34
|
+
.parseBody(body)), _ => tsplus_module_2.isFailure(_) && !tsplus_module_3.isFailure(_.cause)
|
|
35
|
+
? tsplus_module_1.failCauseSync(() => _.cause)
|
|
36
|
+
: tsplus_module_1.sync(() => tsplus_module_2.isSuccess(_)
|
|
37
|
+
? { _tag: "Success", value: _.value }
|
|
38
|
+
: { _tag: "Failure", errors: tsplus_module_3.failures(_.cause) })),
|
|
39
|
+
cookie: tsplus_module_1.flatMap(tsplus_module_1.exit(parsers
|
|
40
|
+
.parseCookie(cookies)), _ => tsplus_module_2.isFailure(_) && !tsplus_module_3.isFailure(_.cause)
|
|
41
|
+
? tsplus_module_1.failCauseSync(() => _.cause)
|
|
42
|
+
: tsplus_module_1.sync(() => tsplus_module_2.isSuccess(_)
|
|
43
|
+
? { _tag: "Success", value: _.value }
|
|
44
|
+
: { _tag: "Failure", errors: tsplus_module_3.failures(_.cause) })),
|
|
45
|
+
headers: tsplus_module_1.flatMap(tsplus_module_1.exit(parsers
|
|
46
|
+
.parseHeaders(headers)), _ => tsplus_module_2.isFailure(_) && !tsplus_module_3.isFailure(_.cause)
|
|
47
|
+
? tsplus_module_1.failCauseSync(() => _.cause)
|
|
48
|
+
: tsplus_module_1.sync(() => tsplus_module_2.isSuccess(_)
|
|
49
|
+
? { _tag: "Success", value: _.value }
|
|
50
|
+
: { _tag: "Failure", errors: tsplus_module_3.failures(_.cause) })),
|
|
51
|
+
query: tsplus_module_1.flatMap(tsplus_module_1.exit(parsers
|
|
52
|
+
.parseQuery(query)), _ => tsplus_module_2.isFailure(_) && !tsplus_module_3.isFailure(_.cause)
|
|
53
|
+
? tsplus_module_1.failCauseSync(() => _.cause)
|
|
54
|
+
: tsplus_module_1.sync(() => tsplus_module_2.isSuccess(_)
|
|
55
|
+
? { _tag: "Success", value: _.value }
|
|
56
|
+
: { _tag: "Failure", errors: tsplus_module_3.failures(_.cause) })),
|
|
57
|
+
path: tsplus_module_1.flatMap(tsplus_module_1.exit(parsers
|
|
58
|
+
.parsePath(params)), _ => tsplus_module_2.isFailure(_) && !tsplus_module_3.isFailure(_.cause)
|
|
59
|
+
? tsplus_module_1.failCauseSync(() => _.cause)
|
|
60
|
+
: tsplus_module_1.sync(() => tsplus_module_2.isSuccess(_)
|
|
61
|
+
? { _tag: "Success", value: _.value }
|
|
62
|
+
: { _tag: "Failure", errors: tsplus_module_3.failures(_.cause) }))
|
|
63
|
+
}), ({ body, cookie, headers, path, query }) => {
|
|
33
64
|
const errors = [];
|
|
34
65
|
if (body._tag === "Failure") {
|
|
35
66
|
errors.push(makeError("body")(body.errors));
|
|
@@ -56,38 +87,7 @@ export function parseRequestParams(parsers) {
|
|
|
56
87
|
path: path.value,
|
|
57
88
|
query: query.value
|
|
58
89
|
}));
|
|
59
|
-
})
|
|
60
|
-
body: tsplus_module_1.flatMap(_ => tsplus_module_2.isFailure(_) && !tsplus_module_3.isFailure(_.cause)
|
|
61
|
-
? tsplus_module_1.failCauseSync(() => _.cause)
|
|
62
|
-
: tsplus_module_1.sync(() => tsplus_module_2.isSuccess(_)
|
|
63
|
-
? { _tag: "Success", value: _.value }
|
|
64
|
-
: { _tag: "Failure", errors: tsplus_module_3.failures(_.cause) }))(tsplus_module_1.exit(parsers
|
|
65
|
-
.parseBody(body))),
|
|
66
|
-
cookie: tsplus_module_1.flatMap(_ => tsplus_module_2.isFailure(_) && !tsplus_module_3.isFailure(_.cause)
|
|
67
|
-
? tsplus_module_1.failCauseSync(() => _.cause)
|
|
68
|
-
: tsplus_module_1.sync(() => tsplus_module_2.isSuccess(_)
|
|
69
|
-
? { _tag: "Success", value: _.value }
|
|
70
|
-
: { _tag: "Failure", errors: tsplus_module_3.failures(_.cause) }))(tsplus_module_1.exit(parsers
|
|
71
|
-
.parseCookie(cookies))),
|
|
72
|
-
headers: tsplus_module_1.flatMap(_ => tsplus_module_2.isFailure(_) && !tsplus_module_3.isFailure(_.cause)
|
|
73
|
-
? tsplus_module_1.failCauseSync(() => _.cause)
|
|
74
|
-
: tsplus_module_1.sync(() => tsplus_module_2.isSuccess(_)
|
|
75
|
-
? { _tag: "Success", value: _.value }
|
|
76
|
-
: { _tag: "Failure", errors: tsplus_module_3.failures(_.cause) }))(tsplus_module_1.exit(parsers
|
|
77
|
-
.parseHeaders(headers))),
|
|
78
|
-
query: tsplus_module_1.flatMap(_ => tsplus_module_2.isFailure(_) && !tsplus_module_3.isFailure(_.cause)
|
|
79
|
-
? tsplus_module_1.failCauseSync(() => _.cause)
|
|
80
|
-
: tsplus_module_1.sync(() => tsplus_module_2.isSuccess(_)
|
|
81
|
-
? { _tag: "Success", value: _.value }
|
|
82
|
-
: { _tag: "Failure", errors: tsplus_module_3.failures(_.cause) }))(tsplus_module_1.exit(parsers
|
|
83
|
-
.parseQuery(query))),
|
|
84
|
-
path: tsplus_module_1.flatMap(_ => tsplus_module_2.isFailure(_) && !tsplus_module_3.isFailure(_.cause)
|
|
85
|
-
? tsplus_module_1.failCauseSync(() => _.cause)
|
|
86
|
-
: tsplus_module_1.sync(() => tsplus_module_2.isSuccess(_)
|
|
87
|
-
? { _tag: "Success", value: _.value }
|
|
88
|
-
: { _tag: "Failure", errors: tsplus_module_3.failures(_.cause) }))(tsplus_module_1.exit(parsers
|
|
89
|
-
.parsePath(params)))
|
|
90
|
-
}));
|
|
90
|
+
});
|
|
91
91
|
}
|
|
92
92
|
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
93
93
|
// function mapErrors_<E, NE, NER extends Record<string, Effect<any, E, any>>>(
|
|
@@ -110,22 +110,22 @@ function makeError(type) {
|
|
|
110
110
|
return (e) => [{ type, errors: decodeErrors(e) }];
|
|
111
111
|
}
|
|
112
112
|
export function respondSuccess(encodeResponse) {
|
|
113
|
-
return (req, res) => tsplus_module_4.flow(encodeResponse(req), tsplus_module_1.succeed, _ => tsplus_module_1.flatMap(r => tsplus_module_1.sync(() => {
|
|
113
|
+
return (req, res) => tsplus_module_4.flow(encodeResponse(req), tsplus_module_1.succeed, _ => tsplus_module_1.flatMap(_, r => tsplus_module_1.sync(() => {
|
|
114
114
|
r === undefined
|
|
115
115
|
? res.status(204).send()
|
|
116
116
|
: res.status(200).send(r === null ? JSON.stringify(null) : r);
|
|
117
|
-
}))
|
|
117
|
+
})));
|
|
118
118
|
}
|
|
119
119
|
export function makeRequestParsers(Request) {
|
|
120
|
-
const ph = tsplus_module_1.sync(() => tsplus_module_5.map(
|
|
120
|
+
const ph = tsplus_module_1.sync(() => tsplus_module_5.map(tsplus_module_5.map(tsplus_module_5.map(tsplus_module_5.fromNullable(Request.Headers), s => s), Parser.for), MO.condemn));
|
|
121
121
|
const parseHeaders = (u) => tsplus_module_6.flatMapOption(ph, d => d(u));
|
|
122
|
-
const pq = tsplus_module_1.sync(() => tsplus_module_5.map(
|
|
122
|
+
const pq = tsplus_module_1.sync(() => tsplus_module_5.map(tsplus_module_5.map(tsplus_module_5.map(tsplus_module_5.fromNullable(Request.Query), s => s), Parser.for), MO.condemn));
|
|
123
123
|
const parseQuery = (u) => tsplus_module_6.flatMapOption(pq, d => d(u));
|
|
124
|
-
const pb = tsplus_module_1.sync(() => tsplus_module_5.map(
|
|
124
|
+
const pb = tsplus_module_1.sync(() => tsplus_module_5.map(tsplus_module_5.map(tsplus_module_5.map(tsplus_module_5.fromNullable(Request.Body), s => s), Parser.for), MO.condemn));
|
|
125
125
|
const parseBody = (u) => tsplus_module_6.flatMapOption(pb, d => d(u));
|
|
126
|
-
const pp = tsplus_module_1.sync(() => tsplus_module_5.map(
|
|
126
|
+
const pp = tsplus_module_1.sync(() => tsplus_module_5.map(tsplus_module_5.map(tsplus_module_5.map(tsplus_module_5.fromNullable(Request.Path), s => s), Parser.for), MO.condemn));
|
|
127
127
|
const parsePath = (u) => tsplus_module_6.flatMapOption(pp, d => d(u));
|
|
128
|
-
const pc = tsplus_module_1.sync(() => tsplus_module_5.map(
|
|
128
|
+
const pc = tsplus_module_1.sync(() => tsplus_module_5.map(tsplus_module_5.map(tsplus_module_5.map(tsplus_module_5.fromNullable(Request.Cookie), s => s), Parser.for), MO.condemn));
|
|
129
129
|
const parseCookie = (u) => tsplus_module_6.flatMapOption(pc, d => d(u));
|
|
130
130
|
return {
|
|
131
131
|
parseBody,
|
|
@@ -135,4 +135,4 @@ export function makeRequestParsers(Request) {
|
|
|
135
135
|
parseQuery
|
|
136
136
|
};
|
|
137
137
|
}
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9fc3JjL2FwaS9leHByZXNzL3NjaGVtYS9yZXF1ZXN0SGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx1REFBdUQ7QUFDdkQsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQXdDcEQsb0RBQW9EO0FBQ3BELGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0IsbUNBQW1DO0FBQ25DLE1BQU07QUFDTixtRUFBbUU7QUFDbkUsaUNBQWlDO0FBQ2pDLE1BQU07QUFDTixxQ0FBcUM7QUFDckMsSUFBSTtBQUNKLE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBVTtJQUNyQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDWixDQUFDO0FBRUQsaUVBQWlFO0FBQ2pFLCtGQUErRjtBQUMvRiw0QkFBNEI7QUFDNUIsTUFBTTtBQUNOLElBQUk7QUFFSiw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxPQUErRDtJQUUvRCxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFtQixFQUFFLEVBQUUsQ0FDcEUsd0JBQUEsdUJBQWM7UUFDWixJQUFJLEVBQUUsNkNBQUEsT0FBTzthQUNWLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FDRixDQUFDLENBQUMsRUFBRSxDQUNoQiwwQkFBQSxDQUFDLENBQVksSUFBSSxDQUFDLDBCQUFBLENBQUMsQ0FBQyxLQUFLLENBQVk7WUFDbkMsQ0FBQyxDQUFFLDhCQUFxQixHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUEyQztZQUNoRixDQUFDLENBQUMsMkJBQ0EsMEJBQUEsQ0FBQyxDQUFZO2dCQUNYLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUM5QyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBUyxFQUFFLENBQ2xELENBQ0o7UUFDSCxNQUFNLEVBQUUsNkNBQUEsT0FBTzthQUNaLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FDUCxDQUFDLENBQUMsRUFBRSxDQUNoQiwwQkFBQSxDQUFDLENBQVksSUFBSSxDQUFDLDBCQUFBLENBQUMsQ0FBQyxLQUFLLENBQVk7WUFDbkMsQ0FBQyxDQUFFLDhCQUFxQixHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUEyQztZQUNoRixDQUFDLENBQUMsMkJBQ0EsMEJBQUEsQ0FBQyxDQUFZO2dCQUNYLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUM5QyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBUyxFQUFFLENBQ2xELENBQ0o7UUFDSCxPQUFPLEVBQUUsNkNBQUEsT0FBTzthQUNiLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FDUixDQUFDLENBQUMsRUFBRSxDQUNoQiwwQkFBQSxDQUFDLENBQVksSUFBSSxDQUFDLDBCQUFBLENBQUMsQ0FBQyxLQUFLLENBQVk7WUFDbkMsQ0FBQyxDQUFFLDhCQUFxQixHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUEyQztZQUNoRixDQUFDLENBQUMsMkJBQ0EsMEJBQUEsQ0FBQyxDQUFZO2dCQUNYLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUM5QyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBUyxFQUFFLENBQ2xELENBQ0o7UUFDSCxLQUFLLEVBQUUsNkNBQUEsT0FBTzthQUNYLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FDSixDQUFDLENBQUMsRUFBRSxDQUNoQiwwQkFBQSxDQUFDLENBQVksSUFBSSxDQUFDLDBCQUFBLENBQUMsQ0FBQyxLQUFLLENBQVk7WUFDbkMsQ0FBQyxDQUFFLDhCQUFxQixHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUEyQztZQUNoRixDQUFDLENBQUMsMkJBQ0EsMEJBQUEsQ0FBQyxDQUFZO2dCQUNYLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUM5QyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBUyxFQUFFLENBQ2xELENBQ0o7UUFDSCxJQUFJLEVBQUUsNkNBQUEsT0FBTzthQUNWLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FDSixDQUFDLENBQUMsRUFBRSxDQUNoQiwwQkFBQSxDQUFDLENBQVksSUFBSSxDQUFDLDBCQUFBLENBQUMsQ0FBQyxLQUFLLENBQVk7WUFDbkMsQ0FBQyxDQUFFLDhCQUFxQixHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUEyQztZQUNoRixDQUFDLENBQUMsMkJBQ0EsMEJBQUEsQ0FBQyxDQUFZO2dCQUNYLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUM5QyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBUyxFQUFFLENBQ2xELENBQ0o7S0FDSixDQUFDLEVBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFB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
|