ideClient.stdin.write('\n')
})
- const args = dargs(Object.assign({
+ const serverArgs = dargs(Object.assign({
outputDirectory: options.output,
- }, options.pscIdeArgs))
+ '_': options.src
+ }, options.pscIdeServerArgs))
- debug('attempting to start psc-ide-server', args)
+ debug('attempting to start psc-ide-server', serverArgs)
+
+ const ideServer = cache.ideServer = spawn('psc-ide-server', serverArgs)
+
+ ideServer.stdout.on('data', data => {
+ debug('psc-ide-server stdout: %s', data.toString());
+ });
- const ideServer = cache.ideServer = spawn('psc-ide-server', [])
ideServer.stderr.on('data', data => {
- debug(data.toString())
- })
+ debug('psc-ide-server stderr: %s', data.toString());
+ });
+
+ ideServer.on('error', error => {
+ debug('psc-ide-server error: %o', error);
+ });
+
+ ideServer.on('close', (code, signal) => {
+ debug('psc-ide-server close: %s %s', code, signal);
+ });
return retryPromise((retry, number) => {
return connect_().catch(error => {
})
.then(compileMessages => {
if (res.resultType === 'error') {
- if (res.result.some(item => item.errorCode === 'UnknownModule' || item.errorCode === 'UnknownName')) {
+ if (res.result.some(item => {
+ const isModuleNotFound = item.errorCode === 'ModuleNotFound';
+
+ const isUnknownModule = item.errorCode === 'UnknownModule';
+
+ const isUnknownModuleImport = item.errorCode === 'UnknownName' && /Unknown module/.test(item.message);
+
+ return isModuleNotFound || isUnknownModule || isUnknownModuleImport;
+ })) {
debug('unknown module, attempting full recompile')
return Psc.compile(psModule)
.then(() => PsModuleMap.makeMap(options.src).then(map => {
- debug('rebuilt module map');
+ debug('rebuilt module map after unknown module forced a recompile');
cache.psModuleMap = map;
}))
.then(() => request({ command: 'load' }))
.then(resolve)
.catch(() => resolve(psModule))
}
- cache.errors = compileMessages.join('\n')
+ const errorMessage = compileMessages.join('\n');
+ if (errorMessage.length) {
+ psModule.emitError(errorMessage);
+ }
resolve(psModule);
} else {
- cache.warnings = compileMessages.join('\n')
- resolve(psModule)
+ const warningMessage = compileMessages.join('\n');
+ if (options.warnings && warningMessage.length) {
+ psModule.emitWarning(warningMessage);
+ }
+ resolve(psModule);
}
})
})
+ debug('psc-ide-client stdin: %o', body);
+
ideClient.stdin.write(JSON.stringify(body))
ideClient.stdin.write('\n')
})