60 lines
1.3 KiB
JavaScript
60 lines
1.3 KiB
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);
|
|
});
|
|
}
|
|
return new Promise((resolve, reject) => resolveOrReject(result, resolve, reject));
|
|
}
|