-
-
Notifications
You must be signed in to change notification settings - Fork 319
/
Copy pathgit-factory.ts
70 lines (60 loc) · 2.15 KB
/
git-factory.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import { SimpleGitFactory } from '../../typings';
import * as api from './api';
import {
abortPlugin,
blockUnsafeOperationsPlugin,
commandConfigPrefixingPlugin,
completionDetectionPlugin,
errorDetectionHandler,
errorDetectionPlugin,
PluginStore,
progressMonitorPlugin,
spawnOptionsPlugin,
timeoutPlugin,
} from './plugins';
import { createInstanceConfig, folderExists } from './utils';
import { SimpleGitOptions } from './types';
const Git = require('../git');
/**
* Adds the necessary properties to the supplied object to enable it for use as
* the default export of a module.
*
* Eg: `module.exports = esModuleFactory({ something () {} })`
*/
export function esModuleFactory<T>(defaultExport: T) {
return Object.defineProperties(defaultExport, {
__esModule: { value: true },
default: { value: defaultExport },
}) as T & { __esModule: true; default: T };
}
export function gitExportFactory(factory: SimpleGitFactory) {
return Object.assign(factory.bind(null), api);
}
export function gitInstanceFactory(
baseDir?: string | Partial<SimpleGitOptions>,
options?: Partial<SimpleGitOptions>
) {
const plugins = new PluginStore();
const config = createInstanceConfig(
(baseDir && (typeof baseDir === 'string' ? { baseDir } : baseDir)) || {},
options
);
if (!folderExists(config.baseDir)) {
throw new api.GitConstructError(
config,
`Cannot use simple-git on a directory that does not exist`
);
}
if (Array.isArray(config.config)) {
plugins.add(commandConfigPrefixingPlugin(config.config));
}
plugins.add(blockUnsafeOperationsPlugin(config.unsafe));
plugins.add(completionDetectionPlugin(config.completion));
config.abort && plugins.add(abortPlugin(config.abort));
config.progress && plugins.add(progressMonitorPlugin(config.progress));
config.timeout && plugins.add(timeoutPlugin(config.timeout));
config.spawnOptions && plugins.add(spawnOptionsPlugin(config.spawnOptions));
plugins.add(errorDetectionPlugin(errorDetectionHandler(true)));
config.errors && plugins.add(errorDetectionPlugin(config.errors));
return new Git(config, plugins);
}