-
Notifications
You must be signed in to change notification settings - Fork 237
/
state.js
77 lines (64 loc) · 1.65 KB
/
state.js
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
71
72
73
74
75
76
77
'use strict';
const extend = require('xtend');
const init = require('./init');
const debug = require('./debug');
const defaultOptions = {
update: false,
updateAll: false,
global: false,
cwd: process.cwd(),
skipUnused: false,
ignoreDev: false,
devOnly: false,
forceColor: false,
saveExact: false,
specials: '',
debug: false,
emoji: true,
spinner: false,
installer: 'npm',
ignore: [],
globalPackages: {},
cwdPackageJson: {devDependencies: {}, dependencies: {}},
packages: false,
unusedDependencies: false,
missingFromPackageJson: {}
};
function state(userOptions) {
const currentStateObject = extend(defaultOptions);
function get(key) {
if (!currentStateObject.hasOwnProperty(key)) {
throw new Error(`Can't get unknown option "${key}".`);
}
return currentStateObject[key];
}
function set(key, value) {
if (get('debug')) {
debug('set key', key, 'to value', value);
}
if (currentStateObject.hasOwnProperty(key)) {
currentStateObject[key] = value;
} else {
throw new Error(`unknown option "${key}" setting to "${JSON.stringify(value, false, 4)}".`);
}
}
function inspectIfDebugMode() {
if (get('debug')) {
inspect();
}
}
function inspect() {
debug('current state', all());
}
function all() {
return currentStateObject;
}
const currentState = {
get: get,
set: set,
all,
inspectIfDebugMode
};
return init(currentState, userOptions);
}
module.exports = state;