@bffr/tools
Advanced tools
Comparing version 0.0.5 to 0.0.6
@@ -18,3 +18,4 @@ /** | ||
export * from './timer'; | ||
export * from './match'; | ||
export { boolean as bool } from './boolean'; | ||
export { promise as prom } from './promise'; |
@@ -35,2 +35,3 @@ "use strict"; | ||
__exportStar(require("./timer"), exports); | ||
__exportStar(require("./match"), exports); | ||
var boolean_1 = require("./boolean"); | ||
@@ -37,0 +38,0 @@ Object.defineProperty(exports, "bool", { enumerable: true, get: function () { return boolean_1.boolean; } }); |
@@ -10,2 +10,4 @@ declare type PromiseValue<T> = Promise<T> | (() => Promise<T>); | ||
like: typeof isPromiseLike; | ||
delay: typeof delayFor; | ||
resolveAfter: typeof resolveAfter; | ||
}; | ||
@@ -16,2 +18,5 @@ export declare function mapPromise<T, R>(list: T[], op: (item: T, index: number, source: typeof list) => R | Promise<R>): Promise<(Awaited<R> | Awaited<R>)[]>; | ||
export declare function isPromiseLike<T>(data: T | PromiseLike<T>): data is PromiseLike<T>; | ||
export declare function delayFor(duration: number): Promise<unknown>; | ||
export declare function resolveAfter<T>(duration: number, promise: Promise<T | undefined>): Promise<T>; | ||
export declare function rejectAfter<T>(duration: number, promise: Promise<T>): Promise<T>; | ||
export {}; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isPromiseLike = exports.isPromise = exports.followPromise = exports.mapPromise = exports.promise = void 0; | ||
exports.rejectAfter = exports.resolveAfter = exports.delayFor = exports.isPromiseLike = exports.isPromise = exports.followPromise = exports.mapPromise = exports.promise = void 0; | ||
const func_1 = require("./func"); | ||
@@ -10,2 +10,4 @@ exports.promise = { | ||
like: isPromiseLike, | ||
delay: delayFor, | ||
resolveAfter: resolveAfter, | ||
}; | ||
@@ -37,2 +39,17 @@ function mapPromise(list, op) { | ||
exports.isPromiseLike = isPromiseLike; | ||
function delayFor(duration) { | ||
return new Promise(next => setTimeout(next, duration)); | ||
} | ||
exports.delayFor = delayFor; | ||
function resolveAfter(duration, promise) { | ||
return Promise.race([promise, delayFor(duration)]); | ||
} | ||
exports.resolveAfter = resolveAfter; | ||
function rejectAfter(duration, promise) { | ||
return (Promise.race([ | ||
promise, | ||
new Promise(async (_, reject) => reject((await delayFor(duration), undefined))), | ||
])); | ||
} | ||
exports.rejectAfter = rejectAfter; | ||
//# sourceMappingURL=promise.js.map |
@@ -5,1 +5,2 @@ export declare type Timer<T> = (fn: () => unknown, duration: number) => T; | ||
export declare function createTimer<T>(set: Timer<T>, clear: (v: T) => unknown): Timer<() => void>; | ||
export declare function createIdleCallback(callback: () => unknown): () => any; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.createTimer = exports.createInterval = exports.createTimeout = void 0; | ||
exports.createIdleCallback = exports.createTimer = exports.createInterval = exports.createTimeout = void 0; | ||
exports.createTimeout = createTimer(setTimeout, clearTimeout); | ||
@@ -14,2 +14,18 @@ exports.createInterval = createTimer(setInterval, clearInterval); | ||
exports.createTimer = createTimer; | ||
const timeout = 4 * 16; | ||
function createIdleCallback(callback) { | ||
// not supported by all browsers or environments | ||
// @ts-expect-error: window this window that | ||
if (window?.requestIdleCallback != null) { | ||
// @ts-expect-error: window this window that | ||
let id = window.requestIdleCallback(() => callback?.(), { timeout }); | ||
// @ts-expect-error: window this window that | ||
return () => window.cancelIdleCallback(id); | ||
} | ||
else { | ||
let id = setTimeout(callback, timeout); | ||
return () => clearTimeout(id); | ||
} | ||
} | ||
exports.createIdleCallback = createIdleCallback; | ||
//# sourceMappingURL=timer.js.map |
{ | ||
"name": "@bffr/tools", | ||
"version": "0.0.5", | ||
"version": "0.0.6", | ||
"description": "Hammers, saws, and more pure function tools.", | ||
@@ -14,3 +14,4 @@ "main": "./dist/index.js", | ||
"build": "rm -rf ./dist && tsc -b", | ||
"publish": "yarn build && npm publish --access public", | ||
"prepublishOnly": "yarn build", | ||
"publish": "npm publish --access public", | ||
"test": "echo \"Error: no test specified\" && exit 1" | ||
@@ -17,0 +18,0 @@ }, |
@@ -18,4 +18,5 @@ /** | ||
export * from './timer'; | ||
export * from './match'; | ||
export { boolean as bool } from './boolean'; | ||
export { promise as prom } from './promise'; |
@@ -11,2 +11,4 @@ import { func } from './func'; | ||
like: isPromiseLike, | ||
delay: delayFor, | ||
resolveAfter: resolveAfter, | ||
}; | ||
@@ -50,1 +52,23 @@ | ||
} | ||
export function delayFor(duration: number) { | ||
return new Promise(next => setTimeout(next, duration)); | ||
} | ||
export function resolveAfter<T>( | ||
duration: number, | ||
promise: Promise<T | undefined>, | ||
) { | ||
return <Promise<T>>Promise.race([promise, delayFor(duration)]); | ||
} | ||
export function rejectAfter<T>(duration: number, promise: Promise<T>) { | ||
return <Promise<T>>( | ||
Promise.race([ | ||
promise, | ||
new Promise(async (_, reject) => | ||
reject((await delayFor(duration), undefined)), | ||
), | ||
]) | ||
); | ||
} |
@@ -17,1 +17,16 @@ export type Timer<T> = (fn: () => unknown, duration: number) => T; | ||
} | ||
const timeout = 4 * 16; | ||
export function createIdleCallback(callback: () => unknown) { | ||
// not supported by all browsers or environments | ||
// @ts-expect-error: window this window that | ||
if (window?.requestIdleCallback != null) { | ||
// @ts-expect-error: window this window that | ||
let id = window.requestIdleCallback(() => callback?.(), { timeout }); | ||
// @ts-expect-error: window this window that | ||
return () => window.cancelIdleCallback(id); | ||
} else { | ||
let id = setTimeout(callback, timeout); | ||
return () => clearTimeout(id); | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
68874
71
1449