diff --git a/.6to5rc b/.babelrc similarity index 100% rename from .6to5rc rename to .babelrc diff --git a/.gitignore b/.gitignore index 8d55145894..ab255e6959 100644 --- a/.gitignore +++ b/.gitignore @@ -11,5 +11,5 @@ test/tmp coverage dist .package.json -packages/6to5-runtime/*.js -packages/6to5-runtime/regenerator/*.js +packages/babel-runtime/*.js +packages/babel-runtime/regenerator/*.js diff --git a/.gitmodules b/.gitmodules index 9f64ea3f37..68ac264ec3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,7 +3,7 @@ url = https://github.com/google/traceur-compiler [submodule "vendor/regenerator"] path = vendor/regenerator - url = https://github.com/6to5/regenerator-6to5 + url = https://github.com/babel/regenerator-babel [submodule "vendor/test262"] path = vendor/test262 url = https://github.com/tc39/test262 diff --git a/.jscsrc b/.jscsrc index 9e60dd5719..92ceeea268 100644 --- a/.jscsrc +++ b/.jscsrc @@ -1,5 +1,5 @@ { - "excludeFiles": ["lib/6to5/transformation/templates"], + "excludeFiles": ["lib/babel/transformation/templates"], "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, diff --git a/.jshintignore b/.jshintignore index 7b9eaccb48..60c0292be4 100644 --- a/.jshintignore +++ b/.jshintignore @@ -1 +1 @@ -lib/6to5/transformation/templates +lib/babel/transformation/templates diff --git a/.npmignore b/.npmignore index 34a941b95c..5e135bc1d1 100644 --- a/.npmignore +++ b/.npmignore @@ -1,7 +1,7 @@ node_modules *.log *.cache -lib/6to5/transformation/templates +lib/babel/transformation/templates test benchmark Makefile diff --git a/CHANGELOG-6to5.md b/CHANGELOG-6to5.md new file mode 100644 index 0000000000..555d4e7db4 --- /dev/null +++ b/CHANGELOG-6to5.md @@ -0,0 +1,1093 @@ +# 6to5 Changelog + +## 3.6.6 + + * **Internal** + * Upgrade `core-js`. + * **Bug Fix** + * Fix temp variables not being properly pushed inside of `while` loops. + * **New Feature** + * Add `auxilaryComment`/`--auxilary-comment` option that prepend auxilary helpers. + +## 3.6.5 + + * **Internal** + * Upgrade `core-js`. + * **Bug Fix** + * Fix block scoping leaking variables in IIFE mode. + * Fix tail call transformer exploding on return statements as the consequent of an if statement. + * **New Feature** + * Add `validation.react` transformer. + +## 3.6.4 + + * **New Feature** + * Add support for flow type casts and module types. + +## 3.6.3 + + * **Internal** + * Upgrade `acorn-6to5`. + * Use `default` property on `6to5-runtime`. + +## 3.6.2 + + * **Polish** + * Use better iterator detection in `slicedToArray` helper and add support for it to the `selfContained` transformer. + +## 3.6.1 + + * **Bug Fix** + * Multiline JSX string literals are now supported. + * Fix scope tracking import specifiers incorrectly. + * Fix templates incorrectly recursing into their replacements. + * **Internal** + * Type inferrence now extends to function return types. + * Upgrade `acorn-6to5`. + +## 3.6.0 + + * **New Feature** + * Add playground class property initializers. + * **Polish** + * Completely reimplemented scope tracking, can now track types and optimise certain helpers based on it. + * Extremely fast tail recursion optimisation implementation. Thanks [@RReverser](https://github.com/RReverser)! + * **Internal** + * `kexec` has been removed as an optional dependency and must be user installed. + * Upgrade `regenerator-6to5`. + * Upgrade `acorn-6to5`. + * Upgrade `core-js`. + +## 3.5.3 + + * Enable `es6.tailCall` transformer with the first implementation that only works with self referencing calls until we can implement nested tail calls elegantly. + +## 3.5.2 + + * Disable `es6.tailCall` temporairly after reports of it breaking. + +## 3.5.1 + + * **Polish** + * Allow tail calls to work across files without the runtime. + * **Internal** + * Upgrade `acorn-6to5`. + +## 3.5.0 + + * **Bug Fix** + * Destructuring patterns as the left operator in `ForInStatement`/`ForOfStatement`. + * **Polish** + * Make default parameter IIFE invocation smarter. + * Make `__esModule` flag non-enumerable. Thanks [@daliwali](https://github.com/daliwali)! + * **Internal** + * More performance improvements. + * Parsing is now ~30% faster thanks to [marijnh/acorn@7264bc0178e7e6af7cfe02e9e0c6b26ee0e6007f](https://github.com/marijnh/acorn/commit/7264bc0178e7e6af7cfe02e9e0c6b26ee0e6007f). + * **New Feature** + * Optional `es6.blockScopingTDZ` is now completely functional and handles all edgecases. + * `super` in object literals. + * Tail call optimisation. Thanks [@RReverser](https://github.com/RReverser)! + +## 3.4.1 + + * **Bug Fix** + * Fix conflicting `--module-ids` shorthand arg in `$ 6to5`. + * Add require hook options to cache key. + * Fix strict module formatter. + +## 3.4.0 + + * **New Feature** + * Add `commonStandard` module formatter. + * **Bug Fix** + * Fix conflicting `--module-ids` shorthand arg in `$ 6to5`. + * **Internal** + * Lots of internal refactoring with scope tracking and traversal. + * **Polish** + * Don't return `map` in the API result if `sourceMap` was set to `"inline"`. + +## 3.3.12 + + * **Bug Fix** + * Don't override `MemberExpression`s with `core-js` in `selfContained` if a local binding exists. + +## 3.3.11 + + * **Bug Fix** + * Fix the require cache. + +## 3.3.10 + + * **Internal** + * Restructure transformers so they're only ran if the AST contains nodes that they need to worry about. Improves transpilation speed significantly. + * **Bug Fix** + * Fix source maps not tracking end of node locations. + * **Spec Compliancy** + * Use static super references as the home object is actually done at definition time. + * **Polish** + * Force the `es6.destructuring` transformer to be whitelisted when the `es7.objectSpread` transformer is. + * Join sibling string literals when creating JSX. + +## 3.3.9 + + * **Bug Fix** + * Fix super inside of functions. + * Fix super constructor inheritance. + +## 3.3.7 + + * **Bug Fix** + * Add `--use-strict` to valid node flags in `6to5-node`. + * Fix booleans not being properly stripped from the arguments in `6to5-node`. + * Force `.js` extension when writing files to directories with `6to5`. + +## 3.3.5 + + * **Bug Fix** + * Fix block scoping inside of while loops. + * Make module name regex more conservative. Thanks [@johlrich](https://github.com/johlrich)! + * Fix block scoping of constants. + * Fix istanbul interop. + * Make JSX transforming more inline with the official transformer with spaces after non-empty last lines. + * **Polish** + * Make it illegal to export a property called `__esModule`. + +## 3.3.4 + + * **Polish** + * Add istanbul `require` interop. + * **Bug Fix** + * Fix incorrect source map column tracking in specific scenarios. + +## 3.3.3 + + * **Polish** + * Remap top level `this` to `undefined` instead of throwing an error. + * **Bug Fix** + * Run `selfContained` transformer over the regenerator runtime when building `6to5-runtime`. + * Fix `t.isReferenced` not properly allowing `value` nodes. + +## 3.3.1 + + * **Bug Fix** + * Block hoist assignment pattern destructuring. + +## 3.3.0 + + * **Bug Fix** + * Do all transforms before the regenerator transform is ran. + * **New Feature** + * Added back the 2.x optional runtime. + +## 3.2.1 + + * **Bug Fix** + * Fix block scoping transformer rewriting breaks and continues to inner labels. + +## 3.2.0 + + * **Bug Fix** + * Fixed scope tracking for default parameters IIFE. + * Fixed block scoped functions. + * Improved `bin/6to5` path resolution. + * **New Feature** + * You can now trigger super setters in classes. Thanks [@kruppel](https://github.com/kruppel)! + * Add `resolveSourceMap` option. + * Better support and output for block scoping loops with labels. + +## 3.1.1 + + * **Polish** + * Drop `enumerable: false` clause from class method definitions as `enumerable` already defaults to `false`. + * **Bug Fix** + * Properly transform `XJSIdentifier` nodes referencing `this` into a `ThisExpression`. + +## 3.1.0 + + * **Breaking Change** + * [Make class methods unenumerable](https://esdiscuss.org/topic/classes-and-enumerability#content-61). + +## 3.0.16 + + * **Bug Fix** + * Don't ignore dynamic import specifiers. + * **Internal** + * Upgrade `regenerator-6to5`. + * **Polish** + * Use `Object.assign` in place of extends helper if it exists. + * Require individual `lodash` methods. Thanks [@stefanpenner](https://github.com/stefanpenner)! + +## 3.0.15 + + * **Bug Fix** + * Use `debug/node` instead of `debug` to avoid browserify using the browser version that references `window`. + +## 3.0.14 + + * **New Feature** + * Add `--optional` argument to `6to5-node`. + * **Bug Fix** + * Fix bug in `asyncToGenerator` helper where it was incorrectly calling generator iterator functions. + +## 3.0.13 + + * **Bug Fix** + * Fix modules loose mode using `modules` instead of `es6.modules`. + +## 3.0.12 + + * **Internal** + * Add internal debug messages. + * **Bug Fix** + * Add `noScope` option to `traverse.clearProperties`. + +## 3.0.11 + + * **Bug Fix** + * Fix `ast-types` `RestElement` definition. + * Make `es6.forOf` loose mode more versatile and support destructuring. + +## 3.0.10 + + * **Bug Fix** + * In `types.getIds` make sure the `declaration` inside of `ExportDeclaration` is actually a `Declaration`. + +## 3.0.9 + + * **Bug Fix** + * Make `t.isReferenced` more powerful, actually take into consideration all contexts were identifier nodes aren't actually references. + * Don't camelcase underscores when converting a string to a valid identifier. + +## 3.0.8 + + * **Bug Fix** + * Split up default function declaration exports due to regenerator destroying the parent export declaration. + +## 3.0.7 + + * **Internal** + * Upgrade `core-js` to `0.4.9`. + * **Bug Fix** + * Add id to function express scope tracking. + +## 3.0.6 + + * **Bug Fix** + * Fix block scope variable tracking stopping whenever it hits a new scope. + * Fix block scope variable tracking breaking on all block statement scopes that have a for loop parent. + +## 3.0.5 + + * **Internal** + * More reliable default parameter scope. + +## 3.0.4 + + * **Bug Fix** + * Remove traversal stops from block scope tracking. + +## 3.0.3 + + * **Internal** + * Ignore options starting with `_`. + +## 3.0.2 + + * **Internal** + * Add common plugin options to valid options list. + +## 3.0.1 + + * **Internal** + * Downgrade `kexec` as `1.1.0` throws compilation errors. + +## 3.0.0 + + * **Polish** + * Generated code autoindentation. + * Moved global uid registry to a scope registry resulting in nicer uids. + * `this` is now illegal in the top level scope when using the default `useStrict` transformer. + * New `asyncToGenerator` helper that's much more compact. + * Throw errors on unknown options. + * More reliable default parameter scope. + * Helpers are now compact and have no newlines. + * **Internal** + * Rewritten a lot of the internals to much simpler. + * Removed TDZ from default parameters as it was very wonky and unreliable. + * Upgrade `core-js` to `0.4.6`. + * Upgrade `acorn-6to5`. + * JSX support is now on-par with react-tools/esprima. + * Shorthand destructuring. + * **Bug Fix** + * Generators now work flawlessly with any parameter transformers. + * Optional async function transformers should not name their functions. + * Remove `unlink` event watching in `bin/6to5`. + * Fix regenerator variable declarations being incorrectly hoisted breaking scope. + * Transformers that attempted to simplify expressions that had no consequence now take into account whether it's one of the last statements/expressions in the script. + * **New Feature** + * New `selfContained` transformer. + * New `undeclaredVariableCheck` optional transformer. + * Added `--blacklist` and `--whitelist` options to `6to5-node`. + * **Breaking Change** + * Caching is now always enabled for the require hook. It also now no longer caches require resolutions. + * Bare `super();` only works inside of constructors. + * Removed the optional runtime in favor of the `selfContained` transformer. + * This shorthand has been removed from the playground. + * `6to5/polyfill` can now only be required **once**. + * **CLI** + * `--indent` option has been removed. + * `--include-regenerator` option has been removed. + * `--amd-modules-id` option has been removed, use `--module-ids` instead. + * **Options** + * `amdModuleIds` option has been removed, use `moduleIds` instead. + * `includeRegenerator` has been removed. + * `ignoreRegex` fallback has now been dropped from the require hook. `register(/foo/);`, `register({ ignoreRegex: /foo/ })` -> `register({ ignore: /foo/ })`. + * **Modules** + * Module interop now only collapses to `module.exports` when there's a **single** export that's default. + * Imports and exports are now illegal anywhere except the root level by default. Set `modules` to [loose mode](http://6to5.org/docs/usage/loose) to allow them everywhere. + * **Transformers** + * Optional fast transformer backwards compatibility support has been removed. Use [loose mode](https://6to5.org/docs/usage/loose). + * Removed the `coreAliasing` transformer in favor of `selfContained`. + * Renamed transformers: + * `specNoForInOfAssignment` -> `validation.noForInOfAssignment` + * `specSetters` -> `validation.setters` + * `specBlockScopedFunctions` -> `spec.blockScopedFunctions` + * `malletOperator` -> `playground.malletOperator` + * `methodBinding` -> `playground.methodBinding` + * `memoizationOperator` -> `playground.memoizationOperator` + * `objectGetterMemoization` -> `playground.objectGetterMemoization` + * `modules` -> `es6.modules` + * `propertyNameShorthand` -> `es6.properties.shorthand` + * `arrayComprehension` -> `es7.comprehensions` + * `generatorComprehension` -> `es7.comprehensions` + * `arrowFunctions` -> `es6.arrowFunctions` + * `classes` -> `es6.classes` + * `objectSpread` -> `es7.objectSpread` + * `exponentiationOperator` -> `es7.exponentiationOperator` + * `spread` -> `es6.spread` + * `templateLiterals` -> `es6.templateLiterals` + * `propertyMethodAssignment` -> `es6.properties.shorthand` + * `computedPropertyNames` -> `es6.properties.computed` + * `defaultParameters` -> `es6.parameters.default` + * `restParameters` -> `es6.parameters.rest` + * `destructuring` -> `es6.destructuring` + * `forOf` -> `es6.forOf` + * `unicodeRegex` -> `es6.unicodeRegex` + * `abstractReferences` -> `es7.abstractReferences` + * `constants` -> `es6.constants` + * `letScoping` -> `es6.blockScoping` + * `blockScopingTDZ` -> `es6.blockScopingTDZ` + * `generators` -> `regenerator` + * `protoToAssign` -> `spec.protoToAssign` + * `typeofSymbol` -> `spec.typeofSymbol` + * `coreAliasing` -> `selfContained` + * `undefinedToVoid` -> `spec.undefinedToVoid` + * `undeclaredVariableCheck` -> `validation.undeclaredVariableCheck` + * `specPropertyLiterals` -> `minification.propertyLiterals` + * `specMemberExpressionLiterals` -> `minification.memberExpressionLiterals` + +## 2.13.7 + + * **Bug Fix** + * Don't realias variables that are already declared in optional `coreAliasing` transformer. + +## 2.13.6 + + * **Bug Fix** + * Add `NewExpression` as a valid parent for parentheses insertion for `ConditionalExpression`. + +## 2.13.5 + + * **Bug Fix** + * Allow rest parameters to be destructuring patterns. + * **Internal** + * Upgrade `kexec` to `1.1.0`. + +## 2.13.4 + + * **Bug Fix** + * Fix ordering of destructuring and default params. + * Fix loop body scope. + * Fix `for...of` transformation not retaining it's scope. + * Add destructuring assignment support to scope tracking. + * **Polish** + * More reliable newlines for pretty printing variable declarations. + +## 2.13.3 + + * **Internal** + * Add `coverage` and `vendor` to npmignore. + +## 2.13.2 + + * **Bug Fix** + * Fix `super` inside of nested functions. + * **Internal** + * Move let scoping TDZ into a separate transformer until it's more solid. + * Use `process.stdin.write` instead of `console.log` in `bin` to avoid sprintfification. + +## 2.13.1 + + * **New Feature** + * Temporal dead zone for block binding. + +## 2.13.0 + + * **New Feature** + * Block scoped functions. + * Add `--loose all` option. + * Add playground mallet operator thanks to [@jridgewell](https://github.com/jridgewell). + * **Bug Fix** + * Rewrote large parts of the let scoping transformer. Now passes all known tests. + * **Internal** + * Even more optimisations thanks to the awesome [@gaearon](https://github.com/gaearon). + * Upgrade `acorn-6to5`. + * Fixes exponentation operator thanks to [@charliesome](https://github.com/charliesome). + * Fix flow optional parameters with types. + * Upgrade `chokidar` to `0.12.6`. + * Upgrade `commander` to `2.6.0`. + * Upgrade `core-js` to `0.4.5`. + * Upgrade `estraverse` to `1.9.1`. + * Upgrade `jshint` to `2.5.11`. + * Upgrade `regenerator` to `0.8.9`. + * Upgrade `regexpu` to `1.0.0`. + * Upgrade `source-map` to `0.1.43`. + * Upgrade `source-map-support` to `0.2.9`. + * Upgrade `browserify` to `8.1.1`. + * Upgrade `chai` to `1.10.0`. + * Upgrade `istanbul` to `0.3.5`. + * Upgrade `mocha` to `2.1.0`. + * Upgrade `uglify-js` to `2.4.16`. + +## 2.12.6 + + * **Bug Fix** + * Add missing flow type traversal keys. + +## 2.12.5 + + * **Internal** + * Fix incorrect `for...in` loop still causing `ember-script` issues. + +## 2.12.4 + + * **Polish** + * Rest parameters now allocate the array before populating. + * **Internal** + * `for...in` loops have been changed to optimized `for` loops - better performance and no enumeration of protoype keys. + * Parts of the code generator have now been optimized thanks to [gaearon](https://github.com/gaearon). + +## 2.12.3 + + * **Spec Compliancy** + * Optional `typeof` transformer checks for `undefined` before passing it to the helper. + * Class methods are now named. + +## 2.12.2 + + * **Internal** + * Exclude nodes in function parameters and catch clauses from `isReferenced` check. + +## 2.12.1 + + * **Internal** + * Add `.jsx` to list of allowed extensions. + +## 2.12.0 + + * **Bug Fix** + * Support non-string JSX literals. + * **New Feature** + * Loose mode for some transformers that enables non-spec behavior. + * **Internal** + * Uglify `--mangle sort` has been added to the build script, cutting minified scripts in half. + +## 2.11.4 + + * **Internal** + * Make all dependency versions fixed. + +## 2.11.3 + + * **Bug Fix** + * Allow a string to be passed as the `optional` option. + +## 2.11.2 + + * **Bug Fix** + * Support esprima-style catch clause handlers. + * **Polish** + * Don't print a stacktrace for syntax errors in the CLI. + +## 2.11.1 + + * **Bug Fix** + * Remove stray `console.log` outputting debug code. + * Remove `Dict` from `coreAliasing`. + +## 2.11.0 + + * **Bug Fix** + * Fix unnecessary IIFE in default parameters on method calls. + * Add support for supers inside of closures. + * **New Feature** + * Add `--keep-module-id-extensions`/`keepModuleIdExtensions` option to keep extensions in module ids. + * **Polish** + * Special case single argument spread properties in `super` inside classes. + * Don't use a variable declaration for class declaration IFFE. + * Rename `inherits` helper parameters. + * `coreAliasing` transformer now aliases `Promise`, `Set`, `Map` and more. Thanks [@AluisioASG](https://github.com/AluisioASG). + +## 2.10.1 + + * **Internal** + * Upgrade `core-js` to `0.4.4`. + * **New Feature** + * Added `--include-regenerator` option to CLI and `includeRegenerator` option to API that includes the regenerator runtime if necessary. + +## 2.10.0 + + * **New Feature** + * Add `classesFastSuper` optional transformer that doesn't support parent getters and prototype changing. + * Add `forOfFast` transformer that speeds up `for...of` on arrays but produces more code. + * Add `--react-compat` to `bin/6to5`. + * **Spec Compliancy** + * Disallow setters without a single parameter. + * Add `configurable` and `writable` to defined properties. + * Use define instead of assignment for class methods. + * **Polish** + * Fix bin name in `6to5-node --help`. + * Fix shorthand `--whitelist` name in `bin/6to5`. + * **Internal** + * Hot code optimisation of traversal etc thanks to [gaearon](https://github.com/gaearon). + +## 2.9.4 + + * **Bug Fix** + * Support `UpdateExpression`s as `MemberExpression` objects. + +## 2.9.3 + + * **Bug Fix** + * Remove `exportsWildcard` helper in favor of `defaults`. + +## 2.9.2 + + * **Bug Fix** + * Pass `exports` to `exportWildcard` helper to allow for use inside the optional runtime. + +## 2.9.1 + + * **Bug Fix** + * Fix runtime generator breaking the helper inclusion loop. + +## 2.9.0 + + * **Internal** + * Upgrade `acorn-6to5`. + * Now supports destructuring shorthand properties. + +## 2.8.1 + + * **Bug Fix** + * Fix computed accessors on object literals. + +## 2.8.0 + + * **New Feature** + * Add `commonStrict`, `amdStrict` and `umdStrict` module formatters that remove `module.exports` interop assignment. + * Add `--indent` option to the 6to5 CLI. + +## 2.7.4 + + * **Polish** + * Inherit assignments from their declaration in destructuring. + * Properly align multi-declarator variable declarations. + +## 2.7.3 + + * **Polish** + * Indent and add newlines to `React.createElement` calls in `react` transformer. + * Remove `Object.assign` calls and replace it with an `extends` helper. + +## 2.7.1 + + * **New Feature** + * Expose `version` on browser and node API. + * **Internal** + * Upgrade `core-js` to 0.4.1 + +## 2.7.0 + + * **Spec Compliancy** + * Disallow reassignments of imports. + * **New Feature** + * `reactCompat` option to enable pre-v0.12 react components. + +## 2.6.3 + + * **Bug Fix** + * Fix 2.6.0 regression caused by faulty export default from a source handling. + +## 2.6.2 + + * **Bug Fix** + * Fix rest parameter keys when on functions with params. + +## 2.6.1 + + * **Bug Fix** + * Fix rest parameter arguments key. + +## 2.6.0 + + * **Bug Fix** + * Better handling of number literal property keys. + * Handle `NewExpression` paren insertion edegcases better. + * **Internal** + * Fix incorrect AST node `identifier("this")`. + * Better `toIdentifier` method that handles reserved words. + * Upgrade `acorn-6to5`. + * Fix exponentiation operator precedence. + * Fix line terminators after async contextual keywords. + * Add semicolons as class elements inside of a class body. + * Upgrade to `core-js` 4.0.0. + * Upgrade to `regenerator` 0.8.3. + * Fix non-loop labeled statements. + * **New Feature** + * Basic destructuring defaults + * Add `.es` to list of supported extensions. + * Add optional `typeofSymbol` transformer. + * Use a `for` loop for rest parameters instead of `Array.prototype.slice`. + * **Polish** + * Move `"use strict";` to inside module bodies instead of at the top of the file. + * Better handling of dynamic imports. + * **Spec Compliancy** + * Class inheritance now has a `function` or `null` type check. + * Add `interopRequireWildcard` around wildcard imports and exports to handle non-object exports. + +## 2.5.0 + + * Remove `noDuplicateProperties` transformer. + * Better generated UIDs based on nodes. + * Default parameters now use `arguments[i]`, conditionals and variable declarations instead of using long-form if statements. + +## 2.4.10 + + * Upgrade `acorn-6to5`. + +## 2.4.9 + + * Upgrade `acorn-6to5`. + * Add optional `protoToAssign` transformer. + * Fix missing properties from computed property keys. + * Make ES7 comprehensions `let` variables. + +## 2.4.8 + + * Make `require("6to5/register")` work with browserify - [#370](https://github.com/6to5/6to5/pull/370). Thanks [@hughsk](https://github.com/hughsk)! + +## 2.4.7 + + * Upgrade `acorn-6to5`. + +## 2.4.6 + + * Move `coreAliasing` and `undefinedToVoid` transformers down to catch `moduleFormatter` transforms. + +## 2.4.5 + + * Avoid printing comments if they've already been output. + +## 2.4.4 + + * Add `module` type to browser build ` - +