History

Update Git documentation (2.30.0)

Simon Legner committed 5 years ago

Commit 3600a9f1 parent 8f17cfa41 files · +4398 −1Browse files

Showing the changes to node_modules/simple-git/promise.js (1 of 41 files). Show all

Unified · Split

node_modules/simple-git/promise.js+96−0
@@ -0,0 +1,96 @@
1
2if (typeof Promise === 'undefined') {
3 throw new ReferenceError("Promise wrappers must be enabled to use the promise API");
4}
5
6function isAsyncCall (fn) {
7 return /^[^)]+then\s*\)/.test(fn) || /\._run\(/.test(fn);
8}
9
10module.exports = function (baseDir) {
11
12 var Git = require('./src/git');
13 var gitFactory = require('./src');
14 var git;
15
16
17 var chain = Promise.resolve();
18
19 try {
20 git = gitFactory(baseDir);
21 }
22 catch (e) {
23 chain = Promise.reject(e);
24 }
25
26 return Object.keys(Git.prototype).reduce(function (promiseApi, fn) {
27 if (/^_|then/.test(fn)) {
28 return promiseApi;
29 }
30
31 if (isAsyncCall(Git.prototype[fn])) {
32 promiseApi[fn] = git ? asyncWrapper(fn, git) : function () {
33 return chain;
34 };
35 }
36
37 else {
38 promiseApi[fn] = git ? syncWrapper(fn, git, promiseApi) : function () {
39 return promiseApi;
40 };
41 }
42
43 return promiseApi;
44
45 }, {});
46
47 function asyncWrapper (fn, git) {
48 return function () {
49 var args = [].slice.call(arguments);
50
51 if (typeof args[args.length] === 'function') {
52 throw new TypeError(
53 "Promise interface requires that handlers are not supplied inline, " +
54 "trailing function not allowed in call to " + fn);
55 }
56
57 return chain.then(function () {
58 return new Promise(function (resolve, reject) {
59 args.push(function (err, result) {
60 if (err) {
61 return reject(toError(err));
62 }
63
64 resolve(result);
65 });
66
67 git[fn].apply(git, args);
68 });
69 });
70 };
71 }
72
73 function syncWrapper (fn, git, api) {
74 return function () {
75 git[fn].apply(git, arguments);
76
77 return api;
78 };
79 }
80
81};
82
83function toError (error) {
84
85 if (error instanceof Error) {
86 return error;
87 }
88
89 if (typeof error === 'string') {
90 return new Error(error);
91 }
92
93 return Object.create(new Error(error), {
94 git: { value: error },
95 });
96}