Skip to content

Commit 2dc13a8

Browse files
committed
Schemable: add readonly combinator, closes #525
1 parent a7952a6 commit 2dc13a8

22 files changed

+185
-12
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@
1414
**Note**: Gaps between patch versions are faulty/broken releases.
1515
**Note**: A feature tagged as Experimental is in a high state of flux, you're at risk of it changing without notice.
1616

17+
# 2.2.15
18+
19+
- **Experimental**
20+
- `Schemable`
21+
- (\*) add `readonly` combinator (@gcanti)
22+
23+
(\*) breaking change
24+
1725
# 2.2.14
1826

1927
- **Experimental**

docs/modules/Decoder.ts.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ Added in v2.2.7
4646
- [nullable](#nullable)
4747
- [parse](#parse)
4848
- [partial](#partial)
49+
- [readonly](#readonly)
4950
- [record](#record)
5051
- [refine](#refine)
5152
- [sum](#sum)
@@ -328,6 +329,16 @@ export declare const partial: <A>(
328329
329330
Added in v2.2.7
330331
332+
## readonly
333+
334+
**Signature**
335+
336+
```ts
337+
export declare const readonly: <I, A>(decoder: Decoder<I, A>) => Decoder<I, Readonly<A>>
338+
```
339+
340+
Added in v2.2.15
341+
331342
## record
332343
333344
**Signature**

docs/modules/Eq.ts.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Added in v2.2.2
2525
- [lazy](#lazy)
2626
- [nullable](#nullable)
2727
- [partial](#partial)
28+
- [readonly](#readonly)
2829
- [record](#record)
2930
- [sum](#sum)
3031
- [tuple](#tuple)
@@ -97,6 +98,16 @@ export declare function partial<A>(properties: { [K in keyof A]: Eq<A[K]> }): Eq
9798

9899
Added in v2.2.2
99100

101+
## readonly
102+
103+
**Signature**
104+
105+
```ts
106+
export declare const readonly: <A>(eq: E.Eq<A>) => E.Eq<Readonly<A>>
107+
```
108+
109+
Added in v2.2.15
110+
100111
## record
101112

102113
**Signature**

docs/modules/Guard.ts.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ Added in v2.2.0
2828
- [lazy](#lazy)
2929
- [nullable](#nullable)
3030
- [partial](#partial)
31+
- [readonly](#readonly)
3132
- [record](#record)
3233
- [refine](#refine)
3334
- [sum](#sum)
@@ -142,6 +143,16 @@ export declare const partial: <A>(
142143
143144
Added in v2.2.0
144145
146+
## readonly
147+
148+
**Signature**
149+
150+
```ts
151+
export declare const readonly: <I, A extends I>(guard: Guard<I, A>) => Guard<I, Readonly<A>>
152+
```
153+
154+
Added in v2.2.15
155+
145156
## record
146157
147158
**Signature**

docs/modules/Schemable.ts.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ export interface Schemable<S> {
7171
tag: T
7272
) => <A>(members: { [K in keyof A]: HKT<S, A[K] & Record<T, K>> }) => HKT<S, A[keyof A]>
7373
readonly lazy: <A>(id: string, f: () => HKT<S, A>) => HKT<S, A>
74+
readonly readonly: <A>(sa: HKT<S, A>) => HKT<S, Readonly<A>>
7475
}
7576
```
7677

@@ -98,6 +99,7 @@ export interface Schemable1<S extends URIS> {
9899
tag: T
99100
) => <A>(members: { [K in keyof A]: Kind<S, A[K] & Record<T, K>> }) => Kind<S, A[keyof A]>
100101
readonly lazy: <A>(id: string, f: () => Kind<S, A>) => Kind<S, A>
102+
readonly readonly: <A>(sa: Kind<S, A>) => Kind<S, Readonly<A>>
101103
}
102104
```
103105

@@ -129,6 +131,7 @@ export interface Schemable2C<S extends URIS2, E> {
129131
tag: T
130132
) => <A>(members: { [K in keyof A]: Kind2<S, E, A[K] & Record<T, K>> }) => Kind2<S, E, A[keyof A]>
131133
readonly lazy: <A>(id: string, f: () => Kind2<S, E, A>) => Kind2<S, E, A>
134+
readonly readonly: <A>(sa: Kind2<S, E, A>) => Kind2<S, E, Readonly<A>>
132135
}
133136
```
134137

docs/modules/TaskDecoder.ts.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ Added in v2.2.7
4646
- [nullable](#nullable)
4747
- [parse](#parse)
4848
- [partial](#partial)
49+
- [readonly](#readonly)
4950
- [record](#record)
5051
- [refine](#refine)
5152
- [sum](#sum)
@@ -331,6 +332,16 @@ export declare const partial: <A>(
331332
332333
Added in v2.2.7
333334
335+
## readonly
336+
337+
**Signature**
338+
339+
```ts
340+
export declare const readonly: <I, A>(decoder: TaskDecoder<I, A>) => TaskDecoder<I, Readonly<A>>
341+
```
342+
343+
Added in v2.2.15
344+
334345
## record
335346
336347
**Signature**

docs/modules/Type.ts.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Added in v2.2.3
2525
- [lazy](#lazy)
2626
- [nullable](#nullable)
2727
- [partial](#partial)
28+
- [readonly](#readonly)
2829
- [record](#record)
2930
- [refine](#refine)
3031
- [sum](#sum)
@@ -103,6 +104,16 @@ export declare const partial: <A>(properties: { [K in keyof A]: Type<A[K]> }) =>
103104
104105
Added in v2.2.3
105106
107+
## readonly
108+
109+
**Signature**
110+
111+
```ts
112+
export declare const readonly: <A>(type: Type<A>) => Type<Readonly<A>>
113+
```
114+
115+
Added in v2.2.15
116+
106117
## record
107118
108119
**Signature**

dtslint/ts3.5/Decoder.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,3 +147,14 @@ pipe(
147147
_.number,
148148
_.mapLeftWithInput((u) => FS.of(DE.leaf(u, 'not a number')))
149149
)
150+
151+
//
152+
// readonly
153+
//
154+
155+
// $ExpectType Decoder<unknown, Readonly<{ a: string; }>>
156+
_.readonly(
157+
_.type({
158+
a: _.string
159+
})
160+
)

dtslint/ts3.5/Eq.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,14 @@ const S2 = _.type({ _tag: _.Schemable.literal('B'), b: _.number })
2727
_.sum('_tag')({ A: S1, B: S2 })
2828
// // $ExpectError
2929
// _.sum('_tag')({ A: S1, B: S1 })
30+
31+
//
32+
// readonly
33+
//
34+
35+
// $ExpectType Eq<Readonly<{ a: string; }>>
36+
_.readonly(
37+
_.type({
38+
a: _.string
39+
})
40+
)

dtslint/ts3.5/Guard.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,14 @@ const S2 = _.type({ _tag: _.literal('B'), b: _.number })
4242
_.sum('_tag')({ A: S1, B: S2 })
4343
// $ExpectError
4444
_.sum('_tag')({ A: S1, B: S1 })
45+
46+
//
47+
// readonly
48+
//
49+
50+
// $ExpectType Guard<unknown, Readonly<{ a: string; }>>
51+
_.readonly(
52+
_.type({
53+
a: _.string
54+
})
55+
)

0 commit comments

Comments
 (0)