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:
parent
2005a2ca22
commit
f85b5d8e5b
10
Gruntfile.js
10
Gruntfile.js
|
@ -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,
|
||||||
|
|
10
package.json
10
package.json
|
@ -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",
|
||||||
|
|
|
@ -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);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
};
|
|
@ -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>
|
|
@ -0,0 +1,3 @@
|
||||||
|
browser.runtime.onMessage.addListener(async (msg, sender) => {
|
||||||
|
return {bgReceived: msg};
|
||||||
|
});
|
|
@ -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");
|
||||||
|
});
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
|
@ -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"],
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
require("babel-core/register")({
|
require("@babel/register")({
|
||||||
presets: ["es2017"],
|
presets: [["@babel/env", {
|
||||||
|
targets: {
|
||||||
|
node: "current",
|
||||||
|
},
|
||||||
|
}]],
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue