@textlint/feature-flag
Version:
textlint internal feature flag manager.
103 lines • 3.02 kB
JavaScript
// MIT © 2017 azu
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.throwIfTesting = exports.throwWithoutExperimental = exports.coreFlags = exports.isFeatureEnabled = exports.setFeature = exports.resetFlags = void 0;
const flagMap = new Map();
/**
* IT IS FOR TESTING
*/
const resetFlags = () => {
flagMap.clear();
};
exports.resetFlags = resetFlags;
/**
* set feature flag
* @param {string} flagName
* @param {boolean} status
*/
const setFeature = (flagName, status) => {
flagMap.set(flagName, status);
};
exports.setFeature = setFeature;
/**
* If the feature flag of `flagName` is enabled, return true.
* @param {string} flagName
* @param {boolean=false} [loose]
* @returns {boolean}
*/
const isFeatureEnabled = (flagName, { loose = false } = {}) => {
if (!flagMap.has(flagName)) {
if (loose) {
// loose-mode, return false
return false;
}
else {
throw new Error(`@textlint/feature-flag:Error: ${flagName} is not defined.`);
}
}
const status = flagMap.get(flagName);
if (typeof status !== "boolean") {
throw new Error(`flag should be boolean, but it is :${status}`);
}
return status;
};
exports.isFeatureEnabled = isFeatureEnabled;
// == CORE Flags
// if run textlint --experimental, set experimental true by default
if (typeof process !== "undefined" && Array.isArray(process.argv) && process.argv.indexOf("--experimental") !== -1) {
(0, exports.setFeature)("core.experimental", true);
}
/**
* Core flags
* @type {{experimental, experimental, runningCLI, runningCLI, runningTester, runningTester}}
*/
exports.coreFlags = {
// Experimental
get experimental() {
return (0, exports.isFeatureEnabled)("core.experimental", {
loose: true
});
},
set experimental(status) {
(0, exports.setFeature)("core.experimental", status);
},
// CLI
get runningCLI() {
return (0, exports.isFeatureEnabled)("core.runningCLI", {
loose: true
});
},
set runningCLI(status) {
(0, exports.setFeature)("core.runningCLI", status);
},
// textlint-tester
get runningTester() {
return (0, exports.isFeatureEnabled)("core.runningTester", {
loose: true
});
},
set runningTester(status) {
(0, exports.setFeature)("core.runningTester", status);
}
};
/**
* if current is not experimental, throw error message.
* @param message
*/
function throwWithoutExperimental(message) {
if (exports.coreFlags.runningCLI && !exports.coreFlags.experimental) {
throw Error(message);
}
}
exports.throwWithoutExperimental = throwWithoutExperimental;
/**
* if current is in testing, throw error message.
* @param {string} message
*/
function throwIfTesting(message) {
if (exports.coreFlags.runningTester) {
throw Error(message);
}
}
exports.throwIfTesting = throwIfTesting;
//# sourceMappingURL=index.js.map