effect 4.0.0-beta.35 → 4.0.0-beta.36

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.
Files changed (51) hide show
  1. package/dist/Channel.d.ts.map +1 -1
  2. package/dist/Channel.js +9 -7
  3. package/dist/Channel.js.map +1 -1
  4. package/dist/Cron.d.ts +7 -0
  5. package/dist/Cron.d.ts.map +1 -1
  6. package/dist/Cron.js +109 -45
  7. package/dist/Cron.js.map +1 -1
  8. package/dist/Equivalence.d.ts +52 -0
  9. package/dist/Equivalence.d.ts.map +1 -1
  10. package/dist/Equivalence.js +52 -0
  11. package/dist/Equivalence.js.map +1 -1
  12. package/dist/LayerMap.d.ts +5 -4
  13. package/dist/LayerMap.d.ts.map +1 -1
  14. package/dist/LayerMap.js.map +1 -1
  15. package/dist/PubSub.d.ts.map +1 -1
  16. package/dist/PubSub.js +9 -3
  17. package/dist/PubSub.js.map +1 -1
  18. package/dist/Schema.d.ts +29 -5
  19. package/dist/Schema.d.ts.map +1 -1
  20. package/dist/Schema.js +20 -0
  21. package/dist/Schema.js.map +1 -1
  22. package/dist/SchemaParser.d.ts +29 -0
  23. package/dist/SchemaParser.d.ts.map +1 -1
  24. package/dist/SchemaParser.js +38 -0
  25. package/dist/SchemaParser.js.map +1 -1
  26. package/dist/internal/effect.js +3 -2
  27. package/dist/internal/effect.js.map +1 -1
  28. package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
  29. package/dist/unstable/ai/LanguageModel.js +15 -3
  30. package/dist/unstable/ai/LanguageModel.js.map +1 -1
  31. package/dist/unstable/cli/Prompt.js +146 -13
  32. package/dist/unstable/cli/Prompt.js.map +1 -1
  33. package/dist/unstable/httpapi/HttpApiEndpoint.js +2 -2
  34. package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
  35. package/dist/unstable/httpapi/HttpApiMiddleware.d.ts +15 -13
  36. package/dist/unstable/httpapi/HttpApiMiddleware.d.ts.map +1 -1
  37. package/dist/unstable/httpapi/HttpApiMiddleware.js +5 -3
  38. package/dist/unstable/httpapi/HttpApiMiddleware.js.map +1 -1
  39. package/package.json +1 -1
  40. package/src/Channel.ts +12 -10
  41. package/src/Cron.ts +142 -45
  42. package/src/Equivalence.ts +56 -0
  43. package/src/LayerMap.ts +7 -5
  44. package/src/PubSub.ts +13 -5
  45. package/src/Schema.ts +32 -8
  46. package/src/SchemaParser.ts +53 -0
  47. package/src/internal/effect.ts +3 -2
  48. package/src/unstable/ai/LanguageModel.ts +17 -2
  49. package/src/unstable/cli/Prompt.ts +147 -14
  50. package/src/unstable/httpapi/HttpApiEndpoint.ts +2 -2
  51. package/src/unstable/httpapi/HttpApiMiddleware.ts +36 -20
@@ -22,24 +22,26 @@ declare const SecurityTypeId = "~effect/httpapi/HttpApiMiddleware/Security";
22
22
  * @category guards
23
23
  */
24
24
  export declare const isSecurity: (u: AnyService) => u is AnyServiceSecurity;
25
+ type ErrorConstraint = Schema.Top | ReadonlyArray<Schema.Top>;
26
+ type ErrorSchemaFromConstraint<E> = E extends ReadonlyArray<Schema.Top> ? E[number] : E extends Schema.Top ? E : never;
25
27
  /**
26
28
  * @since 4.0.0
27
29
  * @category models
28
30
  */
29
- export type HttpApiMiddleware<Provides, E extends Schema.Top, Requires> = (httpEffect: Effect.Effect<HttpServerResponse, unhandled, Provides>, options: {
31
+ export type HttpApiMiddleware<Provides, E extends ErrorConstraint, Requires> = (httpEffect: Effect.Effect<HttpServerResponse, unhandled, Provides>, options: {
30
32
  readonly endpoint: HttpApiEndpoint.AnyWithProps;
31
33
  readonly group: HttpApiGroup.AnyWithProps;
32
- }) => Effect.Effect<HttpServerResponse, unhandled | E["Type"], Requires | HttpRouter.Provided>;
34
+ }) => Effect.Effect<HttpServerResponse, unhandled | ErrorSchemaFromConstraint<E>["Type"], Requires | HttpRouter.Provided>;
33
35
  /**
34
36
  * @since 4.0.0
35
37
  * @category models
36
38
  */
37
- export type HttpApiMiddlewareSecurity<Security extends Record<string, HttpApiSecurity.HttpApiSecurity>, Provides, E extends Schema.Top, Requires> = {
39
+ export type HttpApiMiddlewareSecurity<Security extends Record<string, HttpApiSecurity.HttpApiSecurity>, Provides, E extends ErrorConstraint, Requires> = {
38
40
  readonly [K in keyof Security]: (httpEffect: Effect.Effect<HttpServerResponse, unhandled, Provides>, options: {
39
41
  readonly credential: HttpApiSecurity.HttpApiSecurity.Type<Security[K]>;
40
42
  readonly endpoint: HttpApiEndpoint.AnyWithProps;
41
43
  readonly group: HttpApiGroup.AnyWithProps;
42
- }) => Effect.Effect<HttpServerResponse, unhandled | E["Type"], Requires | HttpRouter.Provided>;
44
+ }) => Effect.Effect<HttpServerResponse, unhandled | ErrorSchemaFromConstraint<E>["Type"], Requires | HttpRouter.Provided>;
43
45
  };
44
46
  /**
45
47
  * @since 4.0.0
@@ -68,7 +70,7 @@ export interface ForClient<Id> {
68
70
  export interface AnyService extends ServiceMap.Key<any, any> {
69
71
  readonly [TypeId]: typeof TypeId;
70
72
  readonly provides: any;
71
- readonly error: Schema.Top;
73
+ readonly error: ReadonlySet<Schema.Top>;
72
74
  readonly requiredForClient: boolean;
73
75
  readonly "~ClientError": any;
74
76
  }
@@ -88,7 +90,7 @@ export interface AnyId {
88
90
  readonly [TypeId]: {
89
91
  readonly provides: any;
90
92
  readonly requires: any;
91
- readonly error: Schema.Top;
93
+ readonly error: ErrorConstraint;
92
94
  readonly clientError: any;
93
95
  readonly requiredForClient: boolean;
94
96
  };
@@ -124,7 +126,7 @@ export type ErrorSchema<A> = A extends {
124
126
  readonly [TypeId]: {
125
127
  readonly error: infer E;
126
128
  };
127
- } ? E extends Schema.Top ? E : never : never;
129
+ } ? ErrorSchemaFromConstraint<E> : never;
128
130
  /**
129
131
  * @since 4.0.0
130
132
  * @category models
@@ -166,7 +168,7 @@ export type ErrorServicesDecode<A> = ErrorSchema<A>["DecodingServices"];
166
168
  export type ServiceClass<Self, Id extends string, Config extends {
167
169
  requires: any;
168
170
  provides: any;
169
- error: Schema.Top;
171
+ error: ErrorConstraint;
170
172
  clientError: any;
171
173
  requiredForClient: boolean;
172
174
  security: Record<string, HttpApiSecurity.HttpApiSecurity>;
@@ -181,7 +183,7 @@ export type ServiceClass<Self, Id extends string, Config extends {
181
183
  };
182
184
  };
183
185
  readonly [TypeId]: typeof TypeId;
184
- readonly error: Config["error"];
186
+ readonly error: ReadonlySet<Schema.Top>;
185
187
  readonly requiredForClient: Config["requiredForClient"];
186
188
  readonly "~ClientError": Config["clientError"];
187
189
  } & ([keyof Config["security"]] extends [never] ? {} : {
@@ -200,7 +202,7 @@ export declare const Service: <Self, Config extends {
200
202
  requires: never;
201
203
  provides: never;
202
204
  clientError: never;
203
- }>() => <const Id extends string, Error extends Schema.Top = never, const Security extends Record<string, HttpApiSecurity.HttpApiSecurity> = never, RequiredForClient extends boolean = false>(id: Id, options?: {
205
+ }>() => <const Id extends string, const Error extends ErrorConstraint = never, const Security extends Record<string, HttpApiSecurity.HttpApiSecurity> = never, RequiredForClient extends boolean = false>(id: Id, options?: {
204
206
  readonly error?: Error | undefined;
205
207
  readonly security?: Security | undefined;
206
208
  readonly requiredForClient?: RequiredForClient | undefined;
@@ -237,14 +239,14 @@ export declare const Service: <Self, Config extends {
237
239
  * @since 4.0.0
238
240
  * @category SchemaError transform
239
241
  */
240
- export declare const layerSchemaErrorTransform: <Id, E extends Schema.Top, Requires>(service: ServiceMap.Service<Id, HttpApiMiddleware<never, E, Requires>>, transform: (error: Schema.SchemaError, context: {
242
+ export declare const layerSchemaErrorTransform: <Id, E extends ErrorConstraint, Requires>(service: ServiceMap.Service<Id, HttpApiMiddleware<never, E, Requires>>, transform: (error: Schema.SchemaError, context: {
241
243
  readonly endpoint: HttpApiEndpoint.AnyWithProps;
242
244
  readonly group: HttpApiGroup.AnyWithProps;
243
- }) => Effect.Effect<HttpServerResponse, E["Type"] | Schema.SchemaError, Requires | HttpRouter.Provided>) => Layer.Layer<Id>;
245
+ }) => Effect.Effect<HttpServerResponse, ErrorSchemaFromConstraint<E>["Type"] | Schema.SchemaError, Requires | HttpRouter.Provided>) => Layer.Layer<Id>;
244
246
  /**
245
247
  * @since 4.0.0
246
248
  * @category client
247
249
  */
248
- export declare const layerClient: <Id extends AnyId, S, R, EX = never, RX = never>(tag: ServiceMap.Key<Id, S>, service: HttpApiMiddlewareClient<Id[typeof TypeId]["error"]["Type"], Id[typeof TypeId]["clientError"], R> | Effect.Effect<HttpApiMiddlewareClient<Id[typeof TypeId]["error"]["Type"], Id[typeof TypeId]["clientError"], R>, EX, RX>) => Layer.Layer<ForClient<Id>, EX, R | Exclude<RX, Scope>>;
250
+ export declare const layerClient: <Id extends AnyId, S, R, EX = never, RX = never>(tag: ServiceMap.Key<Id, S>, service: HttpApiMiddlewareClient<Error<Id>, Id[typeof TypeId]["clientError"], R> | Effect.Effect<HttpApiMiddlewareClient<Error<Id>, Id[typeof TypeId]["clientError"], R>, EX, RX>) => Layer.Layer<ForClient<Id>, EX, R | Exclude<RX, Scope>>;
249
251
  export {};
250
252
  //# sourceMappingURL=HttpApiMiddleware.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HttpApiMiddleware.d.ts","sourceRoot":"","sources":["../../../src/unstable/httpapi/HttpApiMiddleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HttpApiMiddleware.d.ts","sourceRoot":"","sources":["../../../src/unstable/httpapi/HttpApiMiddleware.ts"],"names":[],"mappings":"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"}
@@ -32,10 +32,8 @@ export const Service = () => (id, options) => {
32
32
  }
33
33
  });
34
34
  self[TypeId] = TypeId;
35
+ self.error = getError(options?.error);
35
36
  self.requiredForClient = options?.requiredForClient ?? false;
36
- if (options?.error !== undefined) {
37
- self.error = options.error;
38
- }
39
37
  if (options?.security !== undefined) {
40
38
  if (Object.keys(options.security).length === 0) {
41
39
  throw new Error("HttpApiMiddleware.Service: security object must not be empty");
@@ -45,6 +43,10 @@ export const Service = () => (id, options) => {
45
43
  }
46
44
  return self;
47
45
  };
46
+ function getError(error) {
47
+ if (error === undefined) return new Set();
48
+ return new Set(Array.isArray(error) ? error : [error]);
49
+ }
48
50
  /**
49
51
  * Implement a middleware Layer that transforms `SchemaError`'s.
50
52
  *
@@ -1 +1 @@
1
- {"version":3,"file":"HttpApiMiddleware.js","names":["Effect","Layer","hasProperty","Schema","Scope","ServiceMap","TypeId","SecurityTypeId","isSecurity","u","Service","id","options","Err","globalThis","Error","limit","stackTraceLimit","creationError","self","Object","defineProperty","get","stack","requiredForClient","error","undefined","security","keys","length","layerSchemaErrorTransform","service","transform","succeed","httpEffect","catch","e","isSchemaError","fail","layerClient","tag","effectServices","gen","services","pipe","omit","middleware","isEffect","makeUnsafe","Map","key","updateServices","requestContext","merge"],"sources":["../../../src/unstable/httpapi/HttpApiMiddleware.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"HttpApiMiddleware.js","names":["Effect","Layer","hasProperty","Schema","Scope","ServiceMap","TypeId","SecurityTypeId","isSecurity","u","Service","id","options","Err","globalThis","Error","limit","stackTraceLimit","creationError","self","Object","defineProperty","get","stack","error","getError","requiredForClient","security","undefined","keys","length","Set","Array","isArray","layerSchemaErrorTransform","service","transform","succeed","httpEffect","catch","e","isSchemaError","fail","layerClient","tag","effectServices","gen","services","pipe","omit","middleware","isEffect","makeUnsafe","Map","key","updateServices","requestContext","merge"],"sources":["../../../src/unstable/httpapi/HttpApiMiddleware.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "effect",
3
3
  "type": "module",
4
- "version": "4.0.0-beta.35",
4
+ "version": "4.0.0-beta.36",
5
5
  "license": "MIT",
6
6
  "description": "The missing standard library for TypeScript, for writing production-grade software.",
7
7
  "homepage": "https://effect.website",
package/src/Channel.ts CHANGED
@@ -4590,17 +4590,19 @@ export const scanEffect: {
4590
4590
  Effect.map(toTransform(self)(upstream, scope), (pull) => {
4591
4591
  let state = initial
4592
4592
  let isFirst = true
4593
- if (isFirst) {
4594
- isFirst = false
4595
- return Effect.succeed(state)
4596
- }
4597
- return Effect.map(
4598
- Effect.flatMap(pull, (a) => f(state, a)),
4599
- (newState) => {
4600
- state = newState
4601
- return state
4593
+ return Effect.suspend(() => {
4594
+ if (isFirst) {
4595
+ isFirst = false
4596
+ return Effect.succeed(state)
4602
4597
  }
4603
- )
4598
+ return Effect.map(
4599
+ Effect.flatMap(pull, (a) => f(state, a)),
4600
+ (newState) => {
4601
+ state = newState
4602
+ return state
4603
+ }
4604
+ )
4605
+ })
4604
4606
  })
4605
4607
  ))
4606
4608
 
package/src/Cron.ts CHANGED
@@ -100,6 +100,15 @@ export interface Cron extends Pipeable, Equal.Equal, Inspectable {
100
100
  readonly weekday: number
101
101
  }
102
102
  /** @internal */
103
+ readonly last: {
104
+ readonly second: number
105
+ readonly minute: number
106
+ readonly hour: number
107
+ readonly day: number
108
+ readonly month: number
109
+ readonly weekday: number
110
+ }
111
+ /** @internal */
103
112
  readonly next: {
104
113
  readonly second: ReadonlyArray<number | undefined>
105
114
  readonly minute: ReadonlyArray<number | undefined>
@@ -108,6 +117,15 @@ export interface Cron extends Pipeable, Equal.Equal, Inspectable {
108
117
  readonly month: ReadonlyArray<number | undefined>
109
118
  readonly weekday: ReadonlyArray<number | undefined>
110
119
  }
120
+ /** @internal */
121
+ readonly prev: {
122
+ readonly second: ReadonlyArray<number | undefined>
123
+ readonly minute: ReadonlyArray<number | undefined>
124
+ readonly hour: ReadonlyArray<number | undefined>
125
+ readonly day: ReadonlyArray<number | undefined>
126
+ readonly month: ReadonlyArray<number | undefined>
127
+ readonly weekday: ReadonlyArray<number | undefined>
128
+ }
111
129
  }
112
130
 
113
131
  function toPojo(cron: Cron): Record<string, unknown> {
@@ -325,31 +343,64 @@ export const make = (values: {
325
343
  weekday: weekdays[0] ?? 0
326
344
  }
327
345
 
346
+ o.last = {
347
+ second: seconds[seconds.length - 1] ?? 59,
348
+ minute: minutes[minutes.length - 1] ?? 59,
349
+ hour: hours[hours.length - 1] ?? 23,
350
+ day: days[days.length - 1] ?? 31,
351
+ month: (months[months.length - 1] ?? 12) - 1,
352
+ weekday: weekdays[weekdays.length - 1] ?? 6
353
+ }
354
+
328
355
  o.next = {
329
- second: nextLookupTable(seconds, 60),
330
- minute: nextLookupTable(minutes, 60),
331
- hour: nextLookupTable(hours, 24),
332
- day: nextLookupTable(days, 32),
333
- month: nextLookupTable(months, 13),
334
- weekday: nextLookupTable(weekdays, 7)
356
+ second: lookupTable(seconds, 60, "next"),
357
+ minute: lookupTable(minutes, 60, "next"),
358
+ hour: lookupTable(hours, 24, "next"),
359
+ day: lookupTable(days, 32, "next"),
360
+ month: lookupTable(months, 13, "next"),
361
+ weekday: lookupTable(weekdays, 7, "next")
362
+ }
363
+
364
+ o.prev = {
365
+ second: lookupTable(seconds, 60, "prev"),
366
+ minute: lookupTable(minutes, 60, "prev"),
367
+ hour: lookupTable(hours, 24, "prev"),
368
+ day: lookupTable(days, 32, "prev"),
369
+ month: lookupTable(months, 13, "prev"),
370
+ weekday: lookupTable(weekdays, 7, "prev")
335
371
  }
336
372
 
337
373
  return o
338
374
  }
339
375
 
340
- const nextLookupTable = (values: ReadonlyArray<number>, size: number): Array<number | undefined> => {
376
+ const lookupTable = (
377
+ values: ReadonlyArray<number>,
378
+ size: number,
379
+ dir: "next" | "prev"
380
+ ): Array<number | undefined> => {
341
381
  const result = new Array(size).fill(undefined)
342
382
  if (values.length === 0) {
343
383
  return result
344
384
  }
345
385
 
346
386
  let current: number | undefined = undefined
347
- let index = values.length - 1
348
- for (let i = size - 1; i >= 0; i--) {
349
- while (index >= 0 && values[index] >= i) {
350
- current = values[index--]
387
+
388
+ if (dir === "next") {
389
+ let index = values.length - 1
390
+ for (let i = size - 1; i >= 0; i--) {
391
+ while (index >= 0 && values[index] >= i) {
392
+ current = values[index--]
393
+ }
394
+ result[i] = current
395
+ }
396
+ } else {
397
+ let index = 0
398
+ for (let i = 0; i < size; i++) {
399
+ while (index < values.length && values[index] <= i) {
400
+ current = values[index++]
401
+ }
402
+ result[i] = current
351
403
  }
352
- result[i] = current
353
404
  }
354
405
 
355
406
  return result
@@ -587,38 +638,61 @@ const daysInMonth = (date: Date): number =>
587
638
  * @category utils
588
639
  */
589
640
  export const next = (cron: Cron, now?: DateTime.DateTime.Input): Date => {
641
+ return stepCron(cron, now, "next")
642
+ }
643
+
644
+ /**
645
+ * Returns the previous scheduled date/time for the given Cron instance.
646
+ *
647
+ * @since 4.0.0
648
+ * @category utils
649
+ */
650
+ export const prev = (cron: Cron, now?: DateTime.DateTime.Input): Date => {
651
+ return stepCron(cron, now, "prev")
652
+ }
653
+
654
+ const stepCron = (cron: Cron, now: DateTime.DateTime.Input | undefined, direction: "next" | "prev"): Date => {
590
655
  const tz = Option.getOrUndefined(cron.tz)
591
656
  const zoned = dateTime.makeZonedUnsafe(now ?? new Date(), {
592
657
  timeZone: tz
593
658
  })
594
659
 
660
+ const reverse = direction === "prev"
661
+ const tick = reverse ? -1 : 1
662
+ const table = cron[direction]
663
+ const boundary = reverse ? cron.last : cron.first
664
+
665
+ const needsStep = reverse ?
666
+ (next: number, current: number) => next < current :
667
+ (next: number, current: number) => next > current
668
+
595
669
  const utc = tz !== undefined && dateTime.isTimeZoneNamed(tz) && tz.id === "UTC"
596
670
  const adjustDst = utc ? constVoid : (current: Date) => {
597
671
  const adjusted = dateTime.makeZonedUnsafe(current, {
598
672
  timeZone: zoned.zone,
599
- adjustForTimeZone: true
673
+ adjustForTimeZone: true,
674
+ disambiguation: reverse ? "later" : undefined
600
675
  }).pipe(dateTime.toDate)
601
676
 
602
- // TODO: This implementation currently only skips forward when transitioning into daylight savings time.
603
677
  const drift = current.getTime() - adjusted.getTime()
604
- if (drift > 0) {
605
- current.setTime(current.getTime() + drift)
678
+ if (reverse ? drift !== 0 : drift > 0) {
679
+ current.setTime(reverse ? adjusted.getTime() : current.getTime() + drift)
606
680
  }
607
681
  }
608
682
 
609
683
  const result = dateTime.mutate(zoned, (current) => {
610
- current.setUTCSeconds(current.getUTCSeconds() + 1, 0)
684
+ current.setUTCSeconds(current.getUTCSeconds() + tick, 0)
611
685
 
612
686
  for (let i = 0; i < 10_000; i++) {
613
687
  if (cron.seconds.size !== 0) {
614
688
  const currentSecond = current.getUTCSeconds()
615
- const nextSecond = cron.next.second[currentSecond]
689
+ const nextSecond = table.second[currentSecond]
616
690
  if (nextSecond === undefined) {
617
- current.setUTCMinutes(current.getUTCMinutes() + 1, cron.first.second)
691
+ current.setUTCMinutes(current.getUTCMinutes() + tick, boundary.second)
618
692
  adjustDst(current)
619
693
  continue
620
694
  }
621
- if (nextSecond > currentSecond) {
695
+ if (needsStep(nextSecond, currentSecond)) {
622
696
  current.setUTCSeconds(nextSecond)
623
697
  adjustDst(current)
624
698
  continue
@@ -627,14 +701,14 @@ export const next = (cron: Cron, now?: DateTime.DateTime.Input): Date => {
627
701
 
628
702
  if (cron.minutes.size !== 0) {
629
703
  const currentMinute = current.getUTCMinutes()
630
- const nextMinute = cron.next.minute[currentMinute]
704
+ const nextMinute = table.minute[currentMinute]
631
705
  if (nextMinute === undefined) {
632
- current.setUTCHours(current.getUTCHours() + 1, cron.first.minute, cron.first.second)
706
+ current.setUTCHours(current.getUTCHours() + tick, boundary.minute, boundary.second)
633
707
  adjustDst(current)
634
708
  continue
635
709
  }
636
- if (nextMinute > currentMinute) {
637
- current.setUTCMinutes(nextMinute, cron.first.second)
710
+ if (needsStep(nextMinute, currentMinute)) {
711
+ current.setUTCMinutes(nextMinute, boundary.second)
638
712
  adjustDst(current)
639
713
  continue
640
714
  }
@@ -642,40 +716,55 @@ export const next = (cron: Cron, now?: DateTime.DateTime.Input): Date => {
642
716
 
643
717
  if (cron.hours.size !== 0) {
644
718
  const currentHour = current.getUTCHours()
645
- const nextHour = cron.next.hour[currentHour]
719
+ const nextHour = table.hour[currentHour]
646
720
  if (nextHour === undefined) {
647
- current.setUTCDate(current.getUTCDate() + 1)
648
- current.setUTCHours(cron.first.hour, cron.first.minute, cron.first.second)
721
+ current.setUTCDate(current.getUTCDate() + tick)
722
+ current.setUTCHours(boundary.hour, boundary.minute, boundary.second)
649
723
  adjustDst(current)
650
724
  continue
651
725
  }
652
- if (nextHour > currentHour) {
653
- current.setUTCHours(nextHour, cron.first.minute, cron.first.second)
726
+ if (needsStep(nextHour, currentHour)) {
727
+ current.setUTCHours(nextHour, boundary.minute, boundary.second)
654
728
  adjustDst(current)
655
729
  continue
656
730
  }
657
731
  }
658
732
 
659
733
  if (cron.weekdays.size !== 0 || cron.days.size !== 0) {
660
- let a: number = Infinity
661
- let b: number = Infinity
734
+ let a: number = reverse ? -Infinity : Infinity
735
+ let b: number = reverse ? -Infinity : Infinity
662
736
 
663
737
  if (cron.weekdays.size !== 0) {
664
738
  const currentWeekday = current.getUTCDay()
665
- const nextWeekday = cron.next.weekday[currentWeekday]
666
- a = nextWeekday === undefined ? 7 - currentWeekday + cron.first.weekday : nextWeekday - currentWeekday
739
+ const nextWeekday = table.weekday[currentWeekday]
740
+ if (nextWeekday === undefined) {
741
+ a = reverse ?
742
+ currentWeekday - 7 + boundary.weekday :
743
+ 7 - currentWeekday + boundary.weekday
744
+ } else {
745
+ a = nextWeekday - currentWeekday
746
+ }
667
747
  }
668
748
 
669
749
  if (cron.days.size !== 0 && a !== 0) {
670
750
  const currentDay = current.getUTCDate()
671
- const nextDay = cron.next.day[currentDay]
672
- b = nextDay === undefined ? daysInMonth(current) - currentDay + cron.first.day : nextDay - currentDay
751
+ const nextDay = table.day[currentDay]
752
+ if (nextDay === undefined) {
753
+ if (reverse) {
754
+ const prevMonthDays = daysInMonth(new Date(Date.UTC(current.getUTCFullYear(), current.getUTCMonth(), 0)))
755
+ b = -(currentDay + (prevMonthDays - boundary.day))
756
+ } else {
757
+ b = daysInMonth(current) - currentDay + boundary.day
758
+ }
759
+ } else {
760
+ b = nextDay - currentDay
761
+ }
673
762
  }
674
763
 
675
- const addDays = Math.min(a, b)
764
+ const addDays = reverse ? Math.max(a, b) : Math.min(a, b)
676
765
  if (addDays !== 0) {
677
766
  current.setUTCDate(current.getUTCDate() + addDays)
678
- current.setUTCHours(cron.first.hour, cron.first.minute, cron.first.second)
767
+ current.setUTCHours(boundary.hour, boundary.minute, boundary.second)
679
768
  adjustDst(current)
680
769
  continue
681
770
  }
@@ -683,17 +772,25 @@ export const next = (cron: Cron, now?: DateTime.DateTime.Input): Date => {
683
772
 
684
773
  if (cron.months.size !== 0) {
685
774
  const currentMonth = current.getUTCMonth() + 1
686
- const nextMonth = cron.next.month[currentMonth]
775
+ const nextMonth = table.month[currentMonth]
776
+ const clampBoundaryDay = (targetMonthIndex: number): number => {
777
+ if (cron.days.size !== 0) {
778
+ return boundary.day
779
+ }
780
+ const maxDayInMonth = daysInMonth(new Date(Date.UTC(current.getUTCFullYear(), targetMonthIndex + 1, 0)))
781
+ return Math.min(boundary.day, maxDayInMonth)
782
+ }
687
783
  if (nextMonth === undefined) {
688
- current.setUTCFullYear(current.getUTCFullYear() + 1)
689
- current.setUTCMonth(cron.first.month, cron.first.day)
690
- current.setUTCHours(cron.first.hour, cron.first.minute, cron.first.second)
784
+ current.setUTCFullYear(current.getUTCFullYear() + tick)
785
+ current.setUTCMonth(boundary.month, clampBoundaryDay(boundary.month))
786
+ current.setUTCHours(boundary.hour, boundary.minute, boundary.second)
691
787
  adjustDst(current)
692
788
  continue
693
789
  }
694
- if (nextMonth > currentMonth) {
695
- current.setUTCMonth(nextMonth - 1, cron.first.day)
696
- current.setUTCHours(cron.first.hour, cron.first.minute, cron.first.second)
790
+ if (needsStep(nextMonth, currentMonth)) {
791
+ const targetMonthIndex = nextMonth - 1
792
+ current.setUTCMonth(targetMonthIndex, clampBoundaryDay(targetMonthIndex))
793
+ current.setUTCHours(boundary.hour, boundary.minute, boundary.second)
697
794
  adjustDst(current)
698
795
  continue
699
796
  }
@@ -702,7 +799,7 @@ export const next = (cron: Cron, now?: DateTime.DateTime.Input): Date => {
702
799
  return
703
800
  }
704
801
 
705
- throw new Error("Unable to find next cron date")
802
+ throw new Error("Unable to find " + direction + " cron date")
706
803
  })
707
804
 
708
805
  return dateTime.toDateUtc(result)
@@ -1060,3 +1060,59 @@ export function makeReducer<A>() {
1060
1060
  combineAll
1061
1061
  )
1062
1062
  }
1063
+
1064
+ /**
1065
+ * An `Equivalence` instance for `Date` objects.
1066
+ *
1067
+ * Dates are compared by their time value (milliseconds since the Unix epoch),
1068
+ * using {@link Date.prototype.getTime}.
1069
+ *
1070
+ * When to use this:
1071
+ * - When comparing `Date` objects by their exact point in time
1072
+ * - When you need value-based equality instead of reference equality
1073
+ * - When working with collections that contain `Date` values
1074
+ *
1075
+ * Behavior:
1076
+ * - Does not mutate inputs
1077
+ * - Two dates are equivalent if `self.getTime() === that.getTime()`
1078
+ * - Internally uses {@link Number} equivalence
1079
+ * - Different `Date` instances representing the same time are considered equivalent
1080
+ *
1081
+ * **Example**
1082
+ *
1083
+ * ```ts
1084
+ * import { Equivalence } from "effect"
1085
+ *
1086
+ * const d1 = new Date("2020-01-01T00:00:00.000Z")
1087
+ * const d2 = new Date("2020-01-01T00:00:00.000Z")
1088
+ * const d3 = new Date("2021-01-01T00:00:00.000Z")
1089
+ * const invalidDate1 = new Date("foo")
1090
+ * const invalidDate2 = new Date("bar")
1091
+ *
1092
+ * console.log(Equivalence.Date(d1, d2)) // true
1093
+ * console.log(Equivalence.Date(d1, d3)) // false
1094
+ * console.log(Equivalence.Date(invalidDate1, invalidDate2)) // true
1095
+ * console.log(Equivalence.Date(invalidDate1, d1)) // false
1096
+ * ```
1097
+ *
1098
+ * **Example** (Reference vs value equality)
1099
+ *
1100
+ * ```ts
1101
+ * import { Equivalence } from "effect"
1102
+ *
1103
+ * const d1 = new Date(0)
1104
+ * const d2 = new Date(0)
1105
+ *
1106
+ * console.log(d1 === d2) // false (different references)
1107
+ * console.log(Equivalence.Date(d1, d2)) // true (same time value)
1108
+ * ```
1109
+ *
1110
+ * See also: {@link Number}, {@link mapInput}, {@link strictEqual}
1111
+ *
1112
+ * @category instances
1113
+ * @since 4.0.0
1114
+ */
1115
+ export const Date: Equivalence<Date> = mapInput(
1116
+ Number,
1117
+ (d: Date) => d.getTime()
1118
+ )
package/src/LayerMap.ts CHANGED
@@ -12,6 +12,8 @@ import type { Mutable, NoExcessProperties } from "./Types.ts"
12
12
 
13
13
  const TypeId = "~effect/LayerMap"
14
14
 
15
+ type IdleTimeToLiveInput<K> = Duration.Input | ((key: K) => Duration.Input)
16
+
15
17
  /**
16
18
  * @since 3.14.0
17
19
  * @category Models
@@ -119,7 +121,7 @@ export const make: <
119
121
  >(
120
122
  lookup: (key: K) => L,
121
123
  options?: {
122
- readonly idleTimeToLive?: Duration.Input | undefined
124
+ readonly idleTimeToLive?: IdleTimeToLiveInput<K> | undefined
123
125
  readonly preloadKeys?: PreloadKeys
124
126
  } | undefined
125
127
  ) => Effect.Effect<
@@ -129,7 +131,7 @@ export const make: <
129
131
  > = Effect.fnUntraced(function*<I, K, EL, RL>(
130
132
  lookup: (key: K) => Layer.Layer<I, EL, RL>,
131
133
  options?: {
132
- readonly idleTimeToLive?: Duration.Input | undefined
134
+ readonly idleTimeToLive?: IdleTimeToLiveInput<K> | undefined
133
135
  } | undefined
134
136
  ) {
135
137
  const services = yield* Effect.services<never>()
@@ -198,7 +200,7 @@ export const fromRecord = <
198
200
  >(
199
201
  layers: Layers,
200
202
  options?: {
201
- readonly idleTimeToLive?: Duration.Input | undefined
203
+ readonly idleTimeToLive?: IdleTimeToLiveInput<keyof Layers> | undefined
202
204
  readonly preload?: Preload | undefined
203
205
  } | undefined
204
206
  ): Effect.Effect<
@@ -309,7 +311,7 @@ export const Service = <Self>() =>
309
311
  | NoExcessProperties<{
310
312
  readonly lookup: (key: any) => Layer.Layer<any, any, any>
311
313
  readonly dependencies?: ReadonlyArray<Layer.Layer<any, any, any>> | undefined
312
- readonly idleTimeToLive?: Duration.Input | undefined
314
+ readonly idleTimeToLive?: IdleTimeToLiveInput<any> | undefined
313
315
  readonly preloadKeys?:
314
316
  | Iterable<Options extends { readonly lookup: (key: infer K) => any } ? K : never>
315
317
  | undefined
@@ -317,7 +319,7 @@ export const Service = <Self>() =>
317
319
  | NoExcessProperties<{
318
320
  readonly layers: Record<string, Layer.Layer<any, any, any>>
319
321
  readonly dependencies?: ReadonlyArray<Layer.Layer<any, any, any>> | undefined
320
- readonly idleTimeToLive?: Duration.Input | undefined
322
+ readonly idleTimeToLive?: IdleTimeToLiveInput<any> | undefined
321
323
  readonly preload?: boolean | undefined
322
324
  }, Options>
323
325
  >(