UNPKG

@textlint/feature-flag

Version:
103 lines 3.02 kB
// MIT © 2017 azu "use strict"; 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