@remotion/studio
Version:
APIs for interacting with the Remotion Studio
152 lines (151 loc) • 5.85 kB
JavaScript
;
/* eslint-disable no-console */
/**
* Source code is adapted from
* https://github.com/webpack-contrib/webpack-hot-middleware#readme
* and rewritten in TypeScript. This file is MIT licensed
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.processUpdate = void 0;
const url_state_1 = require("../helpers/url-state");
if (!__webpack_module__.hot) {
throw new Error('[Fast refresh] Hot Module Replacement is disabled.');
}
const hmrDocsUrl = 'https://webpack.js.org/concepts/hot-module-replacement/';
let lastHash;
const failureStatuses = { abort: 1, fail: 1 };
const applyOptions = {
ignoreUnaccepted: true,
ignoreDeclined: true,
ignoreErrored: true,
onUnaccepted(data) {
var _a;
console.warn('Ignored an update to unaccepted module ' +
((_a = data.chain) !== null && _a !== void 0 ? _a : []).join(' -> '));
// Case:
// 1. Import a CSS file with a bad filename in Root.tsx
// 2. Fix the import and save it
if (!window.remotion_isStudio) {
(0, url_state_1.reloadUrl)();
}
},
onDeclined(data) {
var _a;
console.warn('Ignored an update to declined module ' + ((_a = data.chain) !== null && _a !== void 0 ? _a : []).join(' -> '));
},
onErrored(data) {
console.error(data.error);
console.warn('Ignored an error while updating module ' +
data.moduleId +
' (' +
data.type +
')');
},
};
function upToDate(hash) {
if (hash)
lastHash = hash;
return lastHash === __webpack_hash__;
}
const processUpdate = function (hash, moduleMap, options) {
var _a;
async function check() {
var _a;
const cb = function (err, updatedModules) {
var _a;
if (err)
return handleError(err);
if (!updatedModules) {
if (options.warn) {
console.warn('[Fast refresh] Cannot find update (Full reload needed)');
console.warn('[Fast refresh] (Probably because of restarting the server)');
}
performReload();
return null;
}
const applyCallback = function (applyErr, renewedModules) {
if (applyErr)
return handleError(applyErr);
if (!upToDate()) {
check();
}
logUpdates(updatedModules, renewedModules);
};
const applyResult = (_a = __webpack_module__.hot) === null || _a === void 0 ? void 0 : _a.apply(applyOptions);
if (applyResult === null || applyResult === void 0 ? void 0 : applyResult.then) {
// HotModuleReplacement.runtime.js refers to the result as `outdatedModules`
applyResult
.then((outdatedModules) => {
applyCallback(null, outdatedModules);
})
.catch((_err) => applyCallback(_err, []));
}
};
try {
const result = await ((_a = __webpack_module__.hot) === null || _a === void 0 ? void 0 : _a.check(false));
cb(null, result);
}
catch (err) {
cb(err, []);
}
}
function logUpdates(updatedModules, renewedModules) {
var _a;
const unacceptedModules = (_a = updatedModules === null || updatedModules === void 0 ? void 0 : updatedModules.filter((moduleId) => {
return renewedModules && renewedModules.indexOf(moduleId) < 0;
})) !== null && _a !== void 0 ? _a : [];
if (unacceptedModules.length > 0) {
if (options.warn) {
console.warn("[Fast refresh] The following modules couldn't be hot updated: " +
'(Full reload needed)\n' +
'This is usually because the modules which have changed ' +
'(and their parents) do not know how to hot reload themselves. ' +
'See ' +
hmrDocsUrl +
' for more details.');
unacceptedModules.forEach((moduleId) => {
console.warn('[Fast refresh] - ' + (moduleMap[moduleId] || moduleId));
});
}
performReload();
return;
}
if (!renewedModules || renewedModules.length === 0) {
console.log('[Fast refresh] Nothing hot updated.');
}
else {
renewedModules.forEach((moduleId) => {
console.log(`[Fast refresh] ${moduleMap[moduleId] || moduleId} fast refreshed.`);
});
}
}
function handleError(err) {
var _a;
var _b;
if (((_b = (_a = __webpack_module__.hot) === null || _a === void 0 ? void 0 : _a.status()) !== null && _b !== void 0 ? _b : 'nope') in failureStatuses) {
if (options.warn) {
console.warn('[Fast refresh] Cannot check for update (Full reload needed)');
console.warn('[Fast refresh] ' + (err.stack || err.message));
}
performReload();
return;
}
if (options.warn) {
console.warn('[Fast refresh] Update check failed: ' + (err.stack || err.message));
(0, url_state_1.reloadUrl)();
}
}
function performReload() {
if (!reload) {
return;
}
if (options.warn)
console.warn('[Fast refresh] Reloading page');
(0, url_state_1.reloadUrl)();
}
const { reload } = options;
if (!upToDate(hash) && ((_a = __webpack_module__.hot) === null || _a === void 0 ? void 0 : _a.status()) === 'idle') {
check();
}
};
exports.processUpdate = processUpdate;