Skip to content

Commit

Permalink
add dtslint tests for retry/repeat
Browse files Browse the repository at this point in the history
  • Loading branch information
tim-smart committed Jan 9, 2024
1 parent d4f7b77 commit d264324
Show file tree
Hide file tree
Showing 3 changed files with 150 additions and 3 deletions.
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,6 @@
"editor.suggestSelection": "recentlyUsed",
"editor.wordBasedSuggestions": "matchingDocuments",
"editor.parameterHints.enabled": true,
"files.insertFinalNewline": true
"files.insertFinalNewline": true,
"typescript.tsserver.experimental.enableProjectDiagnostics": false
}
142 changes: 142 additions & 0 deletions packages/effect/dtslint/Effect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ import type { Cause } from "effect/Cause"
import * as Effect from "effect/Effect"
import { pipe } from "effect/Function"
import * as Predicate from "effect/Predicate"
import * as Schedule from "effect/Schedule"

declare const string: Effect.Effect<"dep-1", "err-1", string>
declare const number: Effect.Effect<"dep-2", "err-2", number>
declare const boolean: Effect.Effect<"dep-3", never, boolean>
declare const stringArray: Array<Effect.Effect<"dep-3", "err-3", string>>
declare const numberRecord: Record<string, Effect.Effect<"dep-4", "err-4", number>>

Expand Down Expand Up @@ -700,3 +702,143 @@ string.pipe(Effect.andThen(Promise.resolve(123)))

// $ExpectType Effect<"dep-1", "err-1" | UnknownException, number>
string.pipe(Effect.andThen(() => Promise.resolve(123)))

// -------------------------------------------------------------------------------------
// retry
// -------------------------------------------------------------------------------------

// $ExpectType Effect<"dep-1", "err-1", string>
Effect.retry(string, Schedule.forever)

// $ExpectType Effect<"dep-1", "err-1", string>
string.pipe(Effect.retry(Schedule.forever))

// $ExpectType Effect<"dep-1", "err-1", string>
Effect.retry(string, { schedule: Schedule.forever })

// $ExpectType Effect<"dep-1", "err-1", string>
string.pipe(Effect.retry({ schedule: Schedule.forever }))

// $ExpectType Effect<"dep-1", "err-1", string>
Effect.retry(string, {
schedule: Schedule.forever,
until: (
_ // $ExpectType "err-1"
) => true
})

// $ExpectType Effect<"dep-1", "err-1", string>
string.pipe(Effect.retry({
schedule: Schedule.forever,
until: (
_ // $ExpectType "err-1"
) => true
}))

// $ExpectType Effect<"dep-1" | "dep-3", "err-1", string>
Effect.retry(string, {
schedule: Schedule.forever,
until: (
_ // $ExpectType "err-1"
) => boolean
})

// $ExpectType Effect<"dep-1" | "dep-3", "err-1", string>
string.pipe(Effect.retry({
schedule: Schedule.forever,
until: (
_ // $ExpectType "err-1"
) => boolean
}))

// $ExpectType Effect<never, "err", never>
Effect.retry(Effect.fail(""), {
until: (
_ // $ExpectType string
): _ is "err" => true
})

// $ExpectType Effect<never, "err", never>
Effect.fail("").pipe(Effect.retry({
until: (
_ // $ExpectType string
): _ is "err" => true
}))

// $ExpectType Effect<never, string, never>
Effect.retry(Effect.fail(""), {
schedule: Schedule.forever,
until: (
_ // $ExpectType string
): _ is "err" => true
})

// -------------------------------------------------------------------------------------
// repeat
// -------------------------------------------------------------------------------------

// $ExpectType Effect<"dep-1", "err-1", number>
Effect.repeat(string, Schedule.forever)

// $ExpectType Effect<"dep-1", "err-1", number>
string.pipe(Effect.repeat(Schedule.forever))

// $ExpectType Effect<"dep-1", "err-1", number>
Effect.repeat(string, { schedule: Schedule.forever })

// $ExpectType Effect<"dep-1", "err-1", number>
string.pipe(Effect.repeat({ schedule: Schedule.forever }))

// $ExpectType Effect<"dep-1", "err-1", number>
Effect.repeat(string, {
schedule: Schedule.forever,
until: (
_ // $ExpectType string
) => true
})

// $ExpectType Effect<"dep-1", "err-1", number>
string.pipe(Effect.repeat({
schedule: Schedule.forever,
until: (
_ // $ExpectType string
) => true
}))

// $ExpectType Effect<"dep-1" | "dep-3", "err-1", number>
Effect.repeat(string, {
schedule: Schedule.forever,
until: (
_ // $ExpectType string
) => boolean
})

// $ExpectType Effect<"dep-1" | "dep-3", "err-1", number>
string.pipe(Effect.repeat({
schedule: Schedule.forever,
until: (
_ // $ExpectType string
) => boolean
}))

// $ExpectType Effect<never, never, 123>
Effect.repeat(Effect.succeed(123), {
until: (
_ // $ExpectType number
): _ is 123 => true
})

// $ExpectType Effect<never, never, 123>
Effect.succeed(123).pipe(Effect.repeat({
until: (
_ // $ExpectType number
): _ is 123 => true
}))

// $ExpectType Effect<never, never, number>
Effect.repeat(Effect.succeed(""), {
schedule: Schedule.forever,
until: (
_ // $ExpectType string
): _ is "hello" => true
})
8 changes: 6 additions & 2 deletions packages/effect/src/Effect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1772,7 +1772,9 @@ export declare namespace Retry {
| (O extends { schedule: Schedule.Schedule<infer X, infer _I, infer _O> } ? X : never)
| (O extends { while: (...args: Array<any>) => Effect<infer X, infer _E, infer _A> } ? X : never)
| (O extends { until: (...args: Array<any>) => Effect<infer X, infer _E, infer _A> } ? X : never),
E,
(O extends { schedule: Schedule.Schedule<infer _R, infer _I, infer _O> } ? E
: O extends { until: Refinement<E, infer E2> } ? E2
: E),
A
> extends infer Z ? Z : never

Expand Down Expand Up @@ -4045,7 +4047,9 @@ export declare namespace Repeat {
| (O extends { while: (...args: Array<any>) => Effect<infer X, infer _E, infer _A> } ? X : never)
| (O extends { until: (...args: Array<any>) => Effect<infer X, infer _E, infer _A> } ? X : never),
E,
(O extends { schedule: Schedule.Schedule<infer _R, infer _I, infer Out> } ? Out : A)
(O extends { schedule: Schedule.Schedule<infer _R, infer _I, infer Out> } ? Out
: O extends { until: Refinement<A, infer B> } ? B
: A)
> extends infer Z ? Z : never

/**
Expand Down

0 comments on commit d264324

Please sign in to comment.