Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if (message.type === 'request') {
this.emit('request', message);
} else if (message.type === 'response') {
let idx = message.idx;
if (idx == null) {
return;
}
let call = this.calls.get(idx);
if (!call) {
// Return for unknown calls, these might accur if a third party process uses workers
return;
}
if (message.contentType === 'error') {
call.reject(new ThrowableDiagnostic({diagnostic: message.content}));
} else {
call.resolve(message.content);
}
this.calls.delete(idx);
this.emit('response', message);
}
}
error(input: Diagnostifiable, realOrigin?: string): void {
// $FlowFixMe origin is undefined on PluginInputDiagnostic
let diagnostic = anyToDiagnostic(input);
if (typeof realOrigin === 'string') {
diagnostic = Array.isArray(diagnostic)
? diagnostic.map(d => {
return {...d, origin: realOrigin};
})
: {
...diagnostic,
origin: realOrigin,
};
}
this.#logEmitter.emit({
type: 'log',
level: 'error',
diagnostics: Array.isArray(diagnostic) ? diagnostic : [diagnostic],
});
error(input: Diagnostifiable, realOrigin?: string): void {
// $FlowFixMe origin is undefined on PluginInputDiagnostic
let diagnostic = anyToDiagnostic(input);
if (typeof realOrigin === 'string') {
diagnostic = Array.isArray(diagnostic)
? diagnostic.map(d => {
return {...d, origin: realOrigin};
})
: {
...diagnostic,
origin: realOrigin,
};
}
this.#logEmitter.emit({
type: 'log',
level: 'error',
diagnostics: Array.isArray(diagnostic) ? diagnostic : [diagnostic],
});
engines: descriptor.engines,
context: descriptor.context,
isLibrary: descriptor.isLibrary,
includeNodeModules: descriptor.includeNodeModules,
outputFormat: descriptor.outputFormat,
}),
sourceMap: descriptor.sourceMap,
};
});
}
if (this.options.serve) {
// In serve mode, we only support a single browser target. If the user
// provided more than one, or the matching target is not a browser, throw.
if (targets.length > 1) {
throw new ThrowableDiagnostic({
diagnostic: {
message: `More than one target is not supported in serve mode`,
origin: '@parcel/core',
},
});
}
if (targets[0].env.context !== 'browser') {
throw new ThrowableDiagnostic({
diagnostic: {
message: `Only browser targets are supported in serve mode`,
origin: '@parcel/core',
},
});
}
}
} else {
}
try {
// $FlowFixMe
result = responseFromContent(await mod[method](...args));
} catch (e) {
result = errorResponseFromError(e);
}
}
if (awaitResponse) {
if (worker) {
worker.send(result);
} else {
if (result.contentType === 'error') {
throw new ThrowableDiagnostic({diagnostic: result.content});
}
return result.content;
}
}
}
key: `/${t}`,
type: 'value',
})),
),
},
});
}
}
if (diagnostics.length > 0) {
// Only add hints to the last diagnostic so it isn't duplicated on each one
diagnostics[diagnostics.length - 1].hints = [
'Try removing the duplicate targets, or changing the destination paths.',
];
throw new ThrowableDiagnostic({
diagnostic: diagnostics,
});
}
}
} else {
if (typeof distPath !== 'string') {
let contents: string =
typeof pkgContents === 'string'
? pkgContents
: // $FlowFixMe
JSON.stringify(pkgContents, null, '\t');
throw new ThrowableDiagnostic({
diagnostic: {
message: `Invalid distPath for target "${targetName}"`,
origin: '@parcel/core',
language: 'json',
filePath: pkgFilePath || undefined,
codeFrame: {
code: contents,
codeHighlights: generateJSONCodeHighlights(contents, [
{
key: `/${targetName}`,
type: 'value',
message: 'Expected type string',
},
]),
},
},
});
}
distDir = path.resolve(pkgDir, path.dirname(distPath));
distEntry = path.basename(distPath);
invariant(typeof pkgFilePath === 'string');
invariant(pkgMap != null);
loc = {
}
let diagnostics: Array = [];
for (let [targetPath, targetNames] of targetsByPath) {
if (targetNames.length > 1 && pkgContents && pkgFilePath) {
diagnostics.push({
message: `Multiple targets have the same destination path "${path.relative(
path.dirname(pkgFilePath),
targetPath,
)}"`,
origin: '@parcel/core',
language: 'json',
filePath: pkgFilePath || undefined,
codeFrame: {
code: pkgContents,
codeHighlights: generateJSONCodeHighlights(
pkgContents,
targetNames.map(t => ({
key: `/${t}`,
type: 'value',
})),
),
},
});
}
}
if (diagnostics.length > 0) {
// Only add hints to the last diagnostic so it isn't duplicated on each one
diagnostics[diagnostics.length - 1].hints = [
'Try removing the duplicate targets, or changing the destination paths.',
];
message = `Missing property ${prop}`;
}
} else if (e.type === 'type') {
if (e.prettyType != null) {
message = `Expected ${e.prettyType}`;
} else {
message = `Expected type ${e.expectedTypes.join(', ')}`;
}
} else {
message = e.message;
}
return {key: e.dataPath, type: e.dataType, message};
});
let codeFrame = {
code: dataContentsString,
codeHighlights: generateJSONCodeHighlights(
dataContentsString,
keys.map(({key, type, message}) => ({
key: prependKey + key,
type: type,
message
}))
)
};
throw new ThrowableDiagnostic({
diagnostic: {
message,
origin,
// $FlowFixMe should be a sketchy string check
filePath: dataContentsPath || undefined,
language: 'json',
phase: 'optimizing',
bundle,
});
let optimized = {contents, map};
for (let optimizer of optimizers) {
try {
optimized = await optimizer.plugin.optimize({
bundle,
contents: optimized.contents,
map: optimized.map,
options: this.pluginOptions,
logger: new PluginLogger({origin: optimizer.name}),
});
} catch (e) {
throw new ThrowableDiagnostic({
diagnostic: errorToDiagnostic(e, optimizer.name),
});
}
}
return optimized;
}