effect-app 4.0.0 → 4.0.2
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 +21 -0
- package/dist/Array.d.ts +0 -17
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +2 -26
- package/dist/Chunk.d.ts +3 -27
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Chunk.js +4 -39
- package/dist/DateTime.d.ts +33 -0
- package/dist/DateTime.d.ts.map +1 -0
- package/dist/DateTime.js +18 -0
- package/dist/Effect.d.ts +0 -11
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +3 -18
- package/dist/Function.d.ts +0 -4
- package/dist/Function.d.ts.map +1 -1
- package/dist/Function.js +1 -7
- package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
- package/dist/Model/Repository/internal/internal.js +4 -5
- package/dist/Model/dsl.d.ts +4 -3
- package/dist/Model/dsl.d.ts.map +1 -1
- package/dist/Model/dsl.js +6 -4
- package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -1
- package/dist/Model/query/new-kid-interpreter.js +5 -6
- package/dist/Option.d.ts +0 -2
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.js +1 -7
- package/dist/Pure.d.ts +4 -4
- package/dist/Pure.d.ts.map +1 -1
- package/dist/Pure.js +16 -16
- package/dist/Schema/ext.d.ts +0 -21
- package/dist/Schema/ext.d.ts.map +1 -1
- package/dist/Schema/ext.js +4 -10
- package/dist/Schema.d.ts +1 -1
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +2 -2
- package/dist/Set.d.ts.map +1 -1
- package/dist/Set.js +6 -5
- package/dist/client/apiClientFactory.d.ts.map +1 -1
- package/dist/client/apiClientFactory.js +7 -6
- package/dist/migration/nativeEffect.d.ts +21 -0
- package/dist/migration/nativeEffect.d.ts.map +1 -0
- package/dist/migration/nativeEffect.js +598 -0
- package/dist/utils.d.ts +0 -6
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -13
- package/dist/waitingGate.d.ts +38 -0
- package/dist/waitingGate.d.ts.map +1 -0
- package/dist/waitingGate.js +63 -0
- package/dist/withToast.d.ts.map +1 -1
- package/dist/withToast.js +42 -3
- package/package.json +2 -3
- package/src/Array.ts +4 -36
- package/src/Chunk.ts +4 -53
- package/src/DateTime.ts +473 -0
- package/src/Effect.ts +3 -22
- package/src/Function.ts +0 -7
- package/src/Model/Repository/internal/internal.ts +3 -4
- package/src/Model/dsl.ts +5 -4
- package/src/Model/query/new-kid-interpreter.ts +4 -5
- package/src/Option.ts +1 -8
- package/src/Pure.ts +15 -15
- package/src/Schema/ext.ts +3 -10
- package/src/Schema.ts +1 -1
- package/src/Set.ts +5 -4
- package/src/client/apiClientFactory.ts +8 -7
- package/src/migration/nativeEffect.ts +645 -0
- package/src/utils.ts +0 -17
- package/src/waitingGate.ts +82 -0
- package/src/withToast.ts +51 -5
- package/test/dateTimeLocal.test.ts +55 -0
- package/test/dist/dateTimeLocal.test.d.ts.map +1 -0
- package/test/dist/nativeEffectMigration.test.d.ts.map +1 -0
- package/test/dist/waitingGate.test.d.ts.map +1 -0
- package/test/nativeEffectMigration.test.ts +77 -0
- package/test/waitingGate.test.ts +64 -0
- package/dist/_ext/date.d.ts +0 -15
- package/dist/_ext/date.d.ts.map +0 -1
- package/dist/_ext/date.js +0 -16
- package/dist/_ext/misc.d.ts +0 -17
- package/dist/_ext/misc.d.ts.map +0 -1
- package/dist/_ext/misc.js +0 -19
- package/src/_ext/date.ts +0 -27
- package/src/_ext/misc.ts +0 -49
package/src/DateTime.ts
ADDED
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
import * as DateTime from "effect/DateTime"
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The same instant as `date`, zoned with the process timezone.
|
|
5
|
+
*
|
|
6
|
+
* A JavaScript `Date` stores no zone. This attaches `DateTime.zoneMakeLocal()` without moving the instant.
|
|
7
|
+
*/
|
|
8
|
+
export const makeZonedLocal = (date: Date): DateTime.Zoned =>
|
|
9
|
+
DateTime.makeZonedUnsafe(date, { timeZone: DateTime.zoneMakeLocal() })
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Zones `date` with the process timezone, runs the functions, then returns the instant with `DateTime.toDateUtc`.
|
|
13
|
+
*
|
|
14
|
+
* Accepts as many functions as `pipe`. The last function must return a `DateTime`. Calendar parts follow the process timezone, as `Date#setDate` does.
|
|
15
|
+
*/
|
|
16
|
+
export function pipeZonedLocal(date: Date): Date
|
|
17
|
+
export function pipeZonedLocal<A extends DateTime.DateTime = never>(
|
|
18
|
+
date: Date,
|
|
19
|
+
ab: (self: DateTime.Zoned) => A
|
|
20
|
+
): Date
|
|
21
|
+
export function pipeZonedLocal<A = never, B extends DateTime.DateTime = never>(
|
|
22
|
+
date: Date,
|
|
23
|
+
ab: (self: DateTime.Zoned) => A,
|
|
24
|
+
bc: (a: A) => B
|
|
25
|
+
): Date
|
|
26
|
+
export function pipeZonedLocal<A = never, B = never, C extends DateTime.DateTime = never>(
|
|
27
|
+
date: Date,
|
|
28
|
+
ab: (self: DateTime.Zoned) => A,
|
|
29
|
+
bc: (a: A) => B,
|
|
30
|
+
cd: (b: B) => C
|
|
31
|
+
): Date
|
|
32
|
+
export function pipeZonedLocal<
|
|
33
|
+
A = never,
|
|
34
|
+
B = never,
|
|
35
|
+
C = never,
|
|
36
|
+
D extends DateTime.DateTime = never
|
|
37
|
+
>(
|
|
38
|
+
date: Date,
|
|
39
|
+
ab: (self: DateTime.Zoned) => A,
|
|
40
|
+
bc: (a: A) => B,
|
|
41
|
+
cd: (b: B) => C,
|
|
42
|
+
de: (c: C) => D
|
|
43
|
+
): Date
|
|
44
|
+
export function pipeZonedLocal<
|
|
45
|
+
A = never,
|
|
46
|
+
B = never,
|
|
47
|
+
C = never,
|
|
48
|
+
D = never,
|
|
49
|
+
E extends DateTime.DateTime = never
|
|
50
|
+
>(
|
|
51
|
+
date: Date,
|
|
52
|
+
ab: (self: DateTime.Zoned) => A,
|
|
53
|
+
bc: (a: A) => B,
|
|
54
|
+
cd: (b: B) => C,
|
|
55
|
+
de: (c: C) => D,
|
|
56
|
+
ef: (d: D) => E
|
|
57
|
+
): Date
|
|
58
|
+
export function pipeZonedLocal<
|
|
59
|
+
A = never,
|
|
60
|
+
B = never,
|
|
61
|
+
C = never,
|
|
62
|
+
D = never,
|
|
63
|
+
E = never,
|
|
64
|
+
F extends DateTime.DateTime = never
|
|
65
|
+
>(
|
|
66
|
+
date: Date,
|
|
67
|
+
ab: (self: DateTime.Zoned) => A,
|
|
68
|
+
bc: (a: A) => B,
|
|
69
|
+
cd: (b: B) => C,
|
|
70
|
+
de: (c: C) => D,
|
|
71
|
+
ef: (d: D) => E,
|
|
72
|
+
fg: (e: E) => F
|
|
73
|
+
): Date
|
|
74
|
+
export function pipeZonedLocal<
|
|
75
|
+
A = never,
|
|
76
|
+
B = never,
|
|
77
|
+
C = never,
|
|
78
|
+
D = never,
|
|
79
|
+
E = never,
|
|
80
|
+
F = never,
|
|
81
|
+
G extends DateTime.DateTime = never
|
|
82
|
+
>(
|
|
83
|
+
date: Date,
|
|
84
|
+
ab: (self: DateTime.Zoned) => A,
|
|
85
|
+
bc: (a: A) => B,
|
|
86
|
+
cd: (b: B) => C,
|
|
87
|
+
de: (c: C) => D,
|
|
88
|
+
ef: (d: D) => E,
|
|
89
|
+
fg: (e: E) => F,
|
|
90
|
+
gh: (f: F) => G
|
|
91
|
+
): Date
|
|
92
|
+
export function pipeZonedLocal<
|
|
93
|
+
A = never,
|
|
94
|
+
B = never,
|
|
95
|
+
C = never,
|
|
96
|
+
D = never,
|
|
97
|
+
E = never,
|
|
98
|
+
F = never,
|
|
99
|
+
G = never,
|
|
100
|
+
H extends DateTime.DateTime = never
|
|
101
|
+
>(
|
|
102
|
+
date: Date,
|
|
103
|
+
ab: (self: DateTime.Zoned) => A,
|
|
104
|
+
bc: (a: A) => B,
|
|
105
|
+
cd: (b: B) => C,
|
|
106
|
+
de: (c: C) => D,
|
|
107
|
+
ef: (d: D) => E,
|
|
108
|
+
fg: (e: E) => F,
|
|
109
|
+
gh: (f: F) => G,
|
|
110
|
+
hi: (g: G) => H
|
|
111
|
+
): Date
|
|
112
|
+
export function pipeZonedLocal<
|
|
113
|
+
A = never,
|
|
114
|
+
B = never,
|
|
115
|
+
C = never,
|
|
116
|
+
D = never,
|
|
117
|
+
E = never,
|
|
118
|
+
F = never,
|
|
119
|
+
G = never,
|
|
120
|
+
H = never,
|
|
121
|
+
I extends DateTime.DateTime = never
|
|
122
|
+
>(
|
|
123
|
+
date: Date,
|
|
124
|
+
ab: (self: DateTime.Zoned) => A,
|
|
125
|
+
bc: (a: A) => B,
|
|
126
|
+
cd: (b: B) => C,
|
|
127
|
+
de: (c: C) => D,
|
|
128
|
+
ef: (d: D) => E,
|
|
129
|
+
fg: (e: E) => F,
|
|
130
|
+
gh: (f: F) => G,
|
|
131
|
+
hi: (g: G) => H,
|
|
132
|
+
ij: (h: H) => I
|
|
133
|
+
): Date
|
|
134
|
+
export function pipeZonedLocal<
|
|
135
|
+
A = never,
|
|
136
|
+
B = never,
|
|
137
|
+
C = never,
|
|
138
|
+
D = never,
|
|
139
|
+
E = never,
|
|
140
|
+
F = never,
|
|
141
|
+
G = never,
|
|
142
|
+
H = never,
|
|
143
|
+
I = never,
|
|
144
|
+
J extends DateTime.DateTime = never
|
|
145
|
+
>(
|
|
146
|
+
date: Date,
|
|
147
|
+
ab: (self: DateTime.Zoned) => A,
|
|
148
|
+
bc: (a: A) => B,
|
|
149
|
+
cd: (b: B) => C,
|
|
150
|
+
de: (c: C) => D,
|
|
151
|
+
ef: (d: D) => E,
|
|
152
|
+
fg: (e: E) => F,
|
|
153
|
+
gh: (f: F) => G,
|
|
154
|
+
hi: (g: G) => H,
|
|
155
|
+
ij: (h: H) => I,
|
|
156
|
+
jk: (i: I) => J
|
|
157
|
+
): Date
|
|
158
|
+
export function pipeZonedLocal<
|
|
159
|
+
A = never,
|
|
160
|
+
B = never,
|
|
161
|
+
C = never,
|
|
162
|
+
D = never,
|
|
163
|
+
E = never,
|
|
164
|
+
F = never,
|
|
165
|
+
G = never,
|
|
166
|
+
H = never,
|
|
167
|
+
I = never,
|
|
168
|
+
J = never,
|
|
169
|
+
K extends DateTime.DateTime = never
|
|
170
|
+
>(
|
|
171
|
+
date: Date,
|
|
172
|
+
ab: (self: DateTime.Zoned) => A,
|
|
173
|
+
bc: (a: A) => B,
|
|
174
|
+
cd: (b: B) => C,
|
|
175
|
+
de: (c: C) => D,
|
|
176
|
+
ef: (d: D) => E,
|
|
177
|
+
fg: (e: E) => F,
|
|
178
|
+
gh: (f: F) => G,
|
|
179
|
+
hi: (g: G) => H,
|
|
180
|
+
ij: (h: H) => I,
|
|
181
|
+
jk: (i: I) => J,
|
|
182
|
+
kl: (j: J) => K
|
|
183
|
+
): Date
|
|
184
|
+
export function pipeZonedLocal<
|
|
185
|
+
A = never,
|
|
186
|
+
B = never,
|
|
187
|
+
C = never,
|
|
188
|
+
D = never,
|
|
189
|
+
E = never,
|
|
190
|
+
F = never,
|
|
191
|
+
G = never,
|
|
192
|
+
H = never,
|
|
193
|
+
I = never,
|
|
194
|
+
J = never,
|
|
195
|
+
K = never,
|
|
196
|
+
L extends DateTime.DateTime = never
|
|
197
|
+
>(
|
|
198
|
+
date: Date,
|
|
199
|
+
ab: (self: DateTime.Zoned) => A,
|
|
200
|
+
bc: (a: A) => B,
|
|
201
|
+
cd: (b: B) => C,
|
|
202
|
+
de: (c: C) => D,
|
|
203
|
+
ef: (d: D) => E,
|
|
204
|
+
fg: (e: E) => F,
|
|
205
|
+
gh: (f: F) => G,
|
|
206
|
+
hi: (g: G) => H,
|
|
207
|
+
ij: (h: H) => I,
|
|
208
|
+
jk: (i: I) => J,
|
|
209
|
+
kl: (j: J) => K,
|
|
210
|
+
lm: (k: K) => L
|
|
211
|
+
): Date
|
|
212
|
+
export function pipeZonedLocal<
|
|
213
|
+
A = never,
|
|
214
|
+
B = never,
|
|
215
|
+
C = never,
|
|
216
|
+
D = never,
|
|
217
|
+
E = never,
|
|
218
|
+
F = never,
|
|
219
|
+
G = never,
|
|
220
|
+
H = never,
|
|
221
|
+
I = never,
|
|
222
|
+
J = never,
|
|
223
|
+
K = never,
|
|
224
|
+
L = never,
|
|
225
|
+
M extends DateTime.DateTime = never
|
|
226
|
+
>(
|
|
227
|
+
date: Date,
|
|
228
|
+
ab: (self: DateTime.Zoned) => A,
|
|
229
|
+
bc: (a: A) => B,
|
|
230
|
+
cd: (b: B) => C,
|
|
231
|
+
de: (c: C) => D,
|
|
232
|
+
ef: (d: D) => E,
|
|
233
|
+
fg: (e: E) => F,
|
|
234
|
+
gh: (f: F) => G,
|
|
235
|
+
hi: (g: G) => H,
|
|
236
|
+
ij: (h: H) => I,
|
|
237
|
+
jk: (i: I) => J,
|
|
238
|
+
kl: (j: J) => K,
|
|
239
|
+
lm: (k: K) => L,
|
|
240
|
+
mn: (l: L) => M
|
|
241
|
+
): Date
|
|
242
|
+
export function pipeZonedLocal<
|
|
243
|
+
A = never,
|
|
244
|
+
B = never,
|
|
245
|
+
C = never,
|
|
246
|
+
D = never,
|
|
247
|
+
E = never,
|
|
248
|
+
F = never,
|
|
249
|
+
G = never,
|
|
250
|
+
H = never,
|
|
251
|
+
I = never,
|
|
252
|
+
J = never,
|
|
253
|
+
K = never,
|
|
254
|
+
L = never,
|
|
255
|
+
M = never,
|
|
256
|
+
N extends DateTime.DateTime = never
|
|
257
|
+
>(
|
|
258
|
+
date: Date,
|
|
259
|
+
ab: (self: DateTime.Zoned) => A,
|
|
260
|
+
bc: (a: A) => B,
|
|
261
|
+
cd: (b: B) => C,
|
|
262
|
+
de: (c: C) => D,
|
|
263
|
+
ef: (d: D) => E,
|
|
264
|
+
fg: (e: E) => F,
|
|
265
|
+
gh: (f: F) => G,
|
|
266
|
+
hi: (g: G) => H,
|
|
267
|
+
ij: (h: H) => I,
|
|
268
|
+
jk: (i: I) => J,
|
|
269
|
+
kl: (j: J) => K,
|
|
270
|
+
lm: (k: K) => L,
|
|
271
|
+
mn: (l: L) => M,
|
|
272
|
+
no: (m: M) => N
|
|
273
|
+
): Date
|
|
274
|
+
export function pipeZonedLocal<
|
|
275
|
+
A = never,
|
|
276
|
+
B = never,
|
|
277
|
+
C = never,
|
|
278
|
+
D = never,
|
|
279
|
+
E = never,
|
|
280
|
+
F = never,
|
|
281
|
+
G = never,
|
|
282
|
+
H = never,
|
|
283
|
+
I = never,
|
|
284
|
+
J = never,
|
|
285
|
+
K = never,
|
|
286
|
+
L = never,
|
|
287
|
+
M = never,
|
|
288
|
+
N = never,
|
|
289
|
+
O extends DateTime.DateTime = never
|
|
290
|
+
>(
|
|
291
|
+
date: Date,
|
|
292
|
+
ab: (self: DateTime.Zoned) => A,
|
|
293
|
+
bc: (a: A) => B,
|
|
294
|
+
cd: (b: B) => C,
|
|
295
|
+
de: (c: C) => D,
|
|
296
|
+
ef: (d: D) => E,
|
|
297
|
+
fg: (e: E) => F,
|
|
298
|
+
gh: (f: F) => G,
|
|
299
|
+
hi: (g: G) => H,
|
|
300
|
+
ij: (h: H) => I,
|
|
301
|
+
jk: (i: I) => J,
|
|
302
|
+
kl: (j: J) => K,
|
|
303
|
+
lm: (k: K) => L,
|
|
304
|
+
mn: (l: L) => M,
|
|
305
|
+
no: (m: M) => N,
|
|
306
|
+
op: (n: N) => O
|
|
307
|
+
): Date
|
|
308
|
+
export function pipeZonedLocal<
|
|
309
|
+
A = never,
|
|
310
|
+
B = never,
|
|
311
|
+
C = never,
|
|
312
|
+
D = never,
|
|
313
|
+
E = never,
|
|
314
|
+
F = never,
|
|
315
|
+
G = never,
|
|
316
|
+
H = never,
|
|
317
|
+
I = never,
|
|
318
|
+
J = never,
|
|
319
|
+
K = never,
|
|
320
|
+
L = never,
|
|
321
|
+
M = never,
|
|
322
|
+
N = never,
|
|
323
|
+
O = never,
|
|
324
|
+
P extends DateTime.DateTime = never
|
|
325
|
+
>(
|
|
326
|
+
date: Date,
|
|
327
|
+
ab: (self: DateTime.Zoned) => A,
|
|
328
|
+
bc: (a: A) => B,
|
|
329
|
+
cd: (b: B) => C,
|
|
330
|
+
de: (c: C) => D,
|
|
331
|
+
ef: (d: D) => E,
|
|
332
|
+
fg: (e: E) => F,
|
|
333
|
+
gh: (f: F) => G,
|
|
334
|
+
hi: (g: G) => H,
|
|
335
|
+
ij: (h: H) => I,
|
|
336
|
+
jk: (i: I) => J,
|
|
337
|
+
kl: (j: J) => K,
|
|
338
|
+
lm: (k: K) => L,
|
|
339
|
+
mn: (l: L) => M,
|
|
340
|
+
no: (m: M) => N,
|
|
341
|
+
op: (n: N) => O,
|
|
342
|
+
pq: (o: O) => P
|
|
343
|
+
): Date
|
|
344
|
+
export function pipeZonedLocal<
|
|
345
|
+
A = never,
|
|
346
|
+
B = never,
|
|
347
|
+
C = never,
|
|
348
|
+
D = never,
|
|
349
|
+
E = never,
|
|
350
|
+
F = never,
|
|
351
|
+
G = never,
|
|
352
|
+
H = never,
|
|
353
|
+
I = never,
|
|
354
|
+
J = never,
|
|
355
|
+
K = never,
|
|
356
|
+
L = never,
|
|
357
|
+
M = never,
|
|
358
|
+
N = never,
|
|
359
|
+
O = never,
|
|
360
|
+
P = never,
|
|
361
|
+
Q extends DateTime.DateTime = never
|
|
362
|
+
>(
|
|
363
|
+
date: Date,
|
|
364
|
+
ab: (self: DateTime.Zoned) => A,
|
|
365
|
+
bc: (a: A) => B,
|
|
366
|
+
cd: (b: B) => C,
|
|
367
|
+
de: (c: C) => D,
|
|
368
|
+
ef: (d: D) => E,
|
|
369
|
+
fg: (e: E) => F,
|
|
370
|
+
gh: (f: F) => G,
|
|
371
|
+
hi: (g: G) => H,
|
|
372
|
+
ij: (h: H) => I,
|
|
373
|
+
jk: (i: I) => J,
|
|
374
|
+
kl: (j: J) => K,
|
|
375
|
+
lm: (k: K) => L,
|
|
376
|
+
mn: (l: L) => M,
|
|
377
|
+
no: (m: M) => N,
|
|
378
|
+
op: (n: N) => O,
|
|
379
|
+
pq: (o: O) => P,
|
|
380
|
+
qr: (p: P) => Q
|
|
381
|
+
): Date
|
|
382
|
+
export function pipeZonedLocal<
|
|
383
|
+
A = never,
|
|
384
|
+
B = never,
|
|
385
|
+
C = never,
|
|
386
|
+
D = never,
|
|
387
|
+
E = never,
|
|
388
|
+
F = never,
|
|
389
|
+
G = never,
|
|
390
|
+
H = never,
|
|
391
|
+
I = never,
|
|
392
|
+
J = never,
|
|
393
|
+
K = never,
|
|
394
|
+
L = never,
|
|
395
|
+
M = never,
|
|
396
|
+
N = never,
|
|
397
|
+
O = never,
|
|
398
|
+
P = never,
|
|
399
|
+
Q = never,
|
|
400
|
+
R extends DateTime.DateTime = never
|
|
401
|
+
>(
|
|
402
|
+
date: Date,
|
|
403
|
+
ab: (self: DateTime.Zoned) => A,
|
|
404
|
+
bc: (a: A) => B,
|
|
405
|
+
cd: (b: B) => C,
|
|
406
|
+
de: (c: C) => D,
|
|
407
|
+
ef: (d: D) => E,
|
|
408
|
+
fg: (e: E) => F,
|
|
409
|
+
gh: (f: F) => G,
|
|
410
|
+
hi: (g: G) => H,
|
|
411
|
+
ij: (h: H) => I,
|
|
412
|
+
jk: (i: I) => J,
|
|
413
|
+
kl: (j: J) => K,
|
|
414
|
+
lm: (k: K) => L,
|
|
415
|
+
mn: (l: L) => M,
|
|
416
|
+
no: (m: M) => N,
|
|
417
|
+
op: (n: N) => O,
|
|
418
|
+
pq: (o: O) => P,
|
|
419
|
+
qr: (p: P) => Q,
|
|
420
|
+
rs: (q: Q) => R
|
|
421
|
+
): Date
|
|
422
|
+
export function pipeZonedLocal<
|
|
423
|
+
A = never,
|
|
424
|
+
B = never,
|
|
425
|
+
C = never,
|
|
426
|
+
D = never,
|
|
427
|
+
E = never,
|
|
428
|
+
F = never,
|
|
429
|
+
G = never,
|
|
430
|
+
H = never,
|
|
431
|
+
I = never,
|
|
432
|
+
J = never,
|
|
433
|
+
K = never,
|
|
434
|
+
L = never,
|
|
435
|
+
M = never,
|
|
436
|
+
N = never,
|
|
437
|
+
O = never,
|
|
438
|
+
P = never,
|
|
439
|
+
Q = never,
|
|
440
|
+
R = never,
|
|
441
|
+
S extends DateTime.DateTime = never
|
|
442
|
+
>(
|
|
443
|
+
date: Date,
|
|
444
|
+
ab: (self: DateTime.Zoned) => A,
|
|
445
|
+
bc: (a: A) => B,
|
|
446
|
+
cd: (b: B) => C,
|
|
447
|
+
de: (c: C) => D,
|
|
448
|
+
ef: (d: D) => E,
|
|
449
|
+
fg: (e: E) => F,
|
|
450
|
+
gh: (f: F) => G,
|
|
451
|
+
hi: (g: G) => H,
|
|
452
|
+
ij: (h: H) => I,
|
|
453
|
+
jk: (i: I) => J,
|
|
454
|
+
kl: (j: J) => K,
|
|
455
|
+
lm: (k: K) => L,
|
|
456
|
+
mn: (l: L) => M,
|
|
457
|
+
no: (m: M) => N,
|
|
458
|
+
op: (n: N) => O,
|
|
459
|
+
pq: (o: O) => P,
|
|
460
|
+
qr: (p: P) => Q,
|
|
461
|
+
rs: (q: Q) => R,
|
|
462
|
+
st: (r: R) => S
|
|
463
|
+
): Date
|
|
464
|
+
export function pipeZonedLocal(date: Date, ...steps: ReadonlyArray<(value: any) => any>): Date {
|
|
465
|
+
let current: unknown = makeZonedLocal(date)
|
|
466
|
+
for (const step of steps) {
|
|
467
|
+
current = step(current)
|
|
468
|
+
}
|
|
469
|
+
if (!DateTime.isDateTime(current)) {
|
|
470
|
+
throw new TypeError("pipeZonedLocal must finish on a DateTime")
|
|
471
|
+
}
|
|
472
|
+
return DateTime.toDateUtc(current)
|
|
473
|
+
}
|
package/src/Effect.ts
CHANGED
|
@@ -2,15 +2,13 @@
|
|
|
2
2
|
/* eslint-disable prefer-destructuring */
|
|
3
3
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
4
4
|
|
|
5
|
-
import * as Def from "effect/Deferred"
|
|
6
5
|
import * as Effect from "effect/Effect"
|
|
7
6
|
import * as Option from "effect/Option"
|
|
8
7
|
import * as Ref from "effect/Ref"
|
|
9
|
-
import type { Scope } from "effect/Scope"
|
|
10
8
|
import type { Semaphore } from "effect/Semaphore"
|
|
9
|
+
import * as Struct from "effect/Struct"
|
|
11
10
|
import type * as Context from "./Context.ts"
|
|
12
11
|
import { curry } from "./Function.ts"
|
|
13
|
-
import { typedKeysOf } from "./utils.ts"
|
|
14
12
|
|
|
15
13
|
export * from "effect/Effect"
|
|
16
14
|
// v4: Effect interface not re-exported by `export *` due to local binding collision
|
|
@@ -94,9 +92,6 @@ export function ifDiff<I, R, E, A>(n: I, orig: I) {
|
|
|
94
92
|
return (f: (i: I) => Effect.Effect<A, E, R>) => ifDiff_(n, orig, f)
|
|
95
93
|
}
|
|
96
94
|
|
|
97
|
-
// NOTE: await extension doesnt work via tsplus somehow
|
|
98
|
-
export const await_ = Def.await
|
|
99
|
-
|
|
100
95
|
/**
|
|
101
96
|
* Ref has atomic modify support if synchronous, for Effect we need a Semaphore.
|
|
102
97
|
*/
|
|
@@ -151,9 +146,9 @@ export function allLower<T extends Record<string, Context.Service<any, any> | Ef
|
|
|
151
146
|
services: T
|
|
152
147
|
) {
|
|
153
148
|
return Effect.all(
|
|
154
|
-
|
|
149
|
+
Struct.keys(services).reduce((prev, cur) => {
|
|
155
150
|
const svc = services[cur]!
|
|
156
|
-
prev[(
|
|
151
|
+
prev[(cur[0]!.toLowerCase() + cur.slice(1)) as unknown as LowerFirst<typeof cur>] = svc
|
|
157
152
|
return prev
|
|
158
153
|
}, {} as any),
|
|
159
154
|
{ concurrency: "unbounded" }
|
|
@@ -186,17 +181,3 @@ export function catchAllMap<E, A2>(f: (e: E) => A2) {
|
|
|
186
181
|
return <R, A>(self: Effect.Effect<A, E, R>): Effect.Effect<A2 | A, never, R> =>
|
|
187
182
|
Effect.catch(self, (err: E) => Effect.sync(() => f(err)))
|
|
188
183
|
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Annotates each log in this scope with the specified log annotation.
|
|
192
|
-
*/
|
|
193
|
-
export function annotateLogscoped(key: string, value: string): Effect.Effect<void, never, Scope> {
|
|
194
|
-
return Effect.annotateLogsScoped(key, value)
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* Annotates each log in this scope with the specified log annotations.
|
|
199
|
-
*/
|
|
200
|
-
export function annotateLogsScoped(kvps: Record<string, string>): Effect.Effect<void, never, Scope> {
|
|
201
|
-
return Effect.annotateLogsScoped(kvps)
|
|
202
|
-
}
|
package/src/Function.ts
CHANGED
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
export * from "effect/Function"
|
|
2
2
|
export type { Predicate, Refinement } from "effect/Predicate"
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
* Construct tuples
|
|
6
|
-
*/
|
|
7
|
-
export function tuple<T extends ReadonlyArray<any>>(...t: T): Readonly<T> {
|
|
8
|
-
return t
|
|
9
|
-
}
|
|
10
|
-
|
|
11
4
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
12
5
|
|
|
13
6
|
export function tupledCurry<A, B, C>(f: (b: B) => (a: A) => C) {
|
|
@@ -12,7 +12,6 @@ import type * as Scope from "effect/Scope"
|
|
|
12
12
|
import * as Unify from "effect/Unify"
|
|
13
13
|
import * as Array from "../../../Array.ts"
|
|
14
14
|
import type { NonEmptyReadonlyArray } from "../../../Array.ts"
|
|
15
|
-
import { toNonEmptyArray } from "../../../Array.ts"
|
|
16
15
|
import * as Chunk from "../../../Chunk.ts"
|
|
17
16
|
import { NotFoundError } from "../../../client/errors.ts"
|
|
18
17
|
import * as Context from "../../../Context.ts"
|
|
@@ -407,7 +406,7 @@ export function makeRepoInternal<
|
|
|
407
406
|
const saveAllE = (a: Iterable<Encoded>) =>
|
|
408
407
|
flatMapOption(
|
|
409
408
|
Effect
|
|
410
|
-
.sync(() =>
|
|
409
|
+
.sync(() => Option.liftPredicate(Array.isReadonlyArrayNonEmpty)([...a])),
|
|
411
410
|
(a) =>
|
|
412
411
|
Effect.gen(function*() {
|
|
413
412
|
const { get, set } = yield* cms
|
|
@@ -442,7 +441,7 @@ export function makeRepoInternal<
|
|
|
442
441
|
})
|
|
443
442
|
return yield* saveAll(it)
|
|
444
443
|
.pipe(
|
|
445
|
-
Effect.andThen(Effect.sync(() =>
|
|
444
|
+
Effect.andThen(Effect.sync(() => Option.liftPredicate(Array.isReadonlyArrayNonEmpty)(evts))),
|
|
446
445
|
// TODO: for full consistency the events should be stored within the same database transaction, and then picked up.
|
|
447
446
|
(_) => flatMapOption(_, pub),
|
|
448
447
|
Effect.andThen(changeFeed.publish([Chunk.toArray(it), "save"] as [T[], "save" | "remove"])),
|
|
@@ -473,7 +472,7 @@ export function makeRepoInternal<
|
|
|
473
472
|
set(e[idKey], undefined)
|
|
474
473
|
}
|
|
475
474
|
yield* Effect
|
|
476
|
-
.sync(() =>
|
|
475
|
+
.sync(() => Option.liftPredicate(Array.isReadonlyArrayNonEmpty)(evts))
|
|
477
476
|
// TODO: for full consistency the events should be stored within the same database transaction, and then picked up.
|
|
478
477
|
.pipe((_) => flatMapOption(_, pub))
|
|
479
478
|
|
package/src/Model/dsl.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import type
|
|
3
|
-
import { toNonEmptyArray } from "../Array.ts"
|
|
2
|
+
import { isReadonlyArrayNonEmpty, type NonEmptyReadonlyArray } from "../Array.ts"
|
|
4
3
|
import * as Effect from "../Effect.ts"
|
|
4
|
+
import * as Option from "../Option.ts"
|
|
5
5
|
import { type FixEnv, get, logMany, type Pure, type PureEnvEnv, type PureLogT, set } from "../Pure.ts"
|
|
6
6
|
|
|
7
7
|
export interface PureDSL<S, S2, W> {
|
|
@@ -118,12 +118,13 @@ export function makeDSL<S1, S2, Evt>() {
|
|
|
118
118
|
export interface DSLExt<S1, S2, Evt> extends ReturnType<typeof makeDSL<S1, S2, Evt>> {}
|
|
119
119
|
|
|
120
120
|
export function ifAny<T, R, E, A>(fn: (items: NonEmptyReadonlyArray<T>) => Effect.Effect<A, E, R>) {
|
|
121
|
-
return (items: Iterable<T>) =>
|
|
121
|
+
return (items: Iterable<T>) =>
|
|
122
|
+
Effect.flatMapOption(Effect.sync(() => Option.liftPredicate(isReadonlyArrayNonEmpty)([...items])), fn)
|
|
122
123
|
}
|
|
123
124
|
|
|
124
125
|
export function ifAny_<T, R, E, A>(
|
|
125
126
|
items: Iterable<T>,
|
|
126
127
|
fn: (items: NonEmptyReadonlyArray<T>) => Effect.Effect<A, E, R>
|
|
127
128
|
) {
|
|
128
|
-
return Effect.flatMapOption(Effect.sync(() =>
|
|
129
|
+
return Effect.flatMapOption(Effect.sync(() => Option.liftPredicate(isReadonlyArrayNonEmpty)([...items])), fn)
|
|
129
130
|
}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
3
3
|
import { identity } from "effect/Function"
|
|
4
4
|
import * as Array from "../../Array.ts"
|
|
5
|
-
import { toNonEmptyArray } from "../../Array.ts"
|
|
6
5
|
import * as Option from "../../Option.ts"
|
|
7
6
|
import * as S from "../../Schema.ts"
|
|
8
7
|
import * as SchemaAST from "../../SchemaAST.ts"
|
|
@@ -439,10 +438,10 @@ export const toFilter = <
|
|
|
439
438
|
t: null as unknown as TFieldValues,
|
|
440
439
|
limit: a.limit,
|
|
441
440
|
skip: a.skip,
|
|
442
|
-
select: Option.getOrUndefined(
|
|
441
|
+
select: Option.getOrUndefined(Option.liftPredicate(Array.isReadonlyArrayNonEmpty)(aggSelect)) as any,
|
|
443
442
|
schema: a.schema,
|
|
444
443
|
computed: undefined,
|
|
445
|
-
order: Option.getOrUndefined(
|
|
444
|
+
order: Option.getOrUndefined(Option.liftPredicate(Array.isReadonlyArrayNonEmpty)(a.order)),
|
|
446
445
|
ttype: a.ttype,
|
|
447
446
|
mode: "aggregate" as const,
|
|
448
447
|
filter: a.filter.length ? a.filter : undefined
|
|
@@ -519,10 +518,10 @@ export const toFilter = <
|
|
|
519
518
|
t: null as unknown as TFieldValues,
|
|
520
519
|
limit: a.limit,
|
|
521
520
|
skip: a.skip,
|
|
522
|
-
select: Option.getOrUndefined(
|
|
521
|
+
select: Option.getOrUndefined(Option.liftPredicate(Array.isReadonlyArrayNonEmpty)(select)),
|
|
523
522
|
schema,
|
|
524
523
|
computed,
|
|
525
|
-
order: Option.getOrUndefined(
|
|
524
|
+
order: Option.getOrUndefined(Option.liftPredicate(Array.isReadonlyArrayNonEmpty)(a.order)),
|
|
526
525
|
ttype: a.ttype,
|
|
527
526
|
mode: a.mode ?? "transform",
|
|
528
527
|
filter: a.filter.length
|
package/src/Option.ts
CHANGED
|
@@ -4,22 +4,15 @@
|
|
|
4
4
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
5
5
|
// eslint-disable-next-line import/no-unassigned-import
|
|
6
6
|
import "./builtin.ts"
|
|
7
|
-
import {
|
|
7
|
+
import { type Some } from "effect/Option"
|
|
8
8
|
import * as Option from "effect/Option"
|
|
9
9
|
|
|
10
10
|
export * from "effect/Option"
|
|
11
11
|
|
|
12
|
-
export const getOrUndefined = value
|
|
13
|
-
|
|
14
12
|
export function omitableToNullable<T>(om: Option.Option<T> | undefined) {
|
|
15
13
|
return om ?? Option.fromNullishOr(om)
|
|
16
14
|
}
|
|
17
15
|
|
|
18
|
-
export const toBool = Option.match({
|
|
19
|
-
onNone: () => false,
|
|
20
|
-
onSome: () => true
|
|
21
|
-
})
|
|
22
|
-
|
|
23
16
|
export const fromBool = (b: boolean) => (b ? Option.some(true) : Option.none())
|
|
24
17
|
|
|
25
18
|
/**
|