const matchErrorsSeparator = /\n(?=Error)/;
const errors = pscMessage.split(matchErrorsSeparator);
for (const error of errors) {
- const matchErrLocation = /at (.+\.purs) line (\d+), column (\d+) - line (\d+), column (\d+)/;
+ const matchErrLocation = /at (.+\.purs):(\d+):(\d+) - (\d+):(\d+) \(line \2, column \3 - line \4, column \5\)/;
const [, filename] = matchErrLocation.exec(error) || [];
if (!filename) continue;
const baseModulePath = path.join(this.rootContext, filename);
this.addDependency(baseModulePath);
+ const foreignModulesErrorCodes = [
+ 'ErrorParsingFFIModule',
+ 'MissingFFIImplementations',
+ 'UnusedFFIImplementations',
+ 'MissingFFIModule'
+ ];
+ for (const code of foreignModulesErrorCodes) {
+ if (error.includes(code)) {
+ const resolved = utils.resolveForeignModule(baseModulePath);
+ this.addDependency(resolved);
+ }
+ }
+
const matchErrModuleName = /in module ((?:\w+\.)*\w+)/;
const [, baseModuleName] = matchErrModuleName.exec(error) || [];
if (!baseModuleName) continue;
filename: baseModulePath
};
- if (typeof this.extractPursDependenciesFromError === 'function') {
- const dependencies = this.extractPursDependenciesFromError(error) || [];
+ if (typeof this.describePscError === 'function') {
+ const { dependencies = [], details } = this.describePscError(error, desc);
for (const dep of dependencies) {
this.addDependency(dep);
}
+
+ Object.assign(desc, details);
}
modules.push(desc);
}
- CACHE_VAR.errors.push(Object.assign(new Error(pscMessage), { modules }));
+ CACHE_VAR.errors.push(new utils.PscError(pscMessage, modules));
}
}
}