diff --git a/index.d.ts b/index.d.ts index c92cda02..34f3a733 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,3 +1,4 @@ +import type { PartialTuple } from 'spica/type'; import { Observer } from 'spica/observation'; import { AtomicPromise } from 'spica/promise'; import { ChannelObject } from './index'; @@ -7,9 +8,9 @@ export { ChannelObject } from './index'; export class StoreChannel> { constructor(name: string, config: StoreChannelConfig); readonly events: { - readonly load: Observer<[K] | [K, Extract] | [K, Extract, StoreChannelEventType], StoreChannelEvent, void>; - readonly save: Observer<[K] | [K, Extract] | [K, Extract, StoreChannelEventType], StoreChannelEvent, void>; - readonly loss: Observer<[K] | [K, Extract] | [K, Extract, StoreChannelEventType], StoreChannelEvent, void>; + readonly load: Observer, StoreChannelEventType]>, StoreChannelEvent, void>; + readonly save: Observer, StoreChannelEventType]>, StoreChannelEvent, void>; + readonly loss: Observer, StoreChannelEventType]>, StoreChannelEvent, void>; }; sync(keys: K[], cb?: (results: AtomicPromise[]) => void): void; link(key: K, age?: number): V; @@ -30,7 +31,7 @@ export interface StoreChannelObject { readonly [ChannelObject.id]: number; readonly [ChannelObject.key]: K; readonly [ChannelObject.date]: number; - readonly [ChannelObject.event]: Observer<[StorageChannelEventType] | [StorageChannelEventType, Extract], StorageChannelEvent, void>; + readonly [ChannelObject.event]: Observer]>, StorageChannelEvent, void>; } export interface StoreChannelObjectMetaData { readonly id: number; @@ -68,7 +69,7 @@ export interface StorageChannelConfig { migrate?(link: V): void; } export interface StorageChannelObject { - readonly [ChannelObject.event]: Observer<[StorageChannelEventType] | [StorageChannelEventType, Extract], StorageChannelEvent, void>; + readonly [ChannelObject.event]: Observer]>, StorageChannelEvent, void>; } export interface StorageChannelEvent { readonly type: StorageChannelEventType; diff --git a/package.json b/package.json index b75b9df6..2fb76939 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "npm-check-updates": "^4.0.1", "power-assert": "^1.6.1", "semver": "^7.1.1", - "spica": "0.0.313", + "spica": "0.0.314", "tsify": "^4.0.1", "typescript": "3.8.0-dev.20200125", "vinyl-buffer": "^1.0.1", diff --git a/src/layer/data/es/store.ts b/src/layer/data/es/store.ts index dc50a702..4c4d27b1 100644 --- a/src/layer/data/es/store.ts +++ b/src/layer/data/es/store.ts @@ -1,3 +1,4 @@ +import type { PartialTuple } from 'spica/type'; import { Observation } from 'spica/observation'; import { Cancellation } from 'spica/cancellation'; import { tick } from 'spica/clock'; @@ -98,15 +99,15 @@ export abstract class EventStore { } }); } - private readonly memory = new Observation<[] | [K] | [K, keyof V | ''] | [K, keyof V | '', string] | [K, keyof V | '', string, string], void, UnstoredEventRecord | LoadedEventRecord | SavedEventRecord>(); + private readonly memory = new Observation, void, UnstoredEventRecord | LoadedEventRecord | SavedEventRecord>(); public readonly events = Object.freeze({ - load: new Observation<[K] | [K, Extract] | [K, Extract, EventStore.EventType], EventStore.Event, void>(), - save: new Observation<[K] | [K, Extract] | [K, Extract, EventStore.EventType], EventStore.Event, void>(), - loss: new Observation<[K] | [K, Extract] | [K, Extract, EventStore.EventType], EventStore.Event, void>(), + load: new Observation, EventStore.EventType]>, EventStore.Event, void>(), + save: new Observation, EventStore.EventType]>, EventStore.Event, void>(), + loss: new Observation, EventStore.EventType]>, EventStore.Event, void>(), clean: new Observation<[K], boolean, void>(), }); private readonly events_ = Object.freeze({ - memory: new Observation<[K] | [K, keyof V | ''] | [K, keyof V | '', string], UnstoredEventRecord | LoadedEventRecord | SavedEventRecord, void>({ limit: Infinity }), + memory: new Observation, UnstoredEventRecord | LoadedEventRecord | SavedEventRecord, void>({ limit: Infinity }), }); private tx_: { rw?: IDBTransaction; diff --git a/src/layer/domain/indexeddb/model/channel.ts b/src/layer/domain/indexeddb/model/channel.ts index 593953ca..015174a4 100644 --- a/src/layer/domain/indexeddb/model/channel.ts +++ b/src/layer/domain/indexeddb/model/channel.ts @@ -1,4 +1,5 @@ import { StoreChannelObject, StoreChannelObjectMetaData } from '../../../../../'; +import type { PartialTuple } from 'spica/type'; import { Observation } from 'spica/observation'; import { Cancellation } from 'spica/cancellation'; import { AtomicPromise } from 'spica/promise'; @@ -135,14 +136,14 @@ export class ChannelStore> { }; })(), { ignore: { delete: true } }); public readonly events_ = Object.freeze({ - load: new Observation<[K] | [K, keyof V | ''] | [K, keyof V | '', ChannelStore.EventType], ChannelStore.Event, void>(), - save: new Observation<[K] | [K, keyof V | ''] | [K, keyof V | '', ChannelStore.EventType], ChannelStore.Event, void>(), + load: new Observation, ChannelStore.Event, void>(), + save: new Observation, ChannelStore.Event, void>(), clean: new Observation<[K], boolean, void>(), }); public readonly events = Object.freeze({ - load: new Observation<[K] | [K, Extract] | [K, Extract, ChannelStore.EventType], ChannelStore.Event, void>({ limit: Infinity }), - save: new Observation<[K] | [K, Extract] | [K, Extract, ChannelStore.EventType], ChannelStore.Event, void>({ limit: Infinity }), - loss: new Observation<[K] | [K, Extract] | [K, Extract, ChannelStore.EventType], ChannelStore.Event, void>({ limit: Infinity }), + load: new Observation, ChannelStore.EventType]>, ChannelStore.Event, void>({ limit: Infinity }), + save: new Observation, ChannelStore.EventType]>, ChannelStore.Event, void>({ limit: Infinity }), + loss: new Observation, ChannelStore.EventType]>, ChannelStore.Event, void>({ limit: Infinity }), }); public sync(keys: K[], cb: (results: AtomicPromise[]) => void = noop, timeout = Infinity): void { const cancellation = new Cancellation(); diff --git a/src/layer/domain/indexeddb/service/channel.ts b/src/layer/domain/indexeddb/service/channel.ts index cb0d762b..4a27fab3 100644 --- a/src/layer/domain/indexeddb/service/channel.ts +++ b/src/layer/domain/indexeddb/service/channel.ts @@ -56,6 +56,7 @@ export class StoreChannel> ext if (changes.length === 0) return; void migrate(link); for (const { attr, oldVal } of changes) { + // @ts-ignore #31251 void cast(source[Schema.event]!) .emit([StorageChannel.EventType.recv, attr], new StorageChannel.Event(StorageChannel.EventType.recv, attr as never, memory[attr as never], oldVal as never)); } @@ -97,6 +98,7 @@ export class StoreChannel> ext () => this.factory(), (attr, newValue, oldValue) => ( void this.add(new ChannelStore.Record(key, { [attr]: newValue } as Partial)), + // @ts-ignore #31251 void cast(this.sources.get(key)![Schema.event]!) .emit([StorageChannel.EventType.send, attr], new StorageChannel.Event(StorageChannel.EventType.send, attr as never, newValue, oldValue))), throttle(100, () => this.has(key) && void this.log(key))))