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.
 
 
 
 

114 lines
3.6 KiB

// @flow
import {Reporter} from '@parcel/plugin';
import HMRServer from './HMRServer';
import Server from './Server';
let servers: Map<number, Server> = new Map();
let hmrServers: Map<number, HMRServer> = new Map();
export default (new Reporter({
async report({event, options, logger}) {
let {serveOptions, hmrOptions} = options;
let server = serveOptions ? servers.get(serveOptions.port) : undefined;
let hmrPort =
(hmrOptions && hmrOptions.port) || (serveOptions && serveOptions.port);
let hmrServer = hmrPort ? hmrServers.get(hmrPort) : undefined;
switch (event.type) {
case 'watchStart': {
if (serveOptions) {
// If there's already a server when watching has just started, something
// is wrong.
if (server) {
return logger.warn({
message: 'Trying to create the devserver but it already exists.',
});
}
let serverOptions = {
...serveOptions,
projectRoot: options.projectRoot,
cacheDir: options.cacheDir,
// Override the target's publicUrl as that is likely meant for production.
// This could be configurable in the future.
publicUrl: serveOptions.publicUrl ?? '/',
inputFS: options.inputFS,
outputFS: options.outputFS,
logger,
};
server = new Server(serverOptions);
servers.set(serveOptions.port, server);
const devServer = await server.start();
if (hmrOptions && hmrOptions.port === serveOptions.port) {
let hmrServerOptions = {
port: serveOptions.port,
devServer,
logger,
};
hmrServer = new HMRServer(hmrServerOptions);
hmrServers.set(serveOptions.port, hmrServer);
hmrServer.start();
return;
}
}
let port = hmrOptions?.port;
if (typeof port === 'number') {
let hmrServerOptions = {port, logger};
hmrServer = new HMRServer(hmrServerOptions);
hmrServers.set(port, hmrServer);
hmrServer.start();
}
break;
}
case 'watchEnd':
if (serveOptions) {
if (!server) {
return logger.warn({
message:
'Could not shutdown devserver because it does not exist.',
});
}
await server.stop();
servers.delete(server.options.port);
}
if (hmrOptions && hmrServer) {
hmrServer.stop();
// $FlowFixMe[prop-missing]
hmrServers.delete(hmrServer.wss.options.port);
}
break;
case 'buildStart':
if (server) {
server.buildStart();
}
break;
case 'buildSuccess':
if (serveOptions) {
if (!server) {
return logger.warn({
message:
'Could not send success event to devserver because it does not exist.',
});
}
server.buildSuccess(event.bundleGraph, event.requestBundle);
}
if (hmrServer) {
hmrServer.emitUpdate(event);
}
break;
case 'buildFailure':
// On buildFailure watchStart sometimes has not been called yet
// do not throw an additional warning here
if (server) {
await server.buildError(options, event.diagnostics);
}
if (hmrServer) {
await hmrServer.emitError(options, event.diagnostics);
}
break;
}
},
}): Reporter);