Son CV dans un terminal web en Javascript! https://terminal-cv.gregandev.fr
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

197 lines
5.1 KiB

2 years ago
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _ws() {
const data = _interopRequireDefault(require("ws"));
_ws = function () {
return data;
};
return data;
}
function _assert() {
const data = _interopRequireDefault(require("assert"));
_assert = function () {
return data;
};
return data;
}
function _utils() {
const data = require("@parcel/utils");
_utils = function () {
return data;
};
return data;
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const FS_CONCURRENCY = 64;
class HMRServer {
unresolvedError = null;
constructor(options) {
this.options = options;
}
start() {
this.wss = new (_ws().default.Server)(this.options.devServer ? {
server: this.options.devServer
} : {
port: this.options.port
});
this.wss.on('connection', ws => {
if (this.unresolvedError) {
ws.send(JSON.stringify(this.unresolvedError));
}
}); // $FlowFixMe[incompatible-exact]
this.wss.on('error', err => this.handleSocketError(err));
let address = this.wss.address();
(0, _assert().default)(typeof address === 'object' && address != null);
return address.port;
}
stop() {
this.wss.close();
}
async emitError(options, diagnostics) {
let renderedDiagnostics = await Promise.all(diagnostics.map(d => (0, _utils().prettyDiagnostic)(d, options))); // store the most recent error so we can notify new connections
// and so we can broadcast when the error is resolved
this.unresolvedError = {
type: 'error',
diagnostics: {
ansi: renderedDiagnostics,
html: renderedDiagnostics.map((d, i) => {
var _diagnostics$i$docume;
return {
message: (0, _utils().ansiHtml)(d.message),
stack: (0, _utils().ansiHtml)(d.stack),
codeframe: (0, _utils().ansiHtml)(d.codeframe),
hints: d.hints.map(hint => (0, _utils().ansiHtml)(hint)),
documentation: (_diagnostics$i$docume = diagnostics[i].documentationURL) !== null && _diagnostics$i$docume !== void 0 ? _diagnostics$i$docume : ''
};
})
}
};
this.broadcast(this.unresolvedError);
}
async emitUpdate(event) {
this.unresolvedError = null;
let changedAssets = new Set(event.changedAssets.values());
if (changedAssets.size === 0) return;
let queue = new (_utils().PromiseQueue)({
maxConcurrent: FS_CONCURRENCY
});
for (let asset of changedAssets) {
if (asset.type !== 'js') {
// If all of the incoming dependencies of the asset actually resolve to a JS asset
// rather than the original, we can mark the runtimes as changed instead. URL runtimes
// have a cache busting query param added with HMR enabled which will trigger a reload.
let runtimes = new Set();
let incomingDeps = event.bundleGraph.getIncomingDependencies(asset);
let isOnlyReferencedByRuntimes = incomingDeps.every(dep => {
let resolved = event.bundleGraph.getResolvedAsset(dep);
let isRuntime = (resolved === null || resolved === void 0 ? void 0 : resolved.type) === 'js' && resolved !== asset;
if (resolved && isRuntime) {
runtimes.add(resolved);
}
return isRuntime;
});
if (isOnlyReferencedByRuntimes) {
for (let runtime of runtimes) {
changedAssets.add(runtime);
}
continue;
}
}
queue.add(async () => {
let dependencies = event.bundleGraph.getDependencies(asset);
let depsByBundle = {};
for (let bundle of event.bundleGraph.getBundlesWithAsset(asset)) {
let deps = {};
for (let dep of dependencies) {
let resolved = event.bundleGraph.getResolvedAsset(dep, bundle);
if (resolved) {
deps[getSpecifier(dep)] = event.bundleGraph.getAssetPublicId(resolved);
}
}
depsByBundle[bundle.id] = deps;
}
return {
id: event.bundleGraph.getAssetPublicId(asset),
type: asset.type,
// No need to send the contents of non-JS assets to the client.
output: asset.type === 'js' ? await asset.getCode() : '',
envHash: asset.env.id,
depsByBundle
};
});
}
let assets = await queue.run();
this.broadcast({
type: 'update',
assets: assets
});
}
handleSocketError(err) {
if (err.code === 'ECONNRESET') {
// This gets triggered on page refresh, ignore this
return;
}
this.options.logger.warn({
origin: '@parcel/reporter-dev-server',
message: `[${err.code}]: ${err.message}`,
stack: err.stack
});
}
broadcast(msg) {
const json = JSON.stringify(msg);
for (let ws of this.wss.clients) {
ws.send(json);
}
}
}
exports.default = HMRServer;
function getSpecifier(dep) {
if (typeof dep.meta.placeholder === 'string') {
return dep.meta.placeholder;
}
return dep.specifier;
}