Do not polyfill library transformations
authorRandall Leeds <randall@apache.org>
Sun, 12 Nov 2017 20:55:50 +0000 (12:55 -0800)
committerRandall Leeds <randall@apache.org>
Sun, 12 Nov 2017 20:55:50 +0000 (12:55 -0800)
In order to publish the individual libraries more easily, prepare the
webpack configuration for use by the libraries, in addition to the demo.
Rather than adding polyfills through the babel runtime transformation
plugin, which results in imperfect polyfilling of some instance methods,
expect that applications will polyfill their environments. This decision
seems reasonable especially in light of the switch to using only shipped
proposals in the environment preset that avoids requiring any consumers
to apply highly experimental transformations.

Instead, add an import of @babel/polyfill to the demo and let the env
preset transform it to a minimal polyfill for the target environments.

demo/index.js
package.json
webpack.config.js
yarn.lock

index 2dff404..5996e71 100644 (file)
@@ -15,6 +15,7 @@
 
 /* global corpus, module */
 
+import '@babel/polyfill';
 import * as fragment from '@annotator/fragment-identifier';
 import { describeTextQuoteByRange as describeRange } from '@annotator/text';
 // import { createAnySelector } from '@annotator/any';
index 09f4886..eb26ed6 100644 (file)
@@ -16,6 +16,7 @@
     "start": "webpack-dev-server"
   },
   "dependencies": {
+    "@babel/polyfill": "^7.0.0-beta.32",
     "@babel/runtime": "^7.0.0-beta.32"
   },
   "devDependencies": {
index 3efa977..485f62e 100644 (file)
@@ -40,8 +40,21 @@ module.exports = {
           loader: 'babel-loader',
           options: {
             plugins: [
-              // Add polyfills without pollution and externalize helpers.
-              '@babel/transform-runtime',
+              [
+                '@babel/transform-runtime',
+                {
+                  // Externalize babel helpers for bundle size improvements.
+                  helpers: true,
+                  // Do not polyfill; leave that to applications.
+                  polyfill: false,
+                  // Do not rely on a global regenerator runtime.
+                  regenerator: true,
+                  // Do not import polyfills for helpers.
+                  useBuiltIns: true,
+                  // Do not transform helper modules.
+                  useESModules: true,
+                },
+              ],
             ],
             presets: [
               [
@@ -53,6 +66,8 @@ module.exports = {
                     browsers: ['defaults'],
                     node: '6.0',
                   },
+                  // Use a minimal @babel/polyfill.
+                  useBuiltIns: 'entry',
                 },
               ],
             ],
index cf6410f..cadcf1b 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
     "@babel/helper-regex" "7.0.0-beta.32"
     regexpu-core "^4.1.3"
 
+"@babel/polyfill@^7.0.0-beta.32":
+  version "7.0.0-beta.32"
+  resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.0.0-beta.32.tgz#b13a0b08a9ae3fb70ceaa22bf5213b7f0b81dada"
+  dependencies:
+    core-js "^2.4.0"
+    regenerator-runtime "^0.11.0"
+
 "@babel/preset-env@^7.0.0-beta.2":
   version "7.0.0-beta.32"
   resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.0.0-beta.32.tgz#db1ebf62f6bc9fc08e49c4eea58463e1eb6c3bca"