Skip to content

Commit cd6e044

Browse files
committed
Made subspacing methods consistent
1 parent 168a848 commit cd6e044

File tree

2 files changed

+50
-33
lines changed

2 files changed

+50
-33
lines changed

lib/database.ts

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as fdb from './native'
22
import Transaction, { RangeOptions, Watch } from './transaction'
3-
import {Transformer, defaultTransformer} from './transformer'
3+
import {Transformer} from './transformer'
44
import {NativeValue} from './native'
55
import {KeySelector} from './keySelector'
66
import Subspace, { root, GetSubspace, isGetSubspace } from './subspace'
@@ -43,40 +43,48 @@ export default class Database<KeyIn = NativeValue, KeyOut = Buffer, ValIn = Nati
4343
// convenience and backwards compatibility.
4444
/** Create a shallow reference to the database at a specified subspace */
4545
at<CKI, CKO, CVI, CVO>(hasSubspace: GetSubspace<CKI, CKO, CVI, CVO>): Database<CKI, CKO, CVI, CVO>
46-
at(prefix: KeyIn | null, keyXf?: undefined, valueXf?: undefined): Database<KeyIn, KeyOut, ValIn, ValOut>;
47-
at<CKI, CKO>(prefix: KeyIn | null, keyXf: Transformer<CKI, CKO>, valueXf?: undefined): Database<CKI, CKO, ValIn, ValOut>;
48-
at<CVI, CVO>(prefix: KeyIn | null, keyXf: undefined, valueXf: Transformer<CVI, CVO>): Database<KeyIn, KeyOut, CVI, CVO>;
49-
at<CKI, CKO, CVI, CVO>(prefix: KeyIn | null, keyXf: Transformer<CKI, CKO>, valueXf: Transformer<CVI, CVO>): Database<CKI, CKO, CVI, CVO>;
50-
at<CKI, CKO>(prefix: KeyIn | null, keyXf?: Transformer<CKI, CKO>, valueXf?: undefined):
46+
at(prefix?: KeyIn | null, keyXf?: undefined, valueXf?: undefined): Database<KeyIn, KeyOut, ValIn, ValOut>;
47+
at<CKI, CKO>(prefix: KeyIn | null | undefined, keyXf: Transformer<CKI, CKO>, valueXf?: undefined): Database<CKI, CKO, ValIn, ValOut>;
48+
at<CVI, CVO>(prefix: KeyIn | null | undefined, keyXf: undefined, valueXf: Transformer<CVI, CVO>): Database<KeyIn, KeyOut, CVI, CVO>;
49+
at<CKI, CKO, CVI, CVO>(prefix: KeyIn | null | undefined, keyXf: Transformer<CKI, CKO>, valueXf: Transformer<CVI, CVO>): Database<CKI, CKO, CVI, CVO>;
50+
at<CKI, CKO>(prefix: KeyIn | null | undefined, keyXf?: Transformer<CKI, CKO>, valueXf?: undefined):
5151
| Database<KeyIn, KeyOut, ValIn, ValOut>
5252
| Database<CKI, CKO, ValIn, ValOut>;
53-
at<CVI, CVO>(prefix: KeyIn | null, keyXf: undefined, valueXf?: Transformer<CVI, CVO>):
53+
at<CVI, CVO>(prefix: KeyIn | null | undefined, keyXf: undefined, valueXf?: Transformer<CVI, CVO>):
5454
| Database<KeyIn, KeyOut, ValIn, ValOut>
5555
| Database<KeyIn, KeyOut, CVI, CVO>;
56-
at<CKI, CKO, CVI, CVO>(prefix: KeyIn | null, keyXf: Transformer<CKI, CKO> | undefined, valueXf: Transformer<CVI, CVO>):
56+
at<CKI, CKO, CVI, CVO>(prefix: KeyIn | null | undefined, keyXf: Transformer<CKI, CKO> | undefined, valueXf: Transformer<CVI, CVO>):
5757
| Database<KeyIn, KeyOut, CVI, CVO>
5858
| Database<CKI, CKO, CVI, CVO>;
59-
at<CKI, CKO, CVI, CVO>(prefix: KeyIn | null, keyXf: Transformer<CKI, CKO>, valueXf?: Transformer<CVI, CVO>):
59+
at<CKI, CKO, CVI, CVO>(prefix: KeyIn | null | undefined, keyXf: Transformer<CKI, CKO>, valueXf?: Transformer<CVI, CVO>):
6060
| Database<CKI, CKO, ValIn, ValOut>
6161
| Database<CKI, CKO, CVI, CVO>;
62-
at<CKI, CKO, CVI, CVO>(prefix: KeyIn | null, keyXf?: Transformer<CKI, CKO>, valueXf?: Transformer<CVI, CVO>):
62+
at<CKI, CKO, CVI, CVO>(prefix?: KeyIn | null, keyXf?: Transformer<CKI, CKO>, valueXf?: Transformer<CVI, CVO>):
6363
| Database<KeyIn, KeyOut, ValIn, ValOut>
6464
| Database<CKI, CKO, ValIn, ValOut>
6565
| Database<KeyIn, KeyOut, CVI, CVO>
6666
| Database<CKI, CKO, CVI, CVO>;
67-
at<CKI, CKO, CVI, CVO>(prefixOrSubspace: GetSubspace<CKI, CKO, CVI, CVO> | KeyIn | null, keyXf?: Transformer<unknown, unknown>, valueXf?: Transformer<unknown, unknown>) {
67+
at<CKI, CKO, CVI, CVO>(prefixOrSubspace?: GetSubspace<CKI, CKO, CVI, CVO> | KeyIn | null, keyXf?: Transformer<unknown, unknown>, valueXf?: Transformer<unknown, unknown>) {
6868
if (isGetSubspace(prefixOrSubspace)) return new Database(this._db, prefixOrSubspace.getSubspace())
6969
else return new Database(this._db, this.subspace.at(prefixOrSubspace, keyXf, valueXf))
7070
}
7171

72-
withKeyEncoding<ChildKeyIn, ChildKeyOut>(keyXf: Transformer<ChildKeyIn, ChildKeyOut>): Database<ChildKeyIn, ChildKeyOut, ValIn, ValOut>
73-
withKeyEncoding<NativeValue, Buffer>(): Database<NativeValue, Buffer, ValIn, ValOut>
74-
withKeyEncoding<ChildKeyIn, ChildKeyOut>(keyXf: Transformer<any, any> = defaultTransformer): Database<ChildKeyIn, ChildKeyOut, ValIn, ValOut> {
75-
return new Database(this._db, this.subspace.at(null, keyXf))
72+
withKeyEncoding(keyXf?: undefined): Database<NativeValue, Buffer, ValIn, ValOut>
73+
withKeyEncoding<CKI, CKO>(keyXf: Transformer<CKI, CKO>): Database<CKI, CKO, ValIn, ValOut>
74+
withKeyEncoding<CKI, CKO>(keyXf?: Transformer<CKI, CKO>):
75+
| Database<NativeValue, Buffer, ValIn, ValOut>
76+
| Database<CKI, CKO, ValIn, ValOut>
77+
withKeyEncoding(keyXf?: Transformer<unknown, unknown>) {
78+
return new Database(this._db, this.subspace.withKeyEncoding(keyXf))
7679
}
77-
78-
withValueEncoding<ChildValIn, ChildValOut>(valXf: Transformer<ChildValIn, ChildValOut>): Database<KeyIn, KeyOut, ChildValIn, ChildValOut> {
79-
return new Database(this._db, this.subspace.at(null, undefined /* inherit */, valXf))
80+
81+
withValueEncoding(valueXf?: undefined): Database<KeyIn, KeyOut, NativeValue, Buffer>
82+
withValueEncoding<CVI, CVO>(valueXf: Transformer<CVI, CVO>): Database<KeyIn, KeyOut, CVI, CVO>
83+
withValueEncoding<CVI, CVO>(valueXf?: Transformer<CVI, CVO>):
84+
| Database<KeyIn, KeyOut, NativeValue, Buffer>
85+
| Database<KeyIn, KeyOut, CVI, CVO>
86+
withValueEncoding(valueXf?: Transformer<unknown, unknown>) {
87+
return new Database(this._db, this.subspace.withValueEncoding(valueXf))
8088
}
8189

8290
// This is the API you want to use for non-trivial transactions.

lib/subspace.ts

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,28 +41,28 @@ export default class Subspace<KeyIn = NativeValue, KeyOut = Buffer, ValIn = Nati
4141
// legit all the variants. Typescript can probably infer using less than this,
4242
// but I honestly don't trust it not to land with any or unknown or something
4343
// in some of the derived types
44-
at(prefix: KeyIn | null, keyXf?: undefined, valueXf?: undefined): Subspace<KeyIn, KeyOut, ValIn, ValOut>;
45-
at<CKI, CKO>(prefix: KeyIn | null, keyXf: Transformer<CKI, CKO>, valueXf?: undefined): Subspace<CKI, CKO, ValIn, ValOut>;
46-
at<CVI, CVO>(prefix: KeyIn | null, keyXf: undefined, valueXf: Transformer<CVI, CVO>): Subspace<KeyIn, KeyOut, CVI, CVO>;
47-
at<CKI, CKO, CVI, CVO>(prefix: KeyIn | null, keyXf: Transformer<CKI, CKO>, valueXf: Transformer<CVI, CVO>): Subspace<CKI, CKO, CVI, CVO>;
48-
at<CKI, CKO>(prefix: KeyIn | null, keyXf?: Transformer<CKI, CKO>, valueXf?: undefined):
44+
at(prefix?: KeyIn | null, keyXf?: undefined, valueXf?: undefined): Subspace<KeyIn, KeyOut, ValIn, ValOut>;
45+
at<CKI, CKO>(prefix: KeyIn | null | undefined, keyXf: Transformer<CKI, CKO>, valueXf?: undefined): Subspace<CKI, CKO, ValIn, ValOut>;
46+
at<CVI, CVO>(prefix: KeyIn | null | undefined, keyXf: undefined, valueXf: Transformer<CVI, CVO>): Subspace<KeyIn, KeyOut, CVI, CVO>;
47+
at<CKI, CKO, CVI, CVO>(prefix: KeyIn | null | undefined, keyXf: Transformer<CKI, CKO>, valueXf: Transformer<CVI, CVO>): Subspace<CKI, CKO, CVI, CVO>;
48+
at<CKI, CKO>(prefix: KeyIn | null | undefined, keyXf?: Transformer<CKI, CKO>, valueXf?: undefined):
4949
| Subspace<KeyIn, KeyOut, ValIn, ValOut>
5050
| Subspace<CKI, CKO, ValIn, ValOut>;
51-
at<CVI, CVO>(prefix: KeyIn | null, keyXf: undefined, valueXf?: Transformer<CVI, CVO>):
51+
at<CVI, CVO>(prefix: KeyIn | null | undefined, keyXf: undefined, valueXf?: Transformer<CVI, CVO>):
5252
| Subspace<KeyIn, KeyOut, ValIn, ValOut>
5353
| Subspace<KeyIn, KeyOut, CVI, CVO>;
54-
at<CKI, CKO, CVI, CVO>(prefix: KeyIn | null, keyXf: Transformer<CKI, CKO> | undefined, valueXf: Transformer<CVI, CVO>):
54+
at<CKI, CKO, CVI, CVO>(prefix: KeyIn | null | undefined, keyXf: Transformer<CKI, CKO> | undefined, valueXf: Transformer<CVI, CVO>):
5555
| Subspace<KeyIn, KeyOut, CVI, CVO>
5656
| Subspace<CKI, CKO, CVI, CVO>;
57-
at<CKI, CKO, CVI, CVO>(prefix: KeyIn | null, keyXf: Transformer<CKI, CKO>, valueXf?: Transformer<CVI, CVO>):
57+
at<CKI, CKO, CVI, CVO>(prefix: KeyIn | null | undefined, keyXf: Transformer<CKI, CKO>, valueXf?: Transformer<CVI, CVO>):
5858
| Subspace<CKI, CKO, ValIn, ValOut>
5959
| Subspace<CKI, CKO, CVI, CVO>;
60-
at<CKI, CKO, CVI, CVO>(prefix: KeyIn | null, keyXf?: Transformer<CKI, CKO>, valueXf?: Transformer<CVI, CVO>):
60+
at<CKI, CKO, CVI, CVO>(prefix?: KeyIn | null, keyXf?: Transformer<CKI, CKO>, valueXf?: Transformer<CVI, CVO>):
6161
| Subspace<KeyIn, KeyOut, ValIn, ValOut>
6262
| Subspace<CKI, CKO, ValIn, ValOut>
6363
| Subspace<KeyIn, KeyOut, CVI, CVO>
6464
| Subspace<CKI, CKO, CVI, CVO>;
65-
at(prefix: KeyIn | null, keyXf: Transformer<unknown, unknown> = this.keyXf, valueXf: Transformer<unknown, unknown> = this.valueXf) {
65+
at(prefix?: KeyIn | null, keyXf: Transformer<unknown, unknown> = this.keyXf, valueXf: Transformer<unknown, unknown> = this.valueXf) {
6666
const _prefix = prefix == null ? null : this.keyXf.pack(prefix)
6767
return new Subspace(concatPrefix(this.prefix, _prefix), keyXf, valueXf)
6868
}
@@ -72,13 +72,22 @@ export default class Subspace<KeyIn = NativeValue, KeyOut = Buffer, ValIn = Nati
7272
return new Subspace(concatPrefix(this.prefix, prefix), this.keyXf, this.valueXf)
7373
}
7474

75-
76-
withKeyEncoding<CKI, CKO>(keyXf: Transformer<CKI, CKO>): Subspace<CKI, CKO, ValIn, ValOut> {
75+
withKeyEncoding(keyXf?: undefined): Subspace<NativeValue, Buffer, ValIn, ValOut>
76+
withKeyEncoding<CKI, CKO>(keyXf: Transformer<CKI, CKO>): Subspace<CKI, CKO, ValIn, ValOut>
77+
withKeyEncoding<CKI, CKO>(keyXf?: Transformer<CKI, CKO>):
78+
| Subspace<NativeValue, Buffer, ValIn, ValOut>
79+
| Subspace<CKI, CKO, ValIn, ValOut>
80+
withKeyEncoding(keyXf?: Transformer<unknown, unknown>) {
7781
return new Subspace(this.prefix, keyXf, this.valueXf)
7882
}
79-
80-
withValueEncoding<CVI, CVO>(valXf: Transformer<CVI, CVO>): Subspace<KeyIn, KeyOut, CVI, CVO> {
81-
return new Subspace(this.prefix, this.keyXf, valXf)
83+
84+
withValueEncoding(valueXf?: undefined): Subspace<KeyIn, KeyOut, NativeValue, Buffer>
85+
withValueEncoding<CVI, CVO>(valueXf: Transformer<CVI, CVO>): Subspace<KeyIn, KeyOut, CVI, CVO>
86+
withValueEncoding<CVI, CVO>(valueXf?: Transformer<CVI, CVO>):
87+
| Subspace<KeyIn, KeyOut, NativeValue, Buffer>
88+
| Subspace<KeyIn, KeyOut, CVI, CVO>
89+
withValueEncoding(valueXf?: Transformer<unknown, unknown>) {
90+
return new Subspace(this.prefix, this.keyXf, valueXf)
8291
}
8392

8493
// GetSubspace implementation

0 commit comments

Comments
 (0)