UNPKG

karma-typescript-cssmodules-transform

Version:
82 lines 3.26 kB
"use strict"; var log4js = require("log4js"); var os = require("os"); var postcss = require("postcss"); var log; var json = {}; var parser = postcss.plugin("karma-typescript-cssmodules-transform-parser", function () { return function (css) { css.walkRules(function (rule) { if (rule.selector === ":export") { rule.walkDecls(function (decl) { json[decl.prop] = decl.value; }); } }); }; }); // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types var configure = function (postcssOptions, options, filter) { postcssOptions = postcssOptions || {}; options = options || {}; filter = (filter instanceof RegExp) ? filter : /\.css$/; // eslint-disable-next-line @typescript-eslint/no-var-requires var genericNames = require("generic-names"); var scopedNameGenerator = options.generateScopedName || "[name]_[local]_[hash:base64:5]"; var transform = function (context, callback) { postcssOptions.from = context.filename; postcssOptions.to = context.filename; if (context.filename.match(filter)) { log.debug("Transforming %s", context.filename); if (!context.source) { return callback(new Error("File is empty"), false); } var plugins = [ // eslint-disable-next-line @typescript-eslint/no-var-requires require("postcss-modules-local-by-default")({ mode: options.mode }), require("postcss-modules-extract-imports"), // eslint-disable-next-line @typescript-eslint/no-var-requires require("postcss-modules-scope")({ generateScopedName: genericNames(scopedNameGenerator, { context: context.filename }) }), require("postcss-modules-values"), parser ]; postcss(plugins) .process(context.source, postcssOptions) .then(function (result) { result.warnings().forEach(function (warning) { log.warn(warning.toString()); }); context.source = JSON.stringify(json); callback(undefined, true); }, function (error) { if (error.name === "CssSyntaxError") { log.warn(error.message + os.EOL + error.showSourceCode()); callback(undefined, false); } else { callback(error, false); } }); } else { return callback(undefined, false); } }; var initialize = function (logOptions) { log4js.configure({ appenders: logOptions.appenders, categories: { default: { appenders: Object.keys(logOptions.appenders), level: logOptions.level } } }); log = log4js.getLogger("cssmodules-transform.karma-typescript"); }; return Object.assign(transform, { initialize: initialize }); }; module.exports = configure; //# sourceMappingURL=transform.js.map