effect 3.3.0 → 3.3.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/dist/cjs/Chunk.js +28 -14
- package/dist/cjs/Chunk.js.map +1 -1
- package/dist/cjs/Config.js.map +1 -1
- package/dist/cjs/Either.js +1 -1
- package/dist/cjs/Either.js.map +1 -1
- package/dist/cjs/Option.js +1 -1
- package/dist/cjs/Option.js.map +1 -1
- package/dist/cjs/Predicate.js +41 -1
- package/dist/cjs/Predicate.js.map +1 -1
- package/dist/cjs/Redacted.js +50 -1
- package/dist/cjs/Redacted.js.map +1 -1
- package/dist/cjs/Stream.js.map +1 -1
- package/dist/cjs/Struct.js.map +1 -1
- package/dist/cjs/internal/cause.js +1 -1
- package/dist/cjs/internal/cause.js.map +1 -1
- package/dist/cjs/internal/config.js +1 -1
- package/dist/cjs/internal/config.js.map +1 -1
- package/dist/cjs/internal/fiberRuntime.js +1 -1
- package/dist/cjs/internal/fiberRuntime.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/Chunk.d.ts +23 -5
- package/dist/dts/Chunk.d.ts.map +1 -1
- package/dist/dts/Config.d.ts +1 -1
- package/dist/dts/Config.d.ts.map +1 -1
- package/dist/dts/Either.d.ts.map +1 -1
- package/dist/dts/Option.d.ts.map +1 -1
- package/dist/dts/Predicate.d.ts +42 -2
- package/dist/dts/Predicate.d.ts.map +1 -1
- package/dist/dts/Redacted.d.ts +54 -0
- package/dist/dts/Redacted.d.ts.map +1 -1
- package/dist/dts/Stream.d.ts +0 -3
- package/dist/dts/Stream.d.ts.map +1 -1
- package/dist/dts/Struct.d.ts +7 -7
- package/dist/dts/Struct.d.ts.map +1 -1
- package/dist/dts/index.d.ts +5 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/esm/Chunk.js +28 -11
- package/dist/esm/Chunk.js.map +1 -1
- package/dist/esm/Config.js.map +1 -1
- package/dist/esm/Either.js +1 -1
- package/dist/esm/Either.js.map +1 -1
- package/dist/esm/Option.js +1 -1
- package/dist/esm/Option.js.map +1 -1
- package/dist/esm/Predicate.js +41 -1
- package/dist/esm/Predicate.js.map +1 -1
- package/dist/esm/Redacted.js +50 -1
- package/dist/esm/Redacted.js.map +1 -1
- package/dist/esm/Stream.js.map +1 -1
- package/dist/esm/Struct.js.map +1 -1
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/cause.js +1 -1
- package/dist/esm/internal/cause.js.map +1 -1
- package/dist/esm/internal/config.js +1 -1
- package/dist/esm/internal/config.js.map +1 -1
- package/dist/esm/internal/fiberRuntime.js +1 -1
- package/dist/esm/internal/fiberRuntime.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/package.json +1 -1
- package/src/Chunk.ts +36 -11
- package/src/Config.ts +1 -1
- package/src/Either.ts +2 -3
- package/src/Option.ts +1 -1
- package/src/Predicate.ts +43 -3
- package/src/Redacted.ts +55 -1
- package/src/Stream.ts +0 -3
- package/src/Struct.ts +8 -13
- package/src/index.ts +5 -0
- package/src/internal/cause.ts +1 -1
- package/src/internal/config.ts +2 -2
- package/src/internal/fiberRuntime.ts +1 -1
- package/src/internal/version.ts +1 -1
package/src/Option.ts
CHANGED
|
@@ -1057,7 +1057,7 @@ export const filter: {
|
|
|
1057
1057
|
* @since 2.0.0
|
|
1058
1058
|
*/
|
|
1059
1059
|
export const getEquivalence = <A>(isEquivalent: Equivalence.Equivalence<A>): Equivalence.Equivalence<Option<A>> =>
|
|
1060
|
-
Equivalence.make((x, y) =>
|
|
1060
|
+
Equivalence.make((x, y) => isNone(x) ? isNone(y) : isNone(y) ? false : isEquivalent(x.value, y.value))
|
|
1061
1061
|
|
|
1062
1062
|
/**
|
|
1063
1063
|
* The `Order` instance allows `Option` values to be compared with
|
package/src/Predicate.ts
CHANGED
|
@@ -799,15 +799,55 @@ export const eqv: {
|
|
|
799
799
|
} = dual(2, <A>(self: Predicate<A>, that: Predicate<A>): Predicate<A> => (a) => self(a) === that(a))
|
|
800
800
|
|
|
801
801
|
/**
|
|
802
|
+
* Represents the logical implication combinator for predicates. In formal
|
|
803
|
+
* logic, the implication operator `->` denotes that if the first proposition
|
|
804
|
+
* (antecedent) is true, then the second proposition (consequent) must also be
|
|
805
|
+
* true. In simpler terms, `p implies q` can be interpreted as "if p then q". If
|
|
806
|
+
* the first predicate holds, then the second predicate must hold
|
|
807
|
+
* for the given context.
|
|
808
|
+
*
|
|
809
|
+
* In practical terms within TypeScript, `p implies q` is equivalent to `!p || (p && q)`.
|
|
810
|
+
*
|
|
811
|
+
* Note that if the antecedent is `false`, the result is `true` by default
|
|
812
|
+
* because the outcome of the consequent cannot be determined.
|
|
813
|
+
*
|
|
814
|
+
* This function is useful in situations where you need to enforce rules or
|
|
815
|
+
* constraints that are contingent on certain conditions.
|
|
816
|
+
* It proves especially helpful in defining property tests.
|
|
817
|
+
*
|
|
818
|
+
* The example below illustrates the transitive property of order using the
|
|
819
|
+
* `implies` function. In simple terms, if `a <= b` and `b <= c`, then `a <= c`
|
|
820
|
+
* must be true.
|
|
821
|
+
*
|
|
822
|
+
* @example
|
|
823
|
+
* import { Predicate } from "effect"
|
|
824
|
+
*
|
|
825
|
+
* type Triple = {
|
|
826
|
+
* readonly a: number
|
|
827
|
+
* readonly b: number
|
|
828
|
+
* readonly c: number
|
|
829
|
+
* }
|
|
830
|
+
*
|
|
831
|
+
* const transitivity = Predicate.implies(
|
|
832
|
+
* // antecedent
|
|
833
|
+
* (input: Triple) => input.a <= input.b && input.b <= input.c,
|
|
834
|
+
* // consequent
|
|
835
|
+
* (input: Triple) => input.a <= input.c
|
|
836
|
+
* )
|
|
837
|
+
*
|
|
838
|
+
* assert.equal(transitivity({ a: 1, b: 2, c: 3 }), true)
|
|
839
|
+
* // antecedent is `false`, so the result is `true`
|
|
840
|
+
* assert.equal(transitivity({ a: 1, b: 0, c: 0 }), true)
|
|
841
|
+
*
|
|
802
842
|
* @category combinators
|
|
803
843
|
* @since 2.0.0
|
|
804
844
|
*/
|
|
805
845
|
export const implies: {
|
|
806
|
-
<A>(
|
|
807
|
-
<A>(
|
|
846
|
+
<A>(consequent: Predicate<A>): (antecedent: Predicate<A>) => Predicate<A>
|
|
847
|
+
<A>(antecedent: Predicate<A>, consequent: Predicate<A>): Predicate<A>
|
|
808
848
|
} = dual(
|
|
809
849
|
2,
|
|
810
|
-
<A>(
|
|
850
|
+
<A>(antecedent: Predicate<A>, consequent: Predicate<A>): Predicate<A> => (a) => antecedent(a) ? consequent(a) : true
|
|
811
851
|
)
|
|
812
852
|
|
|
813
853
|
/**
|
package/src/Redacted.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
+
* The Redacted module provides functionality for handling sensitive information
|
|
3
|
+
* securely within your application. By using the `Redacted` data type, you can
|
|
4
|
+
* ensure that sensitive values are not accidentally exposed in logs or error
|
|
5
|
+
* messages.
|
|
6
|
+
*
|
|
2
7
|
* @since 3.3.0
|
|
3
8
|
*/
|
|
4
9
|
import type * as Equal from "./Equal.js"
|
|
@@ -54,26 +59,75 @@ export declare namespace Redacted {
|
|
|
54
59
|
export const isRedacted: (u: unknown) => u is Redacted<unknown> = redacted_.isRedacted
|
|
55
60
|
|
|
56
61
|
/**
|
|
62
|
+
* This function creates a `Redacted<A>` instance from a given value `A`,
|
|
63
|
+
* securely hiding its content.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* import { Redacted } from "effect"
|
|
67
|
+
*
|
|
68
|
+
* const API_KEY = Redacted.make("1234567890")
|
|
69
|
+
*
|
|
57
70
|
* @since 3.3.0
|
|
58
71
|
* @category constructors
|
|
59
72
|
*/
|
|
60
73
|
export const make: <A>(value: A) => Redacted<A> = redacted_.make
|
|
61
74
|
|
|
62
75
|
/**
|
|
76
|
+
* Retrieves the original value from a `Redacted` instance. Use this function
|
|
77
|
+
* with caution, as it exposes the sensitive data.
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* import { Redacted } from "effect"
|
|
81
|
+
*
|
|
82
|
+
* const API_KEY = Redacted.make("1234567890")
|
|
83
|
+
*
|
|
84
|
+
* assert.equal(Redacted.value(API_KEY), "1234567890")
|
|
85
|
+
*
|
|
63
86
|
* @since 3.3.0
|
|
64
87
|
* @category getters
|
|
65
88
|
*/
|
|
66
89
|
export const value: <A>(self: Redacted<A>) => A = redacted_.value
|
|
67
90
|
|
|
68
91
|
/**
|
|
92
|
+
* Erases the underlying value of a `Redacted` instance, rendering it unusable.
|
|
93
|
+
* This function is intended to ensure that sensitive data does not remain in
|
|
94
|
+
* memory longer than necessary.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* import { Redacted } from "effect"
|
|
98
|
+
*
|
|
99
|
+
* const API_KEY = Redacted.make("1234567890")
|
|
100
|
+
*
|
|
101
|
+
* assert.equal(Redacted.value(API_KEY), "1234567890")
|
|
102
|
+
*
|
|
103
|
+
* Redacted.unsafeWipe(API_KEY)
|
|
104
|
+
*
|
|
105
|
+
* assert.throws(() => Redacted.value(API_KEY), new Error("Unable to get redacted value"))
|
|
106
|
+
*
|
|
69
107
|
* @since 3.3.0
|
|
70
108
|
* @category unsafe
|
|
71
109
|
*/
|
|
72
110
|
export const unsafeWipe: <A>(self: Redacted<A>) => boolean = redacted_.unsafeWipe
|
|
73
111
|
|
|
74
112
|
/**
|
|
113
|
+
* Generates an equivalence relation for `Redacted<A>` values based on an
|
|
114
|
+
* equivalence relation for the underlying values `A`. This function is useful
|
|
115
|
+
* for comparing `Redacted` instances without exposing their contents.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* import { Redacted, Equivalence } from "effect"
|
|
119
|
+
*
|
|
120
|
+
* const API_KEY1 = Redacted.make("1234567890")
|
|
121
|
+
* const API_KEY2 = Redacted.make("1-34567890")
|
|
122
|
+
* const API_KEY3 = Redacted.make("1234567890")
|
|
123
|
+
*
|
|
124
|
+
* const equivalence = Redacted.getEquivalence(Equivalence.string)
|
|
125
|
+
*
|
|
126
|
+
* assert.equal(equivalence(API_KEY1, API_KEY2), false)
|
|
127
|
+
* assert.equal(equivalence(API_KEY1, API_KEY3), true)
|
|
128
|
+
*
|
|
75
129
|
* @category equivalence
|
|
76
130
|
* @since 3.3.0
|
|
77
131
|
*/
|
|
78
132
|
export const getEquivalence = <A>(isEquivalent: Equivalence.Equivalence<A>): Equivalence.Equivalence<Redacted<A>> =>
|
|
79
|
-
Equivalence.make((x, y) =>
|
|
133
|
+
Equivalence.make((x, y) => isEquivalent(value(x), value(y)))
|
package/src/Stream.ts
CHANGED
package/src/Struct.ts
CHANGED
|
@@ -119,14 +119,14 @@ export const getOrder: <R extends { readonly [x: string]: order.Order<any> }>(
|
|
|
119
119
|
fields: R
|
|
120
120
|
) => order.Order<{ [K in keyof R]: [R[K]] extends [order.Order<infer A>] ? A : never }> = order.struct
|
|
121
121
|
|
|
122
|
-
type
|
|
123
|
-
|
|
124
|
-
type Transformed<O, T extends PartialTransform<O>> =
|
|
122
|
+
type Transformed<O, T> =
|
|
125
123
|
& unknown
|
|
126
124
|
& {
|
|
127
|
-
[K in keyof O]: K extends keyof T ? T[K] extends (...a: any) => any ? ReturnType<T[K]> : O[K] : O[K]
|
|
125
|
+
[K in keyof O]: K extends keyof T ? (T[K] extends (...a: any) => any ? ReturnType<T[K]> : O[K]) : O[K]
|
|
128
126
|
}
|
|
129
|
-
|
|
127
|
+
type PartialTransform<O, T> = {
|
|
128
|
+
[K in keyof T]: T[K] extends (a: O[K & keyof O]) => any ? T[K] : (a: O[K & keyof O]) => unknown
|
|
129
|
+
}
|
|
130
130
|
/**
|
|
131
131
|
* Transforms the values of a Struct provided a transformation function for each key.
|
|
132
132
|
* If no transformation function is provided for a key, it will return the origional value for that key.
|
|
@@ -148,16 +148,11 @@ type Transformed<O, T extends PartialTransform<O>> =
|
|
|
148
148
|
* @since 2.0.0
|
|
149
149
|
*/
|
|
150
150
|
export const evolve: {
|
|
151
|
-
<O, T
|
|
152
|
-
|
|
153
|
-
) => Transformed<O, T>
|
|
154
|
-
<O, T extends PartialTransform<O>>(obj: O, t: T): Transformed<O, T>
|
|
151
|
+
<O, T>(t: PartialTransform<O, T>): (obj: O) => Transformed<O, T>
|
|
152
|
+
<O, T>(obj: O, t: PartialTransform<O, T>): Transformed<O, T>
|
|
155
153
|
} = dual(
|
|
156
154
|
2,
|
|
157
|
-
<O, T
|
|
158
|
-
obj: O,
|
|
159
|
-
t: T
|
|
160
|
-
): unknown & Transformed<O, T> => {
|
|
155
|
+
<O, T>(obj: O, t: PartialTransform<O, T>): Transformed<O, T> => {
|
|
161
156
|
const out = { ...obj }
|
|
162
157
|
for (const k in t) {
|
|
163
158
|
if (Object.prototype.hasOwnProperty.call(obj, k)) {
|
package/src/index.ts
CHANGED
|
@@ -615,6 +615,11 @@ export * as Record from "./Record.js"
|
|
|
615
615
|
export * as RedBlackTree from "./RedBlackTree.js"
|
|
616
616
|
|
|
617
617
|
/**
|
|
618
|
+
* The Redacted module provides functionality for handling sensitive information
|
|
619
|
+
* securely within your application. By using the `Redacted` data type, you can
|
|
620
|
+
* ensure that sensitive values are not accidentally exposed in logs or error
|
|
621
|
+
* messages.
|
|
622
|
+
*
|
|
618
623
|
* @since 3.3.0
|
|
619
624
|
*/
|
|
620
625
|
export * as Redacted from "./Redacted.js"
|
package/src/internal/cause.ts
CHANGED
|
@@ -1055,7 +1055,7 @@ export const spanToTrace = globalValue("effect/Tracer/spanToTrace", () => new We
|
|
|
1055
1055
|
|
|
1056
1056
|
const prettyErrorStack = (message: string, stack: string, span?: Span | undefined): string => {
|
|
1057
1057
|
const out: Array<string> = [message]
|
|
1058
|
-
const lines = stack.split("\n")
|
|
1058
|
+
const lines = stack.startsWith(message) ? stack.slice(message.length).split("\n") : stack.split("\n")
|
|
1059
1059
|
|
|
1060
1060
|
for (let i = 1; i < lines.length; i++) {
|
|
1061
1061
|
if (lines[i].includes("Generator.next")) {
|
package/src/internal/config.ts
CHANGED
|
@@ -180,8 +180,8 @@ export const boolean = (name?: string): Config.Config<boolean> => {
|
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
/** @internal */
|
|
183
|
-
export const array = <A>(config: Config.Config<A>, name?: string): Config.Config<
|
|
184
|
-
return pipe(chunk(config, name), map(Chunk.
|
|
183
|
+
export const array = <A>(config: Config.Config<A>, name?: string): Config.Config<Array<A>> => {
|
|
184
|
+
return pipe(chunk(config, name), map(Chunk.toArray))
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
/** @internal */
|
|
@@ -1826,7 +1826,7 @@ export const all = <
|
|
|
1826
1826
|
return allEither(effects, reconcile, options) as any
|
|
1827
1827
|
}
|
|
1828
1828
|
|
|
1829
|
-
return reconcile._tag === "Some"
|
|
1829
|
+
return options?.discard !== true && reconcile._tag === "Some"
|
|
1830
1830
|
? core.map(
|
|
1831
1831
|
forEach(effects, identity, options as any),
|
|
1832
1832
|
reconcile.value
|
package/src/internal/version.ts
CHANGED