fix: Update babel deps to babel 7 (#214)

* fix: Update babel deps to babel 7
* chore: Replaced @babel/transfor-umd-modules with a small custom babel transformer script
* test: Added minimal integration test as smoke test for importing polyfill as es6 module
This commit is contained in:
Luca Greco 2019-12-12 19:00:46 +01:00 committed by GitHub
parent 2005a2ca22
commit f85b5d8e5b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 121 additions and 13 deletions

View File

@ -60,7 +60,7 @@ module.exports = function(grunt) {
options: { options: {
babelrc: false, babelrc: false,
comments: false, comments: false,
presets: ["babili"], presets: ["minify"],
sourceMap: true, sourceMap: true,
}, },
files: { files: {
@ -72,11 +72,9 @@ module.exports = function(grunt) {
babelrc: false, babelrc: false,
comments: true, comments: true,
plugins: [ plugins: [
["transform-es2015-modules-umd", { ["./scripts/babel-transform-to-umd-module", {
globals: { globalName: "browser",
"webextension-polyfill": "browser", amdModuleName: "webextension-polyfill",
},
exactGlobals: true,
}], }],
], ],
sourceMap: true, sourceMap: true,

View File

@ -17,12 +17,12 @@
}, },
"homepage": "https://github.com/mozilla/webextension-polyfill", "homepage": "https://github.com/mozilla/webextension-polyfill",
"devDependencies": { "devDependencies": {
"@babel/core": "^7.0.0",
"@babel/preset-env": "^7.0.0",
"@babel/register": "^7.0.0",
"async-wait-until": "^1.1.5", "async-wait-until": "^1.1.5",
"babel-core": "^6.26.3",
"babel-eslint": "^10.0.3", "babel-eslint": "^10.0.3",
"babel-plugin-transform-es2015-modules-umd": "^6.24.1", "babel-preset-minify": "^0.5.1",
"babel-preset-babili": "^0.0.10",
"babel-preset-es2017": "^6.24.1",
"browserify": "^16.2.2", "browserify": "^16.2.2",
"chai": "^4.2.0", "chai": "^4.2.0",
"chromedriver": "^78.0.1", "chromedriver": "^78.0.1",
@ -32,7 +32,7 @@
"geckodriver": "^1.11.2", "geckodriver": "^1.11.2",
"global-replaceify": "^1.0.0", "global-replaceify": "^1.0.0",
"grunt": "^1.0.1", "grunt": "^1.0.1",
"grunt-babel": "^6.0.0", "grunt-babel": "^8.0.0",
"grunt-contrib-concat": "^1.0.1", "grunt-contrib-concat": "^1.0.1",
"grunt-coveralls": "^2.0.0", "grunt-coveralls": "^2.0.0",
"grunt-replace": "^1.0.1", "grunt-replace": "^1.0.1",

View File

@ -0,0 +1,61 @@
const {template, types} = require("@babel/core");
const buildWrapper = template(`
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(AMD_MODULE_NAME, ["module"], factory);
} else if (typeof exports !== "undefined") {
factory(module);
} else {
var mod = { exports: {} };
factory(mod);
global.GLOBAL = mod.exports;
}
})(
typeof globalThis !== "undefined" ? globalThis
: typeof self !== "undefined" ? self
: this,
function(module) {
}
)
`);
module.exports = (api, options = {}) => {
api.assertVersion(7);
if (typeof options.globalName != "string") {
throw new Error("globalName option is mandatory");
}
if (typeof options.amdModuleName != "string") {
throw new Error("amdModuleName is mandatory");
}
return {
name: "transform-to-umd-module",
visitor: {
Program: {
exit(path) {
const {body, directives} = path.node;
path.node.directives = [];
path.node.body = [];
const umdWrapper = path.pushContainer(
"body",
buildWrapper({
AMD_MODULE_NAME: types.stringLiteral(options.amdModuleName),
GLOBAL: options.globalName,
})
)[0];
const umdFactory = umdWrapper
.get("expression.arguments")[1]
.get("body");
umdFactory.pushContainer("directives", directives);
umdFactory.pushContainer("body", body);
},
},
},
};
};

View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
</head>
<body>
<script type='module' src='browser-polyfill.js'></script>
<script type='module' src='background.js'></script>
</body>
</html>

View File

@ -0,0 +1,3 @@
browser.runtime.onMessage.addListener(async (msg, sender) => {
return {bgReceived: msg};
});

View File

@ -0,0 +1,5 @@
test("Test browser.runtime.onMessage on polyfill loaded as es6 module", async (t) => {
const msg = "send-message-to-background-page";
const res = await browser.runtime.sendMessage(msg);
t.deepEqual(res, {bgReceived: msg}, "Got the expected reply");
});

View File

@ -0,0 +1,22 @@
{
"manifest_version": 2,
"name": "test-import-as-es6-module",
"version": "0.1",
"description": "test-import-as-es6-module",
"content_scripts": [
{
"matches": [
"http://localhost/*"
],
"js": [
"browser-polyfill.js",
"tape.js",
"content.js"
]
}
],
"permissions": [],
"background": {
"page": "background.html"
}
}

View File

@ -2,6 +2,11 @@
const {defineExtensionTests} = require("./setup"); const {defineExtensionTests} = require("./setup");
defineExtensionTests({
description: "polyfill imported as an ES6 module",
extensions: ["import-as-es6-extension"],
});
defineExtensionTests({ defineExtensionTests({
description: "browser.runtime.onMessage/sendMessage", description: "browser.runtime.onMessage/sendMessage",
extensions: ["runtime-messaging-extension"], extensions: ["runtime-messaging-extension"],

View File

@ -1,3 +1,7 @@
require("babel-core/register")({ require("@babel/register")({
presets: ["es2017"], presets: [["@babel/env", {
targets: {
node: "current",
},
}]],
}); });