59 lines
1.5 KiB
JavaScript
59 lines
1.5 KiB
JavaScript
/* global require importScripts */
|
|
'use strict';
|
|
|
|
importScripts('/vendor/stylelint-bundle/stylelint-bundle.min.js');
|
|
|
|
const stylelint = require('stylelint');
|
|
|
|
self.onmessage = ({data: {action = 'run', code, config}}) => {
|
|
switch (action) {
|
|
case 'getAllRuleIds':
|
|
// the functions are non-tranferable
|
|
self.postMessage(Object.keys(stylelint.rules));
|
|
return;
|
|
case 'getAllRuleOptions':
|
|
self.postMessage(getAllRuleOptions());
|
|
return;
|
|
case 'run':
|
|
stylelint.lint({code, config}).then(results =>
|
|
self.postMessage(results));
|
|
return;
|
|
}
|
|
};
|
|
|
|
function getAllRuleOptions() {
|
|
const options = {};
|
|
const rxPossible = /\bpossible:("(?:[^"]*?)"|\[(?:[^\]]*?)\]|\{(?:[^}]*?)\})/g;
|
|
const rxString = /"([-\w\s]{3,}?)"/g;
|
|
for (const id of Object.keys(stylelint.rules)) {
|
|
const ruleCode = String(stylelint.rules[id]);
|
|
const sets = [];
|
|
let m, mStr;
|
|
while ((m = rxPossible.exec(ruleCode))) {
|
|
const possible = m[1];
|
|
const set = [];
|
|
while ((mStr = rxString.exec(possible))) {
|
|
const s = mStr[1];
|
|
if (s.includes(' ')) {
|
|
set.push(...s.split(/\s+/));
|
|
} else {
|
|
set.push(s);
|
|
}
|
|
}
|
|
if (possible.includes('ignoreAtRules')) {
|
|
set.push('ignoreAtRules');
|
|
}
|
|
if (possible.includes('ignoreShorthands')) {
|
|
set.push('ignoreShorthands');
|
|
}
|
|
if (set.length) {
|
|
sets.push(set);
|
|
}
|
|
}
|
|
if (sets.length) {
|
|
options[id] = sets;
|
|
}
|
|
}
|
|
return options;
|
|
}
|