UNPKG

1.59 kBJavaScriptView Raw
1'use strict';
2
3var _ = require('lodash');
4var css = require('css');
5
6function toRegExp (text) {
7 return new RegExp('^' + text + '$');
8}
9
10function api (stylesheet, options) {
11 var sheet = css.parse(stylesheet);
12 var sheetRules = sheet.stylesheet.rules;
13 var props = options.properties.map(toRegExp);
14
15 _.forEach(sheetRules, inspectRuleset);
16
17 return result();
18
19 function inspectRuleset (inspected, parent) {
20 var forEachVictim = typeof parent === 'number';
21 if (forEachVictim) {
22 parent = false;
23 }
24 if (inspected.type === 'rule') {
25 if (parent) {
26 _(sheetRules)
27 .where({ type: 'media', media: parent.media })
28 .pluck('rules')
29 .value()
30 .forEach(inspectRules);
31 } else {
32 inspectRules(sheetRules);
33 }
34 } else if (inspected.type === 'media') {
35 inspected.rules.forEach(inspectRulesetInMedia);
36 }
37
38 function inspectRulesetInMedia (rule) {
39 inspectRuleset(rule, inspected);
40 }
41
42 function inspectRules (rules) {
43 _.forEach(rules, inspectDeclarations);
44 }
45
46 function inspectDeclarations (rule) {
47 if (rule.declarations) {
48 rule.declarations = rule.declarations.filter(keepPropertyDeclaration);
49 }
50 }
51
52 function keepPropertyDeclaration (declaration) {
53 return props.every(notMatching);
54 function notMatching (prop) {
55 return prop.test(declaration.property) === false;
56 }
57 }
58 }
59
60 function result () {
61 return css
62 .stringify(sheet)
63 .replace(/^\n*/, '')
64 .replace(/\n*$/, '\n');
65 }
66}
67
68module.exports = api;