UNPKG

atom-nuclide

Version:

A unified developer experience for web and mobile development, built as a suite of features on top of Atom to provide hackability and the support of an active community.

302 lines (246 loc) 11.6 kB
Object.defineProperty(exports, '__esModule', { value: true }); /* * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the license found in the LICENSE file in * the root directory of this source tree. */ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _rxjsBundlesRxUmdMinJs2; function _rxjsBundlesRxUmdMinJs() { return _rxjsBundlesRxUmdMinJs2 = require('rxjs/bundles/Rx.umd.min.js'); } var _flux2; function _flux() { return _flux2 = require('flux'); } var _atom2; function _atom() { return _atom2 = require('atom'); } var _reactForAtom2; function _reactForAtom() { return _reactForAtom2 = require('react-for-atom'); } var _commonsNodeStream2; function _commonsNodeStream() { return _commonsNodeStream2 = require('../../../commons-node/stream'); } var _commonsNodeFsPromise2; function _commonsNodeFsPromise() { return _commonsNodeFsPromise2 = _interopRequireDefault(require('../../../commons-node/fsPromise')); } var _commonsNodeProcess2; function _commonsNodeProcess() { return _commonsNodeProcess2 = require('../../../commons-node/process'); } var _commonsNodeTasks2; function _commonsNodeTasks() { return _commonsNodeTasks2 = require('../../../commons-node/tasks'); } var _SwiftPMTaskRunnerStore2; function _SwiftPMTaskRunnerStore() { return _SwiftPMTaskRunnerStore2 = _interopRequireDefault(require('./SwiftPMTaskRunnerStore')); } var _SwiftPMTaskRunnerActions2; function _SwiftPMTaskRunnerActions() { return _SwiftPMTaskRunnerActions2 = _interopRequireDefault(require('./SwiftPMTaskRunnerActions')); } var _SwiftPMTaskRunnerCommands2; function _SwiftPMTaskRunnerCommands() { return _SwiftPMTaskRunnerCommands2 = require('./SwiftPMTaskRunnerCommands'); } var _SwiftPMTaskRunnerTaskMetadata2; function _SwiftPMTaskRunnerTaskMetadata() { return _SwiftPMTaskRunnerTaskMetadata2 = require('./SwiftPMTaskRunnerTaskMetadata'); } var _toolbarSwiftPMTaskRunnerToolbar2; function _toolbarSwiftPMTaskRunnerToolbar() { return _toolbarSwiftPMTaskRunnerToolbar2 = _interopRequireDefault(require('./toolbar/SwiftPMTaskRunnerToolbar')); } var _providersSwiftPMAutocompletionProvider2; function _providersSwiftPMAutocompletionProvider() { return _providersSwiftPMAutocompletionProvider2 = _interopRequireDefault(require('./providers/SwiftPMAutocompletionProvider')); } var _uiSwiftIcon2; function _uiSwiftIcon() { return _uiSwiftIcon2 = require('../ui/SwiftIcon'); } /** * nuclide-swift makes use of the Flux design pattern. The SwiftPMTaskRunner is * responsible for kicking off SwiftPM tasks such as building a package. How it * builds the package is determined by the state of the * SwiftPMTaskRunnerToolbar -- the path to the package, whether a build path is * specified, etc. -- and that state is maintained by the * SwiftPMTaskRunnerStore. Updates to the toolbar UI options trigger actions, * defined in SwiftPMTaskRunnerActions, which update the state of the store. * Actions are routed to the store via a Flux.Dispatcher (instantiated by * SwiftPMTaskRunner). */ /** * The primary controller for spawning SwiftPM tasks, such as building a * package, or running its tests. This class conforms to Nuclide's TaskRunner * interface. */ var SwiftPMTaskRunner = (function () { function SwiftPMTaskRunner(initialState) { _classCallCheck(this, SwiftPMTaskRunner); this.id = 'swiftpm'; this.name = 'Swift'; this._initialState = initialState; this._disposables = new (_atom2 || _atom()).CompositeDisposable(); this._outputMessages = new (_rxjsBundlesRxUmdMinJs2 || _rxjsBundlesRxUmdMinJs()).Subject(); this._disposables.add(new (_commonsNodeStream2 || _commonsNodeStream()).DisposableSubscription(this._outputMessages)); } _createClass(SwiftPMTaskRunner, [{ key: 'dispose', value: function dispose() { this._disposables.dispose(); } }, { key: 'serialize', value: function serialize() { return this._getFlux().store.serialize(); } }, { key: 'getExtraUi', value: function getExtraUi() { var _getFlux2 = this._getFlux(); var store = _getFlux2.store; var actions = _getFlux2.actions; return (function (_React$Component) { _inherits(ExtraUi, _React$Component); function ExtraUi() { _classCallCheck(this, ExtraUi); _get(Object.getPrototypeOf(ExtraUi.prototype), 'constructor', this).apply(this, arguments); } _createClass(ExtraUi, [{ key: 'render', value: function render() { return (_reactForAtom2 || _reactForAtom()).React.createElement((_toolbarSwiftPMTaskRunnerToolbar2 || _toolbarSwiftPMTaskRunnerToolbar()).default, { store: store, actions: actions, activeTaskType: this.props.activeTaskType }); } }]); return ExtraUi; })((_reactForAtom2 || _reactForAtom()).React.Component); } }, { key: 'observeTaskList', value: function observeTaskList(callback) { callback((_SwiftPMTaskRunnerTaskMetadata2 || _SwiftPMTaskRunnerTaskMetadata()).SwiftPMTaskRunnerTaskMetadata); return new (_atom2 || _atom()).Disposable(); } }, { key: 'getIcon', value: function getIcon() { return (_uiSwiftIcon2 || _uiSwiftIcon()).SwiftIcon; } }, { key: 'runTask', value: function runTask(taskName) { var _this = this; var store = this._getFlux().store; var chdir = store.getChdir(); var configuration = store.getConfiguration(); var buildPath = store.getBuildPath(); var command = undefined; switch (taskName) { case (_SwiftPMTaskRunnerTaskMetadata2 || _SwiftPMTaskRunnerTaskMetadata()).SwiftPMTaskRunnerBuildTaskMetadata.type: command = (0, (_SwiftPMTaskRunnerCommands2 || _SwiftPMTaskRunnerCommands()).buildCommand)(chdir, configuration, store.getXcc(), store.getXlinker(), store.getXswiftc(), buildPath); break; case (_SwiftPMTaskRunnerTaskMetadata2 || _SwiftPMTaskRunnerTaskMetadata()).SwiftPMTaskRunnerTestTaskMetadata.type: command = (0, (_SwiftPMTaskRunnerCommands2 || _SwiftPMTaskRunnerCommands()).testCommand)(chdir, buildPath); break; default: throw new Error('Unknown task name: ' + taskName); } atom.commands.dispatch(atom.views.getView(atom.workspace), 'nuclide-console:toggle', { visible: true }); this._logOutput(command.command + ' ' + command.args.join(' '), 'log'); var observable = (0, (_commonsNodeProcess2 || _commonsNodeProcess()).observeProcess)(function () { return (0, (_commonsNodeProcess2 || _commonsNodeProcess()).safeSpawn)(command.command, command.args); }).do(function (message) { switch (message.kind) { case 'stderr': case 'stdout': _this._logOutput(message.data, 'log'); break; case 'exit': if (message.exitCode === 0) { _this._logOutput(command.command + ' exited successfully.', 'success'); _this._getFlux().actions.updateCompileCommands(chdir, configuration, buildPath); } else { _this._logOutput(command.command + ' failed with exit code ' + message.exitCode, 'error'); } break; default: break; } }).ignoreElements(); var task = (0, (_commonsNodeTasks2 || _commonsNodeTasks()).taskFromObservable)(observable); return _extends({}, task, { cancel: function cancel() { _this._logOutput('Task cancelled.', 'warning'); task.cancel(); } }); } }, { key: 'getAutocompletionProvider', value: function getAutocompletionProvider() { if (!this._autocompletionProvider) { this._autocompletionProvider = new (_providersSwiftPMAutocompletionProvider2 || _providersSwiftPMAutocompletionProvider()).default(this._getFlux().store); } return this._autocompletionProvider; } }, { key: 'getOutputMessages', value: function getOutputMessages() { return this._outputMessages; } }, { key: 'setProjectRoot', value: function setProjectRoot(projectRoot) { var _this2 = this; if (projectRoot) { (function () { var path = projectRoot.getPath(); (_commonsNodeFsPromise2 || _commonsNodeFsPromise()).default.exists(path + '/Package.swift').then(function (fileExists) { if (fileExists) { _this2._getFlux().actions.updateChdir(path); } }); })(); } } }, { key: '_logOutput', value: function _logOutput(text, level) { this._outputMessages.next({ text: text, level: level }); } }, { key: '_getFlux', value: function _getFlux() { var dispatcher = new (_flux2 || _flux()).Dispatcher(); if (!this._flux) { var _store = new (_SwiftPMTaskRunnerStore2 || _SwiftPMTaskRunnerStore()).default(dispatcher, this._initialState); this._disposables.add(_store); var _actions = new (_SwiftPMTaskRunnerActions2 || _SwiftPMTaskRunnerActions()).default(dispatcher); this._flux = { store: _store, actions: _actions }; } return this._flux; } }]); return SwiftPMTaskRunner; })(); exports.SwiftPMTaskRunner = SwiftPMTaskRunner;