+ emitError: pscMessage => {
+ if (pscMessage.length) {
+ const modules = [];
+
+ 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 [, filename] = matchErrLocation.exec(error) || [];
+ if (!filename) continue;
+
+ const baseModulePath = path.join(this.rootContext, filename);
+ this.addDependency(baseModulePath);
+
+ const matchErrModuleName = /in module ((?:\w+\.)*\w+)/;
+ const [, baseModuleName] = matchErrModuleName.exec(error) || [];
+ if (!baseModuleName) continue;
+
+ const matchMissingModuleName = /Module ((?:\w+\.)*\w+) was not found/;
+ const matchMissingImportFromModuleName = /Cannot import value \w+ from module ((?:\w+\.)*\w+)/;
+ for (const re of [matchMissingModuleName, matchMissingImportFromModuleName]) {
+ const [, targetModuleName] = re.exec(error) || [];
+ if (targetModuleName) {
+ const resolved = utils.resolvePursModule({
+ baseModulePath,
+ baseModuleName,
+ targetModuleName
+ });
+ this.addDependency(resolved);
+ }
+ }
+
+ const desc = {
+ name: baseModuleName,
+ filename: baseModulePath
+ };
+
+ 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(new utils.PscError(pscMessage, modules));