react-scoped-styles
Version:
Scoped styles for React components
29 lines (28 loc) • 1.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const dirhash_1 = require("./lib/dirhash");
const include_hash_1 = require("./lib/include-hash");
const parsers_1 = require("./lib/parsers");
const classDeclarationRegex = /className:/g;
const classExprRegex = /classname:\s["'].*?["']/gi;
const classRegex = /["'](.*?)["']/g;
function scriptLoader(source) {
const includeHash = (0, include_hash_1.getInclude)(this);
if (!source.match(classDeclarationRegex)) {
return source;
}
const dirHash = (0, dirhash_1.createDirHash)(this.context);
const newSource = source.replace(classExprRegex, classExpr => {
return classExpr.replace(classRegex, (_match, classNames) => {
const uniqueClassNames = classNames.split(' ')
.filter(Boolean)
.map((className) => includeHash(className, dirHash))
.join(' ');
const prefix = /^\s/.test(classNames) ? "' " : "'";
const suffix = /\s$/.test(classNames) ? " '" : "'";
return prefix + uniqueClassNames + suffix;
});
});
return (0, parsers_1.replaceConditionals)(newSource, className => includeHash(className, dirHash));
}
exports.default = scriptLoader;