diff --git a/src/constants.ts b/src/constants.ts new file mode 100644 index 0000000000..6a86e9e55d --- /dev/null +++ b/src/constants.ts @@ -0,0 +1 @@ +export const resolved_promise = Promise.resolve(); diff --git a/src/runtime/internal/scheduler.ts b/src/runtime/internal/scheduler.ts index 568739e4f8..9d9e6ec539 100644 --- a/src/runtime/internal/scheduler.ts +++ b/src/runtime/internal/scheduler.ts @@ -1,5 +1,6 @@ import { run_all } from './utils'; import { set_current_component } from './lifecycle'; +import { resolved_promise } from '../../constants'; export const dirty_components = []; export const intros = { enabled: false }; @@ -8,7 +9,6 @@ export const binding_callbacks = []; const render_callbacks = []; const flush_callbacks = []; -const resolved_promise = Promise.resolve(); let update_scheduled = false; export function schedule_update() { diff --git a/src/runtime/internal/transitions.ts b/src/runtime/internal/transitions.ts index 21d67a12ba..ded0a657be 100644 --- a/src/runtime/internal/transitions.ts +++ b/src/runtime/internal/transitions.ts @@ -5,12 +5,13 @@ import { create_rule, delete_rule } from './style_manager'; import { custom_event } from './dom'; import { add_render_callback } from './scheduler'; import { TransitionConfig } from '../transition'; +import { resolved_promise } from '../../constants'; let promise: Promise|null; function wait() { if (!promise) { - promise = Promise.resolve(); + promise = resolved_promise; promise.then(() => { promise = null; }); diff --git a/src/runtime/motion/spring.ts b/src/runtime/motion/spring.ts index 8d2056256c..5de2604706 100644 --- a/src/runtime/motion/spring.ts +++ b/src/runtime/motion/spring.ts @@ -1,6 +1,7 @@ import { Readable, writable } from 'svelte/store'; import { loop, now, Task } from 'svelte/internal'; import { is_date } from './utils'; +import { resolved_promise } from '../../constants'; interface TickContext { inv_mass: number; @@ -89,7 +90,7 @@ export function spring(value?: T, opts: SpringOpts = {}): Spring { last_time = now(); last_value = new_value; store.set(value = target_value); - return Promise.resolve(); + return resolved_promise; } else if (opts.soft) { const rate = opts.soft === true ? .5 : +opts.soft; inv_mass_recovery_rate = 1 / (rate * 60); diff --git a/src/runtime/motion/tweened.ts b/src/runtime/motion/tweened.ts index 8fa5ebaba6..f40bc7e81b 100644 --- a/src/runtime/motion/tweened.ts +++ b/src/runtime/motion/tweened.ts @@ -2,6 +2,7 @@ import { Readable, writable } from 'svelte/store'; import { assign, is_function, loop, now, Task } from 'svelte/internal'; import { linear } from 'svelte/easing'; import { is_date } from './utils'; +import { resolved_promise } from '../../constants'; function get_interpolator(a, b) { if (a === b || a !== a) return () => a; @@ -78,7 +79,7 @@ export function tweened(value?: T, defaults: Options = {}): Tweened { function set(new_value: T, opts?: Options) { if (value == null) { store.set(value = new_value); - return Promise.resolve(); + return resolved_promise; } target_value = new_value; @@ -100,7 +101,7 @@ export function tweened(value?: T, defaults: Options = {}): Tweened { } store.set(value = target_value); - return Promise.resolve(); + return resolved_promise; } const start = now() + delay; diff --git a/src/runtime/tsconfig.json b/src/runtime/tsconfig.json index f3b4691b41..a58a02f42b 100644 --- a/src/runtime/tsconfig.json +++ b/src/runtime/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "../../tsconfig.json", - "include": ["."], + "include": [".", "../constants.ts"], "compilerOptions": { "lib": ["es2015", "dom", "dom.iterable"],