PageRenderTime 24ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/node_modules/typings-core/dist/utils/fs.js

https://gitlab.com/remynaps/Vexillarius
JavaScript | 201 lines | 200 code | 0 blank | 1 comment | 16 complexity | b0da3ecf14c27cccb6ca2fa8ec44e6d8 MD5 | raw file
  1. "use strict";
  2. var fs = require('graceful-fs');
  3. var Promise = require('any-promise');
  4. var thenify = require('thenify');
  5. var stripBom = require('strip-bom');
  6. var parse = require('parse-json');
  7. var popsicle = require('popsicle');
  8. var popsicleStatus = require('popsicle-status');
  9. var popsicleRetry = require('popsicle-retry');
  10. var detectIndent = require('detect-indent');
  11. var sortKeys = require('sort-keys');
  12. var Mkdirp = require('mkdirp');
  13. var uniq = require('array-uniq');
  14. var lockfile = require('lockfile');
  15. var Rimraf = require('rimraf');
  16. var popsicleProxy = require('popsicle-proxy-agent');
  17. var Throat = require('throat');
  18. var promise_finally_1 = require('promise-finally');
  19. var Touch = require('touch');
  20. var path_1 = require('path');
  21. var url_1 = require('url');
  22. var template = require('string-template');
  23. var config_1 = require('./config');
  24. var path_2 = require('./path');
  25. var references_1 = require('./references');
  26. var rc_1 = require('./rc');
  27. var store_1 = require('./store');
  28. var debug_1 = require('./debug');
  29. var pkg = require('../../package.json');
  30. var registryURL = url_1.parse(rc_1.default.registryURL);
  31. var throat = Throat(Promise);
  32. exports.touch = throat(10, thenify(Touch));
  33. exports.stat = throat(10, thenify(fs.stat));
  34. exports.readFile = throat(10, thenify(fs.readFile));
  35. exports.writeFile = thenify(fs.writeFile);
  36. exports.mkdirp = throat(10, thenify(Mkdirp));
  37. exports.unlink = throat(10, thenify(fs.unlink));
  38. exports.lock = throat(10, thenify(lockfile.lock));
  39. exports.unlock = throat(10, thenify(lockfile.unlock));
  40. exports.rimraf = throat(10, thenify(Rimraf));
  41. function isFile(path) {
  42. return exports.stat(path).then(function (stat) { return stat.isFile(); }, function () { return false; });
  43. }
  44. exports.isFile = isFile;
  45. function readJson(path, allowEmpty) {
  46. return exports.readFile(path, 'utf8')
  47. .then(stripBom)
  48. .then(function (contents) { return parseJson(contents, path, allowEmpty); });
  49. }
  50. exports.readJson = readJson;
  51. function writeJson(path, json, indent, eol) {
  52. return exports.writeFile(path, stringifyJson(json, indent, eol));
  53. }
  54. exports.writeJson = writeJson;
  55. function readConfig(path) {
  56. return readJson(path, true).then(function (data) { return parseConfig(data, path); });
  57. }
  58. exports.readConfig = readConfig;
  59. function readConfigFrom(path) {
  60. return readJsonFrom(path, true).then(function (data) { return parseConfig(data, path); });
  61. }
  62. exports.readConfigFrom = readConfigFrom;
  63. function parseConfig(config, path) {
  64. return config;
  65. }
  66. exports.parseConfig = parseConfig;
  67. exports.readHttp = throat(5, function readHttp(url) {
  68. var proxy = rc_1.default.proxy, httpProxy = rc_1.default.httpProxy, httpsProxy = rc_1.default.httpsProxy, noProxy = rc_1.default.noProxy, rejectUnauthorized = rc_1.default.rejectUnauthorized, ca = rc_1.default.ca, key = rc_1.default.key, cert = rc_1.default.cert, userAgent = rc_1.default.userAgent;
  69. return popsicle.get({
  70. url: url,
  71. headers: {
  72. 'User-Agent': template(userAgent, {
  73. nodeVersion: process.version,
  74. platform: process.platform,
  75. arch: process.arch,
  76. typingsVersion: pkg.version
  77. })
  78. },
  79. options: {
  80. ca: ca,
  81. key: key,
  82. cert: cert,
  83. rejectUnauthorized: rejectUnauthorized
  84. },
  85. use: [
  86. popsicle.plugins.headers(),
  87. popsicle.plugins.unzip(),
  88. popsicle.plugins.concatStream('string')
  89. ]
  90. })
  91. .use(popsicleProxy({ proxy: proxy, httpProxy: httpProxy, httpsProxy: httpsProxy, noProxy: noProxy }))
  92. .use(popsicleRetry())
  93. .use(popsicleStatus(200))
  94. .use(function (self) {
  95. var hostname = self.Url.hostname;
  96. if (self.Url.host === registryURL.host) {
  97. if (store_1.default.get('clientId')) {
  98. self.before(function (req) {
  99. req.set('Typings-Client-Id', store_1.default.get('clientId'));
  100. });
  101. }
  102. else {
  103. self.after(function (res) {
  104. store_1.default.set('clientId', res.get('Typings-Client-Id'));
  105. });
  106. }
  107. }
  108. if (rc_1.default.githubToken && (hostname === 'raw.githubusercontent.com' || hostname === 'api.github.com')) {
  109. self.before(function (req) {
  110. req.set('Authorization', "token " + rc_1.default.githubToken);
  111. });
  112. }
  113. })
  114. .then(function (response) {
  115. debug_1.default('http response', response.toJSON());
  116. return response.body;
  117. });
  118. });
  119. function readFileFrom(from) {
  120. return path_2.isHttp(from) ? exports.readHttp(from) : exports.readFile(from, 'utf8');
  121. }
  122. exports.readFileFrom = readFileFrom;
  123. function readJsonFrom(from, allowEmpty) {
  124. return readFileFrom(from)
  125. .then(stripBom)
  126. .then(function (contents) { return parseJson(contents, from, allowEmpty); });
  127. }
  128. exports.readJsonFrom = readJsonFrom;
  129. function stringifyJson(json, indent, eol) {
  130. if (eol === void 0) { eol = path_2.EOL; }
  131. return path_2.normalizeEOL(JSON.stringify(json, null, indent || 2), eol) + eol;
  132. }
  133. exports.stringifyJson = stringifyJson;
  134. function parseJson(contents, path, allowEmpty) {
  135. if (contents === '' && allowEmpty) {
  136. return {};
  137. }
  138. return parse(contents, null, path);
  139. }
  140. exports.parseJson = parseJson;
  141. function transformFile(path, transform) {
  142. function handle(contents) {
  143. return Promise.resolve(transform(contents))
  144. .then(function (contents) { return exports.writeFile(path, contents); });
  145. }
  146. var lockfile = path + ".lock";
  147. var lockOptions = { wait: 250, retries: 25, stale: 60000 };
  148. var result = exports.lock(lockfile, lockOptions)
  149. .then(function () {
  150. return exports.readFile(path, 'utf8');
  151. })
  152. .then(function (contents) { return handle(contents); }, function () { return handle(undefined); });
  153. return promise_finally_1.default(result, function () { return exports.unlock(lockfile); });
  154. }
  155. exports.transformFile = transformFile;
  156. function transformJson(path, transform, allowEmpty) {
  157. return transformFile(path, function (contents) {
  158. var indent = contents ? detectIndent(contents).indent : undefined;
  159. var json = contents ? parseJson(contents, path, allowEmpty) : undefined;
  160. var eol = contents ? path_2.detectEOL(contents) : undefined;
  161. return Promise.resolve(transform(json))
  162. .then(function (json) { return stringifyJson(json, indent, eol); });
  163. });
  164. }
  165. exports.transformJson = transformJson;
  166. function transformConfig(cwd, transform) {
  167. var path = path_1.join(cwd, config_1.CONFIG_FILE);
  168. return transformJson(path, function (config) {
  169. if (config === void 0) { config = {}; }
  170. return Promise.resolve(transform(parseConfig(config, path)))
  171. .then(function (config) {
  172. if (config.dependencies) {
  173. config.dependencies = sortKeys(config.dependencies);
  174. }
  175. if (config.peerDependencies) {
  176. config.peerDependencies = sortKeys(config.peerDependencies);
  177. }
  178. if (config.devDependencies) {
  179. config.devDependencies = sortKeys(config.devDependencies);
  180. }
  181. if (config.ambientDependencies) {
  182. config.ambientDependencies = sortKeys(config.ambientDependencies);
  183. }
  184. if (config.ambientDevDependencies) {
  185. config.ambientDevDependencies = sortKeys(config.ambientDevDependencies);
  186. }
  187. return config;
  188. });
  189. }, true);
  190. }
  191. exports.transformConfig = transformConfig;
  192. function transformDtsFile(path, transform) {
  193. var cwd = path_1.dirname(path);
  194. return transformFile(path, function (contents) {
  195. var typings = references_1.parseReferences(contents, cwd);
  196. return Promise.resolve(transform(typings))
  197. .then(function (typings) { return references_1.stringifyReferences(uniq(typings).sort(), cwd); });
  198. });
  199. }
  200. exports.transformDtsFile = transformDtsFile;
  201. //# sourceMappingURL=fs.js.map