-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathFeature.js
More file actions
121 lines (98 loc) · 2.83 KB
/
Feature.js
File metadata and controls
121 lines (98 loc) · 2.83 KB
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// Variables used by Scriptable.
// These must be at the very top of the file. Do not edit.
// icon-color: deep-purple; icon-glyph: toggle-off;
const { Files } = importModule("Files");
/**
* Singleton class.
* Used to operate with script features.
*
* @class FeatureUtil
*/
class FeatureUtil {
static #VALUE_PROPERTY = "value";
static #DEBUG_PROPERTY = "__debug";
static #ENABLED_PROPERTY = "__enabled";
static #instance;
#featureConfig;
constructor() {
this.#featureConfig = Files.readLocalFeatureFile();
}
/**
* Used to get instance of FeatureUtil.
*
* @static
* @return {FeatureUtil} instance of util class
* @memberof FeatureUtil
*/
static getInstance() {
if (!this.#instance) {
this.#instance = new FeatureUtil();
}
return this.#instance;
}
/**
* Used to check state of feature.
* Feature would be enabled only if debug
* is enabled as well.
*
* @param {String} featureName feature name
* @return {Boolean} True if debug and feature are enabled otherwise false
* @memberof FeatureUtil
*/
isDebugFeatureEnabled(featureName) {
return this.isDebugEnabled() && this.isFeatureEnabled(featureName);
}
/**
* Used to check whether debug (__debug)
* feature is enabled.
*
* @return {Boolean} True if debug feature enabled otherwise false
* @memberof FeatureUtil
*/
isDebugEnabled() {
return this.isFeatureEnabled(FeatureUtil.#DEBUG_PROPERTY);
}
/**
* Used to check state of feature.
* Debug feature (__debug) doesn't
* affect state of feature when using
* this method.
*
* @param {String} featureName feature name
* @return {Boolean} true if feature enabled otherwise false
* @memberof FeatureUtil
*/
isFeatureEnabled(featureName) {
const feature = this.#featureConfig[featureName];
return feature?.[FeatureUtil.#ENABLED_PROPERTY];
}
/**
* Used to get value of the feature.
*
* @param {String} featureName feature name
* @return {Object} value of feature
* @memberof FeatureUtil
*/
getFeature(featureName) {
const feature = this.#featureConfig[featureName];
return feature?.[FeatureUtil.#VALUE_PROPERTY];
}
}
function debugEnabled() {
return FeatureUtil.getInstance().isDebugEnabled();
}
function debugFeatureEnabled(featureName) {
return FeatureUtil.getInstance().isDebugFeatureEnabled(featureName);
}
function featureEnabled(featureName) {
return FeatureUtil.getInstance().isFeatureEnabled(featureName);
}
function getFeature(featureName) {
return FeatureUtil.getInstance().getFeature(featureName);
}
module.exports = {
debugEnabled,
debugFeatureEnabled,
featureEnabled,
getFeature
};