@lion/ui
Version:
A package of extendable web components
62 lines (56 loc) • 1.37 kB
JavaScript
/**
* @type {Object.<String, Object>}
*/
let fakeImports = {};
/**
* @param {string} path
* @param {Object} data
*/
export function setupFakeImport(path, data) {
const fakeExports = { ...data };
Object.defineProperty(fakeExports, '__esModule', { value: true });
fakeImports[path] = fakeExports;
}
/**
* @param {string[]} namespaces
* @param {string[]} locales
*/
export function setupEmptyFakeImportsFor(namespaces, locales) {
namespaces.forEach(namespace => {
locales.forEach(locale => {
setupFakeImport(`./${namespace}/${locale}.js`, {
default: { foo: `bar-${locale}` },
});
});
});
}
export function resetFakeImport() {
fakeImports = {};
}
/**
* @param {Object} result
* @param {Function} resolve
* @param {Function} reject
*/
function resolveOrReject(result, resolve, reject) {
if (result) {
resolve(result);
} else {
reject();
}
}
/**
* @param {string} path
* @param {number} [ms=0]
* @returns {Promise.<Object>}
*/
export async function fakeImport(path, ms = 0) {
const result = fakeImports[path];
if (ms > 0) {
return new Promise((resolve, reject) => {
setTimeout(() => resolveOrReject(result, resolve, reject), ms);
});
}
// eslint-disable-next-line no-promise-executor-return
return new Promise((resolve, reject) => resolveOrReject(result, resolve, reject));
}