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.

118 lines (88 loc) 3.69 kB
Object.defineProperty(exports, '__esModule', { value: true }); exports.proxyFilename = proxyFilename; exports.createProxyFactory = createProxyFactory; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /* * 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 _fs2; function _fs() { return _fs2 = _interopRequireDefault(require('fs')); } var _commonsNodeNuclideUri2; function _commonsNodeNuclideUri() { return _commonsNodeNuclideUri2 = _interopRequireDefault(require('../../commons-node/nuclideUri')); } var _assert2; function _assert() { return _assert2 = _interopRequireDefault(require('assert')); } var _module2; function _module() { return _module2 = _interopRequireDefault(require('module')); } var _proxyGenerator2; function _proxyGenerator() { return _proxyGenerator2 = require('./proxy-generator'); } var _serviceParser2; function _serviceParser() { return _serviceParser2 = require('./service-parser'); } // Proxy dependencies var _rxjsBundlesRxUmdMinJs2; function _rxjsBundlesRxUmdMinJs() { return _rxjsBundlesRxUmdMinJs2 = _interopRequireDefault(require('rxjs/bundles/Rx.umd.min.js')); } var _nuclideAnalytics2; function _nuclideAnalytics() { return _nuclideAnalytics2 = require('../../nuclide-analytics'); } /** Cache for remote proxies. */ var proxiesCache = new Map(); function proxyFilename(definitionPath) { (0, (_assert2 || _assert()).default)((_commonsNodeNuclideUri2 || _commonsNodeNuclideUri()).default.isAbsolute(definitionPath), '"' + definitionPath + '" definition path must be absolute.'); var dir = (_commonsNodeNuclideUri2 || _commonsNodeNuclideUri()).default.dirname(definitionPath); var name = (_commonsNodeNuclideUri2 || _commonsNodeNuclideUri()).default.basename(definitionPath, (_commonsNodeNuclideUri2 || _commonsNodeNuclideUri()).default.extname(definitionPath)); var filename = (_commonsNodeNuclideUri2 || _commonsNodeNuclideUri()).default.join(dir, name + 'Proxy.js'); return filename; } function createProxyFactory(serviceName, preserveFunctionNames, definitionPath) { if (!proxiesCache.has(definitionPath)) { var filename = proxyFilename(definitionPath); var code = undefined; if ((_fs2 || _fs()).default.existsSync(filename)) { code = (_fs2 || _fs()).default.readFileSync(filename, 'utf8'); } else { var definitionSource = (_fs2 || _fs()).default.readFileSync(definitionPath, 'utf8'); var defs = (0, (_serviceParser2 || _serviceParser()).parseServiceDefinition)(definitionPath, definitionSource); code = (0, (_proxyGenerator2 || _proxyGenerator()).generateProxy)(serviceName, preserveFunctionNames, defs); } var m = loadCodeAsModule(code, filename); m.exports.inject((_rxjsBundlesRxUmdMinJs2 || _rxjsBundlesRxUmdMinJs()).default.Observable, (_nuclideAnalytics2 || _nuclideAnalytics()).trackOperationTiming); proxiesCache.set(definitionPath, m.exports); } var factory = proxiesCache.get(definitionPath); (0, (_assert2 || _assert()).default)(factory != null); return factory; } function loadCodeAsModule(code, filename) { (0, (_assert2 || _assert()).default)(code.length > 0, 'Code must not be empty.'); var m = new (_module2 || _module()).default(filename); m.filename = filename; m.paths = []; // Disallow require resolving by removing lookup paths. m._compile(code, filename); m.loaded = true; return m; } // Export caches for testing. var __test__ = { proxiesCache: proxiesCache }; exports.__test__ = __test__;