From 8c8b9db0ed9b3ac784f824c6c275d300df2795f9 Mon Sep 17 00:00:00 2001 From: Marcus Weiner Date: Sun, 4 Oct 2020 21:07:00 +0200 Subject: [PATCH 1/3] Use internal node globals impl --- package-lock.json | 63 +++++-------------------------- package.json | 4 +- src/index.js | 2 +- src/node-compat/assets/browser.js | 1 + src/node-compat/assets/global.js | 7 ++++ src/node-compat/globals.js | 52 +++++++++++++++++++++++++ 6 files changed, 74 insertions(+), 55 deletions(-) create mode 100644 src/node-compat/assets/browser.js create mode 100644 src/node-compat/assets/global.js create mode 100644 src/node-compat/globals.js diff --git a/package-lock.json b/package-lock.json index e13424b9..d0c300e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1856,6 +1856,16 @@ } } }, + "@rollup/plugin-inject": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.2.tgz", + "integrity": "sha512-TSLMA8waJ7Dmgmoc8JfPnwUwVZgLjjIAM6MqeIFqPO2ODK36JqE0Cf2F54UTgCUuW8da93Mvoj75a6KAVWgylw==", + "requires": { + "@rollup/pluginutils": "^3.0.4", + "estree-walker": "^1.0.1", + "magic-string": "^0.25.5" + } + }, "@rollup/plugin-json": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", @@ -8877,39 +8887,6 @@ "process-es6": "^0.11.2" } }, - "rollup-plugin-node-globals": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz", - "integrity": "sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g==", - "requires": { - "acorn": "^5.7.3", - "buffer-es6": "^4.9.3", - "estree-walker": "^0.5.2", - "magic-string": "^0.22.5", - "process-es6": "^0.11.6", - "rollup-pluginutils": "^2.3.1" - }, - "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" - }, - "estree-walker": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", - "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==" - }, - "magic-string": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", - "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", - "requires": { - "vlq": "^0.2.2" - } - } - } - }, "rollup-plugin-terser": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", @@ -8921,21 +8898,6 @@ "terser": "^5.0.0" } }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "requires": { - "estree-walker": "^0.6.1" - }, - "dependencies": { - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" - } - } - }, "run-parallel": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", @@ -10122,11 +10084,6 @@ "builtins": "^1.0.3" } }, - "vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==" - }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", diff --git a/package.json b/package.json index e58b1f4d..756f8ea3 100644 --- a/package.json +++ b/package.json @@ -22,16 +22,18 @@ "@babel/preset-env": "^7.11.5", "@rollup/plugin-babel": "^5.2.0", "@rollup/plugin-commonjs": "^15.0.0", + "@rollup/plugin-inject": "^4.0.2", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^9.0.0", "@types/node": "^14.0.27", + "buffer-es6": "^4.9.3", "del": "^5.1.0", "make-dir": "^3.1.0", "node-fetch": "^2.6.1", "path-type": "^4.0.0", + "process-es6": "^0.11.6", "rollup": "^2.23.1", "rollup-plugin-node-builtins": "^2.1.2", - "rollup-plugin-node-globals": "^1.4.0", "rollup-plugin-terser": "^7.0.2", "typescript": "^3.9.7" }, diff --git a/src/index.js b/src/index.js index 235edfa1..d9dbd62e 100644 --- a/src/index.js +++ b/src/index.js @@ -14,7 +14,7 @@ const { isDirectory } = require("path-type"); const rollup = require("rollup"); const { terser } = require("rollup-plugin-terser"); const nodeBuiltins = require("rollup-plugin-node-builtins"); -const nodeGlobals = require("rollup-plugin-node-globals"); +const nodeGlobals = require("./node-compat/globals"); const babel = nodeBabel.babel; const resolve = nodeResolve.nodeResolve; diff --git a/src/node-compat/assets/browser.js b/src/node-compat/assets/browser.js new file mode 100644 index 00000000..72b18811 --- /dev/null +++ b/src/node-compat/assets/browser.js @@ -0,0 +1 @@ +export var browser = true; diff --git a/src/node-compat/assets/global.js b/src/node-compat/assets/global.js new file mode 100644 index 00000000..14938d99 --- /dev/null +++ b/src/node-compat/assets/global.js @@ -0,0 +1,7 @@ +export default typeof global !== "undefined" + ? global + : typeof self !== "undefined" + ? self + : typeof window !== "undefined" + ? window + : {}; diff --git a/src/node-compat/globals.js b/src/node-compat/globals.js new file mode 100644 index 00000000..7c640a05 --- /dev/null +++ b/src/node-compat/globals.js @@ -0,0 +1,52 @@ +const inject = require("@rollup/plugin-inject"); +const { dirname } = require("path"); +const { randomBytes } = require("crypto"); + +const PROCESS_PATH = require.resolve("process-es6"); +const BUFFER_PATH = require.resolve("buffer-es6"); +const GLOBAL_PATH = require.resolve("./assets/global.js"); +const BROWSER_PATH = require.resolve("./assets/browser.js"); +const DIRNAME = "\0node-globals:dirname"; +const FILENAME = "\0node-globals:filename"; + +/** @type {{ [str: string]: string | [string, string] }} */ +const injections = { + "process.nextTick": [PROCESS_PATH, "nextTick"], + "process.browser": [BROWSER_PATH, "browser"], + "Buffer.isBuffer": [BUFFER_PATH, "isBuffer"], + global: GLOBAL_PATH, + process: PROCESS_PATH, + Buffer: [BUFFER_PATH, "Buffer"], + __filename: FILENAME, + __dirname: DIRNAME, +}; + +/** @returns {import("rollup").Plugin} */ +function nodeGlobals() { + const dirs = new Map(); + return { + ...inject({ + modules: injections, + }), + name: "rollup-plugin-node-globals-netlify", + load(id) { + if (dirs.has(id)) { + return `export default '${dirs.get(id)}'`; + } + }, + resolveId: (importee, importer) => { + if (importee === DIRNAME) { + let id = randomBytes(15).toString("hex"); + dirs.set(id, dirname(importer)); + return id; + } + if (importee === FILENAME) { + let id = randomBytes(15).toString("hex"); + dirs.set(id, importer); + return id; + } + }, + }; +} + +module.exports = nodeGlobals; From ba3cd270234fbd757fddee944f93c033a5cb4b60 Mon Sep 17 00:00:00 2001 From: Marcus Weiner Date: Mon, 5 Oct 2020 19:39:54 +0200 Subject: [PATCH 2/3] Fix eslint ignore of insert assets --- .eslintignore | 9 +++++++++ package.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 .eslintignore diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..d4f72aa9 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,9 @@ +# from .gitignore +node_modules/ +.eslintcache +.nyc_output +coverage +# Local Netlify folder +.netlify + +src/node-compat/assets/ \ No newline at end of file diff --git a/package.json b/package.json index 756f8ea3..6437c7c0 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "test": "npm run format && npm run test:dev", "format": "run-s format:*", - "format:lint": "eslint --ignore-path .gitignore --fix --cache --format=codeframe --max-warnings=0 \"src/**/*.js\"", + "format:lint": "eslint --ignore-path .eslintignore --fix --cache --format=codeframe --max-warnings=0 \"src/**/*.js\"", "format:prettier": "prettier --ignore-path .gitignore --write --loglevel warn \"*.{js,md,yml,json}\" \"!**/package-lock.json\" \"!package-lock.json\"", "test:dev": "ava", "test:ci": "nyc -r lcovonly -r text -r json ava" From 6745f41f4d664cdd4541a0ab3e9882edc5054e69 Mon Sep 17 00:00:00 2001 From: Marcus Weiner Date: Mon, 5 Oct 2020 19:40:03 +0200 Subject: [PATCH 3/3] Sort imports --- src/index.js | 4 ++-- src/node-compat/globals.js | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/index.js b/src/index.js index d9dbd62e..6503a0eb 100644 --- a/src/index.js +++ b/src/index.js @@ -12,14 +12,14 @@ const del = require("del"); const makeDir = require("make-dir"); const { isDirectory } = require("path-type"); const rollup = require("rollup"); -const { terser } = require("rollup-plugin-terser"); const nodeBuiltins = require("rollup-plugin-node-builtins"); -const nodeGlobals = require("./node-compat/globals"); +const { terser } = require("rollup-plugin-terser"); const babel = nodeBabel.babel; const resolve = nodeResolve.nodeResolve; const { LOCAL_OUT_DIR, MANIFEST_FILE, MAIN_FILE, CONTENT_TYPE } = require("./consts"); +const nodeGlobals = require("./node-compat/globals"); const uploadBundle = require("./upload"); function getShasum(buf) { diff --git a/src/node-compat/globals.js b/src/node-compat/globals.js index 7c640a05..de1922a0 100644 --- a/src/node-compat/globals.js +++ b/src/node-compat/globals.js @@ -1,6 +1,7 @@ -const inject = require("@rollup/plugin-inject"); -const { dirname } = require("path"); const { randomBytes } = require("crypto"); +const { dirname } = require("path"); + +const inject = require("@rollup/plugin-inject"); const PROCESS_PATH = require.resolve("process-es6"); const BUFFER_PATH = require.resolve("buffer-es6");