@effect/platform 0.43.6 → 0.43.7
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/Transferable.js +23 -10
- package/dist/cjs/Transferable.js.map +1 -1
- package/dist/dts/Transferable.d.ts +3 -3
- package/dist/dts/Transferable.d.ts.map +1 -1
- package/dist/esm/Transferable.js +23 -10
- package/dist/esm/Transferable.js.map +1 -1
- package/package.json +1 -1
- package/src/Transferable.ts +34 -26
package/dist/cjs/Transferable.js
CHANGED
|
@@ -62,21 +62,18 @@ const get = u => {
|
|
|
62
62
|
* @category schema
|
|
63
63
|
*/
|
|
64
64
|
exports.get = get;
|
|
65
|
-
const schema = exports.schema = /*#__PURE__*/(0, _Function.dual)(2, (self, f) =>
|
|
66
|
-
|
|
67
|
-
[symbol]() {
|
|
65
|
+
const schema = exports.schema = /*#__PURE__*/(0, _Function.dual)(2, (self, f) => {
|
|
66
|
+
const fn = function () {
|
|
68
67
|
return f(this);
|
|
69
|
-
}
|
|
70
|
-
|
|
68
|
+
};
|
|
69
|
+
return Schema.transform(self, schemaFromSelf(Schema.to(self)), input => addProxy(input, fn), _Function.identity);
|
|
70
|
+
});
|
|
71
71
|
const schemaParse = parse => (u, options, ast) => {
|
|
72
72
|
if (!isTransferable(u)) {
|
|
73
73
|
return ParseResult.fail(ParseResult.type(ast, u));
|
|
74
74
|
}
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
[symbol]: u[symbol]
|
|
78
|
-
};
|
|
79
|
-
return ParseResult.map(parse(u, options), a => Object.setPrototypeOf(a, proto));
|
|
75
|
+
const f = u[symbol];
|
|
76
|
+
return ParseResult.map(parse(u, options), a => addProxy(a, f));
|
|
80
77
|
};
|
|
81
78
|
/**
|
|
82
79
|
* @since 1.0.0
|
|
@@ -88,4 +85,20 @@ const schemaFromSelf = item => {
|
|
|
88
85
|
});
|
|
89
86
|
};
|
|
90
87
|
exports.schemaFromSelf = schemaFromSelf;
|
|
88
|
+
const addProxy = (self, f) => {
|
|
89
|
+
return new Proxy(self, {
|
|
90
|
+
get(target, key) {
|
|
91
|
+
if (key === symbol) {
|
|
92
|
+
return f;
|
|
93
|
+
}
|
|
94
|
+
return target[key];
|
|
95
|
+
},
|
|
96
|
+
has(target, p) {
|
|
97
|
+
if (p === symbol) {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
return p in target;
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
};
|
|
91
104
|
//# sourceMappingURL=Transferable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Transferable.js","names":["ParseResult","_interopRequireWildcard","require","Schema","_Function","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","symbol","exports","Symbol","for","isTransferable","schema","dual","self","f","transform","schemaFromSelf","to","input","identity","schemaParse","parse","options","ast","fail","type","
|
|
1
|
+
{"version":3,"file":"Transferable.js","names":["ParseResult","_interopRequireWildcard","require","Schema","_Function","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","symbol","exports","Symbol","for","isTransferable","schema","dual","self","f","fn","transform","schemaFromSelf","to","input","addProxy","identity","schemaParse","parse","options","ast","fail","type","map","item","declare","decodeUnknown","encodeUnknown","identifier","Proxy","target","key","p"],"sources":["../../src/Transferable.ts"],"sourcesContent":[null],"mappings":"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"}
|
|
@@ -29,12 +29,12 @@ export declare const get: (u: unknown) => ReadonlyArray<globalThis.Transferable>
|
|
|
29
29
|
* @category schema
|
|
30
30
|
*/
|
|
31
31
|
export declare const schema: {
|
|
32
|
-
<A>(f: (_: A) => ReadonlyArray<globalThis.Transferable>): <R, I>(self: Schema.Schema<R, I, A>) => Schema.Schema<R, I, A>;
|
|
33
|
-
<R, I, A>(self: Schema.Schema<R, I, A>, f: (_: A) => ReadonlyArray<globalThis.Transferable>): Schema.Schema<R, I, A>;
|
|
32
|
+
<A extends object>(f: (_: A) => ReadonlyArray<globalThis.Transferable>): <R, I>(self: Schema.Schema<R, I, A>) => Schema.Schema<R, I, A>;
|
|
33
|
+
<R, I, A extends object>(self: Schema.Schema<R, I, A>, f: (_: A) => ReadonlyArray<globalThis.Transferable>): Schema.Schema<R, I, A>;
|
|
34
34
|
};
|
|
35
35
|
/**
|
|
36
36
|
* @since 1.0.0
|
|
37
37
|
* @category schema
|
|
38
38
|
*/
|
|
39
|
-
export declare const schemaFromSelf: <R, I, A>(item: Schema.Schema<R, I, A>) => Schema.Schema<R, I, A>;
|
|
39
|
+
export declare const schemaFromSelf: <R, I extends object, A extends object>(item: Schema.Schema<R, I, A>) => Schema.Schema<R, I, A>;
|
|
40
40
|
//# sourceMappingURL=Transferable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Transferable.d.ts","sourceRoot":"","sources":["../../src/Transferable.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAG/C;;;GAGG;AACH,eAAO,MAAM,MAAM,eAA8C,CAAA;AAEjE;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;CAChE;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,MAAO,OAAO,sBAA0E,CAAA;AAEnH;;;GAGG;AACH,eAAO,MAAM,GAAG,MAAO,OAAO,KAAG,cAAc,uBAAuB,CAKrE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE;IACnB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"Transferable.d.ts","sourceRoot":"","sources":["../../src/Transferable.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAG/C;;;GAGG;AACH,eAAO,MAAM,MAAM,eAA8C,CAAA;AAEjE;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;CAChE;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,MAAO,OAAO,sBAA0E,CAAA;AAEnH;;;GAGG;AACH,eAAO,MAAM,GAAG,MAAO,OAAO,KAAG,cAAc,uBAAuB,CAKrE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE;IACnB,CAAC,CAAC,SAAS,MAAM,EACf,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,GAClD,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACjE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,MAAM,EACrB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC5B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,GAClD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;CAczB,CAAA;AAYF;;;GAGG;AACH,eAAO,MAAM,cAAc,iGAS1B,CAAA"}
|
package/dist/esm/Transferable.js
CHANGED
|
@@ -28,21 +28,18 @@ export const get = u => {
|
|
|
28
28
|
* @since 1.0.0
|
|
29
29
|
* @category schema
|
|
30
30
|
*/
|
|
31
|
-
export const schema = /*#__PURE__*/dual(2, (self, f) =>
|
|
32
|
-
|
|
33
|
-
[symbol]() {
|
|
31
|
+
export const schema = /*#__PURE__*/dual(2, (self, f) => {
|
|
32
|
+
const fn = function () {
|
|
34
33
|
return f(this);
|
|
35
|
-
}
|
|
36
|
-
|
|
34
|
+
};
|
|
35
|
+
return Schema.transform(self, schemaFromSelf(Schema.to(self)), input => addProxy(input, fn), identity);
|
|
36
|
+
});
|
|
37
37
|
const schemaParse = parse => (u, options, ast) => {
|
|
38
38
|
if (!isTransferable(u)) {
|
|
39
39
|
return ParseResult.fail(ParseResult.type(ast, u));
|
|
40
40
|
}
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
[symbol]: u[symbol]
|
|
44
|
-
};
|
|
45
|
-
return ParseResult.map(parse(u, options), a => Object.setPrototypeOf(a, proto));
|
|
41
|
+
const f = u[symbol];
|
|
42
|
+
return ParseResult.map(parse(u, options), a => addProxy(a, f));
|
|
46
43
|
};
|
|
47
44
|
/**
|
|
48
45
|
* @since 1.0.0
|
|
@@ -53,4 +50,20 @@ export const schemaFromSelf = item => {
|
|
|
53
50
|
identifier: "Transferable"
|
|
54
51
|
});
|
|
55
52
|
};
|
|
53
|
+
const addProxy = (self, f) => {
|
|
54
|
+
return new Proxy(self, {
|
|
55
|
+
get(target, key) {
|
|
56
|
+
if (key === symbol) {
|
|
57
|
+
return f;
|
|
58
|
+
}
|
|
59
|
+
return target[key];
|
|
60
|
+
},
|
|
61
|
+
has(target, p) {
|
|
62
|
+
if (p === symbol) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
return p in target;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
};
|
|
56
69
|
//# sourceMappingURL=Transferable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Transferable.js","names":["ParseResult","Schema","dual","identity","symbol","Symbol","for","isTransferable","u","get","schema","self","f","transform","schemaFromSelf","to","input","schemaParse","parse","options","ast","fail","type","
|
|
1
|
+
{"version":3,"file":"Transferable.js","names":["ParseResult","Schema","dual","identity","symbol","Symbol","for","isTransferable","u","get","schema","self","f","fn","transform","schemaFromSelf","to","input","addProxy","schemaParse","parse","options","ast","fail","type","map","a","item","declare","decodeUnknown","encodeUnknown","identifier","Proxy","target","key","has","p"],"sources":["../../src/Transferable.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA,OAAO,KAAKA,WAAW,MAAM,4BAA4B;AACzD,OAAO,KAAKC,MAAM,MAAM,uBAAuB;AAC/C,SAASC,IAAI,EAAEC,QAAQ,QAAQ,iBAAiB;AAEhD;;;;AAIA,OAAO,MAAMC,MAAM,gBAAGC,MAAM,CAACC,GAAG,CAAC,+BAA+B,CAAC;AAUjE;;;;AAIA,OAAO,MAAMC,cAAc,GAAIC,CAAU,IAAwB,OAAOA,CAAC,KAAK,QAAQ,IAAIA,CAAC,KAAK,IAAI,IAAIJ,MAAM,IAAII,CAAC;AAEnH;;;;AAIA,OAAO,MAAMC,GAAG,GAAID,CAAU,IAA4C;EACxE,IAAID,cAAc,CAACC,CAAC,CAAC,EAAE;IACrB,OAAOA,CAAC,CAACJ,MAAM,CAAC,EAAE;EACpB;EACA,OAAO,EAAE;AACX,CAAC;AAED;;;;AAIA,OAAO,MAAMM,MAAM,gBAQfR,IAAI,CAAC,CAAC,EAAE,CACVS,IAA4B,EAC5BC,CAAmD,KACjD;EACF,MAAMC,EAAE,GAAgC,SAAAA,CAAA;IACtC,OAAOD,CAAC,CAAC,IAAI,CAAC;EAChB,CAAC;EACD,OAAOX,MAAM,CAACa,SAAS,CACrBH,IAAI,EACJI,cAAc,CAACd,MAAM,CAACe,EAAE,CAACL,IAAI,CAAC,CAAC,EAC9BM,KAAK,IAAKC,QAAQ,CAACD,KAAK,EAAEJ,EAAE,CAAC,EAC9BV,QAAQ,CACT;AACH,CAAC,CAAC;AAEF,MAAMgB,WAAW,GACOC,KAAsC,IAC5D,CAACZ,CAAC,EAAEa,OAAO,EAAEC,GAAG,KAAI;EAClB,IAAI,CAACf,cAAc,CAACC,CAAC,CAAC,EAAE;IACtB,OAAOR,WAAW,CAACuB,IAAI,CAACvB,WAAW,CAACwB,IAAI,CAACF,GAAG,EAAEd,CAAC,CAAC,CAAC;EACnD;EACA,MAAMI,CAAC,GAAGJ,CAAC,CAACJ,MAAM,CAAC;EACnB,OAAOJ,WAAW,CAACyB,GAAG,CAACL,KAAK,CAACZ,CAAC,EAAEa,OAAO,CAAC,EAAGK,CAAC,IAAQR,QAAQ,CAACQ,CAAC,EAAEd,CAAC,CAAC,CAAC;AACrE,CAAC;AAEH;;;;AAIA,OAAO,MAAMG,cAAc,GACzBY,IAA4B,IACF;EAC1B,OAAO1B,MAAM,CAAC2B,OAAO,CACnB,CAACD,IAAI,CAAC,EACLA,IAAI,IAAKR,WAAW,CAACnB,WAAW,CAAC6B,aAAa,CAACF,IAAI,CAAC,CAAC,EACrDA,IAAI,IAAKR,WAAW,CAACnB,WAAW,CAAC8B,aAAa,CAACH,IAAI,CAAC,CAAC,EACtD;IAAEI,UAAU,EAAE;EAAc,CAAE,CAC/B;AACH,CAAC;AAED,MAAMb,QAAQ,GAAGA,CAAmBP,IAAO,EAAEC,CAA8B,KAAsB;EAC/F,OAAO,IAAIoB,KAAK,CAACrB,IAAI,EAAE;IACrBF,GAAGA,CAACwB,MAAM,EAAEC,GAAG;MACb,IAAIA,GAAG,KAAK9B,MAAM,EAAE;QAClB,OAAOQ,CAAC;MACV;MACA,OAAOqB,MAAM,CAACC,GAAc,CAAC;IAC/B,CAAC;IACDC,GAAGA,CAACF,MAAM,EAAEG,CAAC;MACX,IAAIA,CAAC,KAAKhC,MAAM,EAAE;QAChB,OAAO,IAAI;MACb;MACA,OAAOgC,CAAC,IAAIH,MAAM;IACpB;GACD,CAAQ;AACX,CAAC"}
|
package/package.json
CHANGED
package/src/Transferable.ts
CHANGED
|
@@ -42,52 +42,43 @@ export const get = (u: unknown): ReadonlyArray<globalThis.Transferable> => {
|
|
|
42
42
|
* @category schema
|
|
43
43
|
*/
|
|
44
44
|
export const schema: {
|
|
45
|
-
<A>(
|
|
45
|
+
<A extends object>(
|
|
46
46
|
f: (_: A) => ReadonlyArray<globalThis.Transferable>
|
|
47
47
|
): <R, I>(self: Schema.Schema<R, I, A>) => Schema.Schema<R, I, A>
|
|
48
|
-
<R, I, A
|
|
49
|
-
} = dual<
|
|
50
|
-
<A>(
|
|
51
|
-
f: (_: A) => ReadonlyArray<globalThis.Transferable>
|
|
52
|
-
) => <R, I>(self: Schema.Schema<R, I, A>) => Schema.Schema<R, I, A>,
|
|
53
|
-
<R, I, A>(
|
|
48
|
+
<R, I, A extends object>(
|
|
54
49
|
self: Schema.Schema<R, I, A>,
|
|
55
50
|
f: (_: A) => ReadonlyArray<globalThis.Transferable>
|
|
56
|
-
)
|
|
57
|
-
|
|
51
|
+
): Schema.Schema<R, I, A>
|
|
52
|
+
} = dual(2, <R, I, A extends object>(
|
|
58
53
|
self: Schema.Schema<R, I, A>,
|
|
59
54
|
f: (_: A) => ReadonlyArray<globalThis.Transferable>
|
|
60
|
-
) =>
|
|
61
|
-
|
|
55
|
+
) => {
|
|
56
|
+
const fn: Transferable[typeof symbol] = function(this: A) {
|
|
57
|
+
return f(this)
|
|
58
|
+
}
|
|
59
|
+
return Schema.transform(
|
|
62
60
|
self,
|
|
63
61
|
schemaFromSelf(Schema.to(self)),
|
|
64
|
-
(input) =>
|
|
65
|
-
({
|
|
66
|
-
...input,
|
|
67
|
-
[symbol]() {
|
|
68
|
-
return f(this as any)
|
|
69
|
-
}
|
|
70
|
-
}) as A,
|
|
62
|
+
(input) => addProxy(input, fn),
|
|
71
63
|
identity
|
|
72
|
-
)
|
|
64
|
+
)
|
|
65
|
+
})
|
|
73
66
|
|
|
74
67
|
const schemaParse =
|
|
75
|
-
<R, A>(parse: ParseResult.DecodeUnknown<R, A>): ParseResult.DeclarationDecodeUnknown<R, A> =>
|
|
68
|
+
<R, A extends object>(parse: ParseResult.DecodeUnknown<R, A>): ParseResult.DeclarationDecodeUnknown<R, A> =>
|
|
69
|
+
(u, options, ast) => {
|
|
76
70
|
if (!isTransferable(u)) {
|
|
77
71
|
return ParseResult.fail(ParseResult.type(ast, u))
|
|
78
72
|
}
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
[symbol]: u[symbol]
|
|
82
|
-
}
|
|
83
|
-
return ParseResult.map(parse(u, options), (a): A => Object.setPrototypeOf(a, proto))
|
|
73
|
+
const f = u[symbol]
|
|
74
|
+
return ParseResult.map(parse(u, options), (a): A => addProxy(a, f))
|
|
84
75
|
}
|
|
85
76
|
|
|
86
77
|
/**
|
|
87
78
|
* @since 1.0.0
|
|
88
79
|
* @category schema
|
|
89
80
|
*/
|
|
90
|
-
export const schemaFromSelf = <R, I, A>(
|
|
81
|
+
export const schemaFromSelf = <R, I extends object, A extends object>(
|
|
91
82
|
item: Schema.Schema<R, I, A>
|
|
92
83
|
): Schema.Schema<R, I, A> => {
|
|
93
84
|
return Schema.declare(
|
|
@@ -97,3 +88,20 @@ export const schemaFromSelf = <R, I, A>(
|
|
|
97
88
|
{ identifier: "Transferable" }
|
|
98
89
|
)
|
|
99
90
|
}
|
|
91
|
+
|
|
92
|
+
const addProxy = <A extends object>(self: A, f: Transferable[typeof symbol]): A & Transferable => {
|
|
93
|
+
return new Proxy(self, {
|
|
94
|
+
get(target, key) {
|
|
95
|
+
if (key === symbol) {
|
|
96
|
+
return f
|
|
97
|
+
}
|
|
98
|
+
return target[key as keyof A]
|
|
99
|
+
},
|
|
100
|
+
has(target, p) {
|
|
101
|
+
if (p === symbol) {
|
|
102
|
+
return true
|
|
103
|
+
}
|
|
104
|
+
return p in target
|
|
105
|
+
}
|
|
106
|
+
}) as any
|
|
107
|
+
}
|