@testplane/storybook
Version:
Testplane plugin that enables runtime screenshot storybook tests autogeneration
54 lines • 2.63 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.waitStorybookDataJson = void 0;
const constants_1 = require("../../constants");
const logger_1 = __importDefault(require("../../logger"));
const waitStorybookDataJson = async (storybookJsonUrls, waitStorybookJsonTimeout, fetch = globalThis.fetch) => {
let isSuccess = false;
let isError = false;
const timeoutPromise = new Promise((_, reject) => {
setTimeout(() => {
if (!isSuccess) {
isError = true;
reject(new Error([
`Couldn't obtain stories JSON data in ${waitStorybookJsonTimeout}ms`,
'If you are using Storybook v6, please make sure you have set "features.buildStoriesJson" to "true" in your "./.storybook/main.js" file.',
`If your storybook dev server can't start in ${waitStorybookJsonTimeout}ms, you can increase "waitStorybookJsonTimeout" value in the config`,
].join("\n")));
}
}, waitStorybookJsonTimeout).unref();
});
const storybookReadyPromise = new Promise(resolve => {
const waitForResource = (resourceUrl) => {
const tryToFetch = () => {
const signal = AbortSignal.timeout(constants_1.STORYBOOK_SERVER_REQUEST_TIMEOUT);
fetch(resourceUrl, { signal })
.then(res => res.text())
.then(text => JSON.parse(text))
.then(data => {
if (!isError && !isSuccess) {
isSuccess = true;
resolve(data);
}
})
.catch((err) => {
if (!isError && !isSuccess) {
setTimeout(tryToFetch, constants_1.STORYBOOK_SERVER_CHECK_INTERVAL);
const errorMessage = err && err.cause && (err.cause.code || err.cause);
if (errorMessage && errorMessage !== "ECONNREFUSED") {
logger_1.default.warn("Fetching stories json failed:", errorMessage);
}
}
});
};
tryToFetch();
};
storybookJsonUrls.forEach(waitForResource);
});
return Promise.race([timeoutPromise, storybookReadyPromise]);
};
exports.waitStorybookDataJson = waitStorybookDataJson;
//# sourceMappingURL=wait-storybook-data-json.js.map