From b4113d1a61367cb8644bd022e2df5ec08b8b0929 Mon Sep 17 00:00:00 2001 From: eight Date: Sun, 2 Sep 2018 16:35:16 +0800 Subject: [PATCH] Move csslint-loader to background --- background/csslint-loader.js | 41 ++++++++++++++++++++++++++++++++++++ js/usercss.js | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 background/csslint-loader.js diff --git a/background/csslint-loader.js b/background/csslint-loader.js new file mode 100644 index 00000000..dfe7811f --- /dev/null +++ b/background/csslint-loader.js @@ -0,0 +1,41 @@ +/* global importScripts parserlib CSSLint parseMozFormat */ +'use strict'; + +const CSSLINT_PATH = '/vendor-overwrites/csslint/'; +importScripts(CSSLINT_PATH + 'parserlib.js'); + +parserlib.css.Tokens[parserlib.css.Tokens.COMMENT].hide = false; + +self.onmessage = ({data}) => { + + const {action = 'run'} = data; + + if (action === 'parse') { + if (!self.parseMozFormat) self.importScripts('/js/moz-parser.js'); + self.postMessage(parseMozFormat(data)); + return; + } + + if (!self.CSSLint) self.importScripts(CSSLINT_PATH + 'csslint.js'); + + switch (action) { + case 'getAllRuleIds': + // the functions are non-tranferable and we need only an id + self.postMessage(CSSLint.getRules().map(rule => rule.id)); + return; + + case 'getAllRuleInfos': + // the functions are non-tranferable + self.postMessage(CSSLint.getRules().map(rule => JSON.parse(JSON.stringify(rule)))); + return; + + case 'run': { + const {code, config} = data; + const results = CSSLint.verify(code, config).messages + //.filter(m => !m.message.includes('/*[[') && !m.message.includes(']]*/')) + .map(m => Object.assign(m, {rule: {id: m.rule.id}})); + self.postMessage(results); + return; + } + } +}; diff --git a/js/usercss.js b/js/usercss.js index 8f5e6eda..9d54bc01 100644 --- a/js/usercss.js +++ b/js/usercss.js @@ -599,7 +599,7 @@ var usercss = (() => { function invokeWorker(message) { if (!worker.queue) { - worker.instance = new Worker('/edit/csslint-loader.js'); + worker.instance = new Worker('/background/csslint-loader.js'); worker.queue = []; worker.instance.onmessage = ({data}) => { worker.queue.shift().resolve(data.__ERROR__ ? Promise.reject(data.__ERROR__) : data);