creevey
Version:
Cross-browser screenshot testing tool for Storybook with fancy UI Runner
73 lines • 2.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.initCreeveyClientApi = initCreeveyClientApi;
const types_js_1 = require("../../types.js");
const helpers_js_1 = require("./helpers.js");
async function initCreeveyClientApi() {
let clientApiResolver = types_js_1.noop;
let clientApiRejecter = types_js_1.noop;
const updateListeners = new Set();
let statusRequest = null;
let statusResolver = types_js_1.noop;
let isUpdateMode = false;
const ws = new WebSocket(`ws://${(0, helpers_js_1.getConnectionUrl)()}`);
function send(request) {
ws.send(JSON.stringify(request));
}
ws.addEventListener('error', (event) => {
clientApiRejecter(event);
});
ws.addEventListener('open', () => {
clientApiResolver({
start(ids) {
if (isUpdateMode) {
console.warn('Tests cannot be started in Update Mode. This mode is for approving screenshots only.');
return;
}
send({ type: 'start', payload: ids });
},
stop() {
if (isUpdateMode) {
console.warn('Tests cannot be stopped in Update Mode. This mode is for approving screenshots only.');
return;
}
send({ type: 'stop' });
},
approve(id, retry, image) {
send({ type: 'approve', payload: { id, retry, image } });
},
approveAll() {
send({ type: 'approveAll' });
},
onUpdate(fn) {
updateListeners.add(fn);
return () => updateListeners.delete(fn);
},
get status() {
if (statusRequest)
return statusRequest;
send({ type: 'status' });
return (statusRequest = new Promise((resolve) => (statusResolver = resolve)));
},
});
});
ws.addEventListener('message', (message) => {
const data = JSON.parse(message.data);
if (data.type == 'update')
updateListeners.forEach((fn) => {
fn(data.payload);
});
if (data.type == 'status') {
isUpdateMode = data.payload.isUpdateMode;
statusResolver(data.payload);
statusResolver = types_js_1.noop;
statusRequest = null;
}
});
// TODO Reconnect
return new Promise((resolve, reject) => {
clientApiResolver = resolve;
clientApiRejecter = reject;
});
}
//# sourceMappingURL=creeveyClientApi.js.map