Not everything is set in stone or has an issue for it! Looking to post these to get more people involved or integrate with other projects.
compat-table used in preset-env
https://github.com/kangax/compat-table could use a remake, ideally work with browser vendors on this
- There is also https://github.com/mdn/browser-compat-data
- Also use data from test262?
- Run tests against real browsers
- have a data-only format
- Need continued maintainence
- Allow any substitute polyfill instead of
core-js. You should be able to override anything (custom
"usage"option the default after it is stable.
- Guide on compiling/publishing ES2015+, .mjs, etc: https://twitter.com/philwalton/status/908082461799616512
- Support multi-build/folder outputs based on ES version/browser/engines?
- Includes making sure you can run Babel safely over node_modules like with #6280. create-react-app has an issue for this
Codemods for TC39 Proposals
Lebab/others are already used to convert from ES5 -> ESNext, so incorporate it into Babel itself.
- Refactor Lebab as Babel transforms (can keep the cli since it's a separate tool)
- Usecase: ES3 -> ES6+ (on source code)
- Usecase: Remove usage of dropped proposals
- Usecase: Auto upgrade to the latest version of a proposal spec (if possible)
- Can we somehow combine forces in: babel-codemod/jscodeshift/lebab, prettier/recast/babel-generator? I really don't want to update all of these: new syntax equals re-writing the printer in all of these places separately/out of sync.
Increasing the quality of community plugins
- Work with the community to create guides on how to write plugins or understand ASTs, etc
- Analysis of API's/syntax used (Google BigQuery)
- Have #blessed/sanctioned/curated packages according to some standard
- Can use for smoke tests
- Official testing package
- Certain level of coverage, downloads, etc
- Create a scoped namespace on github/npm for these? like webpack-contrib
- Can enforce linting rules on apis?
- Makes ecosystem changes easier if can notify and upgrade these plugins beforehand
- Create a set of standard tests to verify against (handles all syntax)
- Documented/tested set of options
- allow custom version of babel-standalone (same as REPL to allow per PR tests)
- integrate with repl? (both are in react)
- auto publish a plugin to npm?
- create tests?
- hook into codesandbox?
Performance table for ES6+ (used in babel-preset-env under new option e.g
Add a new option in
preset-env: will continue to compile if the native support is slower. Can setup a threshold, may need to compare against the size difference.
- Use six-speed repo as a base, needs to apply for ES6 and proposals
- Need continued maintainence
Compiled Output Stats
#5340 Can show the code size before and after compiling to give a sense of compiled output. Could create suggestions like using "loose" mode or not compiling, etc.
- The REPL just added a before/after code-size
- Maybe difficult to do per transform
Support having async plugins. Will require it to be opt-in and for all other plugins to be async.
afterkeys for plugins so they can specify order.
- Possibily implement related plugins in the same "plugin" but just expose a flag out to the end-user.
Babel Helpers (shared code)
- loader should handle these automatically like rollup
- allow 3rd party helpers? https://github.com/babel/babel/issues/6487
- allow compilation of helpers (write in esnext?) https://github.com/babel/babel/issues/5876
babel / create
We can re-use the
babelpackage for a more simplified 0 config™ version
Not sure what this looks like but had this idea for a really long time and didn't really get anywhere - the cli version could just be https://github.com/developit/microbundle for libs? Maybe webpack/parcel would have it covered for apps?
Run Babel against Spec tests (test262, TS, Flow, JSX)
Better set of tests for stability/spec compliancy.
- The parser (babylon) already has a whitelist of test262 tests
- Need to do the same for the transforms.
- Babel itself https://github.com/babel/babel/issues/6134
- Important community plugins (
babel-coreintegrations (wrappers like
babel-loader, test frameworks, etc)
- Libraries (
- Tools that use individual packages (
- OSS Apps (
- Query config for data for other tools
- Validate config better
- Create/expand on new tools like https://github.com/boopathi/babel-time-travel
Already working with v8 via https://github.com/v8/web-tooling-benchmark, but can add other representative workloads: jsx/flow/ts/es6+.
Can run these benchmarks for perf PRs, should track some over time.
- Use a blog framework like Gatsby/Docusaurus
- Versioned docs pages: currently we don't have an easy way to show both the documentation for v6, v7, and beyond.
- Translatable docs
- Real documentation on APIs
- Up to date babel-handbook/merge into rehauled website
- Continue our videos page
- Link to common errors pages
- Dropdown examples/examples of syntax from github?
- Import any package from npm (can give test examples for 3rd party plugins, debugging issues)
- Run any plugin from npm
- Create a plugin from the repl (can we merge it with ASTExplorer/codesandbox?), even publish, run from URL?
- Import/Export a
- Combine ^ with the ability to run the version of Babel in a PR/master.
- Use plugin's tests in the repo as "examples" for docs.
A bot is really useful to do github/maintainer activities automatically.
We haven't updated this in a long time due to Andrew being busy and not setting up the automatic infra on AWS. Switching will make updating actually real so we can add some new features which would save some headache.
Expanded Maintainer Guide
Better onboarding/contributing guide
- Guide to different aspects of contributing with real examples to issues/PRs
- Promote Open Collective, talking with companies about office hours, sponsorship, contracting?
- Mentoring: Google Summer of Code/Rails Girls Summer of Code were great but was hard to keep up with volunteeers and I felt like we could be doing a lot more with full time help.
- Maybe doing local meetups on contributing, or livestreaming development/maintenance work?
- Should focus on bringing in maintainers that will lower the burden, not increase it even if there is upfront work
Big Wishlist (might be out of scope/complex/ecosystem)
- Should Babel operate multi-file/take in a dep graph?
- Should Babel use type info (from other things like ts/flow/runtime info)
- Can we just move back to acorn + estree?
- Should we switch to shift?
- What about binary ast?
- immutable? https://github.com/babel/babel/issues/4130#issuecomment-245411113