From 07b44dbffc249f3665b11f403c2e91c5c630f6c3 Mon Sep 17 00:00:00 2001 From: pushkine Date: Tue, 14 Apr 2020 07:56:53 +0200 Subject: [PATCH] lint --- src/runtime/store/index.ts | 72 +++++++++++++++----------------------- 1 file changed, 29 insertions(+), 43 deletions(-) diff --git a/src/runtime/store/index.ts b/src/runtime/store/index.ts index abae70c500..069ea11216 100644 --- a/src/runtime/store/index.ts +++ b/src/runtime/store/index.ts @@ -3,26 +3,33 @@ import { subscribe, noop, safe_not_equal, get_store_value } from 'svelte/interna /** Sets the value of a store. */ type Setter = (value: T) => void; -/** Callback called on last removed subscriber */ +/** Called on last removed subscriber */ type StopCallback = () => void; - /** Function called on first added subscriber * If a callback is returned it will be called on last removed subscriber */ type StartStopNotifier = (set: Setter) => StopCallback | void; - -/** Callback to inform of a value updates. */ type Subscriber = (value: T) => void; - -/** Unsubscribes from value updates. */ type Unsubscriber = () => void; - -/** Callback to update a value. */ -type Updater = (value: T) => any; - -/** Cleanup logic callback. */ +type Updater = (value: T) => T; +/** Internal callback, invalidates every store before updating */ type Invalidator = () => void; +type SubscribeInvalidateTuple = [Subscriber, Invalidator]; +type Store = Writable | Readable; +type ValuesOf = { [K in keyof T]: T[K] extends Store ? U : never }; +type ValueOf = T extends Store ? U : never; +type StoreValues = T extends Store ? ValueOf : ValuesOf; +/** The value of the derived store is the value returned by the function */ +type AutoDeriver = (values: StoreValues) => T; +/** The value of the derived store is set manually through Setter calls */ +type ManualDeriver = (values: StoreValues, set: Setter) => Unsubscriber | void; +/** Type of derivation function, is decided by the number of arguments */ +type Deriver = AutoDeriver | ManualDeriver; +type DerivedValue = T extends Deriver ? U : never; +type DeriverController = { + update(values: StoreValues, set: Setter): void; + cleanup?(): void; +}; -/** Readable interface for subscribing. */ export interface Readable { /** * Subscribe on value changes. @@ -31,8 +38,6 @@ export interface Readable { */ subscribe(run: Subscriber, invalidate?: Invalidator): Unsubscriber; } - -/** Writable interface for both updating and subscribing. */ export interface Writable extends Readable { /** * Set value and inform subscribers. @@ -47,9 +52,6 @@ export interface Writable extends Readable { update(updater: Updater): void; } -/** Pair of subscriber and invalidator. */ -type SubscribeInvalidateTuple = [Subscriber, Invalidator]; - const subscriber_queue = []; /** @@ -58,9 +60,7 @@ const subscriber_queue = []; * @param {StartStopNotifier}start start and stop notifications for subscriptions */ export function readable(value: T, start: StartStopNotifier): Readable { - return { - subscribe: writable(value, start).subscribe, - }; + return { subscribe: writable(value, start).subscribe }; } /** @@ -70,7 +70,7 @@ export function readable(value: T, start: StartStopNotifier): Readable */ export function writable(value: T, start: StartStopNotifier = noop): Writable { let stop: Unsubscriber; - const subscribers: SubscribeInvalidateTuple[] = []; + const subscribers: Array> = []; function set(new_value: T): void { if (!safe_not_equal(value, new_value)) return; @@ -106,22 +106,6 @@ export function writable(value: T, start: StartStopNotifier = noop): Writa return { set, update, subscribe }; } - -type Store = Writable | Readable; - -type ValuesOf = { [K in keyof T]: T[K] extends Store ? U : never }; -type ValueOf = T extends Store ? U : never; -type StoreValues = T extends Store ? ValueOf : ValuesOf; - -type AutoDeriver = (values: StoreValues) => T; -type ManualDeriver = (values: StoreValues, set: Setter) => Unsubscriber | void; -type Deriver = AutoDeriver | ManualDeriver; -type DerivedValue = T extends Deriver ? U : never; - -type DeriverController = { - update(values: StoreValues, set: Setter): void; - cleanup?(): void; -}; /** * Derived value store by synchronizing one or more readable stores and * applying an aggregation function over its input values. @@ -130,28 +114,30 @@ type DeriverController = { * @param fn - function callback that aggregates the values * @param initial_value - when used asynchronously */ -export function derived | Store[], F extends Deriver, T = DerivedValue>( +export function derived | Array>, F extends Deriver, T = DerivedValue>( stores: S, fn: F, initial_value?: T ) { const mode = fn.length < 2 ? auto(fn as AutoDeriver) : manual(fn as ManualDeriver); - const deriver = Array.isArray(stores) ? multiple(stores as Store[], mode) : single(stores as Store, mode); + const deriver = Array.isArray(stores) + ? multiple(stores as Array>, mode) + : single(stores as Store, mode); return readable(initial_value, deriver) as Readable; } function single(store: S, controller: DeriverController): StartStopNotifier { return set => { - const unsub = subscribe(store, (value: ValueOf) => controller.update(value, set)); + const unsub = subscribe(store, value => controller.update(value, set)); return function stop() { unsub(), controller.cleanup(); }; }; } -function multiple[], T>(stores: S, controller: DeriverController): StartStopNotifier { +function multiple>, T>(stores: S, controller: DeriverController): StartStopNotifier { return set => { - let inited = false, - pending = 0; + let inited = false; + let pending = 0; const values = new Array(stores.length) as StoreValues; function sync() { if (inited && !pending) {