@bililive-tools/douyin-recorder
Version:
@bililive-tools douyin recorder implemention
45 lines (44 loc) • 1.41 kB
JavaScript
import fs from "node:fs";
import path from "node:path";
/**
* 接收 fn ,返回一个和 fn 签名一致的函数 fn'。当已经有一个 fn' 在运行时,再调用
* fn' 会直接返回运行中 fn' 的 Promise,直到 Promise 结束 pending 状态
*/
export function singleton(fn) {
let latestPromise = null;
return function (...args) {
if (latestPromise)
return latestPromise;
// @ts-ignore
const promise = fn.apply(this, args).finally(() => {
if (promise === latestPromise) {
latestPromise = null;
}
});
latestPromise = promise;
return promise;
};
}
export function ensureFolderExist(fileOrFolderPath) {
const folder = path.dirname(fileOrFolderPath);
if (!fs.existsSync(folder)) {
fs.mkdirSync(folder, { recursive: true });
}
}
export function assert(assertion, msg) {
if (!assertion) {
throw new Error(msg);
}
}
export function assertStringType(data, msg) {
assert(typeof data === "string", msg);
}
export function assertNumberType(data, msg) {
assert(typeof data === "number", msg);
}
export function assertObjectType(data, msg) {
assert(typeof data === "object", msg);
}
export function replaceExtName(filePath, newExtName) {
return path.join(path.dirname(filePath), path.basename(filePath, path.extname(filePath)) + newExtName);
}