UNPKG

less-plugin-css-modules

Version:
124 lines (95 loc) 3.35 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _yargs = require('yargs'); var _yargs2 = _interopRequireDefault(_yargs); var _genericNames = require('generic-names'); var _genericNames2 = _interopRequireDefault(_genericNames); var _postcss = require('postcss'); var _postcss2 = _interopRequireDefault(_postcss); var _postcssModulesLocalByDefault = require('postcss-modules-local-by-default'); var _postcssModulesLocalByDefault2 = _interopRequireDefault(_postcssModulesLocalByDefault); var _postcssModulesScope = require('postcss-modules-scope'); var _postcssModulesScope2 = _interopRequireDefault(_postcssModulesScope); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var OPTIONS = { mode: { describe: '', example: 'lessc index.less --css-modules="--mode=global"', choices: ['global', 'local', 'pure'] }, hashPrefix: { describe: '', example: 'lessc index.less --css-modules="--hashPrefix=project_name"', type: 'string' }, generateScopedName: { describe: '', example: 'lessc index.less --css-modules="--generateScopedName=[name]__[local]___[hash:base64:5]"', type: 'string' } }; /** * @class CSSModules * @param {Object} [options] * @param {string} [options.mode] * @param {string} [options.hashPrefix] * @param {string|function} [options.generateScopedName='[name]__[local]___[hash:base64:5]'] */ function CSSModules() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; this.options = options; } CSSModules.prototype.minVersion = [2, 1, 0]; CSSModules.prototype.install = function (less, pluginManager) { pluginManager.addPostProcessor(new CSSProcessor(this.options)); }; CSSModules.prototype.printUsage = function () { console.log(''); console.log('CSS Modules Plugin'); console.log('specify plugin with --css-modules'); console.log(''); }; /** * @param {string} options */ CSSModules.prototype.setOptions = function (options) { this.options = _yargs2.default.options(OPTIONS).parse(options); }; exports.default = CSSModules; /** * @class CSSProcessor * @param {Object} [options] * @param {string} [options.mode] * @param {string} [options.hashPrefix] * @param {string|function} [options.generateScopedName] */ function CSSProcessor() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; this.options = options; } /** * [process description] * @param {string} css * @returns {string} */ CSSProcessor.prototype.process = function (css) { var processor = (0, _postcss2.default)(); if (this.options.mode) { processor.use((0, _postcssModulesLocalByDefault2.default)({ mode: this.options.mode })); } var typeGenerateScopedName = typeof this.options.generateScopedName; var pattern = typeGenerateScopedName === 'string' ? this.options.generateScopedName : '[name]__[local]___[hash:base64:5]'; var scopedName = typeGenerateScopedName === 'function' ? this.options.generateScopedName : (0, _genericNames2.default)(pattern, { context: process.cwd(), hashPrefix: this.options.hashPrefix }); processor.use((0, _postcssModulesScope2.default)({ generateScopedName: scopedName })); var result = processor.process(css); return result.toString(); };