1
0
Fork 0
mirror of https://github.com/jashkenas/coffeescript.git synced 2022-11-09 12:23:24 -05:00
* 2.0.1 changelog

* Version bump to 2.0.1
This commit is contained in:
Geoffrey Booth 2017-09-26 20:16:16 -07:00 committed by GitHub
parent 9df1457c55
commit 0b0a9ef2c4
25 changed files with 105 additions and 80 deletions

View file

@ -862,19 +862,17 @@ same directory as the <code>.js</code> file.</p>
<a class="pilcrow" href="#section-26">&#182;</a> <a class="pilcrow" href="#section-26">&#182;</a>
</div> </div>
<p>The user has requested that the CoffeeScript compiler also transpile <p>The user has requested that the CoffeeScript compiler also transpile
via Babel. We use Babel as an <code>optionalDependency</code>; see via Babel. We dont include Babel as a dependency because we want to
<a href="https://docs.npmjs.com/files/package.json#optionaldependencies">https://docs.npmjs.com/files/package.json#optionaldependencies</a>.</p> avoid dependencies in general, and most users probably wont be relying
on us to transpile for them; we assume most users will probably either
run CoffeeScripts output without transpilation (modern Node or evergreen
browsers) or use a proper build chain like Gulp or Webpack.</p>
</div> </div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">try</span> <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">try</span>
<span class="hljs-built_in">require</span> <span class="hljs-string">'babel-core'</span> <span class="hljs-built_in">require</span> <span class="hljs-string">'babel-core'</span>
<span class="hljs-keyword">catch</span> <span class="hljs-keyword">catch</span></pre></div></div>
<span class="hljs-built_in">console</span>.error <span class="hljs-string">'''
To use --transpile, you must have Babel installed and configured.
See http://coffeescript.org/#transpilation
'''</span>
process.exit <span class="hljs-number">1</span></pre></div></div>
</li> </li>
@ -885,14 +883,28 @@ via Babel. We use Babel as an <code>optionalDependency</code>; see
<div class="pilwrap "> <div class="pilwrap ">
<a class="pilcrow" href="#section-27">&#182;</a> <a class="pilcrow" href="#section-27">&#182;</a>
</div> </div>
<p>Were giving Babel only a string, not a filename or path to a file, so <p>Give appropriate instructions depending on whether <code>coffee</code> was run
it doesnt know where to search to find a <code>.babelrc</code> file or a <code>babel</code> locally or globally.</p>
key in a <code>package.json</code>. So if <code>opts.transpile</code> is an object, use that
as Babels options; otherwise figure out what the options should be.</p>
</div> </div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">unless</span> <span class="hljs-keyword">typeof</span> opts.transpile <span class="hljs-keyword">is</span> <span class="hljs-string">'object'</span></pre></div></div> <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">if</span> <span class="hljs-built_in">require</span>.resolve(<span class="hljs-string">'.'</span>).indexOf(process.cwd()) <span class="hljs-keyword">is</span> <span class="hljs-number">0</span>
<span class="hljs-built_in">console</span>.error <span class="hljs-string">'''
To use --transpile, you must have babel-core installed:
npm install --save-dev babel-core
And you must save options to configure Babel in one of the places it looks to find its options.
See http://coffeescript.org/#transpilation
'''</span>
<span class="hljs-keyword">else</span>
<span class="hljs-built_in">console</span>.error <span class="hljs-string">'''
To use --transpile with globally-installed CoffeeScript, you must have babel-core installed globally:
npm install --global babel-core
And you must save options to configure Babel in one of the places it looks to find its options, relative to the file being compiled or to the current folder.
See http://coffeescript.org/#transpilation
'''</span>
process.exit <span class="hljs-number">1</span>
opts.transpile = {} <span class="hljs-keyword">unless</span> <span class="hljs-keyword">typeof</span> opts.transpile <span class="hljs-keyword">is</span> <span class="hljs-string">'object'</span></pre></div></div>
</li> </li>
@ -903,46 +915,14 @@ as Babels options; otherwise figure out what the options should be.</p>
<div class="pilwrap "> <div class="pilwrap ">
<a class="pilcrow" href="#section-28">&#182;</a> <a class="pilcrow" href="#section-28">&#182;</a>
</div> </div>
<p>Find the options based on the path to the file being compiled.</p> <p>Pass a reference to Babel into the compiler, so that the transpile option
is available for the CLI. We need to do this so that tools like Webpack
can <code>require(&#39;coffeescript&#39;)</code> and build correctly, without trying to
require Babel.</p>
</div> </div>
<div class="content"><div class='highlight'><pre><span class="hljs-function"> <span class="hljs-title">cantFindOptions</span> = -&gt;</span> <div class="content"><div class='highlight'><pre> opts.transpile.transpile = CoffeeScript.transpile</pre></div></div>
<span class="hljs-built_in">console</span>.error <span class="hljs-string">'''
To use the transpile option, there must be a .babelrc file
(or a package.json file with a "babel" key) in the path of the file
to be compiled, or in the path of the current working directory.
If you are compiling a string via the Node API, the transpile option
must be an object with the options to pass to Babel.
See http://coffeescript.org/#transpilation
'''</span>
process.exit <span class="hljs-number">1</span>
checkPath = <span class="hljs-keyword">if</span> filename
path.dirname filename
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> base
base
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> process?
process.cwd()
<span class="hljs-keyword">else</span>
cantFindOptions()
<span class="hljs-keyword">loop</span>
<span class="hljs-keyword">try</span>
opts.transpile = JSON.parse fs.readFileSync path.join(checkPath, <span class="hljs-string">'.babelrc'</span>), <span class="hljs-string">'utf-8'</span>
<span class="hljs-keyword">break</span>
<span class="hljs-keyword">catch</span>
<span class="hljs-keyword">try</span>
packageJson = JSON.parse fs.readFileSync(path.join(checkPath, <span class="hljs-string">'package.json'</span>), <span class="hljs-string">'utf-8'</span>)
<span class="hljs-keyword">if</span> packageJson.babel?
opts.transpile = packageJson.babel
<span class="hljs-keyword">break</span>
<span class="hljs-keyword">if</span> checkPath <span class="hljs-keyword">is</span> path.dirname checkPath <span class="hljs-comment"># Weve reached the root.</span>
cantFindOptions()
<span class="hljs-keyword">break</span>
<span class="hljs-keyword">else</span>
checkPath = path.dirname checkPath</pre></div></div>
</li> </li>
@ -953,14 +933,15 @@ as Babels options; otherwise figure out what the options should be.</p>
<div class="pilwrap "> <div class="pilwrap ">
<a class="pilcrow" href="#section-29">&#182;</a> <a class="pilcrow" href="#section-29">&#182;</a>
</div> </div>
<p>Pass a reference to Babel into the compiler, so that the transpile option <p>Babel searches for its options (a <code>.babelrc</code> file, a <code>.babelrc.js</code> file,
is available for the CLI. We need to do this so that tools like Webpack a <code>package.json</code> file with a <code>babel</code> key, etc.) relative to the path
can <code>require(&#39;coffeescript&#39;)</code> and build correctly, without trying to given to it in its <code>filename</code> option. Make sure we have a path to pass
require Babel.</p> along.</p>
</div> </div>
<div class="content"><div class='highlight'><pre> opts.transpile.transpile = CoffeeScript.transpile <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">unless</span> opts.transpile.filename
opts.transpile.filename = filename <span class="hljs-keyword">or</span> path.resolve(base <span class="hljs-keyword">or</span> process.cwd(), <span class="hljs-string">'&lt;anonymous&gt;'</span>)
<span class="hljs-keyword">else</span> <span class="hljs-keyword">else</span>
opts.transpile = <span class="hljs-literal">no</span> opts.transpile = <span class="hljs-literal">no</span>

View file

@ -3641,13 +3641,25 @@ exports.Class = <span class="hljs-class"><span class="hljs-keyword">class</span>
<a class="pilcrow" href="#section-148">&#182;</a> <a class="pilcrow" href="#section-148">&#182;</a>
</div> </div>
<p>Add an expression to the class initializer</p> <p>Add an expression to the class initializer</p>
<p>NOTE Currently, only methods and static methods are valid in ES class initializers. <p>This is the key method for determining whether an expression in a class
When additional expressions become valid, this method should be updated to handle them.</p> body should appear in the initializer or the executable body. If the given
<code>node</code> is valid in a class body the method will return a (new, modified,
or identical) node for inclusion in the class initializer, otherwise
nothing will be returned and the node will appear in the executable body.</p>
<p>At time of writing, only methods (instance and static) are valid in ES
class initializers. As new ES class features (such as class fields) reach
Stage 4, this method will need to be updated to support them. We
additionally allow <code>PassthroughLiteral</code>s (backticked expressions) in the
initializer as an escape hatch for ES features that are not implemented
(e.g. getters and setters defined via the <code>get</code> and <code>set</code> keywords as
opposed to the <code>Object.defineProperty</code> method).</p>
</div> </div>
<div class="content"><div class='highlight'><pre> addInitializerExpression: <span class="hljs-function"><span class="hljs-params">(node)</span> -&gt;</span> <div class="content"><div class='highlight'><pre> addInitializerExpression: <span class="hljs-function"><span class="hljs-params">(node)</span> -&gt;</span>
<span class="hljs-keyword">if</span> @validInitializerMethod node <span class="hljs-keyword">if</span> node.unwrapAll() <span class="hljs-keyword">instanceof</span> PassthroughLiteral
node
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> @validInitializerMethod node
@addInitializerMethod node @addInitializerMethod node
<span class="hljs-keyword">else</span> <span class="hljs-keyword">else</span>
<span class="hljs-literal">null</span></pre></div></div> <span class="hljs-literal">null</span></pre></div></div>

0
docs/v2/annotated-source/public/fonts/roboto-black.eot Executable file → Normal file
View file

0
docs/v2/annotated-source/public/fonts/roboto-black.ttf Executable file → Normal file
View file

View file

File diff suppressed because one or more lines are too long

View file

@ -645,7 +645,7 @@ div.CodeMirror-cursor {
<section id="overview"> <section id="overview">
<p><strong>CoffeeScript is a little language that compiles into JavaScript.</strong> Underneath that awkward Java-esque patina, JavaScript has always had a gorgeous heart. CoffeeScript is an attempt to expose the good parts of JavaScript in a simple way.</p> <p><strong>CoffeeScript is a little language that compiles into JavaScript.</strong> Underneath that awkward Java-esque patina, JavaScript has always had a gorgeous heart. CoffeeScript is an attempt to expose the good parts of JavaScript in a simple way.</p>
<p>The golden rule of CoffeeScript is: <em>“Its just JavaScript.”</em> The code compiles one-to-one into the equivalent JS, and there is no interpretation at runtime. You can use any existing JavaScript library seamlessly from CoffeeScript (and vice-versa). The compiled output is readable, pretty-printed, and tends to run as fast or faster than the equivalent handwritten JavaScript.</p> <p>The golden rule of CoffeeScript is: <em>“Its just JavaScript.”</em> The code compiles one-to-one into the equivalent JS, and there is no interpretation at runtime. You can use any existing JavaScript library seamlessly from CoffeeScript (and vice-versa). The compiled output is readable, pretty-printed, and tends to run as fast or faster than the equivalent handwritten JavaScript.</p>
<p><strong>Latest Version:</strong> <a href="https://github.com/jashkenas/coffeescript/tarball/2.0.0">2.0.0</a></p> <p><strong>Latest Version:</strong> <a href="https://github.com/jashkenas/coffeescript/tarball/2.0.1">2.0.1</a></p>
<blockquote class="uneditable-code-block"><pre><code class="language-bash"><span class="comment"># Install locally for a project:</span> <blockquote class="uneditable-code-block"><pre><code class="language-bash"><span class="comment"># Install locally for a project:</span>
npm install --save-dev coffeescript npm install --save-dev coffeescript
@ -4820,7 +4820,7 @@ The CoffeeScript logo is available in SVG for use in presentations.</li>
</section> </section>
<section id="annotated-source"> <section id="annotated-source">
<h2>Annotated Source</h2> <h2>Annotated Source</h2>
<p>You can browse the CoffeeScript 2.0.0 source in readable, annotated form <a href="annotated-source/">here</a>. You can also jump directly to a particular source file:</p> <p>You can browse the CoffeeScript 2.0.1 source in readable, annotated form <a href="annotated-source/">here</a>. You can also jump directly to a particular source file:</p>
<ul> <ul>
<li><a href="annotated-source/grammar.html">Grammar Rules — src/grammar</a></li> <li><a href="annotated-source/grammar.html">Grammar Rules — src/grammar</a></li>
<li><a href="annotated-source/lexer.html">Lexing Tokens — src/lexer</a></li> <li><a href="annotated-source/lexer.html">Lexing Tokens — src/lexer</a></li>
@ -5448,10 +5448,19 @@ x = <span class="number">2</span> + <span class="number">2</span>
</section> </section>
<section id="changelog"> <section id="changelog">
<h2>Changelog</h2> <h2>Changelog</h2>
<div class="anchor" id="2.0.1"></div>
<h2 class="header">
<a href="https://github.com/jashkenas/coffeescript/compare/2.0.0...2.0.1">2.0.1</a>
<span class="timestamp"> &mdash; <time datetime="2017-09-26">September 26, 2017</time></span>
</h2><ul>
<li><code>babel-core</code> is no longer listed in <code>package.json</code>, even as an <code>optionalDependency</code>, to avoid it being automatically installed for most users. If you wish to use <code>--transpile</code>, simply install <code>babel-core</code> manually. See <a href="#transpilation">Transpilation</a>.</li>
<li><code>--transpile</code> now relies on Babel to find its options, i.e. the <code>.babelrc</code> file in the path of the file(s) being compiled. (Previously the CoffeeScript compiler was duplicating this logic, so nothing has changed from a users perspective.) This provides automatic support for additional ways to pass options to Babel in future versions, such as the <code>.babelrc.js</code> file coming in Babel 7.</li>
<li>Backticked expressions in a class body, outside any class methods, are now output in the JavaScript class body itself. This allows for passing through experimental JavaScript syntax like the <a href="https://github.com/tc39/proposal-class-fields">class fields proposal</a>, assuming your <a href="https://babeljs.io/docs/plugins/transform-class-properties/">transpiler supports it</a>.</li>
</ul>
<div class="anchor" id="2.0.0"></div> <div class="anchor" id="2.0.0"></div>
<h2 class="header"> <h2 class="header">
<a href="https://github.com/jashkenas/coffeescript/compare/2.0.0-beta5...2.0.0">2.0.0</a> <a href="https://github.com/jashkenas/coffeescript/compare/2.0.0-beta5...2.0.0">2.0.0</a>
<span class="timestamp"> &mdash; <time datetime="2017-09-17">September 17, 2017</time></span> <span class="timestamp"> &mdash; <time datetime="2017-09-18">September 18, 2017</time></span>
</h2><ul> </h2><ul>
<li>Added <code>--transpile</code> flag or <code>transpile</code> Node API option to tell the CoffeeScript compiler to pipe its output through Babel before saving or returning it; see <a href="#transpilation">Transpilation</a>. Also changed the <code>-t</code> short flag to refer to <code>--transpile</code> instead of <code>--tokens</code>.</li> <li>Added <code>--transpile</code> flag or <code>transpile</code> Node API option to tell the CoffeeScript compiler to pipe its output through Babel before saving or returning it; see <a href="#transpilation">Transpilation</a>. Also changed the <code>-t</code> short flag to refer to <code>--transpile</code> instead of <code>--tokens</code>.</li>
<li>Always populate source maps <code>sourcesContent</code> property.</li> <li>Always populate source maps <code>sourcesContent</code> property.</li>

View file

@ -3529,6 +3529,21 @@ test "#4591: super.x.y, super['x'].y", ->
eq 2, b.s eq 2, b.s
eq 2, b.r eq 2, b.r
test "#4464: backticked expressions in class body", ->
class A
`get x() { return 42; }`
class B
`get x() { return 42; }`
constructor: ->
@y = 84
a = new A
eq 42, a.x
b = new B
eq 42, b.x
eq 84, b.y
</script> </script>
<script type="text/x-coffeescript" class="test" id="cluster"> <script type="text/x-coffeescript" class="test" id="cluster">
# Cluster Module # Cluster Module

View file

@ -1,7 +1,15 @@
## Changelog ## Changelog
``` ```
releaseHeader('2017-09-17', '2.0.0', '2.0.0-beta5') releaseHeader('2017-09-26', '2.0.1', '2.0.0')
```
* `babel-core` is no longer listed in `package.json`, even as an `optionalDependency`, to avoid it being automatically installed for most users. If you wish to use `--transpile`, simply install `babel-core` manually. See [Transpilation](#transpilation).
* `--transpile` now relies on Babel to find its options, i.e. the `.babelrc` file in the path of the file(s) being compiled. (Previously the CoffeeScript compiler was duplicating this logic, so nothing has changed from a users perspective.) This provides automatic support for additional ways to pass options to Babel in future versions, such as the `.babelrc.js` file coming in Babel 7.
* Backticked expressions in a class body, outside any class methods, are now output in the JavaScript class body itself. This allows for passing through experimental JavaScript syntax like the [class fields proposal](https://github.com/tc39/proposal-class-fields), assuming your [transpiler supports it](https://babeljs.io/docs/plugins/transform-class-properties/).
```
releaseHeader('2017-09-18', '2.0.0', '2.0.0-beta5')
``` ```
* Added `--transpile` flag or `transpile` Node API option to tell the CoffeeScript compiler to pipe its output through Babel before saving or returning it; see [Transpilation](#transpilation). Also changed the `-t` short flag to refer to `--transpile` instead of `--tokens`. * Added `--transpile` flag or `transpile` Node API option to tell the CoffeeScript compiler to pipe its output through Babel before saving or returning it; see [Transpilation](#transpilation). Also changed the `-t` short flag to refer to `--transpile` instead of `--tokens`.

View file

@ -1,4 +1,4 @@
// Generated by CoffeeScript 2.0.0 // Generated by CoffeeScript 2.0.1
(function() { (function() {
// This **Browser** compatibility layer extends core CoffeeScript functions // This **Browser** compatibility layer extends core CoffeeScript functions
// to make things work smoothly when compiling code directly in the browser. // to make things work smoothly when compiling code directly in the browser.

View file

@ -1,4 +1,4 @@
// Generated by CoffeeScript 2.0.0 // Generated by CoffeeScript 2.0.1
(function() { (function() {
// `cake` is a simplified version of [Make](http://www.gnu.org/software/make/) // `cake` is a simplified version of [Make](http://www.gnu.org/software/make/)
// ([Rake](http://rake.rubyforge.org/), [Jake](https://github.com/280north/jake)) // ([Rake](http://rake.rubyforge.org/), [Jake](https://github.com/280north/jake))

View file

@ -1,4 +1,4 @@
// Generated by CoffeeScript 2.0.0 // Generated by CoffeeScript 2.0.1
(function() { (function() {
// CoffeeScript can be used both on the server, as a command-line compiler based // CoffeeScript can be used both on the server, as a command-line compiler based
// on Node.js/V8, or to run CoffeeScript directly in the browser. This module // on Node.js/V8, or to run CoffeeScript directly in the browser. This module

View file

@ -1,4 +1,4 @@
// Generated by CoffeeScript 2.0.0 // Generated by CoffeeScript 2.0.1
(function() { (function() {
// The `coffee` utility. Handles command-line compilation of CoffeeScript // The `coffee` utility. Handles command-line compilation of CoffeeScript
// into various forms: saved into `.js` files or printed to stdout // into various forms: saved into `.js` files or printed to stdout

View file

@ -1,4 +1,4 @@
// Generated by CoffeeScript 2.0.0 // Generated by CoffeeScript 2.0.1
(function() { (function() {
// The CoffeeScript parser is generated by [Jison](https://github.com/zaach/jison) // The CoffeeScript parser is generated by [Jison](https://github.com/zaach/jison)
// from this grammar file. Jison is a bottom-up parser generator, similar in // from this grammar file. Jison is a bottom-up parser generator, similar in

View file

@ -1,4 +1,4 @@
// Generated by CoffeeScript 2.0.0 // Generated by CoffeeScript 2.0.1
(function() { (function() {
// This file contains the common helper functions that we'd like to share among // This file contains the common helper functions that we'd like to share among
// the **Lexer**, **Rewriter**, and the **Nodes**. Merge objects, flatten // the **Lexer**, **Rewriter**, and the **Nodes**. Merge objects, flatten

View file

@ -1,4 +1,4 @@
// Generated by CoffeeScript 2.0.0 // Generated by CoffeeScript 2.0.1
(function() { (function() {
// Node.js Implementation // Node.js Implementation
var CoffeeScript, ext, fn, fs, helpers, i, len, path, ref, universalCompile, vm, var CoffeeScript, ext, fn, fs, helpers, i, len, path, ref, universalCompile, vm,

View file

@ -1,4 +1,4 @@
// Generated by CoffeeScript 2.0.0 // Generated by CoffeeScript 2.0.1
(function() { (function() {
// The CoffeeScript Lexer. Uses a series of token-matching regexes to attempt // The CoffeeScript Lexer. Uses a series of token-matching regexes to attempt
// matches against the beginning of the source code. When a match is found, // matches against the beginning of the source code. When a match is found,

View file

@ -1,4 +1,4 @@
// Generated by CoffeeScript 2.0.0 // Generated by CoffeeScript 2.0.1
(function() { (function() {
// `nodes.coffee` contains all of the node classes for the syntax tree. Most // `nodes.coffee` contains all of the node classes for the syntax tree. Most
// nodes are created as the result of actions in the [grammar](grammar.html), // nodes are created as the result of actions in the [grammar](grammar.html),

View file

@ -1,4 +1,4 @@
// Generated by CoffeeScript 2.0.0 // Generated by CoffeeScript 2.0.1
(function() { (function() {
var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments, repeat, var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments, repeat,
slice = [].slice; slice = [].slice;

View file

@ -1,4 +1,4 @@
// Generated by CoffeeScript 2.0.0 // Generated by CoffeeScript 2.0.1
(function() { (function() {
var CoffeeScript, Module, binary, child_process, ext, findExtension, fork, helpers, i, len, loadFile, path, ref; var CoffeeScript, Module, binary, child_process, ext, findExtension, fork, helpers, i, len, loadFile, path, ref;

View file

@ -1,4 +1,4 @@
// Generated by CoffeeScript 2.0.0 // Generated by CoffeeScript 2.0.1
(function() { (function() {
var CoffeeScript, addHistory, addMultilineHandler, fs, getCommandId, merge, nodeREPL, path, replDefaults, runInContext, sawSIGINT, updateSyntaxError, vm; var CoffeeScript, addHistory, addMultilineHandler, fs, getCommandId, merge, nodeREPL, path, replDefaults, runInContext, sawSIGINT, updateSyntaxError, vm;

View file

@ -1,4 +1,4 @@
// Generated by CoffeeScript 2.0.0 // Generated by CoffeeScript 2.0.1
(function() { (function() {
// The CoffeeScript language has a good deal of optional syntax, implicit syntax, // The CoffeeScript language has a good deal of optional syntax, implicit syntax,
// and shorthand syntax. This can greatly complicate a grammar and bloat // and shorthand syntax. This can greatly complicate a grammar and bloat

View file

@ -1,4 +1,4 @@
// Generated by CoffeeScript 2.0.0 // Generated by CoffeeScript 2.0.1
(function() { (function() {
// The **Scope** class regulates lexical scoping within CoffeeScript. As you // The **Scope** class regulates lexical scoping within CoffeeScript. As you
// generate code, you create a tree of scopes in the same shape as the nested // generate code, you create a tree of scopes in the same shape as the nested

View file

@ -1,4 +1,4 @@
// Generated by CoffeeScript 2.0.0 // Generated by CoffeeScript 2.0.1
(function() { (function() {
// Source maps allow JavaScript runtimes to match running JavaScript back to // Source maps allow JavaScript runtimes to match running JavaScript back to
// the original source code that corresponds to it. This can be minified // the original source code that corresponds to it. This can be minified

View file

@ -8,7 +8,7 @@
"compiler" "compiler"
], ],
"author": "Jeremy Ashkenas", "author": "Jeremy Ashkenas",
"version": "2.0.0", "version": "2.0.1",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=6" "node": ">=6"