From 38fd2bc2423e11987355b80d38628301617ece16 Mon Sep 17 00:00:00 2001 From: Tony Ross Date: Mon, 11 Feb 2019 12:11:15 -0600 Subject: [PATCH] New: Enable compat-api hints by default Fix #1574 --- packages/extension-browser/package.json | 5 ++++- .../extension-browser/scripts/import-hints.js | 12 ++++++++++-- .../extension-browser/scripts/pack-mdn-data.js | 16 ++++++++++++++++ .../src/content-script/connector.ts | 8 +++++--- .../src/content-script/webhint.ts | 2 +- packages/extension-browser/tsconfig.json | 1 + packages/extension-browser/webpack.config.js | 1 + 7 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 packages/extension-browser/scripts/pack-mdn-data.js diff --git a/packages/extension-browser/package.json b/packages/extension-browser/package.json index 565d30007f3..87ac9f70cfb 100644 --- a/packages/extension-browser/package.json +++ b/packages/extension-browser/package.json @@ -9,7 +9,8 @@ "description": "webhint browser extension", "devDependencies": { "@hint/hint-axe": "^2.1.1", - "@hint/hint-button-type": "^1.0.1", + "@hint/hint-button-type": "^2.0.0", + "@hint/hint-compat-api": "^2.0.1", "@hint/hint-content-type": "^3.0.0", "@hint/hint-css-prefix-order": "^1.0.0", "@hint/hint-disown-opener": "^2.1.1", @@ -52,6 +53,7 @@ "html-minifier": "^3.5.21", "is-ci": "^2.0.0", "lodash": "^4.17.11", + "mdn-browser-compat-data": "^0.0.66", "npm-run-all": "^4.1.5", "nyc": "^13.2.0", "puppeteer": "^1.12.2", @@ -102,6 +104,7 @@ "prebuild:css": "tcm src", "prebuild:hints": "node ./scripts/import-hints.js", "prebuild:i18n": "node ./scripts/create-i18n.js", + "prebuild:mdn": "node ./scripts/pack-mdn-data.js", "test": "npm run lint && npm run build && npm run test-only", "test-only": "nyc ava", "watch": "npm run build && npm-run-all --parallel -c watch:*", diff --git a/packages/extension-browser/scripts/import-hints.js b/packages/extension-browser/scripts/import-hints.js index 33ee9547a28..25e441dafe8 100644 --- a/packages/extension-browser/scripts/import-hints.js +++ b/packages/extension-browser/scripts/import-hints.js @@ -13,10 +13,14 @@ const hints = `// autogenerated by scripts/import-hints.js import { IHintConstructor } from 'hint/dist/src/lib/types'; +const resolve = (module: any): IHintConstructor => { + return module.default || module; +}; + const hints = [ ${ hintModules.map((name) => { - return ` ...Object.values(require('${name}'))`; + return ` ...Object.values(require('${name}')).map(resolve)`; }).join(',\n') } ]; @@ -39,10 +43,14 @@ const metas = `// autogenerated by scripts/import-hints.js import { HintMetadata } from 'hint/dist/src/lib/types'; +const resolve = (module: any): HintMetadata => { + return module.default || module; +}; + const metas = [ ${ hintModules.map((name) => { - return ` ...Object.values(require('${name}/dist/src/meta'))`; + return ` ...Object.values(require('${name}/dist/src/meta')).map(resolve)`; }).join(',\n') } ]; diff --git a/packages/extension-browser/scripts/pack-mdn-data.js b/packages/extension-browser/scripts/pack-mdn-data.js new file mode 100644 index 00000000000..79fc9dfce89 --- /dev/null +++ b/packages/extension-browser/scripts/pack-mdn-data.js @@ -0,0 +1,16 @@ +const fs = require('fs'); +const mdn = require('mdn-browser-compat-data'); +const path = require('path'); +const filename = path.resolve(`${__dirname}/../dist/mdn-browser-compat-data.packed.json`); + +fs.writeFile(filename, JSON.stringify({ + browsers: mdn.browsers, + css: mdn.css, + html: mdn.html +}), (err) => { + if (err) { + throw err; + } else { + console.log(`Created: ${filename}`); + } +}); diff --git a/packages/extension-browser/src/content-script/connector.ts b/packages/extension-browser/src/content-script/connector.ts index b72405eb0cd..a62b7e0c569 100644 --- a/packages/extension-browser/src/content-script/connector.ts +++ b/packages/extension-browser/src/content-script/connector.ts @@ -20,6 +20,7 @@ export default class WebExtensionConnector implements IConnector { private _document = new AsyncHTMLDocument(document); private _window = new AsyncWindow(this._document); // eslint-disable-line private _engine: Engine; + private _onComplete: (resource: string) => void = () => { }; private _options: ConnectorOptionsConfig; public constructor(engine: Engine, options?: ConnectorOptionsConfig) { @@ -53,7 +54,7 @@ export default class WebExtensionConnector implements IConnector { await this._engine.emitAsync('traverse::end', { resource }); } - await this._engine.emitAsync('scan::end', { resource }); + this._onComplete(resource); }, this._options.waitFor); }; @@ -159,10 +160,11 @@ export default class WebExtensionConnector implements IConnector { this.sendMessage({ ready: true }); return new Promise((resolve) => { - this._engine.once('scan::end', () => { + this._onComplete = async (resource: string) => { + await this._engine.emitAsync('scan::end', { resource }); resolve(); this.sendMessage({ done: true }); - }); + }; }); } diff --git a/packages/extension-browser/src/content-script/webhint.ts b/packages/extension-browser/src/content-script/webhint.ts index 30e295c766b..f76c62ef717 100644 --- a/packages/extension-browser/src/content-script/webhint.ts +++ b/packages/extension-browser/src/content-script/webhint.ts @@ -71,7 +71,7 @@ const main = async (userConfig: Config) => { hints: hintsConfig, hintsTimeout: 10000, ignoredUrls: determineIgnoredUrls(userConfig.ignoredUrls), - parsers: ['javascript', 'manifest'] + parsers: ['css', 'javascript', 'manifest'] }; const resources: HintResources = { diff --git a/packages/extension-browser/tsconfig.json b/packages/extension-browser/tsconfig.json index 0f4c7835048..a52fb8e1de8 100644 --- a/packages/extension-browser/tsconfig.json +++ b/packages/extension-browser/tsconfig.json @@ -16,6 +16,7 @@ { "path": "../hint" }, { "path": "../hint-axe" }, { "path": "../hint-button-type" }, + { "path": "../hint-compat-api" }, { "path": "../hint-content-type" }, { "path": "../hint-css-prefix-order" }, { "path": "../hint-disown-opener" }, diff --git a/packages/extension-browser/webpack.config.js b/packages/extension-browser/webpack.config.js index b7af5be130c..bd0c8768029 100644 --- a/packages/extension-browser/webpack.config.js +++ b/packages/extension-browser/webpack.config.js @@ -53,6 +53,7 @@ const baseConfig = { resolve: { alias: { 'hint/dist/src/lib/utils/network/request-async$': path.resolve(__dirname, 'dist/src/shims/request-async.js'), + 'mdn-browser-compat-data$': path.resolve(__dirname, 'dist/mdn-browser-compat-data.packed.json'), url$: path.resolve(__dirname, 'dist/src/shims/url.js') } }