Skip to content

Commit

Permalink
feat: refine sync method interface
Browse files Browse the repository at this point in the history
  • Loading branch information
falsandtru committed Apr 25, 2018
1 parent f861107 commit 55c0f6c
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 7 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

## 0.25.0

- Refine sync method interface.

## 0.24.1

- Fix incorrect event emitting with NaN checks.
Expand Down
2 changes: 1 addition & 1 deletion index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export class StoreChannel<K extends string, V extends StoreChannelObject<K>> {
readonly save: Observer<never[] | [K] | [K, Extract<keyof DiffStruct<V, StoreChannelObject<K>> | '', string>] | [K, Extract<keyof DiffStruct<V, StoreChannelObject<K>> | '', string>, StoreChannelEventType], StoreChannelEvent<K, V>, void>;
readonly loss: Observer<never[] | [K] | [K, Extract<keyof DiffStruct<V, StoreChannelObject<K>> | '', string>] | [K, Extract<keyof DiffStruct<V, StoreChannelObject<K>> | '', string>, StoreChannelEventType], StoreChannelEvent<K, V>, void>;
};
sync(keys: K[], cb?: (results: [K, DOMException | DOMError | Error | null][]) => void): void;
sync(keys: K[], cb?: (results: Promise<K>[]) => void): void;
link(key: K, age?: number): V;
delete(key: K): void;
recent(limit: number, cb: (keys: K[], err?: DOMException | DOMError | Error | null) => void): void;
Expand Down
16 changes: 12 additions & 4 deletions src/layer/domain/indexeddb/model/channel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -145,15 +145,23 @@ export class ChannelStore<K extends string, V extends StoreChannelObject<K>> {
save: new Observation<never[] | [K] | [K, Extract<keyof DiffStruct<V, StoreChannelObject<K>> | '', string>] | [K, Extract<keyof DiffStruct<V, StoreChannelObject<K>> | '', string>, ChannelStore.EventType], ChannelStore.Event<K, V>, void>({ limit: Infinity }),
loss: new Observation<never[] | [K] | [K, Extract<keyof DiffStruct<V, StoreChannelObject<K>> | '', string>] | [K, Extract<keyof DiffStruct<V, StoreChannelObject<K>> | '', string>, ChannelStore.EventType], ChannelStore.Event<K, V>, void>({ limit: Infinity }),
});
public sync(keys: K[], cb: (results: [K, DOMException | DOMError | null][]) => void = noop, timeout = Infinity): void {
public sync(keys: K[], cb: (results: Promise<K>[]) => void = noop, timeout = Infinity): void {
const cancellation = new Cancellation();
if (Number.isFinite(timeout)) {
void setTimeout(cancellation.cancel, timeout);
}
return void Promise.all(keys.map(key =>
new Promise(resolve =>
void this.fetch(key, error =>
void resolve([key, error]), cancellation))))
new Promise<[K, Error | DOMError | null]>(resolve =>
void this.fetch(
key,
error =>
void resolve([key, error]),
cancellation))))
.then(rs =>
rs.map(([key, error]) =>
error
? Promise.reject(error)
: Promise.resolve(key)))
.then(cb);
}
public fetch(key: K, cb: (error: DOMException | DOMError | Error | null) => void = noop, cancellation = new Cancellation()): void {
Expand Down
4 changes: 2 additions & 2 deletions src/layer/domain/indexeddb/service/channel.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ describe('Unit: layers/domain/indexeddb/service/channel', function () {
listen_('test', db => {
db.transaction('data', 'readwrite').objectStore('data').put(adjust(new StoreChannel.Record('a', { n: 1 })));
db.transaction('data', 'readwrite').objectStore('data').put(adjust(new StoreChannel.Record('a', { s: '1' }))).onsuccess = () => {
chan.sync(['a', 'z'], results => {
assert.deepStrictEqual(results, [['a', null], ['z', null]]);
chan.sync(['a', 'z'], async results => {
assert.deepStrictEqual(await Promise.all(results), ['a', 'z']);
const link = chan.link('a');
assert(link.__id === 2);
assert(link.__key === 'a');
Expand Down

0 comments on commit 55c0f6c

Please sign in to comment.