78 lines
1.7 KiB
JavaScript
78 lines
1.7 KiB
JavaScript
/* global importScripts parseMozFormat parserlib CSSLint */
|
|
'use strict';
|
|
|
|
const loadScript = createLoadScript();
|
|
const loadParserLib = createLoadParserLib();
|
|
|
|
createAPI({
|
|
csslint: (code, config) => {
|
|
loadParserLib();
|
|
loadScript(['/vendor-overwrites/csslint/csslint.js']);
|
|
return CSSLint.verify(code, config).messages
|
|
.map(m => Object.assign(m, {rule: {id: m.rule.id}}));
|
|
},
|
|
stylelint: () => {
|
|
|
|
},
|
|
parseMozFormat: data => {
|
|
loadParserLib();
|
|
loadScript(['/js/moz-parser.js']);
|
|
return parseMozFormat(data);
|
|
}
|
|
});
|
|
|
|
function createLoadParserLib() {
|
|
let loaded = false;
|
|
return () => {
|
|
if (loaded) {
|
|
return;
|
|
}
|
|
importScripts('/vendor-overwrites/csslint/parserlib.js');
|
|
parserlib.css.Tokens[parserlib.css.Tokens.COMMENT].hide = false;
|
|
loaded = true;
|
|
};
|
|
}
|
|
|
|
function createLoadScript() {
|
|
const loaded = new Set();
|
|
return urls => {
|
|
urls = urls.filter(u => !loaded.has(u));
|
|
importScripts(...urls);
|
|
urls.forEach(u => loaded.add(u));
|
|
};
|
|
}
|
|
|
|
function createAPI(methods) {
|
|
self.onmessage = e => {
|
|
const message = e.data;
|
|
Promise.resolve()
|
|
.then(() => methods[message.action](...message.args))
|
|
.then(result =>
|
|
({
|
|
requestId: message.requestId,
|
|
error: false,
|
|
data: result
|
|
})
|
|
)
|
|
.catch(err =>
|
|
({
|
|
requestId: message.requestId,
|
|
error: true,
|
|
data: cloneError(err)
|
|
})
|
|
)
|
|
.then(data => self.postMessage(data));
|
|
};
|
|
}
|
|
|
|
function cloneError(err) {
|
|
return Object.assign({
|
|
name: err.name,
|
|
stack: err.stack,
|
|
message: err.message,
|
|
lineNumber: err.lineNumber,
|
|
columnNumber: err.columnNumber,
|
|
fileName: err.fileName
|
|
}, err);
|
|
}
|