diff --git a/.gitignore b/.gitignore
index 335f97c9..95813379 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
.DS_Store
/public/
resources/
+node_modules/
diff --git a/content/ec2-auto-scaling-with-multiple-instance-types-and-purchase-options/_index.md b/content/ec2-auto-scaling-with-multiple-instance-types-and-purchase-options/_index.md
index 6a6452c4..d9841f42 100644
--- a/content/ec2-auto-scaling-with-multiple-instance-types-and-purchase-options/_index.md
+++ b/content/ec2-auto-scaling-with-multiple-instance-types-and-purchase-options/_index.md
@@ -1,7 +1,7 @@
---
title: "EC2 Auto Scaling with multiple instance types and purchase options"
date: 2019-01-26T00:00:00Z
-weight: 80
+weight: 90
pre: "⁃ "
---
diff --git a/content/monte-carlo-on-ec2-spot-fleet/_index.md b/content/monte-carlo-on-ec2-spot-fleet/_index.md
index e96d4e7c..180cc463 100644
--- a/content/monte-carlo-on-ec2-spot-fleet/_index.md
+++ b/content/monte-carlo-on-ec2-spot-fleet/_index.md
@@ -1,7 +1,7 @@
---
title: "Run Monte Carlo Simulations on EC2 Spot Fleet"
date: 2019-01-24T09:05:54Z
-weight: 70
+weight: 80
pre: "⁃ "
---
diff --git a/content/monte-carlo-on-ec2-spot-fleet/lab4.md b/content/monte-carlo-on-ec2-spot-fleet/lab4.md
index c2192790..56e6147e 100644
--- a/content/monte-carlo-on-ec2-spot-fleet/lab4.md
+++ b/content/monte-carlo-on-ec2-spot-fleet/lab4.md
@@ -33,7 +33,7 @@ Please make sure you are using the Cloud9 environment created by the workshop Cl
1. On the terminal run the following commands. This will download the repository of code we will
use to build our image.
```
-git clone https://github.com/ruecarlo/ec2-spot-workshops.git
+git clone https://github.com/awslabs/ec2-spot-workshops.git
cd ec2-spot-workshops/workshops/monte-carlo-on-ec2-spot-fleet
```
diff --git a/static/config/monte-carlo-on-ec2-spot-fleet/monte-carlo-workshop.yaml b/static/config/monte-carlo-on-ec2-spot-fleet/monte-carlo-workshop.yaml
index 79ba969a..06c7d6e4 100644
--- a/static/config/monte-carlo-on-ec2-spot-fleet/monte-carlo-workshop.yaml
+++ b/static/config/monte-carlo-on-ec2-spot-fleet/monte-carlo-workshop.yaml
@@ -323,10 +323,11 @@ Resources:
ALLOCATION_ID=${workstationElasticIp.AllocationId}
aws ec2 associate-address --instance-id $INSTANCE_ID --allocation-id $ALLOCATION_ID
+ #Download node_modules
+ cd $WORKSHOPDIR/web
+ npm install
+
#Start Web and Jupyter
- # FIXME: Perhaps for consideration, instead of committing node_modules to github
- # this could run npm install before running the "node" process. The trade-off
- # is taht sometimes there might be glitches during labs when things may fail.
cd $WORKSHOPDIR
node web/bin/www > stdout.txt 2>&1 &
jupyter notebook --allow-root --no-browser --ip 0.0.0.0 --port ${JupyterPort} &
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/.bin/uglifyjs b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/.bin/uglifyjs
deleted file mode 120000
index fef3468b..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/.bin/uglifyjs
+++ /dev/null
@@ -1 +0,0 @@
-../uglify-js/bin/uglifyjs
\ No newline at end of file
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/.npmignore b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/.npmignore
deleted file mode 100644
index ebf8391d..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/.npmignore
+++ /dev/null
@@ -1,6 +0,0 @@
-component
-build
-node_modules
-test.js
-component.json
-.gitignore
\ No newline at end of file
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/.travis.yml b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/.travis.yml
deleted file mode 100644
index 87f8cd91..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/.travis.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-language: node_js
-node_js:
- - "0.10"
\ No newline at end of file
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/LICENSE b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/LICENSE
deleted file mode 100644
index 27cc9f37..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2014 Forbes Lindesay
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
\ No newline at end of file
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/index.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/index.js
deleted file mode 100644
index 23ea1a4e..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = isPromise;
-
-function isPromise(obj) {
- return obj && typeof obj.then === 'function';
-}
\ No newline at end of file
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/package.json b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/package.json
deleted file mode 100644
index a9f45a2e..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/package.json
+++ /dev/null
@@ -1,80 +0,0 @@
-{
- "_args": [
- [
- {
- "raw": "is-promise@~1",
- "scope": null,
- "escapedName": "is-promise",
- "name": "is-promise",
- "rawSpec": "~1",
- "spec": ">=1.0.0 <2.0.0",
- "type": "range"
- },
- "/Users/sdsteve/WebstormProjects/SpotLabNodejs/node_modules/transformers/node_modules/promise"
- ]
- ],
- "_from": "is-promise@>=1.0.0 <2.0.0",
- "_id": "is-promise@1.0.1",
- "_inCache": true,
- "_location": "/transformers/is-promise",
- "_npmUser": {
- "name": "forbeslindesay",
- "email": "forbes@lindeay.co.uk"
- },
- "_npmVersion": "1.4.3",
- "_phantomChildren": {},
- "_requested": {
- "raw": "is-promise@~1",
- "scope": null,
- "escapedName": "is-promise",
- "name": "is-promise",
- "rawSpec": "~1",
- "spec": ">=1.0.0 <2.0.0",
- "type": "range"
- },
- "_requiredBy": [
- "/transformers/promise"
- ],
- "_resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz",
- "_shasum": "31573761c057e33c2e91aab9e96da08cefbe76e5",
- "_shrinkwrap": null,
- "_spec": "is-promise@~1",
- "_where": "/Users/sdsteve/WebstormProjects/SpotLabNodejs/node_modules/transformers/node_modules/promise",
- "author": {
- "name": "ForbesLindesay"
- },
- "bugs": {
- "url": "https://github.com/then/is-promise/issues"
- },
- "dependencies": {},
- "description": "Test whether an object looks like a promises-a+ promise",
- "devDependencies": {
- "better-assert": "~0.1.0",
- "mocha": "~1.7.4"
- },
- "directories": {},
- "dist": {
- "shasum": "31573761c057e33c2e91aab9e96da08cefbe76e5",
- "tarball": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz"
- },
- "homepage": "https://github.com/then/is-promise",
- "license": "MIT",
- "main": "index.js",
- "maintainers": [
- {
- "name": "forbeslindesay",
- "email": "forbes@lindesay.co.uk"
- }
- ],
- "name": "is-promise",
- "optionalDependencies": {},
- "readme": "ERROR: No README data found!",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/then/is-promise.git"
- },
- "scripts": {
- "test": "mocha -R spec"
- },
- "version": "1.0.1"
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/readme.md b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/readme.md
deleted file mode 100644
index 6b30886b..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/is-promise/readme.md
+++ /dev/null
@@ -1,29 +0,0 @@
-
-# is-promise
-
- Test whether an object looks like a promises-a+ promise
-
- [![Build Status](https://img.shields.io/travis/then/is-promise/master.svg)](https://travis-ci.org/then/is-promise)
- [![Dependency Status](https://img.shields.io/gemnasium/then/is-promise.svg)](https://gemnasium.com/then/is-promise)
- [![NPM version](https://img.shields.io/npm/v/is-promise.svg)](https://www.npmjs.org/package/is-promise)
-
-## Installation
-
- $ npm install is-promise
-
-You can also use it client side via npm.
-
-## API
-
-```javascript
-var isPromise = require('is-promise');
-
-isPromise({then:function () {...}});//=>true
-isPromise(null);//=>false
-isPromise({});//=>false
-isPromise({then: true})//=>false
-```
-
-## License
-
- MIT
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/promise/.npmignore b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/promise/.npmignore
deleted file mode 100644
index 6a2b5b74..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/promise/.npmignore
+++ /dev/null
@@ -1,6 +0,0 @@
-components
-node_modules
-test
-.gitignore
-.travis.yml
-component.json
\ No newline at end of file
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/promise/Readme.md b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/promise/Readme.md
deleted file mode 100644
index ee16b2f3..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/promise/Readme.md
+++ /dev/null
@@ -1,85 +0,0 @@
-[![Build Status](https://travis-ci.org/then/promise.png)](https://travis-ci.org/then/promise)
-
-# promise
-
- This a bare bones [Promises/A+](http://promises-aplus.github.com/promises-spec/) implementation.
-
- It is designed to get the basics spot on correct, so that you can build extended promise implementations on top of it.
-
-## Installation
-
- Server:
-
- $ npm install promise
-
- Client:
-
- $ component install then/promise
-
-## API
-
- In the example below shows how you can load the promise library (in a way that works on both client and server). It then demonstrates creating a promise from scratch. You simply call `new Promise(fn)`. There is a complete specification for what is returned by this method in [Promises/A+](http://promises-aplus.github.com/promises-spec/).
-
-```javascript
-var Promise = require('promise');
-
-var promise = new Promise(function (resolve, reject) {
- get('http://www.google.com', function (err, res) {
- if (err) reject(err);
- else resolve(res);
- });
- });
-```
-
-## Extending Promises
-
- There are three options for extending the promises created by this library.
-
-### Inheritance
-
- You can use inheritance if you want to create your own complete promise library with this as your basic starting point, perfect if you have lots of cool features you want to add. Here is an example of a promise library called `Awesome`, which is built on top of `Promise` correctly.
-
-```javascript
-var Promise = require('promise');
-function Awesome(fn) {
- if (!(this instanceof Awesome)) return new Awesome(fn);
- Promise.call(this, fn);
-}
-Awesome.prototype = Object.create(Promise.prototype);
-Awesome.prototype.constructor = Awesome;
-
-//Awesome extension
-Awesome.prototype.spread = function (cb) {
- return this.then(function (arr) {
- return cb.apply(this, arr);
- })
-};
-```
-
- N.B. if you fail to set the prototype and constructor properly or fail to do Promise.call, things can fail in really subtle ways.
-
-### Wrap
-
- This is the nuclear option, for when you want to start from scratch. It ensures you won't be impacted by anyone who is extending the prototype (see below).
-
-```javascript
-function Uber(fn) {
- if (!(this instanceof Uber)) return new Uber(fn);
- var _prom = new Promise(fn);
- this.then = _prom.then;
-}
-
-Uber.prototype.spread = function (cb) {
- return this.then(function (arr) {
- return cb.apply(this, arr);
- })
-};
-```
-
-### Extending the Prototype
-
- In general, you should never extend the prototype of this promise implimenation because your extensions could easily conflict with someone elses extensions. However, this organisation will host a library of extensions which do not conflict with each other, so you can safely enable any of those. If you think of an extension that we don't provide and you want to write it, submit an issue on this repository and (if I agree) I'll set you up with a repository and give you permission to commit to it.
-
-## License
-
- MIT
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/promise/index.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/promise/index.js
deleted file mode 100644
index 8721f001..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/promise/index.js
+++ /dev/null
@@ -1,164 +0,0 @@
-var isPromise = require('is-promise')
-
-var nextTick
-if (typeof setImediate === 'function') nextTick = setImediate
-else if (typeof process === 'object' && process && process.nextTick) nextTick = process.nextTick
-else nextTick = function (cb) { setTimeout(cb, 0) }
-
-var extensions = []
-
-module.exports = Promise
-function Promise(fn) {
- if (!(this instanceof Promise)) {
- return fn ? new Promise(fn) : defer()
- }
- if (typeof fn !== 'function') {
- throw new TypeError('fn is not a function')
- }
-
- var state = {
- isResolved: false,
- isSettled: false,
- isFulfilled: false,
- value: null,
- waiting: [],
- running: false
- }
-
- function _resolve(val) {
- resolve(state, val);
- }
- function _reject(err) {
- reject(state, err);
- }
- this.then = function _then(onFulfilled, onRejected) {
- return then(state, onFulfilled, onRejected);
- }
-
- _resolve.fulfill = deprecate(_resolve, 'resolver.fulfill(x)', 'resolve(x)')
- _resolve.reject = deprecate(_reject, 'resolver.reject', 'reject(x)')
-
- try {
- fn(_resolve, _reject)
- } catch (ex) {
- _reject(ex)
- }
-}
-
-function resolve(promiseState, value) {
- if (promiseState.isResolved) return
- if (isPromise(value)) {
- assimilate(promiseState, value)
- } else {
- settle(promiseState, true, value)
- }
-}
-
-function reject(promiseState, reason) {
- if (promiseState.isResolved) return
- settle(promiseState, false, reason)
-}
-
-function then(promiseState, onFulfilled, onRejected) {
- return new Promise(function (resolve, reject) {
- function done(next, skipTimeout) {
- var callback = promiseState.isFulfilled ? onFulfilled : onRejected
- if (typeof callback === 'function') {
- function timeoutDone() {
- var val
- try {
- val = callback(promiseState.value)
- } catch (ex) {
- reject(ex)
- return next(true)
- }
- resolve(val)
- next(true)
- }
- if (skipTimeout) timeoutDone()
- else nextTick(timeoutDone)
- } else if (promiseState.isFulfilled) {
- resolve(promiseState.value)
- next(skipTimeout)
- } else {
- reject(promiseState.value)
- next(skipTimeout)
- }
- }
- promiseState.waiting.push(done)
- if (promiseState.isSettled && !promiseState.running) processQueue(promiseState)
- })
-}
-
-function processQueue(promiseState) {
- function next(skipTimeout) {
- if (promiseState.waiting.length) {
- promiseState.running = true
- promiseState.waiting.shift()(next, skipTimeout)
- } else {
- promiseState.running = false
- }
- }
- next(false)
-}
-
-function settle(promiseState, isFulfilled, value) {
- if (promiseState.isSettled) return
-
- promiseState.isResolved = promiseState.isSettled = true
- promiseState.value = value
- promiseState.isFulfilled = isFulfilled
-
- processQueue(promiseState)
-}
-
-function assimilate(promiseState, thenable) {
- try {
- promiseState.isResolved = true
- thenable.then(function (res) {
- if (isPromise(res)) {
- assimilate(promiseState, res)
- } else {
- settle(promiseState, true, res)
- }
- }, function (err) {
- settle(promiseState, false, err)
- })
- } catch (ex) {
- settle(promiseState, false, ex)
- }
-}
-
-Promise.use = function (extension) {
- extensions.push(extension)
-}
-
-
-function deprecate(method, name, alternative) {
- return function () {
- var err = new Error(name + ' is deprecated use ' + alternative)
- if (typeof console !== 'undefined' && console && typeof console.warn === 'function') {
- console.warn(name + ' is deprecated use ' + alternative)
- if (err.stack) console.warn(err.stack)
- } else {
- nextTick(function () {
- throw err
- })
- }
- method.apply(this, arguments)
- }
-}
-function defer() {
- var err = new Error('promise.defer() is deprecated')
- if (typeof console !== 'undefined' && console && typeof console.warn === 'function') {
- console.warn('promise.defer() is deprecated')
- if (err.stack) console.warn(err.stack)
- } else {
- nextTick(function () {
- throw err
- })
- }
- var resolver
- var promise = new Promise(function (res) { resolver = res })
- return {resolver: resolver, promise: promise}
-}
\ No newline at end of file
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/promise/package.json b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/promise/package.json
deleted file mode 100644
index 3c62f964..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/promise/package.json
+++ /dev/null
@@ -1,83 +0,0 @@
-{
- "_args": [
- [
- {
- "raw": "promise@~2.0",
- "scope": null,
- "escapedName": "promise",
- "name": "promise",
- "rawSpec": "~2.0",
- "spec": ">=2.0.0 <2.1.0",
- "type": "range"
- },
- "/Users/sdsteve/WebstormProjects/SpotLabNodejs/node_modules/transformers"
- ]
- ],
- "_from": "promise@>=2.0.0 <2.1.0",
- "_id": "promise@2.0.0",
- "_inCache": true,
- "_location": "/transformers/promise",
- "_npmUser": {
- "name": "forbeslindesay",
- "email": "forbes@lindesay.co.uk"
- },
- "_npmVersion": "1.2.10",
- "_phantomChildren": {},
- "_requested": {
- "raw": "promise@~2.0",
- "scope": null,
- "escapedName": "promise",
- "name": "promise",
- "rawSpec": "~2.0",
- "spec": ">=2.0.0 <2.1.0",
- "type": "range"
- },
- "_requiredBy": [
- "/transformers"
- ],
- "_resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz",
- "_shasum": "46648aa9d605af5d2e70c3024bf59436da02b80e",
- "_shrinkwrap": null,
- "_spec": "promise@~2.0",
- "_where": "/Users/sdsteve/WebstormProjects/SpotLabNodejs/node_modules/transformers",
- "author": {
- "name": "ForbesLindesay"
- },
- "bugs": {
- "url": "https://github.com/then/promise/issues"
- },
- "dependencies": {
- "is-promise": "~1"
- },
- "description": "Bare bones Promises/A+ implementation",
- "devDependencies": {
- "better-assert": "~1.0.0",
- "mocha-as-promised": "~1.2.1",
- "promises-aplus-tests": "*"
- },
- "directories": {},
- "dist": {
- "shasum": "46648aa9d605af5d2e70c3024bf59436da02b80e",
- "tarball": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz"
- },
- "homepage": "https://github.com/then/promise#readme",
- "license": "MIT",
- "main": "index.js",
- "maintainers": [
- {
- "name": "forbeslindesay",
- "email": "forbes@lindesay.co.uk"
- }
- ],
- "name": "promise",
- "optionalDependencies": {},
- "readme": "ERROR: No README data found!",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/then/promise.git"
- },
- "scripts": {
- "test": "mocha -R spec --timeout 200 --slow 99999"
- },
- "version": "2.0.0"
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/.npmignore b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/.npmignore
deleted file mode 100644
index 3dddf3f6..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/.npmignore
+++ /dev/null
@@ -1,2 +0,0 @@
-dist/*
-node_modules/*
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/.travis.yml b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/.travis.yml
deleted file mode 100644
index ddc9c4f9..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-language: node_js
-node_js:
- - 0.8
- - "0.10"
\ No newline at end of file
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/CHANGELOG.md b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/CHANGELOG.md
deleted file mode 100644
index 2e7ca5d2..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/CHANGELOG.md
+++ /dev/null
@@ -1,194 +0,0 @@
-# Change Log
-
-## 0.1.43
-
-* Performance improvements for `SourceMapGenerator` and `SourceNode`. See issue
- #148 for some discussion and issues #150, #151, and #152 for implementations.
-
-## 0.1.42
-
-* Fix an issue where `SourceNode`s from different versions of the source-map
- library couldn't be used in conjunction with each other. See issue #142.
-
-## 0.1.41
-
-* Fix a bug with getting the source content of relative sources with a "./"
- prefix. See issue #145 and [Bug 1090768](bugzil.la/1090768).
-
-* Add the `SourceMapConsumer.prototype.computeColumnSpans` method to compute the
- column span of each mapping.
-
-* Add the `SourceMapConsumer.prototype.allGeneratedPositionsFor` method to find
- all generated positions associated with a given original source and line.
-
-## 0.1.40
-
-* Performance improvements for parsing source maps in SourceMapConsumer.
-
-## 0.1.39
-
-* Fix a bug where setting a source's contents to null before any source content
- had been set before threw a TypeError. See issue #131.
-
-## 0.1.38
-
-* Fix a bug where finding relative paths from an empty path were creating
- absolute paths. See issue #129.
-
-## 0.1.37
-
-* Fix a bug where if the source root was an empty string, relative source paths
- would turn into absolute source paths. Issue #124.
-
-## 0.1.36
-
-* Allow the `names` mapping property to be an empty string. Issue #121.
-
-## 0.1.35
-
-* A third optional parameter was added to `SourceNode.fromStringWithSourceMap`
- to specify a path that relative sources in the second parameter should be
- relative to. Issue #105.
-
-* If no file property is given to a `SourceMapGenerator`, then the resulting
- source map will no longer have a `null` file property. The property will
- simply not exist. Issue #104.
-
-* Fixed a bug where consecutive newlines were ignored in `SourceNode`s.
- Issue #116.
-
-## 0.1.34
-
-* Make `SourceNode` work with windows style ("\r\n") newlines. Issue #103.
-
-* Fix bug involving source contents and the
- `SourceMapGenerator.prototype.applySourceMap`. Issue #100.
-
-## 0.1.33
-
-* Fix some edge cases surrounding path joining and URL resolution.
-
-* Add a third parameter for relative path to
- `SourceMapGenerator.prototype.applySourceMap`.
-
-* Fix issues with mappings and EOLs.
-
-## 0.1.32
-
-* Fixed a bug where SourceMapConsumer couldn't handle negative relative columns
- (issue 92).
-
-* Fixed test runner to actually report number of failed tests as its process
- exit code.
-
-* Fixed a typo when reporting bad mappings (issue 87).
-
-## 0.1.31
-
-* Delay parsing the mappings in SourceMapConsumer until queried for a source
- location.
-
-* Support Sass source maps (which at the time of writing deviate from the spec
- in small ways) in SourceMapConsumer.
-
-## 0.1.30
-
-* Do not join source root with a source, when the source is a data URI.
-
-* Extend the test runner to allow running single specific test files at a time.
-
-* Performance improvements in `SourceNode.prototype.walk` and
- `SourceMapConsumer.prototype.eachMapping`.
-
-* Source map browser builds will now work inside Workers.
-
-* Better error messages when attempting to add an invalid mapping to a
- `SourceMapGenerator`.
-
-## 0.1.29
-
-* Allow duplicate entries in the `names` and `sources` arrays of source maps
- (usually from TypeScript) we are parsing. Fixes github issue 72.
-
-## 0.1.28
-
-* Skip duplicate mappings when creating source maps from SourceNode; github
- issue 75.
-
-## 0.1.27
-
-* Don't throw an error when the `file` property is missing in SourceMapConsumer,
- we don't use it anyway.
-
-## 0.1.26
-
-* Fix SourceNode.fromStringWithSourceMap for empty maps. Fixes github issue 70.
-
-## 0.1.25
-
-* Make compatible with browserify
-
-## 0.1.24
-
-* Fix issue with absolute paths and `file://` URIs. See
- https://bugzilla.mozilla.org/show_bug.cgi?id=885597
-
-## 0.1.23
-
-* Fix issue with absolute paths and sourcesContent, github issue 64.
-
-## 0.1.22
-
-* Ignore duplicate mappings in SourceMapGenerator. Fixes github issue 21.
-
-## 0.1.21
-
-* Fixed handling of sources that start with a slash so that they are relative to
- the source root's host.
-
-## 0.1.20
-
-* Fixed github issue #43: absolute URLs aren't joined with the source root
- anymore.
-
-## 0.1.19
-
-* Using Travis CI to run tests.
-
-## 0.1.18
-
-* Fixed a bug in the handling of sourceRoot.
-
-## 0.1.17
-
-* Added SourceNode.fromStringWithSourceMap.
-
-## 0.1.16
-
-* Added missing documentation.
-
-* Fixed the generating of empty mappings in SourceNode.
-
-## 0.1.15
-
-* Added SourceMapGenerator.applySourceMap.
-
-## 0.1.14
-
-* The sourceRoot is now handled consistently.
-
-## 0.1.13
-
-* Added SourceMapGenerator.fromSourceMap.
-
-## 0.1.12
-
-* SourceNode now generates empty mappings too.
-
-## 0.1.11
-
-* Added name support to SourceNode.
-
-## 0.1.10
-
-* Added sourcesContent support to the customer and generator.
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/LICENSE b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/LICENSE
deleted file mode 100644
index ed1b7cf2..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/LICENSE
+++ /dev/null
@@ -1,28 +0,0 @@
-
-Copyright (c) 2009-2011, Mozilla Foundation and contributors
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-* Neither the names of the Mozilla Foundation nor the names of project
- contributors may be used to endorse or promote products derived from this
- software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/Makefile.dryice.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/Makefile.dryice.js
deleted file mode 100644
index d6fc26a7..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/Makefile.dryice.js
+++ /dev/null
@@ -1,166 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-var path = require('path');
-var fs = require('fs');
-var copy = require('dryice').copy;
-
-function removeAmdefine(src) {
- src = String(src).replace(
- /if\s*\(typeof\s*define\s*!==\s*'function'\)\s*{\s*var\s*define\s*=\s*require\('amdefine'\)\(module,\s*require\);\s*}\s*/g,
- '');
- src = src.replace(
- /\b(define\(.*)('amdefine',?)/gm,
- '$1');
- return src;
-}
-removeAmdefine.onRead = true;
-
-function makeNonRelative(src) {
- return src
- .replace(/require\('.\//g, 'require(\'source-map/')
- .replace(/\.\.\/\.\.\/lib\//g, '');
-}
-makeNonRelative.onRead = true;
-
-function buildBrowser() {
- console.log('\nCreating dist/source-map.js');
-
- var project = copy.createCommonJsProject({
- roots: [ path.join(__dirname, 'lib') ]
- });
-
- copy({
- source: [
- 'build/mini-require.js',
- {
- project: project,
- require: [ 'source-map/source-map-generator',
- 'source-map/source-map-consumer',
- 'source-map/source-node']
- },
- 'build/suffix-browser.js'
- ],
- filter: [
- copy.filter.moduleDefines,
- removeAmdefine
- ],
- dest: 'dist/source-map.js'
- });
-}
-
-function buildBrowserMin() {
- console.log('\nCreating dist/source-map.min.js');
-
- copy({
- source: 'dist/source-map.js',
- filter: copy.filter.uglifyjs,
- dest: 'dist/source-map.min.js'
- });
-}
-
-function buildFirefox() {
- console.log('\nCreating dist/SourceMap.jsm');
-
- var project = copy.createCommonJsProject({
- roots: [ path.join(__dirname, 'lib') ]
- });
-
- copy({
- source: [
- 'build/prefix-source-map.jsm',
- {
- project: project,
- require: [ 'source-map/source-map-consumer',
- 'source-map/source-map-generator',
- 'source-map/source-node' ]
- },
- 'build/suffix-source-map.jsm'
- ],
- filter: [
- copy.filter.moduleDefines,
- removeAmdefine,
- makeNonRelative
- ],
- dest: 'dist/SourceMap.jsm'
- });
-
- // Create dist/test/Utils.jsm
- console.log('\nCreating dist/test/Utils.jsm');
-
- project = copy.createCommonJsProject({
- roots: [ __dirname, path.join(__dirname, 'lib') ]
- });
-
- copy({
- source: [
- 'build/prefix-utils.jsm',
- 'build/assert-shim.js',
- {
- project: project,
- require: [ 'test/source-map/util' ]
- },
- 'build/suffix-utils.jsm'
- ],
- filter: [
- copy.filter.moduleDefines,
- removeAmdefine,
- makeNonRelative
- ],
- dest: 'dist/test/Utils.jsm'
- });
-
- function isTestFile(f) {
- return /^test\-.*?\.js/.test(f);
- }
-
- var testFiles = fs.readdirSync(path.join(__dirname, 'test', 'source-map')).filter(isTestFile);
-
- testFiles.forEach(function (testFile) {
- console.log('\nCreating', path.join('dist', 'test', testFile.replace(/\-/g, '_')));
-
- copy({
- source: [
- 'build/test-prefix.js',
- path.join('test', 'source-map', testFile),
- 'build/test-suffix.js'
- ],
- filter: [
- removeAmdefine,
- makeNonRelative,
- function (input, source) {
- return input.replace('define(',
- 'define("'
- + path.join('test', 'source-map', testFile.replace(/\.js$/, ''))
- + '", ["require", "exports", "module"], ');
- },
- function (input, source) {
- return input.replace('{THIS_MODULE}', function () {
- return "test/source-map/" + testFile.replace(/\.js$/, '');
- });
- }
- ],
- dest: path.join('dist', 'test', testFile.replace(/\-/g, '_'))
- });
- });
-}
-
-function ensureDir(name) {
- var dirExists = false;
- try {
- dirExists = fs.statSync(name).isDirectory();
- } catch (err) {}
-
- if (!dirExists) {
- fs.mkdirSync(name, 0777);
- }
-}
-
-ensureDir("dist");
-ensureDir("dist/test");
-buildFirefox();
-buildBrowser();
-buildBrowserMin();
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/README.md b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/README.md
deleted file mode 100644
index 59767aa3..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/README.md
+++ /dev/null
@@ -1,475 +0,0 @@
-# Source Map
-
-This is a library to generate and consume the source map format
-[described here][format].
-
-This library is written in the Asynchronous Module Definition format, and works
-in the following environments:
-
-* Modern Browsers supporting ECMAScript 5 (either after the build, or with an
- AMD loader such as RequireJS)
-
-* Inside Firefox (as a JSM file, after the build)
-
-* With NodeJS versions 0.8.X and higher
-
-## Node
-
- $ npm install source-map
-
-## Building from Source (for everywhere else)
-
-Install Node and then run
-
- $ git clone https://fitzgen@github.com/mozilla/source-map.git
- $ cd source-map
- $ npm link .
-
-Next, run
-
- $ node Makefile.dryice.js
-
-This should spew a bunch of stuff to stdout, and create the following files:
-
-* `dist/source-map.js` - The unminified browser version.
-
-* `dist/source-map.min.js` - The minified browser version.
-
-* `dist/SourceMap.jsm` - The JavaScript Module for inclusion in Firefox source.
-
-## Examples
-
-### Consuming a source map
-
- var rawSourceMap = {
- version: 3,
- file: 'min.js',
- names: ['bar', 'baz', 'n'],
- sources: ['one.js', 'two.js'],
- sourceRoot: 'http://example.com/www/js/',
- mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
- };
-
- var smc = new SourceMapConsumer(rawSourceMap);
-
- console.log(smc.sources);
- // [ 'http://example.com/www/js/one.js',
- // 'http://example.com/www/js/two.js' ]
-
- console.log(smc.originalPositionFor({
- line: 2,
- column: 28
- }));
- // { source: 'http://example.com/www/js/two.js',
- // line: 2,
- // column: 10,
- // name: 'n' }
-
- console.log(smc.generatedPositionFor({
- source: 'http://example.com/www/js/two.js',
- line: 2,
- column: 10
- }));
- // { line: 2, column: 28 }
-
- smc.eachMapping(function (m) {
- // ...
- });
-
-### Generating a source map
-
-In depth guide:
-[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/)
-
-#### With SourceNode (high level API)
-
- function compile(ast) {
- switch (ast.type) {
- case 'BinaryExpression':
- return new SourceNode(
- ast.location.line,
- ast.location.column,
- ast.location.source,
- [compile(ast.left), " + ", compile(ast.right)]
- );
- case 'Literal':
- return new SourceNode(
- ast.location.line,
- ast.location.column,
- ast.location.source,
- String(ast.value)
- );
- // ...
- default:
- throw new Error("Bad AST");
- }
- }
-
- var ast = parse("40 + 2", "add.js");
- console.log(compile(ast).toStringWithSourceMap({
- file: 'add.js'
- }));
- // { code: '40 + 2',
- // map: [object SourceMapGenerator] }
-
-#### With SourceMapGenerator (low level API)
-
- var map = new SourceMapGenerator({
- file: "source-mapped.js"
- });
-
- map.addMapping({
- generated: {
- line: 10,
- column: 35
- },
- source: "foo.js",
- original: {
- line: 33,
- column: 2
- },
- name: "christopher"
- });
-
- console.log(map.toString());
- // '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}'
-
-## API
-
-Get a reference to the module:
-
- // NodeJS
- var sourceMap = require('source-map');
-
- // Browser builds
- var sourceMap = window.sourceMap;
-
- // Inside Firefox
- let sourceMap = {};
- Components.utils.import('resource:///modules/devtools/SourceMap.jsm', sourceMap);
-
-### SourceMapConsumer
-
-A SourceMapConsumer instance represents a parsed source map which we can query
-for information about the original file positions by giving it a file position
-in the generated source.
-
-#### new SourceMapConsumer(rawSourceMap)
-
-The only parameter is the raw source map (either as a string which can be
-`JSON.parse`'d, or an object). According to the spec, source maps have the
-following attributes:
-
-* `version`: Which version of the source map spec this map is following.
-
-* `sources`: An array of URLs to the original source files.
-
-* `names`: An array of identifiers which can be referrenced by individual
- mappings.
-
-* `sourceRoot`: Optional. The URL root from which all sources are relative.
-
-* `sourcesContent`: Optional. An array of contents of the original source files.
-
-* `mappings`: A string of base64 VLQs which contain the actual mappings.
-
-* `file`: Optional. The generated filename this source map is associated with.
-
-#### SourceMapConsumer.prototype.computeColumnSpans()
-
-Compute the last column for each generated mapping. The last column is
-inclusive.
-
-#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition)
-
-Returns the original source, line, and column information for the generated
-source's line and column positions provided. The only argument is an object with
-the following properties:
-
-* `line`: The line number in the generated source.
-
-* `column`: The column number in the generated source.
-
-and an object is returned with the following properties:
-
-* `source`: The original source file, or null if this information is not
- available.
-
-* `line`: The line number in the original source, or null if this information is
- not available.
-
-* `column`: The column number in the original source, or null or null if this
- information is not available.
-
-* `name`: The original identifier, or null if this information is not available.
-
-#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition)
-
-Returns the generated line and column information for the original source,
-line, and column positions provided. The only argument is an object with
-the following properties:
-
-* `source`: The filename of the original source.
-
-* `line`: The line number in the original source.
-
-* `column`: The column number in the original source.
-
-and an object is returned with the following properties:
-
-* `line`: The line number in the generated source, or null.
-
-* `column`: The column number in the generated source, or null.
-
-#### SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)
-
-Returns all generated line and column information for the original source
-and line provided. The only argument is an object with the following
-properties:
-
-* `source`: The filename of the original source.
-
-* `line`: The line number in the original source.
-
-and an array of objects is returned, each with the following properties:
-
-* `line`: The line number in the generated source, or null.
-
-* `column`: The column number in the generated source, or null.
-
-#### SourceMapConsumer.prototype.sourceContentFor(source)
-
-Returns the original source content for the source provided. The only
-argument is the URL of the original source file.
-
-#### SourceMapConsumer.prototype.eachMapping(callback, context, order)
-
-Iterate over each mapping between an original source/line/column and a
-generated line/column in this source map.
-
-* `callback`: The function that is called with each mapping. Mappings have the
- form `{ source, generatedLine, generatedColumn, originalLine, originalColumn,
- name }`
-
-* `context`: Optional. If specified, this object will be the value of `this`
- every time that `callback` is called.
-
-* `order`: Either `SourceMapConsumer.GENERATED_ORDER` or
- `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to iterate over
- the mappings sorted by the generated file's line/column order or the
- original's source/line/column order, respectively. Defaults to
- `SourceMapConsumer.GENERATED_ORDER`.
-
-### SourceMapGenerator
-
-An instance of the SourceMapGenerator represents a source map which is being
-built incrementally.
-
-#### new SourceMapGenerator([startOfSourceMap])
-
-You may pass an object with the following properties:
-
-* `file`: The filename of the generated source that this source map is
- associated with.
-
-* `sourceRoot`: A root for all relative URLs in this source map.
-
-* `skipValidation`: Optional. When `true`, disables validation of mappings as
- they are added. This can improve performance but should be used with
- discretion, as a last resort. Even then, one should avoid using this flag when
- running tests, if possible.
-
-#### SourceMapGenerator.fromSourceMap(sourceMapConsumer)
-
-Creates a new SourceMapGenerator based on a SourceMapConsumer
-
-* `sourceMapConsumer` The SourceMap.
-
-#### SourceMapGenerator.prototype.addMapping(mapping)
-
-Add a single mapping from original source line and column to the generated
-source's line and column for this source map being created. The mapping object
-should have the following properties:
-
-* `generated`: An object with the generated line and column positions.
-
-* `original`: An object with the original line and column positions.
-
-* `source`: The original source file (relative to the sourceRoot).
-
-* `name`: An optional original token name for this mapping.
-
-#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)
-
-Set the source content for an original source file.
-
-* `sourceFile` the URL of the original source file.
-
-* `sourceContent` the content of the source file.
-
-#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])
-
-Applies a SourceMap for a source file to the SourceMap.
-Each mapping to the supplied source file is rewritten using the
-supplied SourceMap. Note: The resolution for the resulting mappings
-is the minimium of this map and the supplied map.
-
-* `sourceMapConsumer`: The SourceMap to be applied.
-
-* `sourceFile`: Optional. The filename of the source file.
- If omitted, sourceMapConsumer.file will be used, if it exists.
- Otherwise an error will be thrown.
-
-* `sourceMapPath`: Optional. The dirname of the path to the SourceMap
- to be applied. If relative, it is relative to the SourceMap.
-
- This parameter is needed when the two SourceMaps aren't in the same
- directory, and the SourceMap to be applied contains relative source
- paths. If so, those relative source paths need to be rewritten
- relative to the SourceMap.
-
- If omitted, it is assumed that both SourceMaps are in the same directory,
- thus not needing any rewriting. (Supplying `'.'` has the same effect.)
-
-#### SourceMapGenerator.prototype.toString()
-
-Renders the source map being generated to a string.
-
-### SourceNode
-
-SourceNodes provide a way to abstract over interpolating and/or concatenating
-snippets of generated JavaScript source code, while maintaining the line and
-column information associated between those snippets and the original source
-code. This is useful as the final intermediate representation a compiler might
-use before outputting the generated JS and source map.
-
-#### new SourceNode([line, column, source[, chunk[, name]]])
-
-* `line`: The original line number associated with this source node, or null if
- it isn't associated with an original line.
-
-* `column`: The original column number associated with this source node, or null
- if it isn't associated with an original column.
-
-* `source`: The original source's filename; null if no filename is provided.
-
-* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see
- below.
-
-* `name`: Optional. The original identifier.
-
-#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])
-
-Creates a SourceNode from generated code and a SourceMapConsumer.
-
-* `code`: The generated code
-
-* `sourceMapConsumer` The SourceMap for the generated code
-
-* `relativePath` The optional path that relative sources in `sourceMapConsumer`
- should be relative to.
-
-#### SourceNode.prototype.add(chunk)
-
-Add a chunk of generated JS to this source node.
-
-* `chunk`: A string snippet of generated JS code, another instance of
- `SourceNode`, or an array where each member is one of those things.
-
-#### SourceNode.prototype.prepend(chunk)
-
-Prepend a chunk of generated JS to this source node.
-
-* `chunk`: A string snippet of generated JS code, another instance of
- `SourceNode`, or an array where each member is one of those things.
-
-#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent)
-
-Set the source content for a source file. This will be added to the
-`SourceMap` in the `sourcesContent` field.
-
-* `sourceFile`: The filename of the source file
-
-* `sourceContent`: The content of the source file
-
-#### SourceNode.prototype.walk(fn)
-
-Walk over the tree of JS snippets in this node and its children. The walking
-function is called once for each snippet of JS and is passed that snippet and
-the its original associated source's line/column location.
-
-* `fn`: The traversal function.
-
-#### SourceNode.prototype.walkSourceContents(fn)
-
-Walk over the tree of SourceNodes. The walking function is called for each
-source file content and is passed the filename and source content.
-
-* `fn`: The traversal function.
-
-#### SourceNode.prototype.join(sep)
-
-Like `Array.prototype.join` except for SourceNodes. Inserts the separator
-between each of this source node's children.
-
-* `sep`: The separator.
-
-#### SourceNode.prototype.replaceRight(pattern, replacement)
-
-Call `String.prototype.replace` on the very right-most source snippet. Useful
-for trimming whitespace from the end of a source node, etc.
-
-* `pattern`: The pattern to replace.
-
-* `replacement`: The thing to replace the pattern with.
-
-#### SourceNode.prototype.toString()
-
-Return the string representation of this source node. Walks over the tree and
-concatenates all the various snippets together to one string.
-
-#### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])
-
-Returns the string representation of this tree of source nodes, plus a
-SourceMapGenerator which contains all the mappings between the generated and
-original sources.
-
-The arguments are the same as those to `new SourceMapGenerator`.
-
-## Tests
-
-[![Build Status](https://travis-ci.org/mozilla/source-map.png?branch=master)](https://travis-ci.org/mozilla/source-map)
-
-Install NodeJS version 0.8.0 or greater, then run `node test/run-tests.js`.
-
-To add new tests, create a new file named `test/test-.js`
-and export your test functions with names that start with "test", for example
-
- exports["test doing the foo bar"] = function (assert, util) {
- ...
- };
-
-The new test will be located automatically when you run the suite.
-
-The `util` argument is the test utility module located at `test/source-map/util`.
-
-The `assert` argument is a cut down version of node's assert module. You have
-access to the following assertion functions:
-
-* `doesNotThrow`
-
-* `equal`
-
-* `ok`
-
-* `strictEqual`
-
-* `throws`
-
-(The reason for the restricted set of test functions is because we need the
-tests to run inside Firefox's test suite as well and so the assert module is
-shimmed in that environment. See `build/assert-shim.js`.)
-
-[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit
-[feature]: https://wiki.mozilla.org/DevTools/Features/SourceMap
-[Dryice]: https://github.com/mozilla/dryice
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/assert-shim.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/assert-shim.js
deleted file mode 100644
index daa1a623..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/assert-shim.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-define('test/source-map/assert', ['exports'], function (exports) {
-
- let do_throw = function (msg) {
- throw new Error(msg);
- };
-
- exports.init = function (throw_fn) {
- do_throw = throw_fn;
- };
-
- exports.doesNotThrow = function (fn) {
- try {
- fn();
- }
- catch (e) {
- do_throw(e.message);
- }
- };
-
- exports.equal = function (actual, expected, msg) {
- msg = msg || String(actual) + ' != ' + String(expected);
- if (actual != expected) {
- do_throw(msg);
- }
- };
-
- exports.ok = function (val, msg) {
- msg = msg || String(val) + ' is falsey';
- if (!Boolean(val)) {
- do_throw(msg);
- }
- };
-
- exports.strictEqual = function (actual, expected, msg) {
- msg = msg || String(actual) + ' !== ' + String(expected);
- if (actual !== expected) {
- do_throw(msg);
- }
- };
-
- exports.throws = function (fn) {
- try {
- fn();
- do_throw('Expected an error to be thrown, but it wasn\'t.');
- }
- catch (e) {
- }
- };
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/mini-require.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/mini-require.js
deleted file mode 100644
index 0daf4537..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/mini-require.js
+++ /dev/null
@@ -1,152 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-/**
- * Define a module along with a payload.
- * @param {string} moduleName Name for the payload
- * @param {ignored} deps Ignored. For compatibility with CommonJS AMD Spec
- * @param {function} payload Function with (require, exports, module) params
- */
-function define(moduleName, deps, payload) {
- if (typeof moduleName != "string") {
- throw new TypeError('Expected string, got: ' + moduleName);
- }
-
- if (arguments.length == 2) {
- payload = deps;
- }
-
- if (moduleName in define.modules) {
- throw new Error("Module already defined: " + moduleName);
- }
- define.modules[moduleName] = payload;
-};
-
-/**
- * The global store of un-instantiated modules
- */
-define.modules = {};
-
-
-/**
- * We invoke require() in the context of a Domain so we can have multiple
- * sets of modules running separate from each other.
- * This contrasts with JSMs which are singletons, Domains allows us to
- * optionally load a CommonJS module twice with separate data each time.
- * Perhaps you want 2 command lines with a different set of commands in each,
- * for example.
- */
-function Domain() {
- this.modules = {};
- this._currentModule = null;
-}
-
-(function () {
-
- /**
- * Lookup module names and resolve them by calling the definition function if
- * needed.
- * There are 2 ways to call this, either with an array of dependencies and a
- * callback to call when the dependencies are found (which can happen
- * asynchronously in an in-page context) or with a single string an no callback
- * where the dependency is resolved synchronously and returned.
- * The API is designed to be compatible with the CommonJS AMD spec and
- * RequireJS.
- * @param {string[]|string} deps A name, or names for the payload
- * @param {function|undefined} callback Function to call when the dependencies
- * are resolved
- * @return {undefined|object} The module required or undefined for
- * array/callback method
- */
- Domain.prototype.require = function(deps, callback) {
- if (Array.isArray(deps)) {
- var params = deps.map(function(dep) {
- return this.lookup(dep);
- }, this);
- if (callback) {
- callback.apply(null, params);
- }
- return undefined;
- }
- else {
- return this.lookup(deps);
- }
- };
-
- function normalize(path) {
- var bits = path.split('/');
- var i = 1;
- while (i < bits.length) {
- if (bits[i] === '..') {
- bits.splice(i-1, 1);
- } else if (bits[i] === '.') {
- bits.splice(i, 1);
- } else {
- i++;
- }
- }
- return bits.join('/');
- }
-
- function join(a, b) {
- a = a.trim();
- b = b.trim();
- if (/^\//.test(b)) {
- return b;
- } else {
- return a.replace(/\/*$/, '/') + b;
- }
- }
-
- function dirname(path) {
- var bits = path.split('/');
- bits.pop();
- return bits.join('/');
- }
-
- /**
- * Lookup module names and resolve them by calling the definition function if
- * needed.
- * @param {string} moduleName A name for the payload to lookup
- * @return {object} The module specified by aModuleName or null if not found.
- */
- Domain.prototype.lookup = function(moduleName) {
- if (/^\./.test(moduleName)) {
- moduleName = normalize(join(dirname(this._currentModule), moduleName));
- }
-
- if (moduleName in this.modules) {
- var module = this.modules[moduleName];
- return module;
- }
-
- if (!(moduleName in define.modules)) {
- throw new Error("Module not defined: " + moduleName);
- }
-
- var module = define.modules[moduleName];
-
- if (typeof module == "function") {
- var exports = {};
- var previousModule = this._currentModule;
- this._currentModule = moduleName;
- module(this.require.bind(this), exports, { id: moduleName, uri: "" });
- this._currentModule = previousModule;
- module = exports;
- }
-
- // cache the resulting module object for next time
- this.modules[moduleName] = module;
-
- return module;
- };
-
-}());
-
-define.Domain = Domain;
-define.globalDomain = new Domain();
-var require = define.globalDomain.require.bind(define.globalDomain);
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/prefix-source-map.jsm b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/prefix-source-map.jsm
deleted file mode 100644
index ee2539d8..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/prefix-source-map.jsm
+++ /dev/null
@@ -1,20 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-/*
- * WARNING!
- *
- * Do not edit this file directly, it is built from the sources at
- * https://github.com/mozilla/source-map/
- */
-
-///////////////////////////////////////////////////////////////////////////////
-
-
-this.EXPORTED_SYMBOLS = [ "SourceMapConsumer", "SourceMapGenerator", "SourceNode" ];
-
-Components.utils.import('resource://gre/modules/devtools/Require.jsm');
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/prefix-utils.jsm b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/prefix-utils.jsm
deleted file mode 100644
index 80341d45..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/prefix-utils.jsm
+++ /dev/null
@@ -1,18 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-/*
- * WARNING!
- *
- * Do not edit this file directly, it is built from the sources at
- * https://github.com/mozilla/source-map/
- */
-
-Components.utils.import('resource://gre/modules/devtools/Require.jsm');
-Components.utils.import('resource://gre/modules/devtools/SourceMap.jsm');
-
-this.EXPORTED_SYMBOLS = [ "define", "runSourceMapTests" ];
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/suffix-browser.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/suffix-browser.js
deleted file mode 100644
index fb29ff5f..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/suffix-browser.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-///////////////////////////////////////////////////////////////////////////////
-
-this.sourceMap = {
- SourceMapConsumer: require('source-map/source-map-consumer').SourceMapConsumer,
- SourceMapGenerator: require('source-map/source-map-generator').SourceMapGenerator,
- SourceNode: require('source-map/source-node').SourceNode
-};
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/suffix-source-map.jsm b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/suffix-source-map.jsm
deleted file mode 100644
index cf3c2d8d..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/suffix-source-map.jsm
+++ /dev/null
@@ -1,6 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-///////////////////////////////////////////////////////////////////////////////
-
-this.SourceMapConsumer = require('source-map/source-map-consumer').SourceMapConsumer;
-this.SourceMapGenerator = require('source-map/source-map-generator').SourceMapGenerator;
-this.SourceNode = require('source-map/source-node').SourceNode;
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/suffix-utils.jsm b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/suffix-utils.jsm
deleted file mode 100644
index b31b84cb..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/suffix-utils.jsm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-function runSourceMapTests(modName, do_throw) {
- let mod = require(modName);
- let assert = require('test/source-map/assert');
- let util = require('test/source-map/util');
-
- assert.init(do_throw);
-
- for (let k in mod) {
- if (/^test/.test(k)) {
- mod[k](assert, util);
- }
- }
-
-}
-this.runSourceMapTests = runSourceMapTests;
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/test-prefix.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/test-prefix.js
deleted file mode 100644
index 1b13f300..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/test-prefix.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- * WARNING!
- *
- * Do not edit this file directly, it is built from the sources at
- * https://github.com/mozilla/source-map/
- */
-
-Components.utils.import('resource://test/Utils.jsm');
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/test-suffix.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/test-suffix.js
deleted file mode 100644
index bec2de3f..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/build/test-suffix.js
+++ /dev/null
@@ -1,3 +0,0 @@
-function run_test() {
- runSourceMapTests('{THIS_MODULE}', do_throw);
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map.js
deleted file mode 100644
index 121ad241..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- * Copyright 2009-2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE.txt or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-exports.SourceMapGenerator = require('./source-map/source-map-generator').SourceMapGenerator;
-exports.SourceMapConsumer = require('./source-map/source-map-consumer').SourceMapConsumer;
-exports.SourceNode = require('./source-map/source-node').SourceNode;
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/array-set.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/array-set.js
deleted file mode 100644
index 40f9a18b..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/array-set.js
+++ /dev/null
@@ -1,97 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var util = require('./util');
-
- /**
- * A data structure which is a combination of an array and a set. Adding a new
- * member is O(1), testing for membership is O(1), and finding the index of an
- * element is O(1). Removing elements from the set is not supported. Only
- * strings are supported for membership.
- */
- function ArraySet() {
- this._array = [];
- this._set = {};
- }
-
- /**
- * Static method for creating ArraySet instances from an existing array.
- */
- ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
- var set = new ArraySet();
- for (var i = 0, len = aArray.length; i < len; i++) {
- set.add(aArray[i], aAllowDuplicates);
- }
- return set;
- };
-
- /**
- * Add the given string to this set.
- *
- * @param String aStr
- */
- ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
- var isDuplicate = this.has(aStr);
- var idx = this._array.length;
- if (!isDuplicate || aAllowDuplicates) {
- this._array.push(aStr);
- }
- if (!isDuplicate) {
- this._set[util.toSetString(aStr)] = idx;
- }
- };
-
- /**
- * Is the given string a member of this set?
- *
- * @param String aStr
- */
- ArraySet.prototype.has = function ArraySet_has(aStr) {
- return Object.prototype.hasOwnProperty.call(this._set,
- util.toSetString(aStr));
- };
-
- /**
- * What is the index of the given string in the array?
- *
- * @param String aStr
- */
- ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
- if (this.has(aStr)) {
- return this._set[util.toSetString(aStr)];
- }
- throw new Error('"' + aStr + '" is not in the set.');
- };
-
- /**
- * What is the element at the given index?
- *
- * @param Number aIdx
- */
- ArraySet.prototype.at = function ArraySet_at(aIdx) {
- if (aIdx >= 0 && aIdx < this._array.length) {
- return this._array[aIdx];
- }
- throw new Error('No element indexed by ' + aIdx);
- };
-
- /**
- * Returns the array representation of this set (which has the proper indices
- * indicated by indexOf). Note that this is a copy of the internal array used
- * for storing the members so that no one can mess with internal state.
- */
- ArraySet.prototype.toArray = function ArraySet_toArray() {
- return this._array.slice();
- };
-
- exports.ArraySet = ArraySet;
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/base64-vlq.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/base64-vlq.js
deleted file mode 100644
index e22dcaee..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/base64-vlq.js
+++ /dev/null
@@ -1,142 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- *
- * Based on the Base 64 VLQ implementation in Closure Compiler:
- * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
- *
- * Copyright 2011 The Closure Compiler Authors. All rights reserved.
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var base64 = require('./base64');
-
- // A single base 64 digit can contain 6 bits of data. For the base 64 variable
- // length quantities we use in the source map spec, the first bit is the sign,
- // the next four bits are the actual value, and the 6th bit is the
- // continuation bit. The continuation bit tells us whether there are more
- // digits in this value following this digit.
- //
- // Continuation
- // | Sign
- // | |
- // V V
- // 101011
-
- var VLQ_BASE_SHIFT = 5;
-
- // binary: 100000
- var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
-
- // binary: 011111
- var VLQ_BASE_MASK = VLQ_BASE - 1;
-
- // binary: 100000
- var VLQ_CONTINUATION_BIT = VLQ_BASE;
-
- /**
- * Converts from a two-complement value to a value where the sign bit is
- * placed in the least significant bit. For example, as decimals:
- * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
- * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
- */
- function toVLQSigned(aValue) {
- return aValue < 0
- ? ((-aValue) << 1) + 1
- : (aValue << 1) + 0;
- }
-
- /**
- * Converts to a two-complement value from a value where the sign bit is
- * placed in the least significant bit. For example, as decimals:
- * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
- * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
- */
- function fromVLQSigned(aValue) {
- var isNegative = (aValue & 1) === 1;
- var shifted = aValue >> 1;
- return isNegative
- ? -shifted
- : shifted;
- }
-
- /**
- * Returns the base 64 VLQ encoded value.
- */
- exports.encode = function base64VLQ_encode(aValue) {
- var encoded = "";
- var digit;
-
- var vlq = toVLQSigned(aValue);
-
- do {
- digit = vlq & VLQ_BASE_MASK;
- vlq >>>= VLQ_BASE_SHIFT;
- if (vlq > 0) {
- // There are still more digits in this value, so we must make sure the
- // continuation bit is marked.
- digit |= VLQ_CONTINUATION_BIT;
- }
- encoded += base64.encode(digit);
- } while (vlq > 0);
-
- return encoded;
- };
-
- /**
- * Decodes the next base 64 VLQ value from the given string and returns the
- * value and the rest of the string via the out parameter.
- */
- exports.decode = function base64VLQ_decode(aStr, aOutParam) {
- var i = 0;
- var strLen = aStr.length;
- var result = 0;
- var shift = 0;
- var continuation, digit;
-
- do {
- if (i >= strLen) {
- throw new Error("Expected more digits in base 64 VLQ value.");
- }
- digit = base64.decode(aStr.charAt(i++));
- continuation = !!(digit & VLQ_CONTINUATION_BIT);
- digit &= VLQ_BASE_MASK;
- result = result + (digit << shift);
- shift += VLQ_BASE_SHIFT;
- } while (continuation);
-
- aOutParam.value = fromVLQSigned(result);
- aOutParam.rest = aStr.slice(i);
- };
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/base64.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/base64.js
deleted file mode 100644
index 863cc465..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/base64.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var charToIntMap = {};
- var intToCharMap = {};
-
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
- .split('')
- .forEach(function (ch, index) {
- charToIntMap[ch] = index;
- intToCharMap[index] = ch;
- });
-
- /**
- * Encode an integer in the range of 0 to 63 to a single base 64 digit.
- */
- exports.encode = function base64_encode(aNumber) {
- if (aNumber in intToCharMap) {
- return intToCharMap[aNumber];
- }
- throw new TypeError("Must be between 0 and 63: " + aNumber);
- };
-
- /**
- * Decode a single base 64 digit to an integer.
- */
- exports.decode = function base64_decode(aChar) {
- if (aChar in charToIntMap) {
- return charToIntMap[aChar];
- }
- throw new TypeError("Not a valid base 64 digit: " + aChar);
- };
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/binary-search.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/binary-search.js
deleted file mode 100644
index e085f810..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/binary-search.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- /**
- * Recursive implementation of binary search.
- *
- * @param aLow Indices here and lower do not contain the needle.
- * @param aHigh Indices here and higher do not contain the needle.
- * @param aNeedle The element being searched for.
- * @param aHaystack The non-empty array being searched.
- * @param aCompare Function which takes two elements and returns -1, 0, or 1.
- */
- function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare) {
- // This function terminates when one of the following is true:
- //
- // 1. We find the exact element we are looking for.
- //
- // 2. We did not find the exact element, but we can return the index of
- // the next closest element that is less than that element.
- //
- // 3. We did not find the exact element, and there is no next-closest
- // element which is less than the one we are searching for, so we
- // return -1.
- var mid = Math.floor((aHigh - aLow) / 2) + aLow;
- var cmp = aCompare(aNeedle, aHaystack[mid], true);
- if (cmp === 0) {
- // Found the element we are looking for.
- return mid;
- }
- else if (cmp > 0) {
- // aHaystack[mid] is greater than our needle.
- if (aHigh - mid > 1) {
- // The element is in the upper half.
- return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare);
- }
- // We did not find an exact match, return the next closest one
- // (termination case 2).
- return mid;
- }
- else {
- // aHaystack[mid] is less than our needle.
- if (mid - aLow > 1) {
- // The element is in the lower half.
- return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare);
- }
- // The exact needle element was not found in this haystack. Determine if
- // we are in termination case (2) or (3) and return the appropriate thing.
- return aLow < 0 ? -1 : aLow;
- }
- }
-
- /**
- * This is an implementation of binary search which will always try and return
- * the index of next lowest value checked if there is no exact hit. This is
- * because mappings between original and generated line/col pairs are single
- * points, and there is an implicit region between each of them, so a miss
- * just means that you aren't on the very start of a region.
- *
- * @param aNeedle The element you are looking for.
- * @param aHaystack The array that is being searched.
- * @param aCompare A function which takes the needle and an element in the
- * array and returns -1, 0, or 1 depending on whether the needle is less
- * than, equal to, or greater than the element, respectively.
- */
- exports.search = function search(aNeedle, aHaystack, aCompare) {
- if (aHaystack.length === 0) {
- return -1;
- }
- return recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare)
- };
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/mapping-list.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/mapping-list.js
deleted file mode 100644
index 2a4eb618..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/mapping-list.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2014 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var util = require('./util');
-
- /**
- * Determine whether mappingB is after mappingA with respect to generated
- * position.
- */
- function generatedPositionAfter(mappingA, mappingB) {
- // Optimized for most common case
- var lineA = mappingA.generatedLine;
- var lineB = mappingB.generatedLine;
- var columnA = mappingA.generatedColumn;
- var columnB = mappingB.generatedColumn;
- return lineB > lineA || lineB == lineA && columnB >= columnA ||
- util.compareByGeneratedPositions(mappingA, mappingB) <= 0;
- }
-
- /**
- * A data structure to provide a sorted view of accumulated mappings in a
- * performance conscious manner. It trades a neglibable overhead in general
- * case for a large speedup in case of mappings being added in order.
- */
- function MappingList() {
- this._array = [];
- this._sorted = true;
- // Serves as infimum
- this._last = {generatedLine: -1, generatedColumn: 0};
- }
-
- /**
- * Iterate through internal items. This method takes the same arguments that
- * `Array.prototype.forEach` takes.
- *
- * NOTE: The order of the mappings is NOT guaranteed.
- */
- MappingList.prototype.unsortedForEach =
- function MappingList_forEach(aCallback, aThisArg) {
- this._array.forEach(aCallback, aThisArg);
- };
-
- /**
- * Add the given source mapping.
- *
- * @param Object aMapping
- */
- MappingList.prototype.add = function MappingList_add(aMapping) {
- var mapping;
- if (generatedPositionAfter(this._last, aMapping)) {
- this._last = aMapping;
- this._array.push(aMapping);
- } else {
- this._sorted = false;
- this._array.push(aMapping);
- }
- };
-
- /**
- * Returns the flat, sorted array of mappings. The mappings are sorted by
- * generated position.
- *
- * WARNING: This method returns internal data without copying, for
- * performance. The return value must NOT be mutated, and should be treated as
- * an immutable borrow. If you want to take ownership, you must make your own
- * copy.
- */
- MappingList.prototype.toArray = function MappingList_toArray() {
- if (!this._sorted) {
- this._array.sort(util.compareByGeneratedPositions);
- this._sorted = true;
- }
- return this._array;
- };
-
- exports.MappingList = MappingList;
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/source-map-consumer.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/source-map-consumer.js
deleted file mode 100644
index cfaa299a..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/source-map-consumer.js
+++ /dev/null
@@ -1,575 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var util = require('./util');
- var binarySearch = require('./binary-search');
- var ArraySet = require('./array-set').ArraySet;
- var base64VLQ = require('./base64-vlq');
-
- /**
- * A SourceMapConsumer instance represents a parsed source map which we can
- * query for information about the original file positions by giving it a file
- * position in the generated source.
- *
- * The only parameter is the raw source map (either as a JSON string, or
- * already parsed to an object). According to the spec, source maps have the
- * following attributes:
- *
- * - version: Which version of the source map spec this map is following.
- * - sources: An array of URLs to the original source files.
- * - names: An array of identifiers which can be referrenced by individual mappings.
- * - sourceRoot: Optional. The URL root from which all sources are relative.
- * - sourcesContent: Optional. An array of contents of the original source files.
- * - mappings: A string of base64 VLQs which contain the actual mappings.
- * - file: Optional. The generated file this source map is associated with.
- *
- * Here is an example source map, taken from the source map spec[0]:
- *
- * {
- * version : 3,
- * file: "out.js",
- * sourceRoot : "",
- * sources: ["foo.js", "bar.js"],
- * names: ["src", "maps", "are", "fun"],
- * mappings: "AA,AB;;ABCDE;"
- * }
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
- */
- function SourceMapConsumer(aSourceMap) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
- }
-
- var version = util.getArg(sourceMap, 'version');
- var sources = util.getArg(sourceMap, 'sources');
- // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
- // requires the array) to play nice here.
- var names = util.getArg(sourceMap, 'names', []);
- var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
- var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
- var mappings = util.getArg(sourceMap, 'mappings');
- var file = util.getArg(sourceMap, 'file', null);
-
- // Once again, Sass deviates from the spec and supplies the version as a
- // string rather than a number, so we use loose equality checking here.
- if (version != this._version) {
- throw new Error('Unsupported version: ' + version);
- }
-
- // Some source maps produce relative source paths like "./foo.js" instead of
- // "foo.js". Normalize these first so that future comparisons will succeed.
- // See bugzil.la/1090768.
- sources = sources.map(util.normalize);
-
- // Pass `true` below to allow duplicate names and sources. While source maps
- // are intended to be compressed and deduplicated, the TypeScript compiler
- // sometimes generates source maps with duplicates in them. See Github issue
- // #72 and bugzil.la/889492.
- this._names = ArraySet.fromArray(names, true);
- this._sources = ArraySet.fromArray(sources, true);
-
- this.sourceRoot = sourceRoot;
- this.sourcesContent = sourcesContent;
- this._mappings = mappings;
- this.file = file;
- }
-
- /**
- * Create a SourceMapConsumer from a SourceMapGenerator.
- *
- * @param SourceMapGenerator aSourceMap
- * The source map that will be consumed.
- * @returns SourceMapConsumer
- */
- SourceMapConsumer.fromSourceMap =
- function SourceMapConsumer_fromSourceMap(aSourceMap) {
- var smc = Object.create(SourceMapConsumer.prototype);
-
- smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
- smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
- smc.sourceRoot = aSourceMap._sourceRoot;
- smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
- smc.sourceRoot);
- smc.file = aSourceMap._file;
-
- smc.__generatedMappings = aSourceMap._mappings.toArray().slice();
- smc.__originalMappings = aSourceMap._mappings.toArray().slice()
- .sort(util.compareByOriginalPositions);
-
- return smc;
- };
-
- /**
- * The version of the source mapping spec that we are consuming.
- */
- SourceMapConsumer.prototype._version = 3;
-
- /**
- * The list of original sources.
- */
- Object.defineProperty(SourceMapConsumer.prototype, 'sources', {
- get: function () {
- return this._sources.toArray().map(function (s) {
- return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;
- }, this);
- }
- });
-
- // `__generatedMappings` and `__originalMappings` are arrays that hold the
- // parsed mapping coordinates from the source map's "mappings" attribute. They
- // are lazily instantiated, accessed via the `_generatedMappings` and
- // `_originalMappings` getters respectively, and we only parse the mappings
- // and create these arrays once queried for a source location. We jump through
- // these hoops because there can be many thousands of mappings, and parsing
- // them is expensive, so we only want to do it if we must.
- //
- // Each object in the arrays is of the form:
- //
- // {
- // generatedLine: The line number in the generated code,
- // generatedColumn: The column number in the generated code,
- // source: The path to the original source file that generated this
- // chunk of code,
- // originalLine: The line number in the original source that
- // corresponds to this chunk of generated code,
- // originalColumn: The column number in the original source that
- // corresponds to this chunk of generated code,
- // name: The name of the original symbol which generated this chunk of
- // code.
- // }
- //
- // All properties except for `generatedLine` and `generatedColumn` can be
- // `null`.
- //
- // `_generatedMappings` is ordered by the generated positions.
- //
- // `_originalMappings` is ordered by the original positions.
-
- SourceMapConsumer.prototype.__generatedMappings = null;
- Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
- get: function () {
- if (!this.__generatedMappings) {
- this.__generatedMappings = [];
- this.__originalMappings = [];
- this._parseMappings(this._mappings, this.sourceRoot);
- }
-
- return this.__generatedMappings;
- }
- });
-
- SourceMapConsumer.prototype.__originalMappings = null;
- Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
- get: function () {
- if (!this.__originalMappings) {
- this.__generatedMappings = [];
- this.__originalMappings = [];
- this._parseMappings(this._mappings, this.sourceRoot);
- }
-
- return this.__originalMappings;
- }
- });
-
- SourceMapConsumer.prototype._nextCharIsMappingSeparator =
- function SourceMapConsumer_nextCharIsMappingSeparator(aStr) {
- var c = aStr.charAt(0);
- return c === ";" || c === ",";
- };
-
- /**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
- SourceMapConsumer.prototype._parseMappings =
- function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- var generatedLine = 1;
- var previousGeneratedColumn = 0;
- var previousOriginalLine = 0;
- var previousOriginalColumn = 0;
- var previousSource = 0;
- var previousName = 0;
- var str = aStr;
- var temp = {};
- var mapping;
-
- while (str.length > 0) {
- if (str.charAt(0) === ';') {
- generatedLine++;
- str = str.slice(1);
- previousGeneratedColumn = 0;
- }
- else if (str.charAt(0) === ',') {
- str = str.slice(1);
- }
- else {
- mapping = {};
- mapping.generatedLine = generatedLine;
-
- // Generated column.
- base64VLQ.decode(str, temp);
- mapping.generatedColumn = previousGeneratedColumn + temp.value;
- previousGeneratedColumn = mapping.generatedColumn;
- str = temp.rest;
-
- if (str.length > 0 && !this._nextCharIsMappingSeparator(str)) {
- // Original source.
- base64VLQ.decode(str, temp);
- mapping.source = this._sources.at(previousSource + temp.value);
- previousSource += temp.value;
- str = temp.rest;
- if (str.length === 0 || this._nextCharIsMappingSeparator(str)) {
- throw new Error('Found a source, but no line and column');
- }
-
- // Original line.
- base64VLQ.decode(str, temp);
- mapping.originalLine = previousOriginalLine + temp.value;
- previousOriginalLine = mapping.originalLine;
- // Lines are stored 0-based
- mapping.originalLine += 1;
- str = temp.rest;
- if (str.length === 0 || this._nextCharIsMappingSeparator(str)) {
- throw new Error('Found a source and line, but no column');
- }
-
- // Original column.
- base64VLQ.decode(str, temp);
- mapping.originalColumn = previousOriginalColumn + temp.value;
- previousOriginalColumn = mapping.originalColumn;
- str = temp.rest;
-
- if (str.length > 0 && !this._nextCharIsMappingSeparator(str)) {
- // Original name.
- base64VLQ.decode(str, temp);
- mapping.name = this._names.at(previousName + temp.value);
- previousName += temp.value;
- str = temp.rest;
- }
- }
-
- this.__generatedMappings.push(mapping);
- if (typeof mapping.originalLine === 'number') {
- this.__originalMappings.push(mapping);
- }
- }
- }
-
- this.__generatedMappings.sort(util.compareByGeneratedPositions);
- this.__originalMappings.sort(util.compareByOriginalPositions);
- };
-
- /**
- * Find the mapping that best matches the hypothetical "needle" mapping that
- * we are searching for in the given "haystack" of mappings.
- */
- SourceMapConsumer.prototype._findMapping =
- function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
- aColumnName, aComparator) {
- // To return the position we are searching for, we must first find the
- // mapping for the given position and then return the opposite position it
- // points to. Because the mappings are sorted, we can use binary search to
- // find the best mapping.
-
- if (aNeedle[aLineName] <= 0) {
- throw new TypeError('Line must be greater than or equal to 1, got '
- + aNeedle[aLineName]);
- }
- if (aNeedle[aColumnName] < 0) {
- throw new TypeError('Column must be greater than or equal to 0, got '
- + aNeedle[aColumnName]);
- }
-
- return binarySearch.search(aNeedle, aMappings, aComparator);
- };
-
- /**
- * Compute the last column for each generated mapping. The last column is
- * inclusive.
- */
- SourceMapConsumer.prototype.computeColumnSpans =
- function SourceMapConsumer_computeColumnSpans() {
- for (var index = 0; index < this._generatedMappings.length; ++index) {
- var mapping = this._generatedMappings[index];
-
- // Mappings do not contain a field for the last generated columnt. We
- // can come up with an optimistic estimate, however, by assuming that
- // mappings are contiguous (i.e. given two consecutive mappings, the
- // first mapping ends where the second one starts).
- if (index + 1 < this._generatedMappings.length) {
- var nextMapping = this._generatedMappings[index + 1];
-
- if (mapping.generatedLine === nextMapping.generatedLine) {
- mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
- continue;
- }
- }
-
- // The last mapping for each line spans the entire line.
- mapping.lastGeneratedColumn = Infinity;
- }
- };
-
- /**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- * - line: The line number in the generated source.
- * - column: The column number in the generated source.
- *
- * and an object is returned with the following properties:
- *
- * - source: The original source file, or null.
- * - line: The line number in the original source, or null.
- * - column: The column number in the original source, or null.
- * - name: The original identifier, or null.
- */
- SourceMapConsumer.prototype.originalPositionFor =
- function SourceMapConsumer_originalPositionFor(aArgs) {
- var needle = {
- generatedLine: util.getArg(aArgs, 'line'),
- generatedColumn: util.getArg(aArgs, 'column')
- };
-
- var index = this._findMapping(needle,
- this._generatedMappings,
- "generatedLine",
- "generatedColumn",
- util.compareByGeneratedPositions);
-
- if (index >= 0) {
- var mapping = this._generatedMappings[index];
-
- if (mapping.generatedLine === needle.generatedLine) {
- var source = util.getArg(mapping, 'source', null);
- if (source != null && this.sourceRoot != null) {
- source = util.join(this.sourceRoot, source);
- }
- return {
- source: source,
- line: util.getArg(mapping, 'originalLine', null),
- column: util.getArg(mapping, 'originalColumn', null),
- name: util.getArg(mapping, 'name', null)
- };
- }
- }
-
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- };
-
- /**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * availible.
- */
- SourceMapConsumer.prototype.sourceContentFor =
- function SourceMapConsumer_sourceContentFor(aSource) {
- if (!this.sourcesContent) {
- return null;
- }
-
- if (this.sourceRoot != null) {
- aSource = util.relative(this.sourceRoot, aSource);
- }
-
- if (this._sources.has(aSource)) {
- return this.sourcesContent[this._sources.indexOf(aSource)];
- }
-
- var url;
- if (this.sourceRoot != null
- && (url = util.urlParse(this.sourceRoot))) {
- // XXX: file:// URIs and absolute paths lead to unexpected behavior for
- // many users. We can help them out when they expect file:// URIs to
- // behave like it would if they were running a local HTTP server. See
- // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
- var fileUriAbsPath = aSource.replace(/^file:\/\//, "");
- if (url.scheme == "file"
- && this._sources.has(fileUriAbsPath)) {
- return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
- }
-
- if ((!url.path || url.path == "/")
- && this._sources.has("/" + aSource)) {
- return this.sourcesContent[this._sources.indexOf("/" + aSource)];
- }
- }
-
- throw new Error('"' + aSource + '" is not in the SourceMap.');
- };
-
- /**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source.
- * - column: The column number in the original source.
- *
- * and an object is returned with the following properties:
- *
- * - line: The line number in the generated source, or null.
- * - column: The column number in the generated source, or null.
- */
- SourceMapConsumer.prototype.generatedPositionFor =
- function SourceMapConsumer_generatedPositionFor(aArgs) {
- var needle = {
- source: util.getArg(aArgs, 'source'),
- originalLine: util.getArg(aArgs, 'line'),
- originalColumn: util.getArg(aArgs, 'column')
- };
-
- if (this.sourceRoot != null) {
- needle.source = util.relative(this.sourceRoot, needle.source);
- }
-
- var index = this._findMapping(needle,
- this._originalMappings,
- "originalLine",
- "originalColumn",
- util.compareByOriginalPositions);
-
- if (index >= 0) {
- var mapping = this._originalMappings[index];
-
- return {
- line: util.getArg(mapping, 'generatedLine', null),
- column: util.getArg(mapping, 'generatedColumn', null),
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
- };
- }
-
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- };
-
- /**
- * Returns all generated line and column information for the original source
- * and line provided. The only argument is an object with the following
- * properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source.
- *
- * and an array of objects is returned, each with the following properties:
- *
- * - line: The line number in the generated source, or null.
- * - column: The column number in the generated source, or null.
- */
- SourceMapConsumer.prototype.allGeneratedPositionsFor =
- function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
- // When there is no exact match, SourceMapConsumer.prototype._findMapping
- // returns the index of the closest mapping less than the needle. By
- // setting needle.originalColumn to Infinity, we thus find the last
- // mapping for the given line, provided such a mapping exists.
- var needle = {
- source: util.getArg(aArgs, 'source'),
- originalLine: util.getArg(aArgs, 'line'),
- originalColumn: Infinity
- };
-
- if (this.sourceRoot != null) {
- needle.source = util.relative(this.sourceRoot, needle.source);
- }
-
- var mappings = [];
-
- var index = this._findMapping(needle,
- this._originalMappings,
- "originalLine",
- "originalColumn",
- util.compareByOriginalPositions);
- if (index >= 0) {
- var mapping = this._originalMappings[index];
-
- while (mapping && mapping.originalLine === needle.originalLine) {
- mappings.push({
- line: util.getArg(mapping, 'generatedLine', null),
- column: util.getArg(mapping, 'generatedColumn', null),
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
- });
-
- mapping = this._originalMappings[--index];
- }
- }
-
- return mappings.reverse();
- };
-
- SourceMapConsumer.GENERATED_ORDER = 1;
- SourceMapConsumer.ORIGINAL_ORDER = 2;
-
- /**
- * Iterate over each mapping between an original source/line/column and a
- * generated line/column in this source map.
- *
- * @param Function aCallback
- * The function that is called with each mapping.
- * @param Object aContext
- * Optional. If specified, this object will be the value of `this` every
- * time that `aCallback` is called.
- * @param aOrder
- * Either `SourceMapConsumer.GENERATED_ORDER` or
- * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
- * iterate over the mappings sorted by the generated file's line/column
- * order or the original's source/line/column order, respectively. Defaults to
- * `SourceMapConsumer.GENERATED_ORDER`.
- */
- SourceMapConsumer.prototype.eachMapping =
- function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
- var context = aContext || null;
- var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
-
- var mappings;
- switch (order) {
- case SourceMapConsumer.GENERATED_ORDER:
- mappings = this._generatedMappings;
- break;
- case SourceMapConsumer.ORIGINAL_ORDER:
- mappings = this._originalMappings;
- break;
- default:
- throw new Error("Unknown order of iteration.");
- }
-
- var sourceRoot = this.sourceRoot;
- mappings.map(function (mapping) {
- var source = mapping.source;
- if (source != null && sourceRoot != null) {
- source = util.join(sourceRoot, source);
- }
- return {
- source: source,
- generatedLine: mapping.generatedLine,
- generatedColumn: mapping.generatedColumn,
- originalLine: mapping.originalLine,
- originalColumn: mapping.originalColumn,
- name: mapping.name
- };
- }).forEach(aCallback, context);
- };
-
- exports.SourceMapConsumer = SourceMapConsumer;
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/source-map-generator.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/source-map-generator.js
deleted file mode 100644
index 1ab7a47d..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/source-map-generator.js
+++ /dev/null
@@ -1,400 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var base64VLQ = require('./base64-vlq');
- var util = require('./util');
- var ArraySet = require('./array-set').ArraySet;
- var MappingList = require('./mapping-list').MappingList;
-
- /**
- * An instance of the SourceMapGenerator represents a source map which is
- * being built incrementally. You may pass an object with the following
- * properties:
- *
- * - file: The filename of the generated source.
- * - sourceRoot: A root for all relative URLs in this source map.
- */
- function SourceMapGenerator(aArgs) {
- if (!aArgs) {
- aArgs = {};
- }
- this._file = util.getArg(aArgs, 'file', null);
- this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
- this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
- this._sources = new ArraySet();
- this._names = new ArraySet();
- this._mappings = new MappingList();
- this._sourcesContents = null;
- }
-
- SourceMapGenerator.prototype._version = 3;
-
- /**
- * Creates a new SourceMapGenerator based on a SourceMapConsumer
- *
- * @param aSourceMapConsumer The SourceMap.
- */
- SourceMapGenerator.fromSourceMap =
- function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
- var sourceRoot = aSourceMapConsumer.sourceRoot;
- var generator = new SourceMapGenerator({
- file: aSourceMapConsumer.file,
- sourceRoot: sourceRoot
- });
- aSourceMapConsumer.eachMapping(function (mapping) {
- var newMapping = {
- generated: {
- line: mapping.generatedLine,
- column: mapping.generatedColumn
- }
- };
-
- if (mapping.source != null) {
- newMapping.source = mapping.source;
- if (sourceRoot != null) {
- newMapping.source = util.relative(sourceRoot, newMapping.source);
- }
-
- newMapping.original = {
- line: mapping.originalLine,
- column: mapping.originalColumn
- };
-
- if (mapping.name != null) {
- newMapping.name = mapping.name;
- }
- }
-
- generator.addMapping(newMapping);
- });
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- generator.setSourceContent(sourceFile, content);
- }
- });
- return generator;
- };
-
- /**
- * Add a single mapping from original source line and column to the generated
- * source's line and column for this source map being created. The mapping
- * object should have the following properties:
- *
- * - generated: An object with the generated line and column positions.
- * - original: An object with the original line and column positions.
- * - source: The original source file (relative to the sourceRoot).
- * - name: An optional original token name for this mapping.
- */
- SourceMapGenerator.prototype.addMapping =
- function SourceMapGenerator_addMapping(aArgs) {
- var generated = util.getArg(aArgs, 'generated');
- var original = util.getArg(aArgs, 'original', null);
- var source = util.getArg(aArgs, 'source', null);
- var name = util.getArg(aArgs, 'name', null);
-
- if (!this._skipValidation) {
- this._validateMapping(generated, original, source, name);
- }
-
- if (source != null && !this._sources.has(source)) {
- this._sources.add(source);
- }
-
- if (name != null && !this._names.has(name)) {
- this._names.add(name);
- }
-
- this._mappings.add({
- generatedLine: generated.line,
- generatedColumn: generated.column,
- originalLine: original != null && original.line,
- originalColumn: original != null && original.column,
- source: source,
- name: name
- });
- };
-
- /**
- * Set the source content for a source file.
- */
- SourceMapGenerator.prototype.setSourceContent =
- function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
- var source = aSourceFile;
- if (this._sourceRoot != null) {
- source = util.relative(this._sourceRoot, source);
- }
-
- if (aSourceContent != null) {
- // Add the source content to the _sourcesContents map.
- // Create a new _sourcesContents map if the property is null.
- if (!this._sourcesContents) {
- this._sourcesContents = {};
- }
- this._sourcesContents[util.toSetString(source)] = aSourceContent;
- } else if (this._sourcesContents) {
- // Remove the source file from the _sourcesContents map.
- // If the _sourcesContents map is empty, set the property to null.
- delete this._sourcesContents[util.toSetString(source)];
- if (Object.keys(this._sourcesContents).length === 0) {
- this._sourcesContents = null;
- }
- }
- };
-
- /**
- * Applies the mappings of a sub-source-map for a specific source file to the
- * source map being generated. Each mapping to the supplied source file is
- * rewritten using the supplied source map. Note: The resolution for the
- * resulting mappings is the minimium of this map and the supplied map.
- *
- * @param aSourceMapConsumer The source map to be applied.
- * @param aSourceFile Optional. The filename of the source file.
- * If omitted, SourceMapConsumer's file property will be used.
- * @param aSourceMapPath Optional. The dirname of the path to the source map
- * to be applied. If relative, it is relative to the SourceMapConsumer.
- * This parameter is needed when the two source maps aren't in the same
- * directory, and the source map to be applied contains relative source
- * paths. If so, those relative source paths need to be rewritten
- * relative to the SourceMapGenerator.
- */
- SourceMapGenerator.prototype.applySourceMap =
- function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
- var sourceFile = aSourceFile;
- // If aSourceFile is omitted, we will use the file property of the SourceMap
- if (aSourceFile == null) {
- if (aSourceMapConsumer.file == null) {
- throw new Error(
- 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
- 'or the source map\'s "file" property. Both were omitted.'
- );
- }
- sourceFile = aSourceMapConsumer.file;
- }
- var sourceRoot = this._sourceRoot;
- // Make "sourceFile" relative if an absolute Url is passed.
- if (sourceRoot != null) {
- sourceFile = util.relative(sourceRoot, sourceFile);
- }
- // Applying the SourceMap can add and remove items from the sources and
- // the names array.
- var newSources = new ArraySet();
- var newNames = new ArraySet();
-
- // Find mappings for the "sourceFile"
- this._mappings.unsortedForEach(function (mapping) {
- if (mapping.source === sourceFile && mapping.originalLine != null) {
- // Check if it can be mapped by the source map, then update the mapping.
- var original = aSourceMapConsumer.originalPositionFor({
- line: mapping.originalLine,
- column: mapping.originalColumn
- });
- if (original.source != null) {
- // Copy mapping
- mapping.source = original.source;
- if (aSourceMapPath != null) {
- mapping.source = util.join(aSourceMapPath, mapping.source)
- }
- if (sourceRoot != null) {
- mapping.source = util.relative(sourceRoot, mapping.source);
- }
- mapping.originalLine = original.line;
- mapping.originalColumn = original.column;
- if (original.name != null) {
- mapping.name = original.name;
- }
- }
- }
-
- var source = mapping.source;
- if (source != null && !newSources.has(source)) {
- newSources.add(source);
- }
-
- var name = mapping.name;
- if (name != null && !newNames.has(name)) {
- newNames.add(name);
- }
-
- }, this);
- this._sources = newSources;
- this._names = newNames;
-
- // Copy sourcesContents of applied map.
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- if (aSourceMapPath != null) {
- sourceFile = util.join(aSourceMapPath, sourceFile);
- }
- if (sourceRoot != null) {
- sourceFile = util.relative(sourceRoot, sourceFile);
- }
- this.setSourceContent(sourceFile, content);
- }
- }, this);
- };
-
- /**
- * A mapping can have one of the three levels of data:
- *
- * 1. Just the generated position.
- * 2. The Generated position, original position, and original source.
- * 3. Generated and original position, original source, as well as a name
- * token.
- *
- * To maintain consistency, we validate that any new mapping being added falls
- * in to one of these categories.
- */
- SourceMapGenerator.prototype._validateMapping =
- function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
- aName) {
- if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
- && aGenerated.line > 0 && aGenerated.column >= 0
- && !aOriginal && !aSource && !aName) {
- // Case 1.
- return;
- }
- else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
- && aOriginal && 'line' in aOriginal && 'column' in aOriginal
- && aGenerated.line > 0 && aGenerated.column >= 0
- && aOriginal.line > 0 && aOriginal.column >= 0
- && aSource) {
- // Cases 2 and 3.
- return;
- }
- else {
- throw new Error('Invalid mapping: ' + JSON.stringify({
- generated: aGenerated,
- source: aSource,
- original: aOriginal,
- name: aName
- }));
- }
- };
-
- /**
- * Serialize the accumulated mappings in to the stream of base 64 VLQs
- * specified by the source map format.
- */
- SourceMapGenerator.prototype._serializeMappings =
- function SourceMapGenerator_serializeMappings() {
- var previousGeneratedColumn = 0;
- var previousGeneratedLine = 1;
- var previousOriginalColumn = 0;
- var previousOriginalLine = 0;
- var previousName = 0;
- var previousSource = 0;
- var result = '';
- var mapping;
-
- var mappings = this._mappings.toArray();
-
- for (var i = 0, len = mappings.length; i < len; i++) {
- mapping = mappings[i];
-
- if (mapping.generatedLine !== previousGeneratedLine) {
- previousGeneratedColumn = 0;
- while (mapping.generatedLine !== previousGeneratedLine) {
- result += ';';
- previousGeneratedLine++;
- }
- }
- else {
- if (i > 0) {
- if (!util.compareByGeneratedPositions(mapping, mappings[i - 1])) {
- continue;
- }
- result += ',';
- }
- }
-
- result += base64VLQ.encode(mapping.generatedColumn
- - previousGeneratedColumn);
- previousGeneratedColumn = mapping.generatedColumn;
-
- if (mapping.source != null) {
- result += base64VLQ.encode(this._sources.indexOf(mapping.source)
- - previousSource);
- previousSource = this._sources.indexOf(mapping.source);
-
- // lines are stored 0-based in SourceMap spec version 3
- result += base64VLQ.encode(mapping.originalLine - 1
- - previousOriginalLine);
- previousOriginalLine = mapping.originalLine - 1;
-
- result += base64VLQ.encode(mapping.originalColumn
- - previousOriginalColumn);
- previousOriginalColumn = mapping.originalColumn;
-
- if (mapping.name != null) {
- result += base64VLQ.encode(this._names.indexOf(mapping.name)
- - previousName);
- previousName = this._names.indexOf(mapping.name);
- }
- }
- }
-
- return result;
- };
-
- SourceMapGenerator.prototype._generateSourcesContent =
- function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
- return aSources.map(function (source) {
- if (!this._sourcesContents) {
- return null;
- }
- if (aSourceRoot != null) {
- source = util.relative(aSourceRoot, source);
- }
- var key = util.toSetString(source);
- return Object.prototype.hasOwnProperty.call(this._sourcesContents,
- key)
- ? this._sourcesContents[key]
- : null;
- }, this);
- };
-
- /**
- * Externalize the source map.
- */
- SourceMapGenerator.prototype.toJSON =
- function SourceMapGenerator_toJSON() {
- var map = {
- version: this._version,
- sources: this._sources.toArray(),
- names: this._names.toArray(),
- mappings: this._serializeMappings()
- };
- if (this._file != null) {
- map.file = this._file;
- }
- if (this._sourceRoot != null) {
- map.sourceRoot = this._sourceRoot;
- }
- if (this._sourcesContents) {
- map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
- }
-
- return map;
- };
-
- /**
- * Render the source map being generated to a string.
- */
- SourceMapGenerator.prototype.toString =
- function SourceMapGenerator_toString() {
- return JSON.stringify(this);
- };
-
- exports.SourceMapGenerator = SourceMapGenerator;
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/source-node.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/source-node.js
deleted file mode 100644
index 9ee90bd5..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/source-node.js
+++ /dev/null
@@ -1,414 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;
- var util = require('./util');
-
- // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
- // operating systems these days (capturing the result).
- var REGEX_NEWLINE = /(\r?\n)/;
-
- // Newline character code for charCodeAt() comparisons
- var NEWLINE_CODE = 10;
-
- // Private symbol for identifying `SourceNode`s when multiple versions of
- // the source-map library are loaded. This MUST NOT CHANGE across
- // versions!
- var isSourceNode = "$$$isSourceNode$$$";
-
- /**
- * SourceNodes provide a way to abstract over interpolating/concatenating
- * snippets of generated JavaScript source code while maintaining the line and
- * column information associated with the original source code.
- *
- * @param aLine The original line number.
- * @param aColumn The original column number.
- * @param aSource The original source's filename.
- * @param aChunks Optional. An array of strings which are snippets of
- * generated JS, or other SourceNodes.
- * @param aName The original identifier.
- */
- function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
- this.children = [];
- this.sourceContents = {};
- this.line = aLine == null ? null : aLine;
- this.column = aColumn == null ? null : aColumn;
- this.source = aSource == null ? null : aSource;
- this.name = aName == null ? null : aName;
- this[isSourceNode] = true;
- if (aChunks != null) this.add(aChunks);
- }
-
- /**
- * Creates a SourceNode from generated code and a SourceMapConsumer.
- *
- * @param aGeneratedCode The generated code
- * @param aSourceMapConsumer The SourceMap for the generated code
- * @param aRelativePath Optional. The path that relative sources in the
- * SourceMapConsumer should be relative to.
- */
- SourceNode.fromStringWithSourceMap =
- function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
- // The SourceNode we want to fill with the generated code
- // and the SourceMap
- var node = new SourceNode();
-
- // All even indices of this array are one line of the generated code,
- // while all odd indices are the newlines between two adjacent lines
- // (since `REGEX_NEWLINE` captures its match).
- // Processed fragments are removed from this array, by calling `shiftNextLine`.
- var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
- var shiftNextLine = function() {
- var lineContents = remainingLines.shift();
- // The last line of a file might not have a newline.
- var newLine = remainingLines.shift() || "";
- return lineContents + newLine;
- };
-
- // We need to remember the position of "remainingLines"
- var lastGeneratedLine = 1, lastGeneratedColumn = 0;
-
- // The generate SourceNodes we need a code range.
- // To extract it current and last mapping is used.
- // Here we store the last mapping.
- var lastMapping = null;
-
- aSourceMapConsumer.eachMapping(function (mapping) {
- if (lastMapping !== null) {
- // We add the code from "lastMapping" to "mapping":
- // First check if there is a new line in between.
- if (lastGeneratedLine < mapping.generatedLine) {
- var code = "";
- // Associate first line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- lastGeneratedLine++;
- lastGeneratedColumn = 0;
- // The remaining code is added without mapping
- } else {
- // There is no new line in between.
- // Associate the code between "lastGeneratedColumn" and
- // "mapping.generatedColumn" with "lastMapping"
- var nextLine = remainingLines[0];
- var code = nextLine.substr(0, mapping.generatedColumn -
- lastGeneratedColumn);
- remainingLines[0] = nextLine.substr(mapping.generatedColumn -
- lastGeneratedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- addMappingWithCode(lastMapping, code);
- // No more remaining code, continue
- lastMapping = mapping;
- return;
- }
- }
- // We add the generated code until the first mapping
- // to the SourceNode without any mapping.
- // Each line is added as separate string.
- while (lastGeneratedLine < mapping.generatedLine) {
- node.add(shiftNextLine());
- lastGeneratedLine++;
- }
- if (lastGeneratedColumn < mapping.generatedColumn) {
- var nextLine = remainingLines[0];
- node.add(nextLine.substr(0, mapping.generatedColumn));
- remainingLines[0] = nextLine.substr(mapping.generatedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- }
- lastMapping = mapping;
- }, this);
- // We have processed all mappings.
- if (remainingLines.length > 0) {
- if (lastMapping) {
- // Associate the remaining code in the current line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- }
- // and add the remaining lines without any mapping
- node.add(remainingLines.join(""));
- }
-
- // Copy sourcesContent into SourceNode
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- if (aRelativePath != null) {
- sourceFile = util.join(aRelativePath, sourceFile);
- }
- node.setSourceContent(sourceFile, content);
- }
- });
-
- return node;
-
- function addMappingWithCode(mapping, code) {
- if (mapping === null || mapping.source === undefined) {
- node.add(code);
- } else {
- var source = aRelativePath
- ? util.join(aRelativePath, mapping.source)
- : mapping.source;
- node.add(new SourceNode(mapping.originalLine,
- mapping.originalColumn,
- source,
- code,
- mapping.name));
- }
- }
- };
-
- /**
- * Add a chunk of generated JS to this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
- */
- SourceNode.prototype.add = function SourceNode_add(aChunk) {
- if (Array.isArray(aChunk)) {
- aChunk.forEach(function (chunk) {
- this.add(chunk);
- }, this);
- }
- else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- if (aChunk) {
- this.children.push(aChunk);
- }
- }
- else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
- }
- return this;
- };
-
- /**
- * Add a chunk of generated JS to the beginning of this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
- */
- SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
- if (Array.isArray(aChunk)) {
- for (var i = aChunk.length-1; i >= 0; i--) {
- this.prepend(aChunk[i]);
- }
- }
- else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- this.children.unshift(aChunk);
- }
- else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
- }
- return this;
- };
-
- /**
- * Walk over the tree of JS snippets in this node and its children. The
- * walking function is called once for each snippet of JS and is passed that
- * snippet and the its original associated source's line/column location.
- *
- * @param aFn The traversal function.
- */
- SourceNode.prototype.walk = function SourceNode_walk(aFn) {
- var chunk;
- for (var i = 0, len = this.children.length; i < len; i++) {
- chunk = this.children[i];
- if (chunk[isSourceNode]) {
- chunk.walk(aFn);
- }
- else {
- if (chunk !== '') {
- aFn(chunk, { source: this.source,
- line: this.line,
- column: this.column,
- name: this.name });
- }
- }
- }
- };
-
- /**
- * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
- * each of `this.children`.
- *
- * @param aSep The separator.
- */
- SourceNode.prototype.join = function SourceNode_join(aSep) {
- var newChildren;
- var i;
- var len = this.children.length;
- if (len > 0) {
- newChildren = [];
- for (i = 0; i < len-1; i++) {
- newChildren.push(this.children[i]);
- newChildren.push(aSep);
- }
- newChildren.push(this.children[i]);
- this.children = newChildren;
- }
- return this;
- };
-
- /**
- * Call String.prototype.replace on the very right-most source snippet. Useful
- * for trimming whitespace from the end of a source node, etc.
- *
- * @param aPattern The pattern to replace.
- * @param aReplacement The thing to replace the pattern with.
- */
- SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
- var lastChild = this.children[this.children.length - 1];
- if (lastChild[isSourceNode]) {
- lastChild.replaceRight(aPattern, aReplacement);
- }
- else if (typeof lastChild === 'string') {
- this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
- }
- else {
- this.children.push(''.replace(aPattern, aReplacement));
- }
- return this;
- };
-
- /**
- * Set the source content for a source file. This will be added to the SourceMapGenerator
- * in the sourcesContent field.
- *
- * @param aSourceFile The filename of the source file
- * @param aSourceContent The content of the source file
- */
- SourceNode.prototype.setSourceContent =
- function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
- this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
- };
-
- /**
- * Walk over the tree of SourceNodes. The walking function is called for each
- * source file content and is passed the filename and source content.
- *
- * @param aFn The traversal function.
- */
- SourceNode.prototype.walkSourceContents =
- function SourceNode_walkSourceContents(aFn) {
- for (var i = 0, len = this.children.length; i < len; i++) {
- if (this.children[i][isSourceNode]) {
- this.children[i].walkSourceContents(aFn);
- }
- }
-
- var sources = Object.keys(this.sourceContents);
- for (var i = 0, len = sources.length; i < len; i++) {
- aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
- }
- };
-
- /**
- * Return the string representation of this source node. Walks over the tree
- * and concatenates all the various snippets together to one string.
- */
- SourceNode.prototype.toString = function SourceNode_toString() {
- var str = "";
- this.walk(function (chunk) {
- str += chunk;
- });
- return str;
- };
-
- /**
- * Returns the string representation of this source node along with a source
- * map.
- */
- SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
- var generated = {
- code: "",
- line: 1,
- column: 0
- };
- var map = new SourceMapGenerator(aArgs);
- var sourceMappingActive = false;
- var lastOriginalSource = null;
- var lastOriginalLine = null;
- var lastOriginalColumn = null;
- var lastOriginalName = null;
- this.walk(function (chunk, original) {
- generated.code += chunk;
- if (original.source !== null
- && original.line !== null
- && original.column !== null) {
- if(lastOriginalSource !== original.source
- || lastOriginalLine !== original.line
- || lastOriginalColumn !== original.column
- || lastOriginalName !== original.name) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- lastOriginalSource = original.source;
- lastOriginalLine = original.line;
- lastOriginalColumn = original.column;
- lastOriginalName = original.name;
- sourceMappingActive = true;
- } else if (sourceMappingActive) {
- map.addMapping({
- generated: {
- line: generated.line,
- column: generated.column
- }
- });
- lastOriginalSource = null;
- sourceMappingActive = false;
- }
- for (var idx = 0, length = chunk.length; idx < length; idx++) {
- if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
- generated.line++;
- generated.column = 0;
- // Mappings end at eol
- if (idx + 1 === length) {
- lastOriginalSource = null;
- sourceMappingActive = false;
- } else if (sourceMappingActive) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- } else {
- generated.column++;
- }
- }
- });
- this.walkSourceContents(function (sourceFile, sourceContent) {
- map.setSourceContent(sourceFile, sourceContent);
- });
-
- return { code: generated.code, map: map };
- };
-
- exports.SourceNode = SourceNode;
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/util.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/util.js
deleted file mode 100644
index 976f6cab..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/lib/source-map/util.js
+++ /dev/null
@@ -1,319 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- /**
- * This is a helper function for getting values from parameter/options
- * objects.
- *
- * @param args The object we are extracting values from
- * @param name The name of the property we are getting.
- * @param defaultValue An optional value to return if the property is missing
- * from the object. If this is not specified and the property is missing, an
- * error will be thrown.
- */
- function getArg(aArgs, aName, aDefaultValue) {
- if (aName in aArgs) {
- return aArgs[aName];
- } else if (arguments.length === 3) {
- return aDefaultValue;
- } else {
- throw new Error('"' + aName + '" is a required argument.');
- }
- }
- exports.getArg = getArg;
-
- var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/;
- var dataUrlRegexp = /^data:.+\,.+$/;
-
- function urlParse(aUrl) {
- var match = aUrl.match(urlRegexp);
- if (!match) {
- return null;
- }
- return {
- scheme: match[1],
- auth: match[2],
- host: match[3],
- port: match[4],
- path: match[5]
- };
- }
- exports.urlParse = urlParse;
-
- function urlGenerate(aParsedUrl) {
- var url = '';
- if (aParsedUrl.scheme) {
- url += aParsedUrl.scheme + ':';
- }
- url += '//';
- if (aParsedUrl.auth) {
- url += aParsedUrl.auth + '@';
- }
- if (aParsedUrl.host) {
- url += aParsedUrl.host;
- }
- if (aParsedUrl.port) {
- url += ":" + aParsedUrl.port
- }
- if (aParsedUrl.path) {
- url += aParsedUrl.path;
- }
- return url;
- }
- exports.urlGenerate = urlGenerate;
-
- /**
- * Normalizes a path, or the path portion of a URL:
- *
- * - Replaces consequtive slashes with one slash.
- * - Removes unnecessary '.' parts.
- * - Removes unnecessary '/..' parts.
- *
- * Based on code in the Node.js 'path' core module.
- *
- * @param aPath The path or url to normalize.
- */
- function normalize(aPath) {
- var path = aPath;
- var url = urlParse(aPath);
- if (url) {
- if (!url.path) {
- return aPath;
- }
- path = url.path;
- }
- var isAbsolute = (path.charAt(0) === '/');
-
- var parts = path.split(/\/+/);
- for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
- part = parts[i];
- if (part === '.') {
- parts.splice(i, 1);
- } else if (part === '..') {
- up++;
- } else if (up > 0) {
- if (part === '') {
- // The first part is blank if the path is absolute. Trying to go
- // above the root is a no-op. Therefore we can remove all '..' parts
- // directly after the root.
- parts.splice(i + 1, up);
- up = 0;
- } else {
- parts.splice(i, 2);
- up--;
- }
- }
- }
- path = parts.join('/');
-
- if (path === '') {
- path = isAbsolute ? '/' : '.';
- }
-
- if (url) {
- url.path = path;
- return urlGenerate(url);
- }
- return path;
- }
- exports.normalize = normalize;
-
- /**
- * Joins two paths/URLs.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be joined with the root.
- *
- * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
- * scheme-relative URL: Then the scheme of aRoot, if any, is prepended
- * first.
- * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
- * is updated with the result and aRoot is returned. Otherwise the result
- * is returned.
- * - If aPath is absolute, the result is aPath.
- * - Otherwise the two paths are joined with a slash.
- * - Joining for example 'http://' and 'www.example.com' is also supported.
- */
- function join(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
- }
- if (aPath === "") {
- aPath = ".";
- }
- var aPathUrl = urlParse(aPath);
- var aRootUrl = urlParse(aRoot);
- if (aRootUrl) {
- aRoot = aRootUrl.path || '/';
- }
-
- // `join(foo, '//www.example.org')`
- if (aPathUrl && !aPathUrl.scheme) {
- if (aRootUrl) {
- aPathUrl.scheme = aRootUrl.scheme;
- }
- return urlGenerate(aPathUrl);
- }
-
- if (aPathUrl || aPath.match(dataUrlRegexp)) {
- return aPath;
- }
-
- // `join('http://', 'www.example.com')`
- if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
- aRootUrl.host = aPath;
- return urlGenerate(aRootUrl);
- }
-
- var joined = aPath.charAt(0) === '/'
- ? aPath
- : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
-
- if (aRootUrl) {
- aRootUrl.path = joined;
- return urlGenerate(aRootUrl);
- }
- return joined;
- }
- exports.join = join;
-
- /**
- * Make a path relative to a URL or another path.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be made relative to aRoot.
- */
- function relative(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
- }
-
- aRoot = aRoot.replace(/\/$/, '');
-
- // XXX: It is possible to remove this block, and the tests still pass!
- var url = urlParse(aRoot);
- if (aPath.charAt(0) == "/" && url && url.path == "/") {
- return aPath.slice(1);
- }
-
- return aPath.indexOf(aRoot + '/') === 0
- ? aPath.substr(aRoot.length + 1)
- : aPath;
- }
- exports.relative = relative;
-
- /**
- * Because behavior goes wacky when you set `__proto__` on objects, we
- * have to prefix all the strings in our set with an arbitrary character.
- *
- * See https://github.com/mozilla/source-map/pull/31 and
- * https://github.com/mozilla/source-map/issues/30
- *
- * @param String aStr
- */
- function toSetString(aStr) {
- return '$' + aStr;
- }
- exports.toSetString = toSetString;
-
- function fromSetString(aStr) {
- return aStr.substr(1);
- }
- exports.fromSetString = fromSetString;
-
- function strcmp(aStr1, aStr2) {
- var s1 = aStr1 || "";
- var s2 = aStr2 || "";
- return (s1 > s2) - (s1 < s2);
- }
-
- /**
- * Comparator between two mappings where the original positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same original source/line/column, but different generated
- * line and column the same. Useful when searching for a mapping with a
- * stubbed out mapping.
- */
- function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
- var cmp;
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp || onlyCompareOriginal) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.name, mappingB.name);
- if (cmp) {
- return cmp;
- }
-
- cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp) {
- return cmp;
- }
-
- return mappingA.generatedColumn - mappingB.generatedColumn;
- };
- exports.compareByOriginalPositions = compareByOriginalPositions;
-
- /**
- * Comparator between two mappings where the generated positions are
- * compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same generated line and column, but different
- * source/name/original line and column the same. Useful when searching for a
- * mapping with a stubbed out mapping.
- */
- function compareByGeneratedPositions(mappingA, mappingB, onlyCompareGenerated) {
- var cmp;
-
- cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp || onlyCompareGenerated) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- };
- exports.compareByGeneratedPositions = compareByGeneratedPositions;
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/package.json b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/package.json
deleted file mode 100644
index 8395b2ad..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/package.json
+++ /dev/null
@@ -1,219 +0,0 @@
-{
- "_args": [
- [
- {
- "raw": "source-map@~0.1.7",
- "scope": null,
- "escapedName": "source-map",
- "name": "source-map",
- "rawSpec": "~0.1.7",
- "spec": ">=0.1.7 <0.2.0",
- "type": "range"
- },
- "/Users/sdsteve/WebstormProjects/SpotLabNodejs/node_modules/transformers/node_modules/uglify-js"
- ]
- ],
- "_from": "source-map@>=0.1.7 <0.2.0",
- "_id": "source-map@0.1.43",
- "_inCache": true,
- "_location": "/transformers/source-map",
- "_npmUser": {
- "name": "nickfitzgerald",
- "email": "fitzgen@gmail.com"
- },
- "_npmVersion": "1.4.9",
- "_phantomChildren": {},
- "_requested": {
- "raw": "source-map@~0.1.7",
- "scope": null,
- "escapedName": "source-map",
- "name": "source-map",
- "rawSpec": "~0.1.7",
- "spec": ">=0.1.7 <0.2.0",
- "type": "range"
- },
- "_requiredBy": [
- "/transformers/uglify-js"
- ],
- "_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
- "_shasum": "c24bc146ca517c1471f5dacbe2571b2b7f9e3346",
- "_shrinkwrap": null,
- "_spec": "source-map@~0.1.7",
- "_where": "/Users/sdsteve/WebstormProjects/SpotLabNodejs/node_modules/transformers/node_modules/uglify-js",
- "author": {
- "name": "Nick Fitzgerald",
- "email": "nfitzgerald@mozilla.com"
- },
- "bugs": {
- "url": "https://github.com/mozilla/source-map/issues"
- },
- "contributors": [
- {
- "name": "Tobias Koppers",
- "email": "tobias.koppers@googlemail.com"
- },
- {
- "name": "Duncan Beevers",
- "email": "duncan@dweebd.com"
- },
- {
- "name": "Stephen Crane",
- "email": "scrane@mozilla.com"
- },
- {
- "name": "Ryan Seddon",
- "email": "seddon.ryan@gmail.com"
- },
- {
- "name": "Miles Elam",
- "email": "miles.elam@deem.com"
- },
- {
- "name": "Mihai Bazon",
- "email": "mihai.bazon@gmail.com"
- },
- {
- "name": "Michael Ficarra",
- "email": "github.public.email@michael.ficarra.me"
- },
- {
- "name": "Todd Wolfson",
- "email": "todd@twolfson.com"
- },
- {
- "name": "Alexander Solovyov",
- "email": "alexander@solovyov.net"
- },
- {
- "name": "Felix Gnass",
- "email": "fgnass@gmail.com"
- },
- {
- "name": "Conrad Irwin",
- "email": "conrad.irwin@gmail.com"
- },
- {
- "name": "usrbincc",
- "email": "usrbincc@yahoo.com"
- },
- {
- "name": "David Glasser",
- "email": "glasser@davidglasser.net"
- },
- {
- "name": "Chase Douglas",
- "email": "chase@newrelic.com"
- },
- {
- "name": "Evan Wallace",
- "email": "evan.exe@gmail.com"
- },
- {
- "name": "Heather Arthur",
- "email": "fayearthur@gmail.com"
- },
- {
- "name": "Hugh Kennedy",
- "email": "hughskennedy@gmail.com"
- },
- {
- "name": "David Glasser",
- "email": "glasser@davidglasser.net"
- },
- {
- "name": "Simon Lydell",
- "email": "simon.lydell@gmail.com"
- },
- {
- "name": "Jmeas Smith",
- "email": "jellyes2@gmail.com"
- },
- {
- "name": "Michael Z Goddard",
- "email": "mzgoddard@gmail.com"
- },
- {
- "name": "azu",
- "email": "azu@users.noreply.github.com"
- },
- {
- "name": "John Gozde",
- "email": "john@gozde.ca"
- },
- {
- "name": "Adam Kirkton",
- "email": "akirkton@truefitinnovation.com"
- },
- {
- "name": "Chris Montgomery",
- "email": "christopher.montgomery@dowjones.com"
- },
- {
- "name": "J. Ryan Stinnett",
- "email": "jryans@gmail.com"
- },
- {
- "name": "Jack Herrington",
- "email": "jherrington@walmartlabs.com"
- },
- {
- "name": "Chris Truter",
- "email": "jeffpalentine@gmail.com"
- },
- {
- "name": "Daniel Espeset",
- "email": "daniel@danielespeset.com"
- }
- ],
- "dependencies": {
- "amdefine": ">=0.0.4"
- },
- "description": "Generates and consumes source maps",
- "devDependencies": {
- "dryice": ">=0.4.8"
- },
- "directories": {
- "lib": "./lib"
- },
- "dist": {
- "shasum": "c24bc146ca517c1471f5dacbe2571b2b7f9e3346",
- "tarball": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz"
- },
- "engines": {
- "node": ">=0.8.0"
- },
- "homepage": "https://github.com/mozilla/source-map",
- "licenses": [
- {
- "type": "BSD",
- "url": "http://opensource.org/licenses/BSD-3-Clause"
- }
- ],
- "main": "./lib/source-map.js",
- "maintainers": [
- {
- "name": "mozilla-devtools",
- "email": "mozilla-developer-tools@googlegroups.com"
- },
- {
- "name": "mozilla",
- "email": "dherman@mozilla.com"
- },
- {
- "name": "nickfitzgerald",
- "email": "fitzgen@gmail.com"
- }
- ],
- "name": "source-map",
- "optionalDependencies": {},
- "readme": "ERROR: No README data found!",
- "repository": {
- "type": "git",
- "url": "git+ssh://git@github.com/mozilla/source-map.git"
- },
- "scripts": {
- "build": "node Makefile.dryice.js",
- "test": "node test/run-tests.js"
- },
- "version": "0.1.43"
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/run-tests.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/run-tests.js
deleted file mode 100755
index 64a7c3a3..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/run-tests.js
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env node
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-var assert = require('assert');
-var fs = require('fs');
-var path = require('path');
-var util = require('./source-map/util');
-
-function run(tests) {
- var total = 0;
- var passed = 0;
-
- for (var i = 0; i < tests.length; i++) {
- for (var k in tests[i].testCase) {
- if (/^test/.test(k)) {
- total++;
- try {
- tests[i].testCase[k](assert, util);
- passed++;
- }
- catch (e) {
- console.log('FAILED ' + tests[i].name + ': ' + k + '!');
- console.log(e.stack);
- }
- }
- }
- }
-
- console.log('');
- console.log(passed + ' / ' + total + ' tests passed.');
- console.log('');
-
- return total - passed;
-}
-
-function isTestFile(f) {
- var testToRun = process.argv[2];
- return testToRun
- ? path.basename(testToRun) === f
- : /^test\-.*?\.js/.test(f);
-}
-
-function toModule(f) {
- return './source-map/' + f.replace(/\.js$/, '');
-}
-
-var requires = fs.readdirSync(path.join(__dirname, 'source-map'))
- .filter(isTestFile)
- .map(toModule);
-
-var code = run(requires.map(require).map(function (mod, i) {
- return {
- name: requires[i],
- testCase: mod
- };
-}));
-
-process.exit(code);
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-api.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-api.js
deleted file mode 100644
index 3801233c..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-api.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2012 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var sourceMap;
- try {
- sourceMap = require('../../lib/source-map');
- } catch (e) {
- sourceMap = {};
- Components.utils.import('resource:///modules/devtools/SourceMap.jsm', sourceMap);
- }
-
- exports['test that the api is properly exposed in the top level'] = function (assert, util) {
- assert.equal(typeof sourceMap.SourceMapGenerator, "function");
- assert.equal(typeof sourceMap.SourceMapConsumer, "function");
- assert.equal(typeof sourceMap.SourceNode, "function");
- };
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-array-set.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-array-set.js
deleted file mode 100644
index b5797edd..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-array-set.js
+++ /dev/null
@@ -1,104 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var ArraySet = require('../../lib/source-map/array-set').ArraySet;
-
- function makeTestSet() {
- var set = new ArraySet();
- for (var i = 0; i < 100; i++) {
- set.add(String(i));
- }
- return set;
- }
-
- exports['test .has() membership'] = function (assert, util) {
- var set = makeTestSet();
- for (var i = 0; i < 100; i++) {
- assert.ok(set.has(String(i)));
- }
- };
-
- exports['test .indexOf() elements'] = function (assert, util) {
- var set = makeTestSet();
- for (var i = 0; i < 100; i++) {
- assert.strictEqual(set.indexOf(String(i)), i);
- }
- };
-
- exports['test .at() indexing'] = function (assert, util) {
- var set = makeTestSet();
- for (var i = 0; i < 100; i++) {
- assert.strictEqual(set.at(i), String(i));
- }
- };
-
- exports['test creating from an array'] = function (assert, util) {
- var set = ArraySet.fromArray(['foo', 'bar', 'baz', 'quux', 'hasOwnProperty']);
-
- assert.ok(set.has('foo'));
- assert.ok(set.has('bar'));
- assert.ok(set.has('baz'));
- assert.ok(set.has('quux'));
- assert.ok(set.has('hasOwnProperty'));
-
- assert.strictEqual(set.indexOf('foo'), 0);
- assert.strictEqual(set.indexOf('bar'), 1);
- assert.strictEqual(set.indexOf('baz'), 2);
- assert.strictEqual(set.indexOf('quux'), 3);
-
- assert.strictEqual(set.at(0), 'foo');
- assert.strictEqual(set.at(1), 'bar');
- assert.strictEqual(set.at(2), 'baz');
- assert.strictEqual(set.at(3), 'quux');
- };
-
- exports['test that you can add __proto__; see github issue #30'] = function (assert, util) {
- var set = new ArraySet();
- set.add('__proto__');
- assert.ok(set.has('__proto__'));
- assert.strictEqual(set.at(0), '__proto__');
- assert.strictEqual(set.indexOf('__proto__'), 0);
- };
-
- exports['test .fromArray() with duplicates'] = function (assert, util) {
- var set = ArraySet.fromArray(['foo', 'foo']);
- assert.ok(set.has('foo'));
- assert.strictEqual(set.at(0), 'foo');
- assert.strictEqual(set.indexOf('foo'), 0);
- assert.strictEqual(set.toArray().length, 1);
-
- set = ArraySet.fromArray(['foo', 'foo'], true);
- assert.ok(set.has('foo'));
- assert.strictEqual(set.at(0), 'foo');
- assert.strictEqual(set.at(1), 'foo');
- assert.strictEqual(set.indexOf('foo'), 0);
- assert.strictEqual(set.toArray().length, 2);
- };
-
- exports['test .add() with duplicates'] = function (assert, util) {
- var set = new ArraySet();
- set.add('foo');
-
- set.add('foo');
- assert.ok(set.has('foo'));
- assert.strictEqual(set.at(0), 'foo');
- assert.strictEqual(set.indexOf('foo'), 0);
- assert.strictEqual(set.toArray().length, 1);
-
- set.add('foo', true);
- assert.ok(set.has('foo'));
- assert.strictEqual(set.at(0), 'foo');
- assert.strictEqual(set.at(1), 'foo');
- assert.strictEqual(set.indexOf('foo'), 0);
- assert.strictEqual(set.toArray().length, 2);
- };
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-base64-vlq.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-base64-vlq.js
deleted file mode 100644
index 6fd0d99f..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-base64-vlq.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var base64VLQ = require('../../lib/source-map/base64-vlq');
-
- exports['test normal encoding and decoding'] = function (assert, util) {
- var result = {};
- for (var i = -255; i < 256; i++) {
- base64VLQ.decode(base64VLQ.encode(i), result);
- assert.equal(result.value, i);
- assert.equal(result.rest, "");
- }
- };
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-base64.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-base64.js
deleted file mode 100644
index ff3a2445..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-base64.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var base64 = require('../../lib/source-map/base64');
-
- exports['test out of range encoding'] = function (assert, util) {
- assert.throws(function () {
- base64.encode(-1);
- });
- assert.throws(function () {
- base64.encode(64);
- });
- };
-
- exports['test out of range decoding'] = function (assert, util) {
- assert.throws(function () {
- base64.decode('=');
- });
- };
-
- exports['test normal encoding and decoding'] = function (assert, util) {
- for (var i = 0; i < 64; i++) {
- assert.equal(base64.decode(base64.encode(i)), i);
- }
- };
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-binary-search.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-binary-search.js
deleted file mode 100644
index f1c9e0fc..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-binary-search.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var binarySearch = require('../../lib/source-map/binary-search');
-
- function numberCompare(a, b) {
- return a - b;
- }
-
- exports['test too high'] = function (assert, util) {
- var needle = 30;
- var haystack = [2,4,6,8,10,12,14,16,18,20];
-
- assert.doesNotThrow(function () {
- binarySearch.search(needle, haystack, numberCompare);
- });
-
- assert.equal(haystack[binarySearch.search(needle, haystack, numberCompare)], 20);
- };
-
- exports['test too low'] = function (assert, util) {
- var needle = 1;
- var haystack = [2,4,6,8,10,12,14,16,18,20];
-
- assert.doesNotThrow(function () {
- binarySearch.search(needle, haystack, numberCompare);
- });
-
- assert.equal(binarySearch.search(needle, haystack, numberCompare), -1);
- };
-
- exports['test exact search'] = function (assert, util) {
- var needle = 4;
- var haystack = [2,4,6,8,10,12,14,16,18,20];
-
- assert.equal(haystack[binarySearch.search(needle, haystack, numberCompare)], 4);
- };
-
- exports['test fuzzy search'] = function (assert, util) {
- var needle = 19;
- var haystack = [2,4,6,8,10,12,14,16,18,20];
-
- assert.equal(haystack[binarySearch.search(needle, haystack, numberCompare)], 18);
- };
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-dog-fooding.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-dog-fooding.js
deleted file mode 100644
index 26757b2d..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-dog-fooding.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer;
- var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator;
-
- exports['test eating our own dog food'] = function (assert, util) {
- var smg = new SourceMapGenerator({
- file: 'testing.js',
- sourceRoot: '/wu/tang'
- });
-
- smg.addMapping({
- source: 'gza.coffee',
- original: { line: 1, column: 0 },
- generated: { line: 2, column: 2 }
- });
-
- smg.addMapping({
- source: 'gza.coffee',
- original: { line: 2, column: 0 },
- generated: { line: 3, column: 2 }
- });
-
- smg.addMapping({
- source: 'gza.coffee',
- original: { line: 3, column: 0 },
- generated: { line: 4, column: 2 }
- });
-
- smg.addMapping({
- source: 'gza.coffee',
- original: { line: 4, column: 0 },
- generated: { line: 5, column: 2 }
- });
-
- smg.addMapping({
- source: 'gza.coffee',
- original: { line: 5, column: 10 },
- generated: { line: 6, column: 12 }
- });
-
- var smc = new SourceMapConsumer(smg.toString());
-
- // Exact
- util.assertMapping(2, 2, '/wu/tang/gza.coffee', 1, 0, null, smc, assert);
- util.assertMapping(3, 2, '/wu/tang/gza.coffee', 2, 0, null, smc, assert);
- util.assertMapping(4, 2, '/wu/tang/gza.coffee', 3, 0, null, smc, assert);
- util.assertMapping(5, 2, '/wu/tang/gza.coffee', 4, 0, null, smc, assert);
- util.assertMapping(6, 12, '/wu/tang/gza.coffee', 5, 10, null, smc, assert);
-
- // Fuzzy
-
- // Generated to original
- util.assertMapping(2, 0, null, null, null, null, smc, assert, true);
- util.assertMapping(2, 9, '/wu/tang/gza.coffee', 1, 0, null, smc, assert, true);
- util.assertMapping(3, 0, null, null, null, null, smc, assert, true);
- util.assertMapping(3, 9, '/wu/tang/gza.coffee', 2, 0, null, smc, assert, true);
- util.assertMapping(4, 0, null, null, null, null, smc, assert, true);
- util.assertMapping(4, 9, '/wu/tang/gza.coffee', 3, 0, null, smc, assert, true);
- util.assertMapping(5, 0, null, null, null, null, smc, assert, true);
- util.assertMapping(5, 9, '/wu/tang/gza.coffee', 4, 0, null, smc, assert, true);
- util.assertMapping(6, 0, null, null, null, null, smc, assert, true);
- util.assertMapping(6, 9, null, null, null, null, smc, assert, true);
- util.assertMapping(6, 13, '/wu/tang/gza.coffee', 5, 10, null, smc, assert, true);
-
- // Original to generated
- util.assertMapping(2, 2, '/wu/tang/gza.coffee', 1, 1, null, smc, assert, null, true);
- util.assertMapping(3, 2, '/wu/tang/gza.coffee', 2, 3, null, smc, assert, null, true);
- util.assertMapping(4, 2, '/wu/tang/gza.coffee', 3, 6, null, smc, assert, null, true);
- util.assertMapping(5, 2, '/wu/tang/gza.coffee', 4, 9, null, smc, assert, null, true);
- util.assertMapping(5, 2, '/wu/tang/gza.coffee', 5, 9, null, smc, assert, null, true);
- util.assertMapping(6, 12, '/wu/tang/gza.coffee', 6, 19, null, smc, assert, null, true);
- };
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-source-map-consumer.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-source-map-consumer.js
deleted file mode 100644
index c7149434..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-source-map-consumer.js
+++ /dev/null
@@ -1,702 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer;
- var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator;
-
- exports['test that we can instantiate with a string or an object'] = function (assert, util) {
- assert.doesNotThrow(function () {
- var map = new SourceMapConsumer(util.testMap);
- });
- assert.doesNotThrow(function () {
- var map = new SourceMapConsumer(JSON.stringify(util.testMap));
- });
- };
-
- exports['test that the `sources` field has the original sources'] = function (assert, util) {
- var map;
- var sources;
-
- map = new SourceMapConsumer(util.testMap);
- sources = map.sources;
- assert.equal(sources[0], '/the/root/one.js');
- assert.equal(sources[1], '/the/root/two.js');
- assert.equal(sources.length, 2);
-
- map = new SourceMapConsumer(util.testMapNoSourceRoot);
- sources = map.sources;
- assert.equal(sources[0], 'one.js');
- assert.equal(sources[1], 'two.js');
- assert.equal(sources.length, 2);
-
- map = new SourceMapConsumer(util.testMapEmptySourceRoot);
- sources = map.sources;
- assert.equal(sources[0], 'one.js');
- assert.equal(sources[1], 'two.js');
- assert.equal(sources.length, 2);
- };
-
- exports['test that the source root is reflected in a mapping\'s source field'] = function (assert, util) {
- var map;
- var mapping;
-
- map = new SourceMapConsumer(util.testMap);
-
- mapping = map.originalPositionFor({
- line: 2,
- column: 1
- });
- assert.equal(mapping.source, '/the/root/two.js');
-
- mapping = map.originalPositionFor({
- line: 1,
- column: 1
- });
- assert.equal(mapping.source, '/the/root/one.js');
-
-
- map = new SourceMapConsumer(util.testMapNoSourceRoot);
-
- mapping = map.originalPositionFor({
- line: 2,
- column: 1
- });
- assert.equal(mapping.source, 'two.js');
-
- mapping = map.originalPositionFor({
- line: 1,
- column: 1
- });
- assert.equal(mapping.source, 'one.js');
-
-
- map = new SourceMapConsumer(util.testMapEmptySourceRoot);
-
- mapping = map.originalPositionFor({
- line: 2,
- column: 1
- });
- assert.equal(mapping.source, 'two.js');
-
- mapping = map.originalPositionFor({
- line: 1,
- column: 1
- });
- assert.equal(mapping.source, 'one.js');
- };
-
- exports['test mapping tokens back exactly'] = function (assert, util) {
- var map = new SourceMapConsumer(util.testMap);
-
- util.assertMapping(1, 1, '/the/root/one.js', 1, 1, null, map, assert);
- util.assertMapping(1, 5, '/the/root/one.js', 1, 5, null, map, assert);
- util.assertMapping(1, 9, '/the/root/one.js', 1, 11, null, map, assert);
- util.assertMapping(1, 18, '/the/root/one.js', 1, 21, 'bar', map, assert);
- util.assertMapping(1, 21, '/the/root/one.js', 2, 3, null, map, assert);
- util.assertMapping(1, 28, '/the/root/one.js', 2, 10, 'baz', map, assert);
- util.assertMapping(1, 32, '/the/root/one.js', 2, 14, 'bar', map, assert);
-
- util.assertMapping(2, 1, '/the/root/two.js', 1, 1, null, map, assert);
- util.assertMapping(2, 5, '/the/root/two.js', 1, 5, null, map, assert);
- util.assertMapping(2, 9, '/the/root/two.js', 1, 11, null, map, assert);
- util.assertMapping(2, 18, '/the/root/two.js', 1, 21, 'n', map, assert);
- util.assertMapping(2, 21, '/the/root/two.js', 2, 3, null, map, assert);
- util.assertMapping(2, 28, '/the/root/two.js', 2, 10, 'n', map, assert);
- };
-
- exports['test mapping tokens fuzzy'] = function (assert, util) {
- var map = new SourceMapConsumer(util.testMap);
-
- // Finding original positions
- util.assertMapping(1, 20, '/the/root/one.js', 1, 21, 'bar', map, assert, true);
- util.assertMapping(1, 30, '/the/root/one.js', 2, 10, 'baz', map, assert, true);
- util.assertMapping(2, 12, '/the/root/two.js', 1, 11, null, map, assert, true);
-
- // Finding generated positions
- util.assertMapping(1, 18, '/the/root/one.js', 1, 22, 'bar', map, assert, null, true);
- util.assertMapping(1, 28, '/the/root/one.js', 2, 13, 'baz', map, assert, null, true);
- util.assertMapping(2, 9, '/the/root/two.js', 1, 16, null, map, assert, null, true);
- };
-
- exports['test mappings and end of lines'] = function (assert, util) {
- var smg = new SourceMapGenerator({
- file: 'foo.js'
- });
- smg.addMapping({
- original: { line: 1, column: 1 },
- generated: { line: 1, column: 1 },
- source: 'bar.js'
- });
- smg.addMapping({
- original: { line: 2, column: 2 },
- generated: { line: 2, column: 2 },
- source: 'bar.js'
- });
-
- var map = SourceMapConsumer.fromSourceMap(smg);
-
- // When finding original positions, mappings end at the end of the line.
- util.assertMapping(2, 1, null, null, null, null, map, assert, true)
-
- // When finding generated positions, mappings do not end at the end of the line.
- util.assertMapping(1, 1, 'bar.js', 2, 1, null, map, assert, null, true);
- };
-
- exports['test creating source map consumers with )]}\' prefix'] = function (assert, util) {
- assert.doesNotThrow(function () {
- var map = new SourceMapConsumer(")]}'" + JSON.stringify(util.testMap));
- });
- };
-
- exports['test eachMapping'] = function (assert, util) {
- var map;
-
- map = new SourceMapConsumer(util.testMap);
- var previousLine = -Infinity;
- var previousColumn = -Infinity;
- map.eachMapping(function (mapping) {
- assert.ok(mapping.generatedLine >= previousLine);
-
- assert.ok(mapping.source === '/the/root/one.js' || mapping.source === '/the/root/two.js');
-
- if (mapping.generatedLine === previousLine) {
- assert.ok(mapping.generatedColumn >= previousColumn);
- previousColumn = mapping.generatedColumn;
- }
- else {
- previousLine = mapping.generatedLine;
- previousColumn = -Infinity;
- }
- });
-
- map = new SourceMapConsumer(util.testMapNoSourceRoot);
- map.eachMapping(function (mapping) {
- assert.ok(mapping.source === 'one.js' || mapping.source === 'two.js');
- });
-
- map = new SourceMapConsumer(util.testMapEmptySourceRoot);
- map.eachMapping(function (mapping) {
- assert.ok(mapping.source === 'one.js' || mapping.source === 'two.js');
- });
- };
-
- exports['test iterating over mappings in a different order'] = function (assert, util) {
- var map = new SourceMapConsumer(util.testMap);
- var previousLine = -Infinity;
- var previousColumn = -Infinity;
- var previousSource = "";
- map.eachMapping(function (mapping) {
- assert.ok(mapping.source >= previousSource);
-
- if (mapping.source === previousSource) {
- assert.ok(mapping.originalLine >= previousLine);
-
- if (mapping.originalLine === previousLine) {
- assert.ok(mapping.originalColumn >= previousColumn);
- previousColumn = mapping.originalColumn;
- }
- else {
- previousLine = mapping.originalLine;
- previousColumn = -Infinity;
- }
- }
- else {
- previousSource = mapping.source;
- previousLine = -Infinity;
- previousColumn = -Infinity;
- }
- }, null, SourceMapConsumer.ORIGINAL_ORDER);
- };
-
- exports['test that we can set the context for `this` in eachMapping'] = function (assert, util) {
- var map = new SourceMapConsumer(util.testMap);
- var context = {};
- map.eachMapping(function () {
- assert.equal(this, context);
- }, context);
- };
-
- exports['test that the `sourcesContent` field has the original sources'] = function (assert, util) {
- var map = new SourceMapConsumer(util.testMapWithSourcesContent);
- var sourcesContent = map.sourcesContent;
-
- assert.equal(sourcesContent[0], ' ONE.foo = function (bar) {\n return baz(bar);\n };');
- assert.equal(sourcesContent[1], ' TWO.inc = function (n) {\n return n + 1;\n };');
- assert.equal(sourcesContent.length, 2);
- };
-
- exports['test that we can get the original sources for the sources'] = function (assert, util) {
- var map = new SourceMapConsumer(util.testMapWithSourcesContent);
- var sources = map.sources;
-
- assert.equal(map.sourceContentFor(sources[0]), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
- assert.equal(map.sourceContentFor(sources[1]), ' TWO.inc = function (n) {\n return n + 1;\n };');
- assert.equal(map.sourceContentFor("one.js"), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
- assert.equal(map.sourceContentFor("two.js"), ' TWO.inc = function (n) {\n return n + 1;\n };');
- assert.throws(function () {
- map.sourceContentFor("");
- }, Error);
- assert.throws(function () {
- map.sourceContentFor("/the/root/three.js");
- }, Error);
- assert.throws(function () {
- map.sourceContentFor("three.js");
- }, Error);
- };
-
- exports['test that we can get the original source content with relative source paths'] = function (assert, util) {
- var map = new SourceMapConsumer(util.testMapRelativeSources);
- var sources = map.sources;
-
- assert.equal(map.sourceContentFor(sources[0]), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
- assert.equal(map.sourceContentFor(sources[1]), ' TWO.inc = function (n) {\n return n + 1;\n };');
- assert.equal(map.sourceContentFor("one.js"), ' ONE.foo = function (bar) {\n return baz(bar);\n };');
- assert.equal(map.sourceContentFor("two.js"), ' TWO.inc = function (n) {\n return n + 1;\n };');
- assert.throws(function () {
- map.sourceContentFor("");
- }, Error);
- assert.throws(function () {
- map.sourceContentFor("/the/root/three.js");
- }, Error);
- assert.throws(function () {
- map.sourceContentFor("three.js");
- }, Error);
- };
-
- exports['test sourceRoot + generatedPositionFor'] = function (assert, util) {
- var map = new SourceMapGenerator({
- sourceRoot: 'foo/bar',
- file: 'baz.js'
- });
- map.addMapping({
- original: { line: 1, column: 1 },
- generated: { line: 2, column: 2 },
- source: 'bang.coffee'
- });
- map.addMapping({
- original: { line: 5, column: 5 },
- generated: { line: 6, column: 6 },
- source: 'bang.coffee'
- });
- map = new SourceMapConsumer(map.toString());
-
- // Should handle without sourceRoot.
- var pos = map.generatedPositionFor({
- line: 1,
- column: 1,
- source: 'bang.coffee'
- });
-
- assert.equal(pos.line, 2);
- assert.equal(pos.column, 2);
-
- // Should handle with sourceRoot.
- var pos = map.generatedPositionFor({
- line: 1,
- column: 1,
- source: 'foo/bar/bang.coffee'
- });
-
- assert.equal(pos.line, 2);
- assert.equal(pos.column, 2);
- };
-
- exports['test allGeneratedPositionsFor'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'generated.js'
- });
- map.addMapping({
- original: { line: 1, column: 1 },
- generated: { line: 2, column: 2 },
- source: 'foo.coffee'
- });
- map.addMapping({
- original: { line: 1, column: 1 },
- generated: { line: 2, column: 2 },
- source: 'bar.coffee'
- });
- map.addMapping({
- original: { line: 2, column: 1 },
- generated: { line: 3, column: 2 },
- source: 'bar.coffee'
- });
- map.addMapping({
- original: { line: 2, column: 2 },
- generated: { line: 3, column: 3 },
- source: 'bar.coffee'
- });
- map.addMapping({
- original: { line: 3, column: 1 },
- generated: { line: 4, column: 2 },
- source: 'bar.coffee'
- });
- map = new SourceMapConsumer(map.toString());
-
- var mappings = map.allGeneratedPositionsFor({
- line: 2,
- source: 'bar.coffee'
- });
-
- assert.equal(mappings.length, 2);
- assert.equal(mappings[0].line, 3);
- assert.equal(mappings[0].column, 2);
- assert.equal(mappings[1].line, 3);
- assert.equal(mappings[1].column, 3);
- };
-
- exports['test allGeneratedPositionsFor for line with no mappings'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'generated.js'
- });
- map.addMapping({
- original: { line: 1, column: 1 },
- generated: { line: 2, column: 2 },
- source: 'foo.coffee'
- });
- map.addMapping({
- original: { line: 1, column: 1 },
- generated: { line: 2, column: 2 },
- source: 'bar.coffee'
- });
- map.addMapping({
- original: { line: 3, column: 1 },
- generated: { line: 4, column: 2 },
- source: 'bar.coffee'
- });
- map = new SourceMapConsumer(map.toString());
-
- var mappings = map.allGeneratedPositionsFor({
- line: 2,
- source: 'bar.coffee'
- });
-
- assert.equal(mappings.length, 0);
- };
-
- exports['test allGeneratedPositionsFor source map with no mappings'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'generated.js'
- });
- map = new SourceMapConsumer(map.toString());
-
- var mappings = map.allGeneratedPositionsFor({
- line: 2,
- source: 'bar.coffee'
- });
-
- assert.equal(mappings.length, 0);
- };
-
- exports['test computeColumnSpans'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'generated.js'
- });
- map.addMapping({
- original: { line: 1, column: 1 },
- generated: { line: 1, column: 1 },
- source: 'foo.coffee'
- });
- map.addMapping({
- original: { line: 2, column: 1 },
- generated: { line: 2, column: 1 },
- source: 'foo.coffee'
- });
- map.addMapping({
- original: { line: 2, column: 2 },
- generated: { line: 2, column: 10 },
- source: 'foo.coffee'
- });
- map.addMapping({
- original: { line: 2, column: 3 },
- generated: { line: 2, column: 20 },
- source: 'foo.coffee'
- });
- map.addMapping({
- original: { line: 3, column: 1 },
- generated: { line: 3, column: 1 },
- source: 'foo.coffee'
- });
- map.addMapping({
- original: { line: 3, column: 2 },
- generated: { line: 3, column: 2 },
- source: 'foo.coffee'
- });
- map = new SourceMapConsumer(map.toString());
-
- map.computeColumnSpans();
-
- var mappings = map.allGeneratedPositionsFor({
- line: 1,
- source: 'foo.coffee'
- });
-
- assert.equal(mappings.length, 1);
- assert.equal(mappings[0].lastColumn, Infinity);
-
- var mappings = map.allGeneratedPositionsFor({
- line: 2,
- source: 'foo.coffee'
- });
-
- assert.equal(mappings.length, 3);
- assert.equal(mappings[0].lastColumn, 9);
- assert.equal(mappings[1].lastColumn, 19);
- assert.equal(mappings[2].lastColumn, Infinity);
-
- var mappings = map.allGeneratedPositionsFor({
- line: 3,
- source: 'foo.coffee'
- });
-
- assert.equal(mappings.length, 2);
- assert.equal(mappings[0].lastColumn, 1);
- assert.equal(mappings[1].lastColumn, Infinity);
- };
-
- exports['test sourceRoot + originalPositionFor'] = function (assert, util) {
- var map = new SourceMapGenerator({
- sourceRoot: 'foo/bar',
- file: 'baz.js'
- });
- map.addMapping({
- original: { line: 1, column: 1 },
- generated: { line: 2, column: 2 },
- source: 'bang.coffee'
- });
- map = new SourceMapConsumer(map.toString());
-
- var pos = map.originalPositionFor({
- line: 2,
- column: 2,
- });
-
- // Should always have the prepended source root
- assert.equal(pos.source, 'foo/bar/bang.coffee');
- assert.equal(pos.line, 1);
- assert.equal(pos.column, 1);
- };
-
- exports['test github issue #56'] = function (assert, util) {
- var map = new SourceMapGenerator({
- sourceRoot: 'http://',
- file: 'www.example.com/foo.js'
- });
- map.addMapping({
- original: { line: 1, column: 1 },
- generated: { line: 2, column: 2 },
- source: 'www.example.com/original.js'
- });
- map = new SourceMapConsumer(map.toString());
-
- var sources = map.sources;
- assert.equal(sources.length, 1);
- assert.equal(sources[0], 'http://www.example.com/original.js');
- };
-
- exports['test github issue #43'] = function (assert, util) {
- var map = new SourceMapGenerator({
- sourceRoot: 'http://example.com',
- file: 'foo.js'
- });
- map.addMapping({
- original: { line: 1, column: 1 },
- generated: { line: 2, column: 2 },
- source: 'http://cdn.example.com/original.js'
- });
- map = new SourceMapConsumer(map.toString());
-
- var sources = map.sources;
- assert.equal(sources.length, 1,
- 'Should only be one source.');
- assert.equal(sources[0], 'http://cdn.example.com/original.js',
- 'Should not be joined with the sourceRoot.');
- };
-
- exports['test absolute path, but same host sources'] = function (assert, util) {
- var map = new SourceMapGenerator({
- sourceRoot: 'http://example.com/foo/bar',
- file: 'foo.js'
- });
- map.addMapping({
- original: { line: 1, column: 1 },
- generated: { line: 2, column: 2 },
- source: '/original.js'
- });
- map = new SourceMapConsumer(map.toString());
-
- var sources = map.sources;
- assert.equal(sources.length, 1,
- 'Should only be one source.');
- assert.equal(sources[0], 'http://example.com/original.js',
- 'Source should be relative the host of the source root.');
- };
-
- exports['test github issue #64'] = function (assert, util) {
- var map = new SourceMapConsumer({
- "version": 3,
- "file": "foo.js",
- "sourceRoot": "http://example.com/",
- "sources": ["/a"],
- "names": [],
- "mappings": "AACA",
- "sourcesContent": ["foo"]
- });
-
- assert.equal(map.sourceContentFor("a"), "foo");
- assert.equal(map.sourceContentFor("/a"), "foo");
- };
-
- exports['test bug 885597'] = function (assert, util) {
- var map = new SourceMapConsumer({
- "version": 3,
- "file": "foo.js",
- "sourceRoot": "file:///Users/AlGore/Invented/The/Internet/",
- "sources": ["/a"],
- "names": [],
- "mappings": "AACA",
- "sourcesContent": ["foo"]
- });
-
- var s = map.sources[0];
- assert.equal(map.sourceContentFor(s), "foo");
- };
-
- exports['test github issue #72, duplicate sources'] = function (assert, util) {
- var map = new SourceMapConsumer({
- "version": 3,
- "file": "foo.js",
- "sources": ["source1.js", "source1.js", "source3.js"],
- "names": [],
- "mappings": ";EAAC;;IAEE;;MEEE",
- "sourceRoot": "http://example.com"
- });
-
- var pos = map.originalPositionFor({
- line: 2,
- column: 2
- });
- assert.equal(pos.source, 'http://example.com/source1.js');
- assert.equal(pos.line, 1);
- assert.equal(pos.column, 1);
-
- var pos = map.originalPositionFor({
- line: 4,
- column: 4
- });
- assert.equal(pos.source, 'http://example.com/source1.js');
- assert.equal(pos.line, 3);
- assert.equal(pos.column, 3);
-
- var pos = map.originalPositionFor({
- line: 6,
- column: 6
- });
- assert.equal(pos.source, 'http://example.com/source3.js');
- assert.equal(pos.line, 5);
- assert.equal(pos.column, 5);
- };
-
- exports['test github issue #72, duplicate names'] = function (assert, util) {
- var map = new SourceMapConsumer({
- "version": 3,
- "file": "foo.js",
- "sources": ["source.js"],
- "names": ["name1", "name1", "name3"],
- "mappings": ";EAACA;;IAEEA;;MAEEE",
- "sourceRoot": "http://example.com"
- });
-
- var pos = map.originalPositionFor({
- line: 2,
- column: 2
- });
- assert.equal(pos.name, 'name1');
- assert.equal(pos.line, 1);
- assert.equal(pos.column, 1);
-
- var pos = map.originalPositionFor({
- line: 4,
- column: 4
- });
- assert.equal(pos.name, 'name1');
- assert.equal(pos.line, 3);
- assert.equal(pos.column, 3);
-
- var pos = map.originalPositionFor({
- line: 6,
- column: 6
- });
- assert.equal(pos.name, 'name3');
- assert.equal(pos.line, 5);
- assert.equal(pos.column, 5);
- };
-
- exports['test SourceMapConsumer.fromSourceMap'] = function (assert, util) {
- var smg = new SourceMapGenerator({
- sourceRoot: 'http://example.com/',
- file: 'foo.js'
- });
- smg.addMapping({
- original: { line: 1, column: 1 },
- generated: { line: 2, column: 2 },
- source: 'bar.js'
- });
- smg.addMapping({
- original: { line: 2, column: 2 },
- generated: { line: 4, column: 4 },
- source: 'baz.js',
- name: 'dirtMcGirt'
- });
- smg.setSourceContent('baz.js', 'baz.js content');
-
- var smc = SourceMapConsumer.fromSourceMap(smg);
- assert.equal(smc.file, 'foo.js');
- assert.equal(smc.sourceRoot, 'http://example.com/');
- assert.equal(smc.sources.length, 2);
- assert.equal(smc.sources[0], 'http://example.com/bar.js');
- assert.equal(smc.sources[1], 'http://example.com/baz.js');
- assert.equal(smc.sourceContentFor('baz.js'), 'baz.js content');
-
- var pos = smc.originalPositionFor({
- line: 2,
- column: 2
- });
- assert.equal(pos.line, 1);
- assert.equal(pos.column, 1);
- assert.equal(pos.source, 'http://example.com/bar.js');
- assert.equal(pos.name, null);
-
- pos = smc.generatedPositionFor({
- line: 1,
- column: 1,
- source: 'http://example.com/bar.js'
- });
- assert.equal(pos.line, 2);
- assert.equal(pos.column, 2);
-
- pos = smc.originalPositionFor({
- line: 4,
- column: 4
- });
- assert.equal(pos.line, 2);
- assert.equal(pos.column, 2);
- assert.equal(pos.source, 'http://example.com/baz.js');
- assert.equal(pos.name, 'dirtMcGirt');
-
- pos = smc.generatedPositionFor({
- line: 2,
- column: 2,
- source: 'http://example.com/baz.js'
- });
- assert.equal(pos.line, 4);
- assert.equal(pos.column, 4);
- };
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-source-map-generator.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-source-map-generator.js
deleted file mode 100644
index d748bb18..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-source-map-generator.js
+++ /dev/null
@@ -1,679 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator;
- var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer;
- var SourceNode = require('../../lib/source-map/source-node').SourceNode;
- var util = require('./util');
-
- exports['test some simple stuff'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'foo.js',
- sourceRoot: '.'
- });
- assert.ok(true);
-
- var map = new SourceMapGenerator().toJSON();
- assert.ok(!('file' in map));
- assert.ok(!('sourceRoot' in map));
- };
-
- exports['test JSON serialization'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'foo.js',
- sourceRoot: '.'
- });
- assert.equal(map.toString(), JSON.stringify(map));
- };
-
- exports['test adding mappings (case 1)'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'generated-foo.js',
- sourceRoot: '.'
- });
-
- assert.doesNotThrow(function () {
- map.addMapping({
- generated: { line: 1, column: 1 }
- });
- });
- };
-
- exports['test adding mappings (case 2)'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'generated-foo.js',
- sourceRoot: '.'
- });
-
- assert.doesNotThrow(function () {
- map.addMapping({
- generated: { line: 1, column: 1 },
- source: 'bar.js',
- original: { line: 1, column: 1 }
- });
- });
- };
-
- exports['test adding mappings (case 3)'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'generated-foo.js',
- sourceRoot: '.'
- });
-
- assert.doesNotThrow(function () {
- map.addMapping({
- generated: { line: 1, column: 1 },
- source: 'bar.js',
- original: { line: 1, column: 1 },
- name: 'someToken'
- });
- });
- };
-
- exports['test adding mappings (invalid)'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'generated-foo.js',
- sourceRoot: '.'
- });
-
- // Not enough info.
- assert.throws(function () {
- map.addMapping({});
- });
-
- // Original file position, but no source.
- assert.throws(function () {
- map.addMapping({
- generated: { line: 1, column: 1 },
- original: { line: 1, column: 1 }
- });
- });
- };
-
- exports['test adding mappings with skipValidation'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'generated-foo.js',
- sourceRoot: '.',
- skipValidation: true
- });
-
- // Not enough info, caught by `util.getArgs`
- assert.throws(function () {
- map.addMapping({});
- });
-
- // Original file position, but no source. Not checked.
- assert.doesNotThrow(function () {
- map.addMapping({
- generated: { line: 1, column: 1 },
- original: { line: 1, column: 1 }
- });
- });
- };
-
- exports['test that the correct mappings are being generated'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'min.js',
- sourceRoot: '/the/root'
- });
-
- map.addMapping({
- generated: { line: 1, column: 1 },
- original: { line: 1, column: 1 },
- source: 'one.js'
- });
- map.addMapping({
- generated: { line: 1, column: 5 },
- original: { line: 1, column: 5 },
- source: 'one.js'
- });
- map.addMapping({
- generated: { line: 1, column: 9 },
- original: { line: 1, column: 11 },
- source: 'one.js'
- });
- map.addMapping({
- generated: { line: 1, column: 18 },
- original: { line: 1, column: 21 },
- source: 'one.js',
- name: 'bar'
- });
- map.addMapping({
- generated: { line: 1, column: 21 },
- original: { line: 2, column: 3 },
- source: 'one.js'
- });
- map.addMapping({
- generated: { line: 1, column: 28 },
- original: { line: 2, column: 10 },
- source: 'one.js',
- name: 'baz'
- });
- map.addMapping({
- generated: { line: 1, column: 32 },
- original: { line: 2, column: 14 },
- source: 'one.js',
- name: 'bar'
- });
-
- map.addMapping({
- generated: { line: 2, column: 1 },
- original: { line: 1, column: 1 },
- source: 'two.js'
- });
- map.addMapping({
- generated: { line: 2, column: 5 },
- original: { line: 1, column: 5 },
- source: 'two.js'
- });
- map.addMapping({
- generated: { line: 2, column: 9 },
- original: { line: 1, column: 11 },
- source: 'two.js'
- });
- map.addMapping({
- generated: { line: 2, column: 18 },
- original: { line: 1, column: 21 },
- source: 'two.js',
- name: 'n'
- });
- map.addMapping({
- generated: { line: 2, column: 21 },
- original: { line: 2, column: 3 },
- source: 'two.js'
- });
- map.addMapping({
- generated: { line: 2, column: 28 },
- original: { line: 2, column: 10 },
- source: 'two.js',
- name: 'n'
- });
-
- map = JSON.parse(map.toString());
-
- util.assertEqualMaps(assert, map, util.testMap);
- };
-
- exports['test that adding a mapping with an empty string name does not break generation'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'generated-foo.js',
- sourceRoot: '.'
- });
-
- map.addMapping({
- generated: { line: 1, column: 1 },
- source: 'bar.js',
- original: { line: 1, column: 1 },
- name: ''
- });
-
- assert.doesNotThrow(function () {
- JSON.parse(map.toString());
- });
- };
-
- exports['test that source content can be set'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'min.js',
- sourceRoot: '/the/root'
- });
- map.addMapping({
- generated: { line: 1, column: 1 },
- original: { line: 1, column: 1 },
- source: 'one.js'
- });
- map.addMapping({
- generated: { line: 2, column: 1 },
- original: { line: 1, column: 1 },
- source: 'two.js'
- });
- map.setSourceContent('one.js', 'one file content');
-
- map = JSON.parse(map.toString());
- assert.equal(map.sources[0], 'one.js');
- assert.equal(map.sources[1], 'two.js');
- assert.equal(map.sourcesContent[0], 'one file content');
- assert.equal(map.sourcesContent[1], null);
- };
-
- exports['test .fromSourceMap'] = function (assert, util) {
- var map = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(util.testMap));
- util.assertEqualMaps(assert, map.toJSON(), util.testMap);
- };
-
- exports['test .fromSourceMap with sourcesContent'] = function (assert, util) {
- var map = SourceMapGenerator.fromSourceMap(
- new SourceMapConsumer(util.testMapWithSourcesContent));
- util.assertEqualMaps(assert, map.toJSON(), util.testMapWithSourcesContent);
- };
-
- exports['test applySourceMap'] = function (assert, util) {
- var node = new SourceNode(null, null, null, [
- new SourceNode(2, 0, 'fileX', 'lineX2\n'),
- 'genA1\n',
- new SourceNode(2, 0, 'fileY', 'lineY2\n'),
- 'genA2\n',
- new SourceNode(1, 0, 'fileX', 'lineX1\n'),
- 'genA3\n',
- new SourceNode(1, 0, 'fileY', 'lineY1\n')
- ]);
- var mapStep1 = node.toStringWithSourceMap({
- file: 'fileA'
- }).map;
- mapStep1.setSourceContent('fileX', 'lineX1\nlineX2\n');
- mapStep1 = mapStep1.toJSON();
-
- node = new SourceNode(null, null, null, [
- 'gen1\n',
- new SourceNode(1, 0, 'fileA', 'lineA1\n'),
- new SourceNode(2, 0, 'fileA', 'lineA2\n'),
- new SourceNode(3, 0, 'fileA', 'lineA3\n'),
- new SourceNode(4, 0, 'fileA', 'lineA4\n'),
- new SourceNode(1, 0, 'fileB', 'lineB1\n'),
- new SourceNode(2, 0, 'fileB', 'lineB2\n'),
- 'gen2\n'
- ]);
- var mapStep2 = node.toStringWithSourceMap({
- file: 'fileGen'
- }).map;
- mapStep2.setSourceContent('fileB', 'lineB1\nlineB2\n');
- mapStep2 = mapStep2.toJSON();
-
- node = new SourceNode(null, null, null, [
- 'gen1\n',
- new SourceNode(2, 0, 'fileX', 'lineA1\n'),
- new SourceNode(2, 0, 'fileA', 'lineA2\n'),
- new SourceNode(2, 0, 'fileY', 'lineA3\n'),
- new SourceNode(4, 0, 'fileA', 'lineA4\n'),
- new SourceNode(1, 0, 'fileB', 'lineB1\n'),
- new SourceNode(2, 0, 'fileB', 'lineB2\n'),
- 'gen2\n'
- ]);
- var expectedMap = node.toStringWithSourceMap({
- file: 'fileGen'
- }).map;
- expectedMap.setSourceContent('fileX', 'lineX1\nlineX2\n');
- expectedMap.setSourceContent('fileB', 'lineB1\nlineB2\n');
- expectedMap = expectedMap.toJSON();
-
- // apply source map "mapStep1" to "mapStep2"
- var generator = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(mapStep2));
- generator.applySourceMap(new SourceMapConsumer(mapStep1));
- var actualMap = generator.toJSON();
-
- util.assertEqualMaps(assert, actualMap, expectedMap);
- };
-
- exports['test applySourceMap throws when file is missing'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'test.js'
- });
- var map2 = new SourceMapGenerator();
- assert.throws(function() {
- map.applySourceMap(new SourceMapConsumer(map2.toJSON()));
- });
- };
-
- exports['test the two additional parameters of applySourceMap'] = function (assert, util) {
- // Assume the following directory structure:
- //
- // http://foo.org/
- // bar.coffee
- // app/
- // coffee/
- // foo.coffee
- // temp/
- // bundle.js
- // temp_maps/
- // bundle.js.map
- // public/
- // bundle.min.js
- // bundle.min.js.map
- //
- // http://www.example.com/
- // baz.coffee
-
- var bundleMap = new SourceMapGenerator({
- file: 'bundle.js'
- });
- bundleMap.addMapping({
- generated: { line: 3, column: 3 },
- original: { line: 2, column: 2 },
- source: '../../coffee/foo.coffee'
- });
- bundleMap.setSourceContent('../../coffee/foo.coffee', 'foo coffee');
- bundleMap.addMapping({
- generated: { line: 13, column: 13 },
- original: { line: 12, column: 12 },
- source: '/bar.coffee'
- });
- bundleMap.setSourceContent('/bar.coffee', 'bar coffee');
- bundleMap.addMapping({
- generated: { line: 23, column: 23 },
- original: { line: 22, column: 22 },
- source: 'http://www.example.com/baz.coffee'
- });
- bundleMap.setSourceContent(
- 'http://www.example.com/baz.coffee',
- 'baz coffee'
- );
- bundleMap = new SourceMapConsumer(bundleMap.toJSON());
-
- var minifiedMap = new SourceMapGenerator({
- file: 'bundle.min.js',
- sourceRoot: '..'
- });
- minifiedMap.addMapping({
- generated: { line: 1, column: 1 },
- original: { line: 3, column: 3 },
- source: 'temp/bundle.js'
- });
- minifiedMap.addMapping({
- generated: { line: 11, column: 11 },
- original: { line: 13, column: 13 },
- source: 'temp/bundle.js'
- });
- minifiedMap.addMapping({
- generated: { line: 21, column: 21 },
- original: { line: 23, column: 23 },
- source: 'temp/bundle.js'
- });
- minifiedMap = new SourceMapConsumer(minifiedMap.toJSON());
-
- var expectedMap = function (sources) {
- var map = new SourceMapGenerator({
- file: 'bundle.min.js',
- sourceRoot: '..'
- });
- map.addMapping({
- generated: { line: 1, column: 1 },
- original: { line: 2, column: 2 },
- source: sources[0]
- });
- map.setSourceContent(sources[0], 'foo coffee');
- map.addMapping({
- generated: { line: 11, column: 11 },
- original: { line: 12, column: 12 },
- source: sources[1]
- });
- map.setSourceContent(sources[1], 'bar coffee');
- map.addMapping({
- generated: { line: 21, column: 21 },
- original: { line: 22, column: 22 },
- source: sources[2]
- });
- map.setSourceContent(sources[2], 'baz coffee');
- return map.toJSON();
- }
-
- var actualMap = function (aSourceMapPath) {
- var map = SourceMapGenerator.fromSourceMap(minifiedMap);
- // Note that relying on `bundleMap.file` (which is simply 'bundle.js')
- // instead of supplying the second parameter wouldn't work here.
- map.applySourceMap(bundleMap, '../temp/bundle.js', aSourceMapPath);
- return map.toJSON();
- }
-
- util.assertEqualMaps(assert, actualMap('../temp/temp_maps'), expectedMap([
- 'coffee/foo.coffee',
- '/bar.coffee',
- 'http://www.example.com/baz.coffee'
- ]));
-
- util.assertEqualMaps(assert, actualMap('/app/temp/temp_maps'), expectedMap([
- '/app/coffee/foo.coffee',
- '/bar.coffee',
- 'http://www.example.com/baz.coffee'
- ]));
-
- util.assertEqualMaps(assert, actualMap('http://foo.org/app/temp/temp_maps'), expectedMap([
- 'http://foo.org/app/coffee/foo.coffee',
- 'http://foo.org/bar.coffee',
- 'http://www.example.com/baz.coffee'
- ]));
-
- // If the third parameter is omitted or set to the current working
- // directory we get incorrect source paths:
-
- util.assertEqualMaps(assert, actualMap(), expectedMap([
- '../coffee/foo.coffee',
- '/bar.coffee',
- 'http://www.example.com/baz.coffee'
- ]));
-
- util.assertEqualMaps(assert, actualMap(''), expectedMap([
- '../coffee/foo.coffee',
- '/bar.coffee',
- 'http://www.example.com/baz.coffee'
- ]));
-
- util.assertEqualMaps(assert, actualMap('.'), expectedMap([
- '../coffee/foo.coffee',
- '/bar.coffee',
- 'http://www.example.com/baz.coffee'
- ]));
-
- util.assertEqualMaps(assert, actualMap('./'), expectedMap([
- '../coffee/foo.coffee',
- '/bar.coffee',
- 'http://www.example.com/baz.coffee'
- ]));
- };
-
- exports['test applySourceMap name handling'] = function (assert, util) {
- // Imagine some CoffeeScript code being compiled into JavaScript and then
- // minified.
-
- var assertName = function(coffeeName, jsName, expectedName) {
- var minifiedMap = new SourceMapGenerator({
- file: 'test.js.min'
- });
- minifiedMap.addMapping({
- generated: { line: 1, column: 4 },
- original: { line: 1, column: 4 },
- source: 'test.js',
- name: jsName
- });
-
- var coffeeMap = new SourceMapGenerator({
- file: 'test.js'
- });
- coffeeMap.addMapping({
- generated: { line: 1, column: 4 },
- original: { line: 1, column: 0 },
- source: 'test.coffee',
- name: coffeeName
- });
-
- minifiedMap.applySourceMap(new SourceMapConsumer(coffeeMap.toJSON()));
-
- new SourceMapConsumer(minifiedMap.toJSON()).eachMapping(function(mapping) {
- assert.equal(mapping.name, expectedName);
- });
- };
-
- // `foo = 1` -> `var foo = 1;` -> `var a=1`
- // CoffeeScript doesn’t rename variables, so there’s no need for it to
- // provide names in its source maps. Minifiers do rename variables and
- // therefore do provide names in their source maps. So that name should be
- // retained if the original map lacks names.
- assertName(null, 'foo', 'foo');
-
- // `foo = 1` -> `var coffee$foo = 1;` -> `var a=1`
- // Imagine that CoffeeScript prefixed all variables with `coffee$`. Even
- // though the minifier then also provides a name, the original name is
- // what corresponds to the source.
- assertName('foo', 'coffee$foo', 'foo');
-
- // `foo = 1` -> `var coffee$foo = 1;` -> `var coffee$foo=1`
- // Minifiers can turn off variable mangling. Then there’s no need to
- // provide names in the source map, but the names from the original map are
- // still needed.
- assertName('foo', null, 'foo');
-
- // `foo = 1` -> `var foo = 1;` -> `var foo=1`
- // No renaming at all.
- assertName(null, null, null);
- };
-
- exports['test sorting with duplicate generated mappings'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'test.js'
- });
- map.addMapping({
- generated: { line: 3, column: 0 },
- original: { line: 2, column: 0 },
- source: 'a.js'
- });
- map.addMapping({
- generated: { line: 2, column: 0 }
- });
- map.addMapping({
- generated: { line: 2, column: 0 }
- });
- map.addMapping({
- generated: { line: 1, column: 0 },
- original: { line: 1, column: 0 },
- source: 'a.js'
- });
-
- util.assertEqualMaps(assert, map.toJSON(), {
- version: 3,
- file: 'test.js',
- sources: ['a.js'],
- names: [],
- mappings: 'AAAA;A;AACA'
- });
- };
-
- exports['test ignore duplicate mappings.'] = function (assert, util) {
- var init = { file: 'min.js', sourceRoot: '/the/root' };
- var map1, map2;
-
- // null original source location
- var nullMapping1 = {
- generated: { line: 1, column: 0 }
- };
- var nullMapping2 = {
- generated: { line: 2, column: 2 }
- };
-
- map1 = new SourceMapGenerator(init);
- map2 = new SourceMapGenerator(init);
-
- map1.addMapping(nullMapping1);
- map1.addMapping(nullMapping1);
-
- map2.addMapping(nullMapping1);
-
- util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
-
- map1.addMapping(nullMapping2);
- map1.addMapping(nullMapping1);
-
- map2.addMapping(nullMapping2);
-
- util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
-
- // original source location
- var srcMapping1 = {
- generated: { line: 1, column: 0 },
- original: { line: 11, column: 0 },
- source: 'srcMapping1.js'
- };
- var srcMapping2 = {
- generated: { line: 2, column: 2 },
- original: { line: 11, column: 0 },
- source: 'srcMapping2.js'
- };
-
- map1 = new SourceMapGenerator(init);
- map2 = new SourceMapGenerator(init);
-
- map1.addMapping(srcMapping1);
- map1.addMapping(srcMapping1);
-
- map2.addMapping(srcMapping1);
-
- util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
-
- map1.addMapping(srcMapping2);
- map1.addMapping(srcMapping1);
-
- map2.addMapping(srcMapping2);
-
- util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
-
- // full original source and name information
- var fullMapping1 = {
- generated: { line: 1, column: 0 },
- original: { line: 11, column: 0 },
- source: 'fullMapping1.js',
- name: 'fullMapping1'
- };
- var fullMapping2 = {
- generated: { line: 2, column: 2 },
- original: { line: 11, column: 0 },
- source: 'fullMapping2.js',
- name: 'fullMapping2'
- };
-
- map1 = new SourceMapGenerator(init);
- map2 = new SourceMapGenerator(init);
-
- map1.addMapping(fullMapping1);
- map1.addMapping(fullMapping1);
-
- map2.addMapping(fullMapping1);
-
- util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
-
- map1.addMapping(fullMapping2);
- map1.addMapping(fullMapping1);
-
- map2.addMapping(fullMapping2);
-
- util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
- };
-
- exports['test github issue #72, check for duplicate names or sources'] = function (assert, util) {
- var map = new SourceMapGenerator({
- file: 'test.js'
- });
- map.addMapping({
- generated: { line: 1, column: 1 },
- original: { line: 2, column: 2 },
- source: 'a.js',
- name: 'foo'
- });
- map.addMapping({
- generated: { line: 3, column: 3 },
- original: { line: 4, column: 4 },
- source: 'a.js',
- name: 'foo'
- });
- util.assertEqualMaps(assert, map.toJSON(), {
- version: 3,
- file: 'test.js',
- sources: ['a.js'],
- names: ['foo'],
- mappings: 'CACEA;;GAEEA'
- });
- };
-
- exports['test setting sourcesContent to null when already null'] = function (assert, util) {
- var smg = new SourceMapGenerator({ file: "foo.js" });
- assert.doesNotThrow(function() {
- smg.setSourceContent("bar.js", null);
- });
- };
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-source-node.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-source-node.js
deleted file mode 100644
index 139af4e4..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-source-node.js
+++ /dev/null
@@ -1,612 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator;
- var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer;
- var SourceNode = require('../../lib/source-map/source-node').SourceNode;
-
- function forEachNewline(fn) {
- return function (assert, util) {
- ['\n', '\r\n'].forEach(fn.bind(null, assert, util));
- }
- }
-
- exports['test .add()'] = function (assert, util) {
- var node = new SourceNode(null, null, null);
-
- // Adding a string works.
- node.add('function noop() {}');
-
- // Adding another source node works.
- node.add(new SourceNode(null, null, null));
-
- // Adding an array works.
- node.add(['function foo() {',
- new SourceNode(null, null, null,
- 'return 10;'),
- '}']);
-
- // Adding other stuff doesn't.
- assert.throws(function () {
- node.add({});
- });
- assert.throws(function () {
- node.add(function () {});
- });
- };
-
- exports['test .prepend()'] = function (assert, util) {
- var node = new SourceNode(null, null, null);
-
- // Prepending a string works.
- node.prepend('function noop() {}');
- assert.equal(node.children[0], 'function noop() {}');
- assert.equal(node.children.length, 1);
-
- // Prepending another source node works.
- node.prepend(new SourceNode(null, null, null));
- assert.equal(node.children[0], '');
- assert.equal(node.children[1], 'function noop() {}');
- assert.equal(node.children.length, 2);
-
- // Prepending an array works.
- node.prepend(['function foo() {',
- new SourceNode(null, null, null,
- 'return 10;'),
- '}']);
- assert.equal(node.children[0], 'function foo() {');
- assert.equal(node.children[1], 'return 10;');
- assert.equal(node.children[2], '}');
- assert.equal(node.children[3], '');
- assert.equal(node.children[4], 'function noop() {}');
- assert.equal(node.children.length, 5);
-
- // Prepending other stuff doesn't.
- assert.throws(function () {
- node.prepend({});
- });
- assert.throws(function () {
- node.prepend(function () {});
- });
- };
-
- exports['test .toString()'] = function (assert, util) {
- assert.equal((new SourceNode(null, null, null,
- ['function foo() {',
- new SourceNode(null, null, null, 'return 10;'),
- '}'])).toString(),
- 'function foo() {return 10;}');
- };
-
- exports['test .join()'] = function (assert, util) {
- assert.equal((new SourceNode(null, null, null,
- ['a', 'b', 'c', 'd'])).join(', ').toString(),
- 'a, b, c, d');
- };
-
- exports['test .walk()'] = function (assert, util) {
- var node = new SourceNode(null, null, null,
- ['(function () {\n',
- ' ', new SourceNode(1, 0, 'a.js', ['someCall()']), ';\n',
- ' ', new SourceNode(2, 0, 'b.js', ['if (foo) bar()']), ';\n',
- '}());']);
- var expected = [
- { str: '(function () {\n', source: null, line: null, column: null },
- { str: ' ', source: null, line: null, column: null },
- { str: 'someCall()', source: 'a.js', line: 1, column: 0 },
- { str: ';\n', source: null, line: null, column: null },
- { str: ' ', source: null, line: null, column: null },
- { str: 'if (foo) bar()', source: 'b.js', line: 2, column: 0 },
- { str: ';\n', source: null, line: null, column: null },
- { str: '}());', source: null, line: null, column: null },
- ];
- var i = 0;
- node.walk(function (chunk, loc) {
- assert.equal(expected[i].str, chunk);
- assert.equal(expected[i].source, loc.source);
- assert.equal(expected[i].line, loc.line);
- assert.equal(expected[i].column, loc.column);
- i++;
- });
- };
-
- exports['test .replaceRight'] = function (assert, util) {
- var node;
-
- // Not nested
- node = new SourceNode(null, null, null, 'hello world');
- node.replaceRight(/world/, 'universe');
- assert.equal(node.toString(), 'hello universe');
-
- // Nested
- node = new SourceNode(null, null, null,
- [new SourceNode(null, null, null, 'hey sexy mama, '),
- new SourceNode(null, null, null, 'want to kill all humans?')]);
- node.replaceRight(/kill all humans/, 'watch Futurama');
- assert.equal(node.toString(), 'hey sexy mama, want to watch Futurama?');
- };
-
- exports['test .toStringWithSourceMap()'] = forEachNewline(function (assert, util, nl) {
- var node = new SourceNode(null, null, null,
- ['(function () {' + nl,
- ' ',
- new SourceNode(1, 0, 'a.js', 'someCall', 'originalCall'),
- new SourceNode(1, 8, 'a.js', '()'),
- ';' + nl,
- ' ', new SourceNode(2, 0, 'b.js', ['if (foo) bar()']), ';' + nl,
- '}());']);
- var result = node.toStringWithSourceMap({
- file: 'foo.js'
- });
-
- assert.equal(result.code, [
- '(function () {',
- ' someCall();',
- ' if (foo) bar();',
- '}());'
- ].join(nl));
-
- var map = result.map;
- var mapWithoutOptions = node.toStringWithSourceMap().map;
-
- assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
- assert.ok(mapWithoutOptions instanceof SourceMapGenerator, 'mapWithoutOptions instanceof SourceMapGenerator');
- assert.ok(!('file' in mapWithoutOptions));
- mapWithoutOptions._file = 'foo.js';
- util.assertEqualMaps(assert, map.toJSON(), mapWithoutOptions.toJSON());
-
- map = new SourceMapConsumer(map.toString());
-
- var actual;
-
- actual = map.originalPositionFor({
- line: 1,
- column: 4
- });
- assert.equal(actual.source, null);
- assert.equal(actual.line, null);
- assert.equal(actual.column, null);
-
- actual = map.originalPositionFor({
- line: 2,
- column: 2
- });
- assert.equal(actual.source, 'a.js');
- assert.equal(actual.line, 1);
- assert.equal(actual.column, 0);
- assert.equal(actual.name, 'originalCall');
-
- actual = map.originalPositionFor({
- line: 3,
- column: 2
- });
- assert.equal(actual.source, 'b.js');
- assert.equal(actual.line, 2);
- assert.equal(actual.column, 0);
-
- actual = map.originalPositionFor({
- line: 3,
- column: 16
- });
- assert.equal(actual.source, null);
- assert.equal(actual.line, null);
- assert.equal(actual.column, null);
-
- actual = map.originalPositionFor({
- line: 4,
- column: 2
- });
- assert.equal(actual.source, null);
- assert.equal(actual.line, null);
- assert.equal(actual.column, null);
- });
-
- exports['test .fromStringWithSourceMap()'] = forEachNewline(function (assert, util, nl) {
- var testCode = util.testGeneratedCode.replace(/\n/g, nl);
- var node = SourceNode.fromStringWithSourceMap(
- testCode,
- new SourceMapConsumer(util.testMap));
-
- var result = node.toStringWithSourceMap({
- file: 'min.js'
- });
- var map = result.map;
- var code = result.code;
-
- assert.equal(code, testCode);
- assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
- map = map.toJSON();
- assert.equal(map.version, util.testMap.version);
- assert.equal(map.file, util.testMap.file);
- assert.equal(map.mappings, util.testMap.mappings);
- });
-
- exports['test .fromStringWithSourceMap() empty map'] = forEachNewline(function (assert, util, nl) {
- var node = SourceNode.fromStringWithSourceMap(
- util.testGeneratedCode.replace(/\n/g, nl),
- new SourceMapConsumer(util.emptyMap));
- var result = node.toStringWithSourceMap({
- file: 'min.js'
- });
- var map = result.map;
- var code = result.code;
-
- assert.equal(code, util.testGeneratedCode.replace(/\n/g, nl));
- assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
- map = map.toJSON();
- assert.equal(map.version, util.emptyMap.version);
- assert.equal(map.file, util.emptyMap.file);
- assert.equal(map.mappings.length, util.emptyMap.mappings.length);
- assert.equal(map.mappings, util.emptyMap.mappings);
- });
-
- exports['test .fromStringWithSourceMap() complex version'] = forEachNewline(function (assert, util, nl) {
- var input = new SourceNode(null, null, null, [
- "(function() {" + nl,
- " var Test = {};" + nl,
- " ", new SourceNode(1, 0, "a.js", "Test.A = { value: 1234 };" + nl),
- " ", new SourceNode(2, 0, "a.js", "Test.A.x = 'xyz';"), nl,
- "}());" + nl,
- "/* Generated Source */"]);
- input = input.toStringWithSourceMap({
- file: 'foo.js'
- });
-
- var node = SourceNode.fromStringWithSourceMap(
- input.code,
- new SourceMapConsumer(input.map.toString()));
-
- var result = node.toStringWithSourceMap({
- file: 'foo.js'
- });
- var map = result.map;
- var code = result.code;
-
- assert.equal(code, input.code);
- assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
- map = map.toJSON();
- var inputMap = input.map.toJSON();
- util.assertEqualMaps(assert, map, inputMap);
- });
-
- exports['test .fromStringWithSourceMap() third argument'] = function (assert, util) {
- // Assume the following directory structure:
- //
- // http://foo.org/
- // bar.coffee
- // app/
- // coffee/
- // foo.coffee
- // coffeeBundle.js # Made from {foo,bar,baz}.coffee
- // maps/
- // coffeeBundle.js.map
- // js/
- // foo.js
- // public/
- // app.js # Made from {foo,coffeeBundle}.js
- // app.js.map
- //
- // http://www.example.com/
- // baz.coffee
-
- var coffeeBundle = new SourceNode(1, 0, 'foo.coffee', 'foo(coffee);\n');
- coffeeBundle.setSourceContent('foo.coffee', 'foo coffee');
- coffeeBundle.add(new SourceNode(2, 0, '/bar.coffee', 'bar(coffee);\n'));
- coffeeBundle.add(new SourceNode(3, 0, 'http://www.example.com/baz.coffee', 'baz(coffee);'));
- coffeeBundle = coffeeBundle.toStringWithSourceMap({
- file: 'foo.js',
- sourceRoot: '..'
- });
-
- var foo = new SourceNode(1, 0, 'foo.js', 'foo(js);');
-
- var test = function(relativePath, expectedSources) {
- var app = new SourceNode();
- app.add(SourceNode.fromStringWithSourceMap(
- coffeeBundle.code,
- new SourceMapConsumer(coffeeBundle.map.toString()),
- relativePath));
- app.add(foo);
- var i = 0;
- app.walk(function (chunk, loc) {
- assert.equal(loc.source, expectedSources[i]);
- i++;
- });
- app.walkSourceContents(function (sourceFile, sourceContent) {
- assert.equal(sourceFile, expectedSources[0]);
- assert.equal(sourceContent, 'foo coffee');
- })
- };
-
- test('../coffee/maps', [
- '../coffee/foo.coffee',
- '/bar.coffee',
- 'http://www.example.com/baz.coffee',
- 'foo.js'
- ]);
-
- // If the third parameter is omitted or set to the current working
- // directory we get incorrect source paths:
-
- test(undefined, [
- '../foo.coffee',
- '/bar.coffee',
- 'http://www.example.com/baz.coffee',
- 'foo.js'
- ]);
-
- test('', [
- '../foo.coffee',
- '/bar.coffee',
- 'http://www.example.com/baz.coffee',
- 'foo.js'
- ]);
-
- test('.', [
- '../foo.coffee',
- '/bar.coffee',
- 'http://www.example.com/baz.coffee',
- 'foo.js'
- ]);
-
- test('./', [
- '../foo.coffee',
- '/bar.coffee',
- 'http://www.example.com/baz.coffee',
- 'foo.js'
- ]);
- };
-
- exports['test .toStringWithSourceMap() merging duplicate mappings'] = forEachNewline(function (assert, util, nl) {
- var input = new SourceNode(null, null, null, [
- new SourceNode(1, 0, "a.js", "(function"),
- new SourceNode(1, 0, "a.js", "() {" + nl),
- " ",
- new SourceNode(1, 0, "a.js", "var Test = "),
- new SourceNode(1, 0, "b.js", "{};" + nl),
- new SourceNode(2, 0, "b.js", "Test"),
- new SourceNode(2, 0, "b.js", ".A", "A"),
- new SourceNode(2, 20, "b.js", " = { value: ", "A"),
- "1234",
- new SourceNode(2, 40, "b.js", " };" + nl, "A"),
- "}());" + nl,
- "/* Generated Source */"
- ]);
- input = input.toStringWithSourceMap({
- file: 'foo.js'
- });
-
- assert.equal(input.code, [
- "(function() {",
- " var Test = {};",
- "Test.A = { value: 1234 };",
- "}());",
- "/* Generated Source */"
- ].join(nl))
-
- var correctMap = new SourceMapGenerator({
- file: 'foo.js'
- });
- correctMap.addMapping({
- generated: { line: 1, column: 0 },
- source: 'a.js',
- original: { line: 1, column: 0 }
- });
- // Here is no need for a empty mapping,
- // because mappings ends at eol
- correctMap.addMapping({
- generated: { line: 2, column: 2 },
- source: 'a.js',
- original: { line: 1, column: 0 }
- });
- correctMap.addMapping({
- generated: { line: 2, column: 13 },
- source: 'b.js',
- original: { line: 1, column: 0 }
- });
- correctMap.addMapping({
- generated: { line: 3, column: 0 },
- source: 'b.js',
- original: { line: 2, column: 0 }
- });
- correctMap.addMapping({
- generated: { line: 3, column: 4 },
- source: 'b.js',
- name: 'A',
- original: { line: 2, column: 0 }
- });
- correctMap.addMapping({
- generated: { line: 3, column: 6 },
- source: 'b.js',
- name: 'A',
- original: { line: 2, column: 20 }
- });
- // This empty mapping is required,
- // because there is a hole in the middle of the line
- correctMap.addMapping({
- generated: { line: 3, column: 18 }
- });
- correctMap.addMapping({
- generated: { line: 3, column: 22 },
- source: 'b.js',
- name: 'A',
- original: { line: 2, column: 40 }
- });
- // Here is no need for a empty mapping,
- // because mappings ends at eol
-
- var inputMap = input.map.toJSON();
- correctMap = correctMap.toJSON();
- util.assertEqualMaps(assert, inputMap, correctMap);
- });
-
- exports['test .toStringWithSourceMap() multi-line SourceNodes'] = forEachNewline(function (assert, util, nl) {
- var input = new SourceNode(null, null, null, [
- new SourceNode(1, 0, "a.js", "(function() {" + nl + "var nextLine = 1;" + nl + "anotherLine();" + nl),
- new SourceNode(2, 2, "b.js", "Test.call(this, 123);" + nl),
- new SourceNode(2, 2, "b.js", "this['stuff'] = 'v';" + nl),
- new SourceNode(2, 2, "b.js", "anotherLine();" + nl),
- "/*" + nl + "Generated" + nl + "Source" + nl + "*/" + nl,
- new SourceNode(3, 4, "c.js", "anotherLine();" + nl),
- "/*" + nl + "Generated" + nl + "Source" + nl + "*/"
- ]);
- input = input.toStringWithSourceMap({
- file: 'foo.js'
- });
-
- assert.equal(input.code, [
- "(function() {",
- "var nextLine = 1;",
- "anotherLine();",
- "Test.call(this, 123);",
- "this['stuff'] = 'v';",
- "anotherLine();",
- "/*",
- "Generated",
- "Source",
- "*/",
- "anotherLine();",
- "/*",
- "Generated",
- "Source",
- "*/"
- ].join(nl));
-
- var correctMap = new SourceMapGenerator({
- file: 'foo.js'
- });
- correctMap.addMapping({
- generated: { line: 1, column: 0 },
- source: 'a.js',
- original: { line: 1, column: 0 }
- });
- correctMap.addMapping({
- generated: { line: 2, column: 0 },
- source: 'a.js',
- original: { line: 1, column: 0 }
- });
- correctMap.addMapping({
- generated: { line: 3, column: 0 },
- source: 'a.js',
- original: { line: 1, column: 0 }
- });
- correctMap.addMapping({
- generated: { line: 4, column: 0 },
- source: 'b.js',
- original: { line: 2, column: 2 }
- });
- correctMap.addMapping({
- generated: { line: 5, column: 0 },
- source: 'b.js',
- original: { line: 2, column: 2 }
- });
- correctMap.addMapping({
- generated: { line: 6, column: 0 },
- source: 'b.js',
- original: { line: 2, column: 2 }
- });
- correctMap.addMapping({
- generated: { line: 11, column: 0 },
- source: 'c.js',
- original: { line: 3, column: 4 }
- });
-
- var inputMap = input.map.toJSON();
- correctMap = correctMap.toJSON();
- util.assertEqualMaps(assert, inputMap, correctMap);
- });
-
- exports['test .toStringWithSourceMap() with empty string'] = function (assert, util) {
- var node = new SourceNode(1, 0, 'empty.js', '');
- var result = node.toStringWithSourceMap();
- assert.equal(result.code, '');
- };
-
- exports['test .toStringWithSourceMap() with consecutive newlines'] = forEachNewline(function (assert, util, nl) {
- var input = new SourceNode(null, null, null, [
- "/***/" + nl + nl,
- new SourceNode(1, 0, "a.js", "'use strict';" + nl),
- new SourceNode(2, 0, "a.js", "a();"),
- ]);
- input = input.toStringWithSourceMap({
- file: 'foo.js'
- });
-
- assert.equal(input.code, [
- "/***/",
- "",
- "'use strict';",
- "a();",
- ].join(nl));
-
- var correctMap = new SourceMapGenerator({
- file: 'foo.js'
- });
- correctMap.addMapping({
- generated: { line: 3, column: 0 },
- source: 'a.js',
- original: { line: 1, column: 0 }
- });
- correctMap.addMapping({
- generated: { line: 4, column: 0 },
- source: 'a.js',
- original: { line: 2, column: 0 }
- });
-
- var inputMap = input.map.toJSON();
- correctMap = correctMap.toJSON();
- util.assertEqualMaps(assert, inputMap, correctMap);
- });
-
- exports['test setSourceContent with toStringWithSourceMap'] = function (assert, util) {
- var aNode = new SourceNode(1, 1, 'a.js', 'a');
- aNode.setSourceContent('a.js', 'someContent');
- var node = new SourceNode(null, null, null,
- ['(function () {\n',
- ' ', aNode,
- ' ', new SourceNode(1, 1, 'b.js', 'b'),
- '}());']);
- node.setSourceContent('b.js', 'otherContent');
- var map = node.toStringWithSourceMap({
- file: 'foo.js'
- }).map;
-
- assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
- map = new SourceMapConsumer(map.toString());
-
- assert.equal(map.sources.length, 2);
- assert.equal(map.sources[0], 'a.js');
- assert.equal(map.sources[1], 'b.js');
- assert.equal(map.sourcesContent.length, 2);
- assert.equal(map.sourcesContent[0], 'someContent');
- assert.equal(map.sourcesContent[1], 'otherContent');
- };
-
- exports['test walkSourceContents'] = function (assert, util) {
- var aNode = new SourceNode(1, 1, 'a.js', 'a');
- aNode.setSourceContent('a.js', 'someContent');
- var node = new SourceNode(null, null, null,
- ['(function () {\n',
- ' ', aNode,
- ' ', new SourceNode(1, 1, 'b.js', 'b'),
- '}());']);
- node.setSourceContent('b.js', 'otherContent');
- var results = [];
- node.walkSourceContents(function (sourceFile, sourceContent) {
- results.push([sourceFile, sourceContent]);
- });
- assert.equal(results.length, 2);
- assert.equal(results[0][0], 'a.js');
- assert.equal(results[0][1], 'someContent');
- assert.equal(results[1][0], 'b.js');
- assert.equal(results[1][1], 'otherContent');
- };
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-util.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-util.js
deleted file mode 100644
index 997d1a26..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/test-util.js
+++ /dev/null
@@ -1,216 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2014 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var libUtil = require('../../lib/source-map/util');
-
- exports['test urls'] = function (assert, util) {
- var assertUrl = function (url) {
- assert.equal(url, libUtil.urlGenerate(libUtil.urlParse(url)));
- };
- assertUrl('http://');
- assertUrl('http://www.example.com');
- assertUrl('http://user:pass@www.example.com');
- assertUrl('http://www.example.com:80');
- assertUrl('http://www.example.com/');
- assertUrl('http://www.example.com/foo/bar');
- assertUrl('http://www.example.com/foo/bar/');
- assertUrl('http://user:pass@www.example.com:80/foo/bar/');
-
- assertUrl('//');
- assertUrl('//www.example.com');
- assertUrl('file:///www.example.com');
-
- assert.equal(libUtil.urlParse(''), null);
- assert.equal(libUtil.urlParse('.'), null);
- assert.equal(libUtil.urlParse('..'), null);
- assert.equal(libUtil.urlParse('a'), null);
- assert.equal(libUtil.urlParse('a/b'), null);
- assert.equal(libUtil.urlParse('a//b'), null);
- assert.equal(libUtil.urlParse('/a'), null);
- assert.equal(libUtil.urlParse('data:foo,bar'), null);
- };
-
- exports['test normalize()'] = function (assert, util) {
- assert.equal(libUtil.normalize('/..'), '/');
- assert.equal(libUtil.normalize('/../'), '/');
- assert.equal(libUtil.normalize('/../../../..'), '/');
- assert.equal(libUtil.normalize('/../../../../a/b/c'), '/a/b/c');
- assert.equal(libUtil.normalize('/a/b/c/../../../d/../../e'), '/e');
-
- assert.equal(libUtil.normalize('..'), '..');
- assert.equal(libUtil.normalize('../'), '../');
- assert.equal(libUtil.normalize('../../a/'), '../../a/');
- assert.equal(libUtil.normalize('a/..'), '.');
- assert.equal(libUtil.normalize('a/../../..'), '../..');
-
- assert.equal(libUtil.normalize('/.'), '/');
- assert.equal(libUtil.normalize('/./'), '/');
- assert.equal(libUtil.normalize('/./././.'), '/');
- assert.equal(libUtil.normalize('/././././a/b/c'), '/a/b/c');
- assert.equal(libUtil.normalize('/a/b/c/./././d/././e'), '/a/b/c/d/e');
-
- assert.equal(libUtil.normalize(''), '.');
- assert.equal(libUtil.normalize('.'), '.');
- assert.equal(libUtil.normalize('./'), '.');
- assert.equal(libUtil.normalize('././a'), 'a');
- assert.equal(libUtil.normalize('a/./'), 'a/');
- assert.equal(libUtil.normalize('a/././.'), 'a');
-
- assert.equal(libUtil.normalize('/a/b//c////d/////'), '/a/b/c/d/');
- assert.equal(libUtil.normalize('///a/b//c////d/////'), '///a/b/c/d/');
- assert.equal(libUtil.normalize('a/b//c////d'), 'a/b/c/d');
-
- assert.equal(libUtil.normalize('.///.././../a/b//./..'), '../../a')
-
- assert.equal(libUtil.normalize('http://www.example.com'), 'http://www.example.com');
- assert.equal(libUtil.normalize('http://www.example.com/'), 'http://www.example.com/');
- assert.equal(libUtil.normalize('http://www.example.com/./..//a/b/c/.././d//'), 'http://www.example.com/a/b/d/');
- };
-
- exports['test join()'] = function (assert, util) {
- assert.equal(libUtil.join('a', 'b'), 'a/b');
- assert.equal(libUtil.join('a/', 'b'), 'a/b');
- assert.equal(libUtil.join('a//', 'b'), 'a/b');
- assert.equal(libUtil.join('a', 'b/'), 'a/b/');
- assert.equal(libUtil.join('a', 'b//'), 'a/b/');
- assert.equal(libUtil.join('a/', '/b'), '/b');
- assert.equal(libUtil.join('a//', '//b'), '//b');
-
- assert.equal(libUtil.join('a', '..'), '.');
- assert.equal(libUtil.join('a', '../b'), 'b');
- assert.equal(libUtil.join('a/b', '../c'), 'a/c');
-
- assert.equal(libUtil.join('a', '.'), 'a');
- assert.equal(libUtil.join('a', './b'), 'a/b');
- assert.equal(libUtil.join('a/b', './c'), 'a/b/c');
-
- assert.equal(libUtil.join('a', 'http://www.example.com'), 'http://www.example.com');
- assert.equal(libUtil.join('a', 'data:foo,bar'), 'data:foo,bar');
-
-
- assert.equal(libUtil.join('', 'b'), 'b');
- assert.equal(libUtil.join('.', 'b'), 'b');
- assert.equal(libUtil.join('', 'b/'), 'b/');
- assert.equal(libUtil.join('.', 'b/'), 'b/');
- assert.equal(libUtil.join('', 'b//'), 'b/');
- assert.equal(libUtil.join('.', 'b//'), 'b/');
-
- assert.equal(libUtil.join('', '..'), '..');
- assert.equal(libUtil.join('.', '..'), '..');
- assert.equal(libUtil.join('', '../b'), '../b');
- assert.equal(libUtil.join('.', '../b'), '../b');
-
- assert.equal(libUtil.join('', '.'), '.');
- assert.equal(libUtil.join('.', '.'), '.');
- assert.equal(libUtil.join('', './b'), 'b');
- assert.equal(libUtil.join('.', './b'), 'b');
-
- assert.equal(libUtil.join('', 'http://www.example.com'), 'http://www.example.com');
- assert.equal(libUtil.join('.', 'http://www.example.com'), 'http://www.example.com');
- assert.equal(libUtil.join('', 'data:foo,bar'), 'data:foo,bar');
- assert.equal(libUtil.join('.', 'data:foo,bar'), 'data:foo,bar');
-
-
- assert.equal(libUtil.join('..', 'b'), '../b');
- assert.equal(libUtil.join('..', 'b/'), '../b/');
- assert.equal(libUtil.join('..', 'b//'), '../b/');
-
- assert.equal(libUtil.join('..', '..'), '../..');
- assert.equal(libUtil.join('..', '../b'), '../../b');
-
- assert.equal(libUtil.join('..', '.'), '..');
- assert.equal(libUtil.join('..', './b'), '../b');
-
- assert.equal(libUtil.join('..', 'http://www.example.com'), 'http://www.example.com');
- assert.equal(libUtil.join('..', 'data:foo,bar'), 'data:foo,bar');
-
-
- assert.equal(libUtil.join('a', ''), 'a');
- assert.equal(libUtil.join('a', '.'), 'a');
- assert.equal(libUtil.join('a/', ''), 'a');
- assert.equal(libUtil.join('a/', '.'), 'a');
- assert.equal(libUtil.join('a//', ''), 'a');
- assert.equal(libUtil.join('a//', '.'), 'a');
- assert.equal(libUtil.join('/a', ''), '/a');
- assert.equal(libUtil.join('/a', '.'), '/a');
- assert.equal(libUtil.join('', ''), '.');
- assert.equal(libUtil.join('.', ''), '.');
- assert.equal(libUtil.join('.', ''), '.');
- assert.equal(libUtil.join('.', '.'), '.');
- assert.equal(libUtil.join('..', ''), '..');
- assert.equal(libUtil.join('..', '.'), '..');
- assert.equal(libUtil.join('http://foo.org/a', ''), 'http://foo.org/a');
- assert.equal(libUtil.join('http://foo.org/a', '.'), 'http://foo.org/a');
- assert.equal(libUtil.join('http://foo.org/a/', ''), 'http://foo.org/a');
- assert.equal(libUtil.join('http://foo.org/a/', '.'), 'http://foo.org/a');
- assert.equal(libUtil.join('http://foo.org/a//', ''), 'http://foo.org/a');
- assert.equal(libUtil.join('http://foo.org/a//', '.'), 'http://foo.org/a');
- assert.equal(libUtil.join('http://foo.org', ''), 'http://foo.org/');
- assert.equal(libUtil.join('http://foo.org', '.'), 'http://foo.org/');
- assert.equal(libUtil.join('http://foo.org/', ''), 'http://foo.org/');
- assert.equal(libUtil.join('http://foo.org/', '.'), 'http://foo.org/');
- assert.equal(libUtil.join('http://foo.org//', ''), 'http://foo.org/');
- assert.equal(libUtil.join('http://foo.org//', '.'), 'http://foo.org/');
- assert.equal(libUtil.join('//www.example.com', ''), '//www.example.com/');
- assert.equal(libUtil.join('//www.example.com', '.'), '//www.example.com/');
-
-
- assert.equal(libUtil.join('http://foo.org/a', 'b'), 'http://foo.org/a/b');
- assert.equal(libUtil.join('http://foo.org/a/', 'b'), 'http://foo.org/a/b');
- assert.equal(libUtil.join('http://foo.org/a//', 'b'), 'http://foo.org/a/b');
- assert.equal(libUtil.join('http://foo.org/a', 'b/'), 'http://foo.org/a/b/');
- assert.equal(libUtil.join('http://foo.org/a', 'b//'), 'http://foo.org/a/b/');
- assert.equal(libUtil.join('http://foo.org/a/', '/b'), 'http://foo.org/b');
- assert.equal(libUtil.join('http://foo.org/a//', '//b'), 'http://b');
-
- assert.equal(libUtil.join('http://foo.org/a', '..'), 'http://foo.org/');
- assert.equal(libUtil.join('http://foo.org/a', '../b'), 'http://foo.org/b');
- assert.equal(libUtil.join('http://foo.org/a/b', '../c'), 'http://foo.org/a/c');
-
- assert.equal(libUtil.join('http://foo.org/a', '.'), 'http://foo.org/a');
- assert.equal(libUtil.join('http://foo.org/a', './b'), 'http://foo.org/a/b');
- assert.equal(libUtil.join('http://foo.org/a/b', './c'), 'http://foo.org/a/b/c');
-
- assert.equal(libUtil.join('http://foo.org/a', 'http://www.example.com'), 'http://www.example.com');
- assert.equal(libUtil.join('http://foo.org/a', 'data:foo,bar'), 'data:foo,bar');
-
-
- assert.equal(libUtil.join('http://foo.org', 'a'), 'http://foo.org/a');
- assert.equal(libUtil.join('http://foo.org/', 'a'), 'http://foo.org/a');
- assert.equal(libUtil.join('http://foo.org//', 'a'), 'http://foo.org/a');
- assert.equal(libUtil.join('http://foo.org', '/a'), 'http://foo.org/a');
- assert.equal(libUtil.join('http://foo.org/', '/a'), 'http://foo.org/a');
- assert.equal(libUtil.join('http://foo.org//', '/a'), 'http://foo.org/a');
-
-
- assert.equal(libUtil.join('http://', 'www.example.com'), 'http://www.example.com');
- assert.equal(libUtil.join('file:///', 'www.example.com'), 'file:///www.example.com');
- assert.equal(libUtil.join('http://', 'ftp://example.com'), 'ftp://example.com');
-
- assert.equal(libUtil.join('http://www.example.com', '//foo.org/bar'), 'http://foo.org/bar');
- assert.equal(libUtil.join('//www.example.com', '//foo.org/bar'), '//foo.org/bar');
- };
-
- // TODO Issue #128: Define and test this function properly.
- exports['test relative()'] = function (assert, util) {
- assert.equal(libUtil.relative('/the/root', '/the/root/one.js'), 'one.js');
- assert.equal(libUtil.relative('/the/root', '/the/rootone.js'), '/the/rootone.js');
-
- assert.equal(libUtil.relative('', '/the/root/one.js'), '/the/root/one.js');
- assert.equal(libUtil.relative('.', '/the/root/one.js'), '/the/root/one.js');
- assert.equal(libUtil.relative('', 'the/root/one.js'), 'the/root/one.js');
- assert.equal(libUtil.relative('.', 'the/root/one.js'), 'the/root/one.js');
-
- assert.equal(libUtil.relative('/', '/the/root/one.js'), 'the/root/one.js');
- assert.equal(libUtil.relative('/', 'the/root/one.js'), 'the/root/one.js');
- };
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/util.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/util.js
deleted file mode 100644
index 56bbe2c3..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/source-map/test/source-map/util.js
+++ /dev/null
@@ -1,192 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-if (typeof define !== 'function') {
- var define = require('amdefine')(module, require);
-}
-define(function (require, exports, module) {
-
- var util = require('../../lib/source-map/util');
-
- // This is a test mapping which maps functions from two different files
- // (one.js and two.js) to a minified generated source.
- //
- // Here is one.js:
- //
- // ONE.foo = function (bar) {
- // return baz(bar);
- // };
- //
- // Here is two.js:
- //
- // TWO.inc = function (n) {
- // return n + 1;
- // };
- //
- // And here is the generated code (min.js):
- //
- // ONE.foo=function(a){return baz(a);};
- // TWO.inc=function(a){return a+1;};
- exports.testGeneratedCode = " ONE.foo=function(a){return baz(a);};\n"+
- " TWO.inc=function(a){return a+1;};";
- exports.testMap = {
- version: 3,
- file: 'min.js',
- names: ['bar', 'baz', 'n'],
- sources: ['one.js', 'two.js'],
- sourceRoot: '/the/root',
- mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
- };
- exports.testMapNoSourceRoot = {
- version: 3,
- file: 'min.js',
- names: ['bar', 'baz', 'n'],
- sources: ['one.js', 'two.js'],
- mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
- };
- exports.testMapEmptySourceRoot = {
- version: 3,
- file: 'min.js',
- names: ['bar', 'baz', 'n'],
- sources: ['one.js', 'two.js'],
- sourceRoot: '',
- mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
- };
- exports.testMapWithSourcesContent = {
- version: 3,
- file: 'min.js',
- names: ['bar', 'baz', 'n'],
- sources: ['one.js', 'two.js'],
- sourcesContent: [
- ' ONE.foo = function (bar) {\n' +
- ' return baz(bar);\n' +
- ' };',
- ' TWO.inc = function (n) {\n' +
- ' return n + 1;\n' +
- ' };'
- ],
- sourceRoot: '/the/root',
- mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
- };
- exports.testMapRelativeSources = {
- version: 3,
- file: 'min.js',
- names: ['bar', 'baz', 'n'],
- sources: ['./one.js', './two.js'],
- sourcesContent: [
- ' ONE.foo = function (bar) {\n' +
- ' return baz(bar);\n' +
- ' };',
- ' TWO.inc = function (n) {\n' +
- ' return n + 1;\n' +
- ' };'
- ],
- sourceRoot: '/the/root',
- mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
- };
- exports.emptyMap = {
- version: 3,
- file: 'min.js',
- names: [],
- sources: [],
- mappings: ''
- };
-
-
- function assertMapping(generatedLine, generatedColumn, originalSource,
- originalLine, originalColumn, name, map, assert,
- dontTestGenerated, dontTestOriginal) {
- if (!dontTestOriginal) {
- var origMapping = map.originalPositionFor({
- line: generatedLine,
- column: generatedColumn
- });
- assert.equal(origMapping.name, name,
- 'Incorrect name, expected ' + JSON.stringify(name)
- + ', got ' + JSON.stringify(origMapping.name));
- assert.equal(origMapping.line, originalLine,
- 'Incorrect line, expected ' + JSON.stringify(originalLine)
- + ', got ' + JSON.stringify(origMapping.line));
- assert.equal(origMapping.column, originalColumn,
- 'Incorrect column, expected ' + JSON.stringify(originalColumn)
- + ', got ' + JSON.stringify(origMapping.column));
-
- var expectedSource;
-
- if (originalSource && map.sourceRoot && originalSource.indexOf(map.sourceRoot) === 0) {
- expectedSource = originalSource;
- } else if (originalSource) {
- expectedSource = map.sourceRoot
- ? util.join(map.sourceRoot, originalSource)
- : originalSource;
- } else {
- expectedSource = null;
- }
-
- assert.equal(origMapping.source, expectedSource,
- 'Incorrect source, expected ' + JSON.stringify(expectedSource)
- + ', got ' + JSON.stringify(origMapping.source));
- }
-
- if (!dontTestGenerated) {
- var genMapping = map.generatedPositionFor({
- source: originalSource,
- line: originalLine,
- column: originalColumn
- });
- assert.equal(genMapping.line, generatedLine,
- 'Incorrect line, expected ' + JSON.stringify(generatedLine)
- + ', got ' + JSON.stringify(genMapping.line));
- assert.equal(genMapping.column, generatedColumn,
- 'Incorrect column, expected ' + JSON.stringify(generatedColumn)
- + ', got ' + JSON.stringify(genMapping.column));
- }
- }
- exports.assertMapping = assertMapping;
-
- function assertEqualMaps(assert, actualMap, expectedMap) {
- assert.equal(actualMap.version, expectedMap.version, "version mismatch");
- assert.equal(actualMap.file, expectedMap.file, "file mismatch");
- assert.equal(actualMap.names.length,
- expectedMap.names.length,
- "names length mismatch: " +
- actualMap.names.join(", ") + " != " + expectedMap.names.join(", "));
- for (var i = 0; i < actualMap.names.length; i++) {
- assert.equal(actualMap.names[i],
- expectedMap.names[i],
- "names[" + i + "] mismatch: " +
- actualMap.names.join(", ") + " != " + expectedMap.names.join(", "));
- }
- assert.equal(actualMap.sources.length,
- expectedMap.sources.length,
- "sources length mismatch: " +
- actualMap.sources.join(", ") + " != " + expectedMap.sources.join(", "));
- for (var i = 0; i < actualMap.sources.length; i++) {
- assert.equal(actualMap.sources[i],
- expectedMap.sources[i],
- "sources[" + i + "] length mismatch: " +
- actualMap.sources.join(", ") + " != " + expectedMap.sources.join(", "));
- }
- assert.equal(actualMap.sourceRoot,
- expectedMap.sourceRoot,
- "sourceRoot mismatch: " +
- actualMap.sourceRoot + " != " + expectedMap.sourceRoot);
- assert.equal(actualMap.mappings, expectedMap.mappings,
- "mappings mismatch:\nActual: " + actualMap.mappings + "\nExpected: " + expectedMap.mappings);
- if (actualMap.sourcesContent) {
- assert.equal(actualMap.sourcesContent.length,
- expectedMap.sourcesContent.length,
- "sourcesContent length mismatch");
- for (var i = 0; i < actualMap.sourcesContent.length; i++) {
- assert.equal(actualMap.sourcesContent[i],
- expectedMap.sourcesContent[i],
- "sourcesContent[" + i + "] mismatch");
- }
- }
- }
- exports.assertEqualMaps = assertEqualMaps;
-
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/.npmignore b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/.npmignore
deleted file mode 100644
index 94fceeb2..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/.npmignore
+++ /dev/null
@@ -1,2 +0,0 @@
-tmp/
-node_modules/
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/README.md b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/README.md
deleted file mode 100644
index de6abe5d..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/README.md
+++ /dev/null
@@ -1,544 +0,0 @@
-UglifyJS 2
-==========
-
-UglifyJS is a JavaScript parser, minifier, compressor or beautifier toolkit.
-
-This page documents the command line utility. For
-[API and internals documentation see my website](http://lisperator.net/uglifyjs/).
-There's also an
-[in-browser online demo](http://lisperator.net/uglifyjs/#demo) (for Firefox,
-Chrome and probably Safari).
-
-Install
--------
-
-First make sure you have installed the latest version of [node.js](http://nodejs.org/)
-(You may need to restart your computer after this step).
-
-From NPM for use as a command line app:
-
- npm install uglify-js -g
-
-From NPM for programmatic use:
-
- npm install uglify-js
-
-From Git:
-
- git clone git://github.com/mishoo/UglifyJS2.git
- cd UglifyJS2
- npm link .
-
-Usage
------
-
- uglifyjs [input files] [options]
-
-UglifyJS2 can take multiple input files. It's recommended that you pass the
-input files first, then pass the options. UglifyJS will parse input files
-in sequence and apply any compression options. The files are parsed in the
-same global scope, that is, a reference from a file to some
-variable/function declared in another file will be matched properly.
-
-If you want to read from STDIN instead, pass a single dash instead of input
-files.
-
-The available options are:
-
- --source-map Specify an output file where to generate source map.
- [string]
- --source-map-root The path to the original source to be included in the
- source map. [string]
- --source-map-url The path to the source map to be added in //@
- sourceMappingURL. Defaults to the value passed with
- --source-map. [string]
- --in-source-map Input source map, useful if you're compressing JS that was
- generated from some other original code.
- -p, --prefix Skip prefix for original filenames that appear in source
- maps. For example -p 3 will drop 3 directories from file
- names and ensure they are relative paths.
- -o, --output Output file (default STDOUT).
- -b, --beautify Beautify output/specify output options. [string]
- -m, --mangle Mangle names/pass mangler options. [string]
- -r, --reserved Reserved names to exclude from mangling.
- -c, --compress Enable compressor/pass compressor options. Pass options
- like -c hoist_vars=false,if_return=false. Use -c with no
- argument to use the default compression options. [string]
- -d, --define Global definitions [string]
- --comments Preserve copyright comments in the output. By default this
- works like Google Closure, keeping JSDoc-style comments
- that contain "@license" or "@preserve". You can optionally
- pass one of the following arguments to this flag:
- - "all" to keep all comments
- - a valid JS regexp (needs to start with a slash) to keep
- only comments that match.
- Note that currently not *all* comments can be kept when
- compression is on, because of dead code removal or
- cascading statements into sequences. [string]
- --stats Display operations run time on STDERR. [boolean]
- --acorn Use Acorn for parsing. [boolean]
- --spidermonkey Assume input fles are SpiderMonkey AST format (as JSON).
- [boolean]
- --self Build itself (UglifyJS2) as a library (implies
- --wrap=UglifyJS --export-all) [boolean]
- --wrap Embed everything in a big function, making the “exports”
- and “global” variables available. You need to pass an
- argument to this option to specify the name that your
- module will take when included in, say, a browser.
- [string]
- --export-all Only used when --wrap, this tells UglifyJS to add code to
- automatically export all globals. [boolean]
- --lint Display some scope warnings [boolean]
- -v, --verbose Verbose [boolean]
- -V, --version Print version number and exit. [boolean]
-
-Specify `--output` (`-o`) to declare the output file. Otherwise the output
-goes to STDOUT.
-
-## Source map options
-
-UglifyJS2 can generate a source map file, which is highly useful for
-debugging your compressed JavaScript. To get a source map, pass
-`--source-map output.js.map` (full path to the file where you want the
-source map dumped).
-
-Additionally you might need `--source-map-root` to pass the URL where the
-original files can be found. In case you are passing full paths to input
-files to UglifyJS, you can use `--prefix` (`-p`) to specify the number of
-directories to drop from the path prefix when declaring files in the source
-map.
-
-For example:
-
- uglifyjs /home/doe/work/foo/src/js/file1.js \
- /home/doe/work/foo/src/js/file2.js \
- -o foo.min.js \
- --source-map foo.min.js.map \
- --source-map-root http://foo.com/src \
- -p 5 -c -m
-
-The above will compress and mangle `file1.js` and `file2.js`, will drop the
-output in `foo.min.js` and the source map in `foo.min.js.map`. The source
-mapping will refer to `http://foo.com/src/js/file1.js` and
-`http://foo.com/src/js/file2.js` (in fact it will list `http://foo.com/src`
-as the source map root, and the original files as `js/file1.js` and
-`js/file2.js`).
-
-### Composed source map
-
-When you're compressing JS code that was output by a compiler such as
-CoffeeScript, mapping to the JS code won't be too helpful. Instead, you'd
-like to map back to the original code (i.e. CoffeeScript). UglifyJS has an
-option to take an input source map. Assuming you have a mapping from
-CoffeeScript → compiled JS, UglifyJS can generate a map from CoffeeScript →
-compressed JS by mapping every token in the compiled JS to its original
-location.
-
-To use this feature you need to pass `--in-source-map
-/path/to/input/source.map`. Normally the input source map should also point
-to the file containing the generated JS, so if that's correct you can omit
-input files from the command line.
-
-## Mangler options
-
-To enable the mangler you need to pass `--mangle` (`-m`). Optionally you
-can pass `-m sort=true` (we'll possibly have other flags in the future) in order
-to assign shorter names to most frequently used variables. This saves a few
-hundred bytes on jQuery before gzip, but the output is _bigger_ after gzip
-(and seems to happen for other libraries I tried it on) therefore it's not
-enabled by default.
-
-When mangling is enabled but you want to prevent certain names from being
-mangled, you can declare those names with `--reserved` (`-r`) — pass a
-comma-separated list of names. For example:
-
- uglifyjs ... -m -r '$,require,exports'
-
-to prevent the `require`, `exports` and `$` names from being changed.
-
-## Compressor options
-
-You need to pass `--compress` (`-c`) to enable the compressor. Optionally
-you can pass a comma-separated list of options. Options are in the form
-`foo=bar`, or just `foo` (the latter implies a boolean option that you want
-to set `true`; it's effectively a shortcut for `foo=true`).
-
-The defaults should be tuned for maximum compression on most code. Here are
-the available options (all are `true` by default, except `hoist_vars`):
-
-- `sequences` -- join consecutive simple statements using the comma operator
-- `properties` -- rewrite property access using the dot notation, for
- example `foo["bar"] → foo.bar`
-- `dead_code` -- remove unreachable code
-- `drop_debugger` -- remove `debugger;` statements
-- `unsafe` -- apply "unsafe" transformations (discussion below)
-- `conditionals` -- apply optimizations for `if`-s and conditional
- expressions
-- `comparisons` -- apply certain optimizations to binary nodes, for example:
- `!(a <= b) → a > b` (only when `unsafe`), attempts to negate binary nodes,
- e.g. `a = !b && !c && !d && !e → a=!(b||c||d||e)` etc.
-- `evaluate` -- attempt to evaluate constant expressions
-- `booleans` -- various optimizations for boolean context, for example `!!a
- ? b : c → a ? b : c`
-- `loops` -- optimizations for `do`, `while` and `for` loops when we can
- statically determine the condition
-- `unused` -- drop unreferenced functions and variables
-- `hoist_funs` -- hoist function declarations
-- `hoist_vars` -- hoist `var` declarations (this is `false` by default
- because it seems to increase the size of the output in general)
-- `if_return` -- optimizations for if/return and if/continue
-- `join_vars` -- join consecutive `var` statements
-- `cascade` -- small optimization for sequences, transform `x, x` into `x`
- and `x = something(), x` into `x = something()`
-- `warnings` -- display warnings when dropping unreachable code or unused
- declarations etc.
-
-### Conditional compilation
-
-You can use the `--define` (`-d`) switch in order to declare global
-variables that UglifyJS will assume to be constants (unless defined in
-scope). For example if you pass `--define DEBUG=false` then, coupled with
-dead code removal UglifyJS will discard the following from the output:
-
- if (DEBUG) {
- console.log("debug stuff");
- }
-
-UglifyJS will warn about the condition being always false and about dropping
-unreachable code; for now there is no option to turn off only this specific
-warning, you can pass `warnings=false` to turn off *all* warnings.
-
-Another way of doing that is to declare your globals as constants in a
-separate file and include it into the build. For example you can have a
-`build/defines.js` file with the following:
-
- const DEBUG = false;
- const PRODUCTION = true;
- // etc.
-
-and build your code like this:
-
- uglifyjs build/defines.js js/foo.js js/bar.js... -c
-
-UglifyJS will notice the constants and, since they cannot be altered, it
-will evaluate references to them to the value itself and drop unreachable
-code as usual. The possible downside of this approach is that the build
-will contain the `const` declarations.
-
-
-## Beautifier options
-
-The code generator tries to output shortest code possible by default. In
-case you want beautified output, pass `--beautify` (`-b`). Optionally you
-can pass additional arguments that control the code output:
-
-- `beautify` (default `true`) -- whether to actually beautify the output.
- Passing `-b` will set this to true, but you might need to pass `-b` even
- when you want to generate minified code, in order to specify additional
- arguments, so you can use `-b beautify=false` to override it.
-- `indent-level` (default 4)
-- `indent-start` (default 0) -- prefix all lines by that many spaces
-- `quote-keys` (default `false`) -- pass `true` to quote all keys in literal
- objects
-- `space-colon` (default `true`) -- insert a space after the colon signs
-- `ascii-only` (default `false`) -- escape Unicode characters in strings and
- regexps
-- `inline-script` (default `false`) -- escape the slash in occurrences of
- ` 0) {
- sys.error("WARN: Ignoring input files since --self was passed");
- }
- files = UglifyJS.FILES;
- if (!ARGS.wrap) ARGS.wrap = "UglifyJS";
- ARGS.export_all = true;
-}
-
-var ORIG_MAP = ARGS.in_source_map;
-
-if (ORIG_MAP) {
- ORIG_MAP = JSON.parse(fs.readFileSync(ORIG_MAP));
- if (files.length == 0) {
- sys.error("INFO: Using file from the input source map: " + ORIG_MAP.file);
- files = [ ORIG_MAP.file ];
- }
- if (ARGS.source_map_root == null) {
- ARGS.source_map_root = ORIG_MAP.sourceRoot;
- }
-}
-
-if (files.length == 0) {
- files = [ "-" ];
-}
-
-if (files.indexOf("-") >= 0 && ARGS.source_map) {
- sys.error("ERROR: Source map doesn't work with input from STDIN");
- process.exit(1);
-}
-
-if (files.filter(function(el){ return el == "-" }).length > 1) {
- sys.error("ERROR: Can read a single file from STDIN (two or more dashes specified)");
- process.exit(1);
-}
-
-var STATS = {};
-var OUTPUT_FILE = ARGS.o;
-var TOPLEVEL = null;
-
-var SOURCE_MAP = ARGS.source_map ? UglifyJS.SourceMap({
- file: OUTPUT_FILE,
- root: ARGS.source_map_root,
- orig: ORIG_MAP,
-}) : null;
-
-OUTPUT_OPTIONS.source_map = SOURCE_MAP;
-
-try {
- var output = UglifyJS.OutputStream(OUTPUT_OPTIONS);
- var compressor = COMPRESS && UglifyJS.Compressor(COMPRESS);
-} catch(ex) {
- if (ex instanceof UglifyJS.DefaultsError) {
- sys.error(ex.msg);
- sys.error("Supported options:");
- sys.error(sys.inspect(ex.defs));
- process.exit(1);
- }
-}
-
-files.forEach(function(file) {
- var code = read_whole_file(file);
- if (ARGS.p != null) {
- file = file.replace(/^\/+/, "").split(/\/+/).slice(ARGS.p).join("/");
- }
- time_it("parse", function(){
- if (ARGS.spidermonkey) {
- var program = JSON.parse(code);
- if (!TOPLEVEL) TOPLEVEL = program;
- else TOPLEVEL.body = TOPLEVEL.body.concat(program.body);
- }
- else if (ARGS.acorn) {
- TOPLEVEL = acorn.parse(code, {
- locations : true,
- trackComments : true,
- sourceFile : file,
- program : TOPLEVEL
- });
- }
- else {
- TOPLEVEL = UglifyJS.parse(code, {
- filename: file,
- toplevel: TOPLEVEL
- });
- };
- });
-});
-
-if (ARGS.acorn || ARGS.spidermonkey) time_it("convert_ast", function(){
- TOPLEVEL = UglifyJS.AST_Node.from_mozilla_ast(TOPLEVEL);
-});
-
-if (ARGS.wrap) {
- TOPLEVEL = TOPLEVEL.wrap_commonjs(ARGS.wrap, ARGS.export_all);
-}
-
-var SCOPE_IS_NEEDED = COMPRESS || MANGLE || ARGS.lint;
-
-if (SCOPE_IS_NEEDED) {
- time_it("scope", function(){
- TOPLEVEL.figure_out_scope();
- if (ARGS.lint) {
- TOPLEVEL.scope_warnings();
- }
- });
-}
-
-if (COMPRESS) {
- time_it("squeeze", function(){
- TOPLEVEL = TOPLEVEL.transform(compressor);
- });
-}
-
-if (SCOPE_IS_NEEDED) {
- time_it("scope", function(){
- TOPLEVEL.figure_out_scope();
- if (MANGLE) {
- TOPLEVEL.compute_char_frequency(MANGLE);
- }
- });
-}
-
-if (MANGLE) time_it("mangle", function(){
- TOPLEVEL.mangle_names(MANGLE);
-});
-time_it("generate", function(){
- TOPLEVEL.print(output);
-});
-
-output = output.get();
-
-if (SOURCE_MAP) {
- fs.writeFileSync(ARGS.source_map, SOURCE_MAP, "utf8");
- output += "\n/*\n//@ sourceMappingURL=" + (ARGS.source_map_url || ARGS.source_map) + "\n*/";
-}
-
-if (OUTPUT_FILE) {
- fs.writeFileSync(OUTPUT_FILE, output, "utf8");
-} else {
- sys.print(output);
- sys.error("\n");
-}
-
-if (ARGS.stats) {
- sys.error(UglifyJS.string_template("Timing information (compressed {count} files):", {
- count: files.length
- }));
- for (var i in STATS) if (STATS.hasOwnProperty(i)) {
- sys.error(UglifyJS.string_template("- {name}: {time}s", {
- name: i,
- time: (STATS[i] / 1000).toFixed(3)
- }));
- }
-}
-
-/* -----[ functions ]----- */
-
-function normalize(o) {
- for (var i in o) if (o.hasOwnProperty(i) && /-/.test(i)) {
- o[i.replace(/-/g, "_")] = o[i];
- delete o[i];
- }
-}
-
-function getOptions(x, constants) {
- x = ARGS[x];
- if (!x) return null;
- var ret = {};
- if (x !== true) {
- var ast;
- try {
- ast = UglifyJS.parse(x);
- } catch(ex) {
- if (ex instanceof UglifyJS.JS_Parse_Error) {
- sys.error("Error parsing arguments in: " + x);
- process.exit(1);
- }
- }
- ast.walk(new UglifyJS.TreeWalker(function(node){
- if (node instanceof UglifyJS.AST_Toplevel) return; // descend
- if (node instanceof UglifyJS.AST_SimpleStatement) return; // descend
- if (node instanceof UglifyJS.AST_Seq) return; // descend
- if (node instanceof UglifyJS.AST_Assign) {
- var name = node.left.print_to_string({ beautify: false }).replace(/-/g, "_");
- var value = node.right;
- if (constants)
- value = new Function("return (" + value.print_to_string() + ")")();
- ret[name] = value;
- return true; // no descend
- }
- sys.error(node.TYPE)
- sys.error("Error parsing arguments in: " + x);
- process.exit(1);
- }));
- }
- return ret;
-}
-
-function read_whole_file(filename) {
- if (filename == "-") {
- // XXX: this sucks. How does one read the whole STDIN
- // synchronously?
- filename = "/dev/stdin";
- }
- try {
- return fs.readFileSync(filename, "utf8");
- } catch(ex) {
- sys.error("ERROR: can't read file: " + filename);
- process.exit(1);
- }
-}
-
-function time_it(name, cont) {
- var t1 = new Date().getTime();
- var ret = cont();
- if (ARGS.stats) {
- var spent = new Date().getTime() - t1;
- if (STATS[name]) STATS[name] += spent;
- else STATS[name] = spent;
- }
- return ret;
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/ast.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/ast.js
deleted file mode 100644
index 62bdd8db..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/ast.js
+++ /dev/null
@@ -1,964 +0,0 @@
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
-
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-"use strict";
-
-function DEFNODE(type, props, methods, base) {
- if (arguments.length < 4) base = AST_Node;
- if (!props) props = [];
- else props = props.split(/\s+/);
- var self_props = props;
- if (base && base.PROPS)
- props = props.concat(base.PROPS);
- var code = "return function AST_" + type + "(props){ if (props) { ";
- for (var i = props.length; --i >= 0;) {
- code += "this." + props[i] + " = props." + props[i] + ";";
- }
- var proto = base && new base;
- if (proto && proto.initialize || (methods && methods.initialize))
- code += "this.initialize();";
- code += "}}";
- var ctor = new Function(code)();
- if (proto) {
- ctor.prototype = proto;
- ctor.BASE = base;
- }
- if (base) base.SUBCLASSES.push(ctor);
- ctor.prototype.CTOR = ctor;
- ctor.PROPS = props || null;
- ctor.SELF_PROPS = self_props;
- ctor.SUBCLASSES = [];
- if (type) {
- ctor.prototype.TYPE = ctor.TYPE = type;
- }
- if (methods) for (i in methods) if (methods.hasOwnProperty(i)) {
- if (/^\$/.test(i)) {
- ctor[i.substr(1)] = methods[i];
- } else {
- ctor.prototype[i] = methods[i];
- }
- }
- ctor.DEFMETHOD = function(name, method) {
- this.prototype[name] = method;
- };
- return ctor;
-};
-
-var AST_Token = DEFNODE("Token", "type value line col pos endpos nlb comments_before file", {
-}, null);
-
-var AST_Node = DEFNODE("Node", "start end", {
- clone: function() {
- return new this.CTOR(this);
- },
- $documentation: "Base class of all AST nodes",
- $propdoc: {
- start: "[AST_Token] The first token of this node",
- end: "[AST_Token] The last token of this node"
- },
- _walk: function(visitor) {
- return visitor._visit(this);
- },
- walk: function(visitor) {
- return this._walk(visitor); // not sure the indirection will be any help
- }
-}, null);
-
-AST_Node.warn_function = null;
-AST_Node.warn = function(txt, props) {
- if (AST_Node.warn_function)
- AST_Node.warn_function(string_template(txt, props));
-};
-
-/* -----[ statements ]----- */
-
-var AST_Statement = DEFNODE("Statement", null, {
- $documentation: "Base class of all statements",
-});
-
-var AST_Debugger = DEFNODE("Debugger", null, {
- $documentation: "Represents a debugger statement",
-}, AST_Statement);
-
-var AST_Directive = DEFNODE("Directive", "value scope", {
- $documentation: "Represents a directive, like \"use strict\";",
- $propdoc: {
- value: "[string] The value of this directive as a plain string (it's not an AST_String!)",
- scope: "[AST_Scope/S] The scope that this directive affects"
- },
-}, AST_Statement);
-
-var AST_SimpleStatement = DEFNODE("SimpleStatement", "body", {
- $documentation: "A statement consisting of an expression, i.e. a = 1 + 2",
- $propdoc: {
- body: "[AST_Node] an expression node (should not be instanceof AST_Statement)"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.body._walk(visitor);
- });
- }
-}, AST_Statement);
-
-function walk_body(node, visitor) {
- if (node.body instanceof AST_Statement) {
- node.body._walk(visitor);
- }
- else node.body.forEach(function(stat){
- stat._walk(visitor);
- });
-};
-
-var AST_Block = DEFNODE("Block", "body", {
- $documentation: "A body of statements (usually bracketed)",
- $propdoc: {
- body: "[AST_Statement*] an array of statements"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- walk_body(this, visitor);
- });
- }
-}, AST_Statement);
-
-var AST_BlockStatement = DEFNODE("BlockStatement", null, {
- $documentation: "A block statement",
-}, AST_Block);
-
-var AST_EmptyStatement = DEFNODE("EmptyStatement", null, {
- $documentation: "The empty statement (empty block or simply a semicolon)",
- _walk: function(visitor) {
- return visitor._visit(this);
- }
-}, AST_Statement);
-
-var AST_StatementWithBody = DEFNODE("StatementWithBody", "body", {
- $documentation: "Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`",
- $propdoc: {
- body: "[AST_Statement] the body; this should always be present, even if it's an AST_EmptyStatement"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.body._walk(visitor);
- });
- }
-}, AST_Statement);
-
-var AST_LabeledStatement = DEFNODE("LabeledStatement", "label", {
- $documentation: "Statement with a label",
- $propdoc: {
- label: "[AST_Label] a label definition"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.label._walk(visitor);
- this.body._walk(visitor);
- });
- }
-}, AST_StatementWithBody);
-
-var AST_DWLoop = DEFNODE("DWLoop", "condition", {
- $documentation: "Base class for do/while statements",
- $propdoc: {
- condition: "[AST_Node] the loop condition. Should not be instanceof AST_Statement"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.condition._walk(visitor);
- this.body._walk(visitor);
- });
- }
-}, AST_StatementWithBody);
-
-var AST_Do = DEFNODE("Do", null, {
- $documentation: "A `do` statement",
-}, AST_DWLoop);
-
-var AST_While = DEFNODE("While", null, {
- $documentation: "A `while` statement",
-}, AST_DWLoop);
-
-var AST_For = DEFNODE("For", "init condition step", {
- $documentation: "A `for` statement",
- $propdoc: {
- init: "[AST_Node?] the `for` initialization code, or null if empty",
- condition: "[AST_Node?] the `for` termination clause, or null if empty",
- step: "[AST_Node?] the `for` update clause, or null if empty"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- if (this.init) this.init._walk(visitor);
- if (this.condition) this.condition._walk(visitor);
- if (this.step) this.step._walk(visitor);
- this.body._walk(visitor);
- });
- }
-}, AST_StatementWithBody);
-
-var AST_ForIn = DEFNODE("ForIn", "init name object", {
- $documentation: "A `for ... in` statement",
- $propdoc: {
- init: "[AST_Node] the `for/in` initialization code",
- name: "[AST_SymbolRef?] the loop variable, only if `init` is AST_Var",
- object: "[AST_Node] the object that we're looping through"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.init._walk(visitor);
- this.object._walk(visitor);
- this.body._walk(visitor);
- });
- }
-}, AST_StatementWithBody);
-
-var AST_With = DEFNODE("With", "expression", {
- $documentation: "A `with` statement",
- $propdoc: {
- expression: "[AST_Node] the `with` expression"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.expression._walk(visitor);
- this.body._walk(visitor);
- });
- }
-}, AST_StatementWithBody);
-
-/* -----[ scope and functions ]----- */
-
-var AST_Scope = DEFNODE("Scope", "directives variables functions uses_with uses_eval parent_scope enclosed cname", {
- $documentation: "Base class for all statements introducing a lexical scope",
- $propdoc: {
- directives: "[string*/S] an array of directives declared in this scope",
- variables: "[Object/S] a map of name -> SymbolDef for all variables/functions defined in this scope",
- functions: "[Object/S] like `variables`, but only lists function declarations",
- uses_with: "[boolean/S] tells whether this scope uses the `with` statement",
- uses_eval: "[boolean/S] tells whether this scope contains a direct call to the global `eval`",
- parent_scope: "[AST_Scope?/S] link to the parent scope",
- enclosed: "[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes",
- cname: "[integer/S] current index for mangling variables (used internally by the mangler)",
- },
-}, AST_Block);
-
-var AST_Toplevel = DEFNODE("Toplevel", "globals", {
- $documentation: "The toplevel scope",
- $propdoc: {
- globals: "[Object/S] a map of name -> SymbolDef for all undeclared names",
- },
- wrap_commonjs: function(name, export_all) {
- var self = this;
- var to_export = [];
- if (export_all) {
- self.figure_out_scope();
- self.walk(new TreeWalker(function(node){
- if (node instanceof AST_SymbolDeclaration && node.definition().global) {
- if (!find_if(function(n){ return n.name == node.name }, to_export))
- to_export.push(node);
- }
- }));
- }
- var wrapped_tl = "(function(exports, global){ global['" + name + "'] = exports; '$ORIG'; '$EXPORTS'; }({}, (function(){return this}())))";
- wrapped_tl = parse(wrapped_tl);
- wrapped_tl = wrapped_tl.transform(new TreeTransformer(function before(node){
- if (node instanceof AST_SimpleStatement) {
- node = node.body;
- if (node instanceof AST_String) switch (node.getValue()) {
- case "$ORIG":
- return MAP.splice(self.body);
- case "$EXPORTS":
- var body = [];
- to_export.forEach(function(sym){
- body.push(new AST_SimpleStatement({
- body: new AST_Assign({
- left: new AST_Sub({
- expression: new AST_SymbolRef({ name: "exports" }),
- property: new AST_String({ value: sym.name }),
- }),
- operator: "=",
- right: new AST_SymbolRef(sym),
- }),
- }));
- });
- return MAP.splice(body);
- }
- }
- }));
- return wrapped_tl;
- }
-}, AST_Scope);
-
-var AST_Lambda = DEFNODE("Lambda", "name argnames uses_arguments", {
- $documentation: "Base class for functions",
- $propdoc: {
- name: "[AST_SymbolDeclaration?] the name of this function",
- argnames: "[AST_SymbolFunarg*] array of function arguments",
- uses_arguments: "[boolean/S] tells whether this function accesses the arguments array"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- if (this.name) this.name._walk(visitor);
- this.argnames.forEach(function(arg){
- arg._walk(visitor);
- });
- walk_body(this, visitor);
- });
- }
-}, AST_Scope);
-
-var AST_Accessor = DEFNODE("Accessor", null, {
- $documentation: "A setter/getter function"
-}, AST_Lambda);
-
-var AST_Function = DEFNODE("Function", null, {
- $documentation: "A function expression"
-}, AST_Lambda);
-
-var AST_Defun = DEFNODE("Defun", null, {
- $documentation: "A function definition"
-}, AST_Lambda);
-
-/* -----[ JUMPS ]----- */
-
-var AST_Jump = DEFNODE("Jump", null, {
- $documentation: "Base class for “jumps” (for now that's `return`, `throw`, `break` and `continue`)"
-}, AST_Statement);
-
-var AST_Exit = DEFNODE("Exit", "value", {
- $documentation: "Base class for “exits” (`return` and `throw`)",
- $propdoc: {
- value: "[AST_Node?] the value returned or thrown by this statement; could be null for AST_Return"
- },
- _walk: function(visitor) {
- return visitor._visit(this, this.value && function(){
- this.value._walk(visitor);
- });
- }
-}, AST_Jump);
-
-var AST_Return = DEFNODE("Return", null, {
- $documentation: "A `return` statement"
-}, AST_Exit);
-
-var AST_Throw = DEFNODE("Throw", null, {
- $documentation: "A `throw` statement"
-}, AST_Exit);
-
-var AST_LoopControl = DEFNODE("LoopControl", "label", {
- $documentation: "Base class for loop control statements (`break` and `continue`)",
- $propdoc: {
- label: "[AST_LabelRef?] the label, or null if none",
- },
- _walk: function(visitor) {
- return visitor._visit(this, this.label && function(){
- this.label._walk(visitor);
- });
- }
-}, AST_Jump);
-
-var AST_Break = DEFNODE("Break", null, {
- $documentation: "A `break` statement"
-}, AST_LoopControl);
-
-var AST_Continue = DEFNODE("Continue", null, {
- $documentation: "A `continue` statement"
-}, AST_LoopControl);
-
-/* -----[ IF ]----- */
-
-var AST_If = DEFNODE("If", "condition alternative", {
- $documentation: "A `if` statement",
- $propdoc: {
- condition: "[AST_Node] the `if` condition",
- alternative: "[AST_Statement?] the `else` part, or null if not present"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.condition._walk(visitor);
- this.body._walk(visitor);
- if (this.alternative) this.alternative._walk(visitor);
- });
- }
-}, AST_StatementWithBody);
-
-/* -----[ SWITCH ]----- */
-
-var AST_Switch = DEFNODE("Switch", "expression", {
- $documentation: "A `switch` statement",
- $propdoc: {
- expression: "[AST_Node] the `switch` “discriminant”"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.expression._walk(visitor);
- walk_body(this, visitor);
- });
- }
-}, AST_Block);
-
-var AST_SwitchBranch = DEFNODE("SwitchBranch", null, {
- $documentation: "Base class for `switch` branches",
-}, AST_Block);
-
-var AST_Default = DEFNODE("Default", null, {
- $documentation: "A `default` switch branch",
-}, AST_SwitchBranch);
-
-var AST_Case = DEFNODE("Case", "expression", {
- $documentation: "A `case` switch branch",
- $propdoc: {
- expression: "[AST_Node] the `case` expression"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.expression._walk(visitor);
- walk_body(this, visitor);
- });
- }
-}, AST_SwitchBranch);
-
-/* -----[ EXCEPTIONS ]----- */
-
-var AST_Try = DEFNODE("Try", "bcatch bfinally", {
- $documentation: "A `try` statement",
- $propdoc: {
- bcatch: "[AST_Catch?] the catch block, or null if not present",
- bfinally: "[AST_Finally?] the finally block, or null if not present"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- walk_body(this, visitor);
- if (this.bcatch) this.bcatch._walk(visitor);
- if (this.bfinally) this.bfinally._walk(visitor);
- });
- }
-}, AST_Block);
-
-// XXX: this is wrong according to ECMA-262 (12.4). the catch block
-// should introduce another scope, as the argname should be visible
-// only inside the catch block. However, doing it this way because of
-// IE which simply introduces the name in the surrounding scope. If
-// we ever want to fix this then AST_Catch should inherit from
-// AST_Scope.
-var AST_Catch = DEFNODE("Catch", "argname", {
- $documentation: "A `catch` node; only makes sense as part of a `try` statement",
- $propdoc: {
- argname: "[AST_SymbolCatch] symbol for the exception"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.argname._walk(visitor);
- walk_body(this, visitor);
- });
- }
-}, AST_Block);
-
-var AST_Finally = DEFNODE("Finally", null, {
- $documentation: "A `finally` node; only makes sense as part of a `try` statement"
-}, AST_Block);
-
-/* -----[ VAR/CONST ]----- */
-
-var AST_Definitions = DEFNODE("Definitions", "definitions", {
- $documentation: "Base class for `var` or `const` nodes (variable declarations/initializations)",
- $propdoc: {
- definitions: "[AST_VarDef*] array of variable definitions"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.definitions.forEach(function(def){
- def._walk(visitor);
- });
- });
- }
-}, AST_Statement);
-
-var AST_Var = DEFNODE("Var", null, {
- $documentation: "A `var` statement"
-}, AST_Definitions);
-
-var AST_Const = DEFNODE("Const", null, {
- $documentation: "A `const` statement"
-}, AST_Definitions);
-
-var AST_VarDef = DEFNODE("VarDef", "name value", {
- $documentation: "A variable declaration; only appears in a AST_Definitions node",
- $propdoc: {
- name: "[AST_SymbolVar|AST_SymbolConst] name of the variable",
- value: "[AST_Node?] initializer, or null of there's no initializer"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.name._walk(visitor);
- if (this.value) this.value._walk(visitor);
- });
- }
-});
-
-/* -----[ OTHER ]----- */
-
-var AST_Call = DEFNODE("Call", "expression args", {
- $documentation: "A function call expression",
- $propdoc: {
- expression: "[AST_Node] expression to invoke as function",
- args: "[AST_Node*] array of arguments"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.expression._walk(visitor);
- this.args.forEach(function(arg){
- arg._walk(visitor);
- });
- });
- }
-});
-
-var AST_New = DEFNODE("New", null, {
- $documentation: "An object instantiation. Derives from a function call since it has exactly the same properties"
-}, AST_Call);
-
-var AST_Seq = DEFNODE("Seq", "car cdr", {
- $documentation: "A sequence expression (two comma-separated expressions)",
- $propdoc: {
- car: "[AST_Node] first element in sequence",
- cdr: "[AST_Node] second element in sequence"
- },
- $cons: function(x, y) {
- var seq = new AST_Seq(x);
- seq.car = x;
- seq.cdr = y;
- return seq;
- },
- $from_array: function(array) {
- if (array.length == 0) return null;
- if (array.length == 1) return array[0].clone();
- var list = null;
- for (var i = array.length; --i >= 0;) {
- list = AST_Seq.cons(array[i], list);
- }
- var p = list;
- while (p) {
- if (p.cdr && !p.cdr.cdr) {
- p.cdr = p.cdr.car;
- break;
- }
- p = p.cdr;
- }
- return list;
- },
- to_array: function() {
- var p = this, a = [];
- while (p) {
- a.push(p.car);
- if (p.cdr && !(p.cdr instanceof AST_Seq)) {
- a.push(p.cdr);
- break;
- }
- p = p.cdr;
- }
- return a;
- },
- add: function(node) {
- var p = this;
- while (p) {
- if (!(p.cdr instanceof AST_Seq)) {
- var cell = AST_Seq.cons(p.cdr, node);
- return p.cdr = cell;
- }
- p = p.cdr;
- }
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.car._walk(visitor);
- if (this.cdr) this.cdr._walk(visitor);
- });
- }
-});
-
-var AST_PropAccess = DEFNODE("PropAccess", "expression property", {
- $documentation: "Base class for property access expressions, i.e. `a.foo` or `a[\"foo\"]`",
- $propdoc: {
- expression: "[AST_Node] the “container” expression",
- property: "[AST_Node|string] the property to access. For AST_Dot this is always a plain string, while for AST_Sub it's an arbitrary AST_Node"
- }
-});
-
-var AST_Dot = DEFNODE("Dot", null, {
- $documentation: "A dotted property access expression",
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.expression._walk(visitor);
- });
- }
-}, AST_PropAccess);
-
-var AST_Sub = DEFNODE("Sub", null, {
- $documentation: "Index-style property access, i.e. `a[\"foo\"]`",
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.expression._walk(visitor);
- this.property._walk(visitor);
- });
- }
-}, AST_PropAccess);
-
-var AST_Unary = DEFNODE("Unary", "operator expression", {
- $documentation: "Base class for unary expressions",
- $propdoc: {
- operator: "[string] the operator",
- expression: "[AST_Node] expression that this unary operator applies to"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.expression._walk(visitor);
- });
- }
-});
-
-var AST_UnaryPrefix = DEFNODE("UnaryPrefix", null, {
- $documentation: "Unary prefix expression, i.e. `typeof i` or `++i`"
-}, AST_Unary);
-
-var AST_UnaryPostfix = DEFNODE("UnaryPostfix", null, {
- $documentation: "Unary postfix expression, i.e. `i++`"
-}, AST_Unary);
-
-var AST_Binary = DEFNODE("Binary", "left operator right", {
- $documentation: "Binary expression, i.e. `a + b`",
- $propdoc: {
- left: "[AST_Node] left-hand side expression",
- operator: "[string] the operator",
- right: "[AST_Node] right-hand side expression"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.left._walk(visitor);
- this.right._walk(visitor);
- });
- }
-});
-
-var AST_Conditional = DEFNODE("Conditional", "condition consequent alternative", {
- $documentation: "Conditional expression using the ternary operator, i.e. `a ? b : c`",
- $propdoc: {
- condition: "[AST_Node]",
- consequent: "[AST_Node]",
- alternative: "[AST_Node]"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.condition._walk(visitor);
- this.consequent._walk(visitor);
- this.alternative._walk(visitor);
- });
- }
-});
-
-var AST_Assign = DEFNODE("Assign", null, {
- $documentation: "An assignment expression — `a = b + 5`",
-}, AST_Binary);
-
-/* -----[ LITERALS ]----- */
-
-var AST_Array = DEFNODE("Array", "elements", {
- $documentation: "An array literal",
- $propdoc: {
- elements: "[AST_Node*] array of elements"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.elements.forEach(function(el){
- el._walk(visitor);
- });
- });
- }
-});
-
-var AST_Object = DEFNODE("Object", "properties", {
- $documentation: "An object literal",
- $propdoc: {
- properties: "[AST_ObjectProperty*] array of properties"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.properties.forEach(function(prop){
- prop._walk(visitor);
- });
- });
- }
-});
-
-var AST_ObjectProperty = DEFNODE("ObjectProperty", "key value", {
- $documentation: "Base class for literal object properties",
- $propdoc: {
- key: "[string] the property name; it's always a plain string in our AST, no matter if it was a string, number or identifier in original code",
- value: "[AST_Node] property value. For setters and getters this is an AST_Function."
- },
- _walk: function(visitor) {
- return visitor._visit(this, function(){
- this.value._walk(visitor);
- });
- }
-});
-
-var AST_ObjectKeyVal = DEFNODE("ObjectKeyVal", null, {
- $documentation: "A key: value object property",
-}, AST_ObjectProperty);
-
-var AST_ObjectSetter = DEFNODE("ObjectSetter", null, {
- $documentation: "An object setter property",
-}, AST_ObjectProperty);
-
-var AST_ObjectGetter = DEFNODE("ObjectGetter", null, {
- $documentation: "An object getter property",
-}, AST_ObjectProperty);
-
-var AST_Symbol = DEFNODE("Symbol", "scope name thedef", {
- $propdoc: {
- name: "[string] name of this symbol",
- scope: "[AST_Scope/S] the current scope (not necessarily the definition scope)",
- thedef: "[SymbolDef/S] the definition of this symbol"
- },
- $documentation: "Base class for all symbols",
-});
-
-var AST_SymbolAccessor = DEFNODE("SymbolAccessor", null, {
- $documentation: "The name of a property accessor (setter/getter function)"
-}, AST_Symbol);
-
-var AST_SymbolDeclaration = DEFNODE("SymbolDeclaration", "init", {
- $documentation: "A declaration symbol (symbol in var/const, function name or argument, symbol in catch)",
- $propdoc: {
- init: "[AST_Node*/S] array of initializers for this declaration."
- }
-}, AST_Symbol);
-
-var AST_SymbolVar = DEFNODE("SymbolVar", null, {
- $documentation: "Symbol defining a variable",
-}, AST_SymbolDeclaration);
-
-var AST_SymbolConst = DEFNODE("SymbolConst", null, {
- $documentation: "A constant declaration"
-}, AST_SymbolDeclaration);
-
-var AST_SymbolFunarg = DEFNODE("SymbolFunarg", null, {
- $documentation: "Symbol naming a function argument",
-}, AST_SymbolVar);
-
-var AST_SymbolDefun = DEFNODE("SymbolDefun", null, {
- $documentation: "Symbol defining a function",
-}, AST_SymbolDeclaration);
-
-var AST_SymbolLambda = DEFNODE("SymbolLambda", null, {
- $documentation: "Symbol naming a function expression",
-}, AST_SymbolDeclaration);
-
-var AST_SymbolCatch = DEFNODE("SymbolCatch", null, {
- $documentation: "Symbol naming the exception in catch",
-}, AST_SymbolDeclaration);
-
-var AST_Label = DEFNODE("Label", "references", {
- $documentation: "Symbol naming a label (declaration)",
- $propdoc: {
- references: "[AST_LabelRef*] a list of nodes referring to this label"
- }
-}, AST_Symbol);
-
-var AST_SymbolRef = DEFNODE("SymbolRef", null, {
- $documentation: "Reference to some symbol (not definition/declaration)",
-}, AST_Symbol);
-
-var AST_LabelRef = DEFNODE("LabelRef", null, {
- $documentation: "Reference to a label symbol",
-}, AST_Symbol);
-
-var AST_This = DEFNODE("This", null, {
- $documentation: "The `this` symbol",
-}, AST_Symbol);
-
-var AST_Constant = DEFNODE("Constant", null, {
- $documentation: "Base class for all constants",
- getValue: function() {
- return this.value;
- }
-});
-
-var AST_String = DEFNODE("String", "value", {
- $documentation: "A string literal",
- $propdoc: {
- value: "[string] the contents of this string"
- }
-}, AST_Constant);
-
-var AST_Number = DEFNODE("Number", "value", {
- $documentation: "A number literal",
- $propdoc: {
- value: "[number] the numeric value"
- }
-}, AST_Constant);
-
-var AST_RegExp = DEFNODE("RegExp", "value", {
- $documentation: "A regexp literal",
- $propdoc: {
- value: "[RegExp] the actual regexp"
- }
-}, AST_Constant);
-
-var AST_Atom = DEFNODE("Atom", null, {
- $documentation: "Base class for atoms",
-}, AST_Constant);
-
-var AST_Null = DEFNODE("Null", null, {
- $documentation: "The `null` atom",
- value: null
-}, AST_Atom);
-
-var AST_NaN = DEFNODE("NaN", null, {
- $documentation: "The impossible value",
- value: 0/0
-}, AST_Atom);
-
-var AST_Undefined = DEFNODE("Undefined", null, {
- $documentation: "The `undefined` value",
- value: (function(){}())
-}, AST_Atom);
-
-var AST_Hole = DEFNODE("Hole", null, {
- $documentation: "A hole in an array",
- value: (function(){}())
-}, AST_Atom);
-
-var AST_Infinity = DEFNODE("Infinity", null, {
- $documentation: "The `Infinity` value",
- value: 1/0
-}, AST_Atom);
-
-var AST_Boolean = DEFNODE("Boolean", null, {
- $documentation: "Base class for booleans",
-}, AST_Atom);
-
-var AST_False = DEFNODE("False", null, {
- $documentation: "The `false` atom",
- value: false
-}, AST_Boolean);
-
-var AST_True = DEFNODE("True", null, {
- $documentation: "The `true` atom",
- value: true
-}, AST_Boolean);
-
-/* -----[ TreeWalker ]----- */
-
-function TreeWalker(callback) {
- this.visit = callback;
- this.stack = [];
-};
-TreeWalker.prototype = {
- _visit: function(node, descend) {
- this.stack.push(node);
- var ret = this.visit(node, descend ? function(){
- descend.call(node);
- } : noop);
- if (!ret && descend) {
- descend.call(node);
- }
- this.stack.pop();
- return ret;
- },
- parent: function(n) {
- return this.stack[this.stack.length - 2 - (n || 0)];
- },
- push: function (node) {
- this.stack.push(node);
- },
- pop: function() {
- return this.stack.pop();
- },
- self: function() {
- return this.stack[this.stack.length - 1];
- },
- find_parent: function(type) {
- var stack = this.stack;
- for (var i = stack.length; --i >= 0;) {
- var x = stack[i];
- if (x instanceof type) return x;
- }
- },
- in_boolean_context: function() {
- var stack = this.stack;
- var i = stack.length, self = stack[--i];
- while (i > 0) {
- var p = stack[--i];
- if ((p instanceof AST_If && p.condition === self) ||
- (p instanceof AST_Conditional && p.condition === self) ||
- (p instanceof AST_DWLoop && p.condition === self) ||
- (p instanceof AST_For && p.condition === self) ||
- (p instanceof AST_UnaryPrefix && p.operator == "!" && p.expression === self))
- {
- return true;
- }
- if (!(p instanceof AST_Binary && (p.operator == "&&" || p.operator == "||")))
- return false;
- self = p;
- }
- },
- loopcontrol_target: function(label) {
- var stack = this.stack;
- if (label) {
- for (var i = stack.length; --i >= 0;) {
- var x = stack[i];
- if (x instanceof AST_LabeledStatement && x.label.name == label.name) {
- return x.body;
- }
- }
- } else {
- for (var i = stack.length; --i >= 0;) {
- var x = stack[i];
- if (x instanceof AST_Switch
- || x instanceof AST_For
- || x instanceof AST_ForIn
- || x instanceof AST_DWLoop) return x;
- }
- }
- }
-};
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/compress.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/compress.js
deleted file mode 100644
index ca23c40e..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/compress.js
+++ /dev/null
@@ -1,1968 +0,0 @@
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
-
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-"use strict";
-
-function Compressor(options, false_by_default) {
- if (!(this instanceof Compressor))
- return new Compressor(options, false_by_default);
- TreeTransformer.call(this, this.before, this.after);
- this.options = defaults(options, {
- sequences : !false_by_default,
- properties : !false_by_default,
- dead_code : !false_by_default,
- drop_debugger : !false_by_default,
- unsafe : !false_by_default,
- unsafe_comps : false,
- conditionals : !false_by_default,
- comparisons : !false_by_default,
- evaluate : !false_by_default,
- booleans : !false_by_default,
- loops : !false_by_default,
- unused : !false_by_default,
- hoist_funs : !false_by_default,
- hoist_vars : false,
- if_return : !false_by_default,
- join_vars : !false_by_default,
- cascade : !false_by_default,
- side_effects : !false_by_default,
-
- warnings : true,
- global_defs : {}
- }, true);
-};
-
-Compressor.prototype = new TreeTransformer;
-merge(Compressor.prototype, {
- option: function(key) { return this.options[key] },
- warn: function() {
- if (this.options.warnings)
- AST_Node.warn.apply(AST_Node, arguments);
- },
- before: function(node, descend, in_list) {
- if (node._squeezed) return node;
- if (node instanceof AST_Scope) {
- node.drop_unused(this);
- node = node.hoist_declarations(this);
- }
- descend(node, this);
- node = node.optimize(this);
- if (node instanceof AST_Scope) {
- // dead code removal might leave further unused declarations.
- // this'll usually save very few bytes, but the performance
- // hit seems negligible so I'll just drop it here.
-
- // no point to repeat warnings.
- var save_warnings = this.options.warnings;
- this.options.warnings = false;
- node.drop_unused(this);
- this.options.warnings = save_warnings;
- }
- node._squeezed = true;
- return node;
- }
-});
-
-(function(){
-
- function OPT(node, optimizer) {
- node.DEFMETHOD("optimize", function(compressor){
- var self = this;
- if (self._optimized) return self;
- var opt = optimizer(self, compressor);
- opt._optimized = true;
- if (opt === self) return opt;
- return opt.transform(compressor);
- });
- };
-
- OPT(AST_Node, function(self, compressor){
- return self;
- });
-
- AST_Node.DEFMETHOD("equivalent_to", function(node){
- // XXX: this is a rather expensive way to test two node's equivalence:
- return this.print_to_string() == node.print_to_string();
- });
-
- function make_node(ctor, orig, props) {
- if (!props) props = {};
- if (orig) {
- if (!props.start) props.start = orig.start;
- if (!props.end) props.end = orig.end;
- }
- return new ctor(props);
- };
-
- function make_node_from_constant(compressor, val, orig) {
- // XXX: WIP.
- // if (val instanceof AST_Node) return val.transform(new TreeTransformer(null, function(node){
- // if (node instanceof AST_SymbolRef) {
- // var scope = compressor.find_parent(AST_Scope);
- // var def = scope.find_variable(node);
- // node.thedef = def;
- // return node;
- // }
- // })).transform(compressor);
-
- if (val instanceof AST_Node) return val.transform(compressor);
- switch (typeof val) {
- case "string":
- return make_node(AST_String, orig, {
- value: val
- }).optimize(compressor);
- case "number":
- return make_node(isNaN(val) ? AST_NaN : AST_Number, orig, {
- value: val
- }).optimize(compressor);
- case "boolean":
- return make_node(val ? AST_True : AST_False, orig);
- case "undefined":
- return make_node(AST_Undefined, orig).optimize(compressor);
- default:
- if (val === null) {
- return make_node(AST_Null, orig).optimize(compressor);
- }
- if (val instanceof RegExp) {
- return make_node(AST_RegExp, orig).optimize(compressor);
- }
- throw new Error(string_template("Can't handle constant of type: {type}", {
- type: typeof val
- }));
- }
- };
-
- function as_statement_array(thing) {
- if (thing === null) return [];
- if (thing instanceof AST_BlockStatement) return thing.body;
- if (thing instanceof AST_EmptyStatement) return [];
- if (thing instanceof AST_Statement) return [ thing ];
- throw new Error("Can't convert thing to statement array");
- };
-
- function is_empty(thing) {
- if (thing === null) return true;
- if (thing instanceof AST_EmptyStatement) return true;
- if (thing instanceof AST_BlockStatement) return thing.body.length == 0;
- return false;
- };
-
- function loop_body(x) {
- if (x instanceof AST_Switch) return x;
- if (x instanceof AST_For || x instanceof AST_ForIn || x instanceof AST_DWLoop) {
- return (x.body instanceof AST_BlockStatement ? x.body : x);
- }
- return x;
- };
-
- function tighten_body(statements, compressor) {
- var CHANGED;
- do {
- CHANGED = false;
- statements = eliminate_spurious_blocks(statements);
- if (compressor.option("dead_code")) {
- statements = eliminate_dead_code(statements, compressor);
- }
- if (compressor.option("if_return")) {
- statements = handle_if_return(statements, compressor);
- }
- if (compressor.option("sequences")) {
- statements = sequencesize(statements, compressor);
- }
- if (compressor.option("join_vars")) {
- statements = join_consecutive_vars(statements, compressor);
- }
- } while (CHANGED);
- return statements;
-
- function eliminate_spurious_blocks(statements) {
- var seen_dirs = [];
- return statements.reduce(function(a, stat){
- if (stat instanceof AST_BlockStatement) {
- CHANGED = true;
- a.push.apply(a, eliminate_spurious_blocks(stat.body));
- } else if (stat instanceof AST_EmptyStatement) {
- CHANGED = true;
- } else if (stat instanceof AST_Directive) {
- if (seen_dirs.indexOf(stat.value) < 0) {
- a.push(stat);
- seen_dirs.push(stat.value);
- } else {
- CHANGED = true;
- }
- } else {
- a.push(stat);
- }
- return a;
- }, []);
- };
-
- function handle_if_return(statements, compressor) {
- var self = compressor.self();
- var in_lambda = self instanceof AST_Lambda;
- var ret = [];
- loop: for (var i = statements.length; --i >= 0;) {
- var stat = statements[i];
- switch (true) {
- case (in_lambda && stat instanceof AST_Return && !stat.value && ret.length == 0):
- CHANGED = true;
- // note, ret.length is probably always zero
- // because we drop unreachable code before this
- // step. nevertheless, it's good to check.
- continue loop;
- case stat instanceof AST_If:
- if (stat.body instanceof AST_Return) {
- //---
- // pretty silly case, but:
- // if (foo()) return; return; ==> foo(); return;
- if (((in_lambda && ret.length == 0)
- || (ret[0] instanceof AST_Return && !ret[0].value))
- && !stat.body.value && !stat.alternative) {
- CHANGED = true;
- var cond = make_node(AST_SimpleStatement, stat.condition, {
- body: stat.condition
- });
- ret.unshift(cond);
- continue loop;
- }
- //---
- // if (foo()) return x; return y; ==> return foo() ? x : y;
- if (ret[0] instanceof AST_Return && stat.body.value && ret[0].value && !stat.alternative) {
- CHANGED = true;
- stat = stat.clone();
- stat.alternative = ret[0];
- ret[0] = stat.transform(compressor);
- continue loop;
- }
- //---
- // if (foo()) return x; [ return ; ] ==> return foo() ? x : undefined;
- if ((ret.length == 0 || ret[0] instanceof AST_Return) && stat.body.value && !stat.alternative && in_lambda) {
- CHANGED = true;
- stat = stat.clone();
- stat.alternative = ret[0] || make_node(AST_Return, stat, {
- value: make_node(AST_Undefined, stat)
- });
- ret[0] = stat.transform(compressor);
- continue loop;
- }
- //---
- // if (foo()) return; [ else x... ]; y... ==> if (!foo()) { x...; y... }
- if (!stat.body.value && in_lambda) {
- CHANGED = true;
- stat = stat.clone();
- stat.condition = stat.condition.negate(compressor);
- stat.body = make_node(AST_BlockStatement, stat, {
- body: as_statement_array(stat.alternative).concat(ret)
- });
- stat.alternative = null;
- ret = [ stat.transform(compressor) ];
- continue loop;
- }
- //---
- if (ret.length == 1 && in_lambda && ret[0] instanceof AST_SimpleStatement
- && (!stat.alternative || stat.alternative instanceof AST_SimpleStatement)) {
- CHANGED = true;
- ret.push(make_node(AST_Return, ret[0], {
- value: make_node(AST_Undefined, ret[0])
- }).transform(compressor));
- ret = as_statement_array(stat.alternative).concat(ret);
- ret.unshift(stat);
- continue loop;
- }
- }
-
- var ab = aborts(stat.body);
- var lct = ab instanceof AST_LoopControl ? compressor.loopcontrol_target(ab.label) : null;
- if (ab && ((ab instanceof AST_Return && !ab.value && in_lambda)
- || (ab instanceof AST_Continue && self === loop_body(lct))
- || (ab instanceof AST_Break && lct instanceof AST_BlockStatement && self === lct))) {
- if (ab.label) {
- remove(ab.label.thedef.references, ab.label);
- }
- CHANGED = true;
- var body = as_statement_array(stat.body).slice(0, -1);
- stat = stat.clone();
- stat.condition = stat.condition.negate(compressor);
- stat.body = make_node(AST_BlockStatement, stat, {
- body: ret
- });
- stat.alternative = make_node(AST_BlockStatement, stat, {
- body: body
- });
- ret = [ stat.transform(compressor) ];
- continue loop;
- }
-
- var ab = aborts(stat.alternative);
- var lct = ab instanceof AST_LoopControl ? compressor.loopcontrol_target(ab.label) : null;
- if (ab && ((ab instanceof AST_Return && !ab.value && in_lambda)
- || (ab instanceof AST_Continue && self === loop_body(lct))
- || (ab instanceof AST_Break && lct instanceof AST_BlockStatement && self === lct))) {
- if (ab.label) {
- remove(ab.label.thedef.references, ab.label);
- }
- CHANGED = true;
- stat = stat.clone();
- stat.body = make_node(AST_BlockStatement, stat.body, {
- body: as_statement_array(stat.body).concat(ret)
- });
- stat.alternative = make_node(AST_BlockStatement, stat.alternative, {
- body: as_statement_array(stat.alternative).slice(0, -1)
- });
- ret = [ stat.transform(compressor) ];
- continue loop;
- }
-
- ret.unshift(stat);
- break;
- default:
- ret.unshift(stat);
- break;
- }
- }
- return ret;
- };
-
- function eliminate_dead_code(statements, compressor) {
- var has_quit = false;
- var orig = statements.length;
- var self = compressor.self();
- statements = statements.reduce(function(a, stat){
- if (has_quit) {
- extract_declarations_from_unreachable_code(compressor, stat, a);
- } else {
- if (stat instanceof AST_LoopControl) {
- var lct = compressor.loopcontrol_target(stat.label);
- if ((stat instanceof AST_Break
- && lct instanceof AST_BlockStatement
- && loop_body(lct) === self) || (stat instanceof AST_Continue
- && loop_body(lct) === self)) {
- if (stat.label) {
- remove(stat.label.thedef.references, stat.label);
- }
- } else {
- a.push(stat);
- }
- } else {
- a.push(stat);
- }
- if (aborts(stat)) has_quit = true;
- }
- return a;
- }, []);
- CHANGED = statements.length != orig;
- return statements;
- };
-
- function sequencesize(statements, compressor) {
- if (statements.length < 2) return statements;
- var seq = [], ret = [];
- function push_seq() {
- seq = AST_Seq.from_array(seq);
- if (seq) ret.push(make_node(AST_SimpleStatement, seq, {
- body: seq
- }));
- seq = [];
- };
- statements.forEach(function(stat){
- if (stat instanceof AST_SimpleStatement) seq.push(stat.body);
- else push_seq(), ret.push(stat);
- });
- push_seq();
- ret = sequencesize_2(ret, compressor);
- CHANGED = ret.length != statements.length;
- return ret;
- };
-
- function sequencesize_2(statements, compressor) {
- function cons_seq(right) {
- ret.pop();
- var left = prev.body;
- if (left instanceof AST_Seq) {
- left.add(right);
- } else {
- left = AST_Seq.cons(left, right);
- }
- return left.transform(compressor);
- };
- var ret = [], prev = null;
- statements.forEach(function(stat){
- if (prev) {
- if (stat instanceof AST_For) {
- var opera = {};
- try {
- prev.body.walk(new TreeWalker(function(node){
- if (node instanceof AST_Binary && node.operator == "in")
- throw opera;
- }));
- if (stat.init && !(stat.init instanceof AST_Definitions)) {
- stat.init = cons_seq(stat.init);
- }
- else if (!stat.init) {
- stat.init = prev.body;
- ret.pop();
- }
- } catch(ex) {
- if (ex !== opera) throw ex;
- }
- }
- else if (stat instanceof AST_If) {
- stat.condition = cons_seq(stat.condition);
- }
- else if (stat instanceof AST_With) {
- stat.expression = cons_seq(stat.expression);
- }
- else if (stat instanceof AST_Exit && stat.value) {
- stat.value = cons_seq(stat.value);
- }
- else if (stat instanceof AST_Exit) {
- stat.value = cons_seq(make_node(AST_Undefined, stat));
- }
- else if (stat instanceof AST_Switch) {
- stat.expression = cons_seq(stat.expression);
- }
- }
- ret.push(stat);
- prev = stat instanceof AST_SimpleStatement ? stat : null;
- });
- return ret;
- };
-
- function join_consecutive_vars(statements, compressor) {
- var prev = null;
- return statements.reduce(function(a, stat){
- if (stat instanceof AST_Definitions && prev && prev.TYPE == stat.TYPE) {
- prev.definitions = prev.definitions.concat(stat.definitions);
- CHANGED = true;
- }
- else if (stat instanceof AST_For
- && prev instanceof AST_Definitions
- && (!stat.init || stat.init.TYPE == prev.TYPE)) {
- CHANGED = true;
- a.pop();
- if (stat.init) {
- stat.init.definitions = prev.definitions.concat(stat.init.definitions);
- } else {
- stat.init = prev;
- }
- a.push(stat);
- prev = stat;
- }
- else {
- prev = stat;
- a.push(stat);
- }
- return a;
- }, []);
- };
-
- };
-
- function extract_declarations_from_unreachable_code(compressor, stat, target) {
- compressor.warn("Dropping unreachable code [{file}:{line},{col}]", stat.start);
- stat.walk(new TreeWalker(function(node){
- if (node instanceof AST_Definitions) {
- compressor.warn("Declarations in unreachable code! [{file}:{line},{col}]", node.start);
- node.remove_initializers();
- target.push(node);
- return true;
- }
- if (node instanceof AST_Defun) {
- target.push(node);
- return true;
- }
- if (node instanceof AST_Scope) {
- return true;
- }
- }));
- };
-
- /* -----[ boolean/negation helpers ]----- */
-
- // methods to determine whether an expression has a boolean result type
- (function (def){
- var unary_bool = [ "!", "delete" ];
- var binary_bool = [ "in", "instanceof", "==", "!=", "===", "!==", "<", "<=", ">=", ">" ];
- def(AST_Node, function(){ return false });
- def(AST_UnaryPrefix, function(){
- return member(this.operator, unary_bool);
- });
- def(AST_Binary, function(){
- return member(this.operator, binary_bool) ||
- ( (this.operator == "&&" || this.operator == "||") &&
- this.left.is_boolean() && this.right.is_boolean() );
- });
- def(AST_Conditional, function(){
- return this.consequent.is_boolean() && this.alternative.is_boolean();
- });
- def(AST_Assign, function(){
- return this.operator == "=" && this.right.is_boolean();
- });
- def(AST_Seq, function(){
- return this.cdr.is_boolean();
- });
- def(AST_True, function(){ return true });
- def(AST_False, function(){ return true });
- })(function(node, func){
- node.DEFMETHOD("is_boolean", func);
- });
-
- // methods to determine if an expression has a string result type
- (function (def){
- def(AST_Node, function(){ return false });
- def(AST_String, function(){ return true });
- def(AST_UnaryPrefix, function(){
- return this.operator == "typeof";
- });
- def(AST_Binary, function(compressor){
- return this.operator == "+" &&
- (this.left.is_string(compressor) || this.right.is_string(compressor));
- });
- def(AST_Assign, function(compressor){
- return (this.operator == "=" || this.operator == "+=") && this.right.is_string(compressor);
- });
- def(AST_Seq, function(compressor){
- return this.cdr.is_string(compressor);
- });
- def(AST_Conditional, function(compressor){
- return this.consequent.is_string(compressor) && this.alternative.is_string(compressor);
- });
- def(AST_Call, function(compressor){
- return compressor.option("unsafe")
- && this.expression instanceof AST_SymbolRef
- && this.expression.name == "String"
- && this.expression.undeclared();
- });
- })(function(node, func){
- node.DEFMETHOD("is_string", func);
- });
-
- function best_of(ast1, ast2) {
- return ast1.print_to_string().length >
- ast2.print_to_string().length
- ? ast2 : ast1;
- };
-
- // methods to evaluate a constant expression
- (function (def){
- // The evaluate method returns an array with one or two
- // elements. If the node has been successfully reduced to a
- // constant, then the second element tells us the value;
- // otherwise the second element is missing. The first element
- // of the array is always an AST_Node descendant; when
- // evaluation was successful it's a node that represents the
- // constant; otherwise it's the original node.
- AST_Node.DEFMETHOD("evaluate", function(compressor){
- if (!compressor.option("evaluate")) return [ this ];
- try {
- var val = this._eval(), ast = make_node_from_constant(compressor, val, this);
- return [ best_of(ast, this), val ];
- } catch(ex) {
- if (ex !== def) throw ex;
- return [ this ];
- }
- });
- def(AST_Statement, function(){
- throw new Error(string_template("Cannot evaluate a statement [{file}:{line},{col}]", this.start));
- });
- def(AST_Function, function(){
- // XXX: AST_Function inherits from AST_Scope, which itself
- // inherits from AST_Statement; however, an AST_Function
- // isn't really a statement. This could byte in other
- // places too. :-( Wish JS had multiple inheritance.
- return [ this ];
- });
- function ev(node) {
- return node._eval();
- };
- def(AST_Node, function(){
- throw def; // not constant
- });
- def(AST_Constant, function(){
- return this.getValue();
- });
- def(AST_UnaryPrefix, function(){
- var e = this.expression;
- switch (this.operator) {
- case "!": return !ev(e);
- case "typeof": return typeof ev(e);
- case "void": return void ev(e);
- case "~": return ~ev(e);
- case "-":
- e = ev(e);
- if (e === 0) throw def;
- return -e;
- case "+": return +ev(e);
- }
- throw def;
- });
- def(AST_Binary, function(){
- var left = this.left, right = this.right;
- switch (this.operator) {
- case "&&" : return ev(left) && ev(right);
- case "||" : return ev(left) || ev(right);
- case "|" : return ev(left) | ev(right);
- case "&" : return ev(left) & ev(right);
- case "^" : return ev(left) ^ ev(right);
- case "+" : return ev(left) + ev(right);
- case "*" : return ev(left) * ev(right);
- case "/" : return ev(left) / ev(right);
- case "%" : return ev(left) % ev(right);
- case "-" : return ev(left) - ev(right);
- case "<<" : return ev(left) << ev(right);
- case ">>" : return ev(left) >> ev(right);
- case ">>>" : return ev(left) >>> ev(right);
- case "==" : return ev(left) == ev(right);
- case "===" : return ev(left) === ev(right);
- case "!=" : return ev(left) != ev(right);
- case "!==" : return ev(left) !== ev(right);
- case "<" : return ev(left) < ev(right);
- case "<=" : return ev(left) <= ev(right);
- case ">" : return ev(left) > ev(right);
- case ">=" : return ev(left) >= ev(right);
- case "in" : return ev(left) in ev(right);
- case "instanceof" : return ev(left) instanceof ev(right);
- }
- throw def;
- });
- def(AST_Conditional, function(){
- return ev(this.condition)
- ? ev(this.consequent)
- : ev(this.alternative);
- });
- def(AST_SymbolRef, function(){
- var d = this.definition();
- if (d && d.constant && d.init) return ev(d.init);
- throw def;
- });
- })(function(node, func){
- node.DEFMETHOD("_eval", func);
- });
-
- // method to negate an expression
- (function(def){
- function basic_negation(exp) {
- return make_node(AST_UnaryPrefix, exp, {
- operator: "!",
- expression: exp
- });
- };
- def(AST_Node, function(){
- return basic_negation(this);
- });
- def(AST_Statement, function(){
- throw new Error("Cannot negate a statement");
- });
- def(AST_Function, function(){
- return basic_negation(this);
- });
- def(AST_UnaryPrefix, function(){
- if (this.operator == "!")
- return this.expression;
- return basic_negation(this);
- });
- def(AST_Seq, function(compressor){
- var self = this.clone();
- self.cdr = self.cdr.negate(compressor);
- return self;
- });
- def(AST_Conditional, function(compressor){
- var self = this.clone();
- self.consequent = self.consequent.negate(compressor);
- self.alternative = self.alternative.negate(compressor);
- return best_of(basic_negation(this), self);
- });
- def(AST_Binary, function(compressor){
- var self = this.clone(), op = this.operator;
- if (compressor.option("unsafe_comps")) {
- switch (op) {
- case "<=" : self.operator = ">" ; return self;
- case "<" : self.operator = ">=" ; return self;
- case ">=" : self.operator = "<" ; return self;
- case ">" : self.operator = "<=" ; return self;
- }
- }
- switch (op) {
- case "==" : self.operator = "!="; return self;
- case "!=" : self.operator = "=="; return self;
- case "===": self.operator = "!=="; return self;
- case "!==": self.operator = "==="; return self;
- case "&&":
- self.operator = "||";
- self.left = self.left.negate(compressor);
- self.right = self.right.negate(compressor);
- return best_of(basic_negation(this), self);
- case "||":
- self.operator = "&&";
- self.left = self.left.negate(compressor);
- self.right = self.right.negate(compressor);
- return best_of(basic_negation(this), self);
- }
- return basic_negation(this);
- });
- })(function(node, func){
- node.DEFMETHOD("negate", function(compressor){
- return func.call(this, compressor);
- });
- });
-
- // determine if expression has side effects
- (function(def){
- def(AST_Node, function(){ return true });
-
- def(AST_EmptyStatement, function(){ return false });
- def(AST_Constant, function(){ return false });
- def(AST_This, function(){ return false });
-
- def(AST_Block, function(){
- for (var i = this.body.length; --i >= 0;) {
- if (this.body[i].has_side_effects())
- return true;
- }
- return false;
- });
-
- def(AST_SimpleStatement, function(){
- return this.body.has_side_effects();
- });
- def(AST_Defun, function(){ return true });
- def(AST_Function, function(){ return false });
- def(AST_Binary, function(){
- return this.left.has_side_effects()
- || this.right.has_side_effects();
- });
- def(AST_Assign, function(){ return true });
- def(AST_Conditional, function(){
- return this.condition.has_side_effects()
- || this.consequent.has_side_effects()
- || this.alternative.has_side_effects();
- });
- def(AST_Unary, function(){
- return this.operator == "delete"
- || this.operator == "++"
- || this.operator == "--"
- || this.expression.has_side_effects();
- });
- def(AST_SymbolRef, function(){ return false });
- def(AST_Object, function(){
- for (var i = this.properties.length; --i >= 0;)
- if (this.properties[i].has_side_effects())
- return true;
- return false;
- });
- def(AST_ObjectProperty, function(){
- return this.value.has_side_effects();
- });
- def(AST_Array, function(){
- for (var i = this.elements.length; --i >= 0;)
- if (this.elements[i].has_side_effects())
- return true;
- return false;
- });
- // def(AST_Dot, function(){
- // return this.expression.has_side_effects();
- // });
- // def(AST_Sub, function(){
- // return this.expression.has_side_effects()
- // || this.property.has_side_effects();
- // });
- def(AST_PropAccess, function(){
- return true;
- });
- def(AST_Seq, function(){
- return this.car.has_side_effects()
- || this.cdr.has_side_effects();
- });
- })(function(node, func){
- node.DEFMETHOD("has_side_effects", func);
- });
-
- // tell me if a statement aborts
- function aborts(thing) {
- return thing && thing.aborts();
- };
- (function(def){
- def(AST_Statement, function(){ return null });
- def(AST_Jump, function(){ return this });
- function block_aborts(){
- var n = this.body.length;
- return n > 0 && aborts(this.body[n - 1]);
- };
- def(AST_BlockStatement, block_aborts);
- def(AST_SwitchBranch, block_aborts);
- def(AST_If, function(){
- return this.alternative && aborts(this.body) && aborts(this.alternative);
- });
- })(function(node, func){
- node.DEFMETHOD("aborts", func);
- });
-
- /* -----[ optimizers ]----- */
-
- OPT(AST_Directive, function(self, compressor){
- if (self.scope.has_directive(self.value) !== self.scope) {
- return make_node(AST_EmptyStatement, self);
- }
- return self;
- });
-
- OPT(AST_Debugger, function(self, compressor){
- if (compressor.option("drop_debugger"))
- return make_node(AST_EmptyStatement, self);
- return self;
- });
-
- OPT(AST_LabeledStatement, function(self, compressor){
- if (self.body instanceof AST_Break
- && compressor.loopcontrol_target(self.body.label) === self.body) {
- return make_node(AST_EmptyStatement, self);
- }
- return self.label.references.length == 0 ? self.body : self;
- });
-
- OPT(AST_Block, function(self, compressor){
- self.body = tighten_body(self.body, compressor);
- return self;
- });
-
- OPT(AST_BlockStatement, function(self, compressor){
- self.body = tighten_body(self.body, compressor);
- switch (self.body.length) {
- case 1: return self.body[0];
- case 0: return make_node(AST_EmptyStatement, self);
- }
- return self;
- });
-
- AST_Scope.DEFMETHOD("drop_unused", function(compressor){
- var self = this;
- if (compressor.option("unused")
- && !(self instanceof AST_Toplevel)
- && !self.uses_eval
- ) {
- var in_use = [];
- var initializations = new Dictionary();
- // pass 1: find out which symbols are directly used in
- // this scope (not in nested scopes).
- var scope = this;
- var tw = new TreeWalker(function(node, descend){
- if (node !== self) {
- if (node instanceof AST_Defun) {
- initializations.add(node.name.name, node);
- return true; // don't go in nested scopes
- }
- if (node instanceof AST_Definitions && scope === self) {
- node.definitions.forEach(function(def){
- if (def.value) {
- initializations.add(def.name.name, def.value);
- if (def.value.has_side_effects()) {
- def.value.walk(tw);
- }
- }
- });
- return true;
- }
- if (node instanceof AST_SymbolRef) {
- push_uniq(in_use, node.definition());
- return true;
- }
- if (node instanceof AST_Scope) {
- var save_scope = scope;
- scope = node;
- descend();
- scope = save_scope;
- return true;
- }
- }
- });
- self.walk(tw);
- // pass 2: for every used symbol we need to walk its
- // initialization code to figure out if it uses other
- // symbols (that may not be in_use).
- for (var i = 0; i < in_use.length; ++i) {
- in_use[i].orig.forEach(function(decl){
- // undeclared globals will be instanceof AST_SymbolRef
- var init = initializations.get(decl.name);
- if (init) init.forEach(function(init){
- var tw = new TreeWalker(function(node){
- if (node instanceof AST_SymbolRef) {
- push_uniq(in_use, node.definition());
- }
- });
- init.walk(tw);
- });
- });
- }
- // pass 3: we should drop declarations not in_use
- var tt = new TreeTransformer(
- function before(node, descend, in_list) {
- if (node instanceof AST_Lambda) {
- for (var a = node.argnames, i = a.length; --i >= 0;) {
- var sym = a[i];
- if (sym.unreferenced()) {
- a.pop();
- compressor.warn("Dropping unused function argument {name} [{file}:{line},{col}]", {
- name : sym.name,
- file : sym.start.file,
- line : sym.start.line,
- col : sym.start.col
- });
- }
- else break;
- }
- }
- if (node instanceof AST_Defun && node !== self) {
- if (!member(node.name.definition(), in_use)) {
- compressor.warn("Dropping unused function {name} [{file}:{line},{col}]", {
- name : node.name.name,
- file : node.name.start.file,
- line : node.name.start.line,
- col : node.name.start.col
- });
- return make_node(AST_EmptyStatement, node);
- }
- return node;
- }
- if (node instanceof AST_Definitions && !(tt.parent() instanceof AST_ForIn)) {
- var def = node.definitions.filter(function(def){
- if (member(def.name.definition(), in_use)) return true;
- var w = {
- name : def.name.name,
- file : def.name.start.file,
- line : def.name.start.line,
- col : def.name.start.col
- };
- if (def.value && def.value.has_side_effects()) {
- def._unused_side_effects = true;
- compressor.warn("Side effects in initialization of unused variable {name} [{file}:{line},{col}]", w);
- return true;
- }
- compressor.warn("Dropping unused variable {name} [{file}:{line},{col}]", w);
- return false;
- });
- // place uninitialized names at the start
- def = mergeSort(def, function(a, b){
- if (!a.value && b.value) return -1;
- if (!b.value && a.value) return 1;
- return 0;
- });
- // for unused names whose initialization has
- // side effects, we can cascade the init. code
- // into the next one, or next statement.
- var side_effects = [];
- for (var i = 0; i < def.length;) {
- var x = def[i];
- if (x._unused_side_effects) {
- side_effects.push(x.value);
- def.splice(i, 1);
- } else {
- if (side_effects.length > 0) {
- side_effects.push(x.value);
- x.value = AST_Seq.from_array(side_effects);
- side_effects = [];
- }
- ++i;
- }
- }
- if (side_effects.length > 0) {
- side_effects = make_node(AST_BlockStatement, node, {
- body: [ make_node(AST_SimpleStatement, node, {
- body: AST_Seq.from_array(side_effects)
- }) ]
- });
- } else {
- side_effects = null;
- }
- if (def.length == 0 && !side_effects) {
- return make_node(AST_EmptyStatement, node);
- }
- if (def.length == 0) {
- return side_effects;
- }
- node.definitions = def;
- if (side_effects) {
- side_effects.body.unshift(node);
- node = side_effects;
- }
- return node;
- }
- if (node instanceof AST_For && node.init instanceof AST_BlockStatement) {
- descend(node, this);
- // certain combination of unused name + side effect leads to:
- // https://github.com/mishoo/UglifyJS2/issues/44
- // that's an invalid AST.
- // We fix it at this stage by moving the `var` outside the `for`.
- var body = node.init.body.slice(0, -1);
- node.init = node.init.body.slice(-1)[0].body;
- body.push(node);
- return in_list ? MAP.splice(body) : make_node(AST_BlockStatement, node, {
- body: body
- });
- }
- if (node instanceof AST_Scope && node !== self)
- return node;
- }
- );
- self.transform(tt);
- }
- });
-
- AST_Scope.DEFMETHOD("hoist_declarations", function(compressor){
- var hoist_funs = compressor.option("hoist_funs");
- var hoist_vars = compressor.option("hoist_vars");
- var self = this;
- if (hoist_funs || hoist_vars) {
- var dirs = [];
- var hoisted = [];
- var vars = new Dictionary(), vars_found = 0, var_decl = 0;
- // let's count var_decl first, we seem to waste a lot of
- // space if we hoist `var` when there's only one.
- self.walk(new TreeWalker(function(node){
- if (node instanceof AST_Scope && node !== self)
- return true;
- if (node instanceof AST_Var) {
- ++var_decl;
- return true;
- }
- }));
- hoist_vars = hoist_vars && var_decl > 1;
- var tt = new TreeTransformer(
- function before(node) {
- if (node !== self) {
- if (node instanceof AST_Directive) {
- dirs.push(node);
- return make_node(AST_EmptyStatement, node);
- }
- if (node instanceof AST_Defun && hoist_funs) {
- hoisted.push(node);
- return make_node(AST_EmptyStatement, node);
- }
- if (node instanceof AST_Var && hoist_vars) {
- node.definitions.forEach(function(def){
- vars.set(def.name.name, def);
- ++vars_found;
- });
- var seq = node.to_assignments();
- var p = tt.parent();
- if (p instanceof AST_ForIn && p.init === node) {
- if (seq == null) return node.definitions[0].name;
- return seq;
- }
- if (p instanceof AST_For && p.init === node) {
- return seq;
- }
- if (!seq) return make_node(AST_EmptyStatement, node);
- return make_node(AST_SimpleStatement, node, {
- body: seq
- });
- }
- if (node instanceof AST_Scope)
- return node; // to avoid descending in nested scopes
- }
- }
- );
- self = self.transform(tt);
- if (vars_found > 0) {
- // collect only vars which don't show up in self's arguments list
- var defs = [];
- vars.each(function(def, name){
- if (self instanceof AST_Lambda
- && find_if(function(x){ return x.name == def.name.name },
- self.argnames)) {
- vars.del(name);
- } else {
- def = def.clone();
- def.value = null;
- defs.push(def);
- vars.set(name, def);
- }
- });
- if (defs.length > 0) {
- // try to merge in assignments
- for (var i = 0; i < self.body.length;) {
- if (self.body[i] instanceof AST_SimpleStatement) {
- var expr = self.body[i].body, sym, assign;
- if (expr instanceof AST_Assign
- && expr.operator == "="
- && (sym = expr.left) instanceof AST_Symbol
- && vars.has(sym.name))
- {
- var def = vars.get(sym.name);
- if (def.value) break;
- def.value = expr.right;
- remove(defs, def);
- defs.push(def);
- self.body.splice(i, 1);
- continue;
- }
- if (expr instanceof AST_Seq
- && (assign = expr.car) instanceof AST_Assign
- && assign.operator == "="
- && (sym = assign.left) instanceof AST_Symbol
- && vars.has(sym.name))
- {
- var def = vars.get(sym.name);
- if (def.value) break;
- def.value = assign.right;
- remove(defs, def);
- defs.push(def);
- self.body[i].body = expr.cdr;
- continue;
- }
- }
- if (self.body[i] instanceof AST_EmptyStatement) {
- self.body.splice(i, 1);
- continue;
- }
- if (self.body[i] instanceof AST_BlockStatement) {
- var tmp = [ i, 1 ].concat(self.body[i].body);
- self.body.splice.apply(self.body, tmp);
- continue;
- }
- break;
- }
- defs = make_node(AST_Var, self, {
- definitions: defs
- });
- hoisted.push(defs);
- };
- }
- self.body = dirs.concat(hoisted, self.body);
- }
- return self;
- });
-
- OPT(AST_SimpleStatement, function(self, compressor){
- if (compressor.option("side_effects")) {
- if (!self.body.has_side_effects()) {
- compressor.warn("Dropping side-effect-free statement [{file}:{line},{col}]", self.start);
- return make_node(AST_EmptyStatement, self);
- }
- }
- return self;
- });
-
- OPT(AST_DWLoop, function(self, compressor){
- var cond = self.condition.evaluate(compressor);
- self.condition = cond[0];
- if (!compressor.option("loops")) return self;
- if (cond.length > 1) {
- if (cond[1]) {
- return make_node(AST_For, self, {
- body: self.body
- });
- } else if (self instanceof AST_While) {
- if (compressor.option("dead_code")) {
- var a = [];
- extract_declarations_from_unreachable_code(compressor, self.body, a);
- return make_node(AST_BlockStatement, self, { body: a });
- }
- } else {
- return self.body;
- }
- }
- return self;
- });
-
- function if_break_in_loop(self, compressor) {
- function drop_it(rest) {
- rest = as_statement_array(rest);
- if (self.body instanceof AST_BlockStatement) {
- self.body = self.body.clone();
- self.body.body = rest.concat(self.body.body.slice(1));
- self.body = self.body.transform(compressor);
- } else {
- self.body = make_node(AST_BlockStatement, self.body, {
- body: rest
- }).transform(compressor);
- }
- if_break_in_loop(self, compressor);
- }
- var first = self.body instanceof AST_BlockStatement ? self.body.body[0] : self.body;
- if (first instanceof AST_If) {
- if (first.body instanceof AST_Break
- && compressor.loopcontrol_target(first.body.label) === self) {
- if (self.condition) {
- self.condition = make_node(AST_Binary, self.condition, {
- left: self.condition,
- operator: "&&",
- right: first.condition.negate(compressor),
- });
- } else {
- self.condition = first.condition.negate(compressor);
- }
- drop_it(first.alternative);
- }
- else if (first.alternative instanceof AST_Break
- && compressor.loopcontrol_target(first.alternative.label) === self) {
- if (self.condition) {
- self.condition = make_node(AST_Binary, self.condition, {
- left: self.condition,
- operator: "&&",
- right: first.condition,
- });
- } else {
- self.condition = first.condition;
- }
- drop_it(first.body);
- }
- }
- };
-
- OPT(AST_While, function(self, compressor) {
- if (!compressor.option("loops")) return self;
- self = AST_DWLoop.prototype.optimize.call(self, compressor);
- if (self instanceof AST_While) {
- if_break_in_loop(self, compressor);
- self = make_node(AST_For, self, self).transform(compressor);
- }
- return self;
- });
-
- OPT(AST_For, function(self, compressor){
- var cond = self.condition;
- if (cond) {
- cond = cond.evaluate(compressor);
- self.condition = cond[0];
- }
- if (!compressor.option("loops")) return self;
- if (cond) {
- if (cond.length > 1 && !cond[1]) {
- if (compressor.option("dead_code")) {
- var a = [];
- if (self.init instanceof AST_Statement) {
- a.push(self.init);
- }
- else if (self.init) {
- a.push(make_node(AST_SimpleStatement, self.init, {
- body: self.init
- }));
- }
- extract_declarations_from_unreachable_code(compressor, self.body, a);
- return make_node(AST_BlockStatement, self, { body: a });
- }
- }
- }
- if_break_in_loop(self, compressor);
- return self;
- });
-
- OPT(AST_If, function(self, compressor){
- if (!compressor.option("conditionals")) return self;
- // if condition can be statically determined, warn and drop
- // one of the blocks. note, statically determined implies
- // “has no side effects”; also it doesn't work for cases like
- // `x && true`, though it probably should.
- var cond = self.condition.evaluate(compressor);
- self.condition = cond[0];
- if (cond.length > 1) {
- if (cond[1]) {
- compressor.warn("Condition always true [{file}:{line},{col}]", self.condition.start);
- if (compressor.option("dead_code")) {
- var a = [];
- if (self.alternative) {
- extract_declarations_from_unreachable_code(compressor, self.alternative, a);
- }
- a.push(self.body);
- return make_node(AST_BlockStatement, self, { body: a }).transform(compressor);
- }
- } else {
- compressor.warn("Condition always false [{file}:{line},{col}]", self.condition.start);
- if (compressor.option("dead_code")) {
- var a = [];
- extract_declarations_from_unreachable_code(compressor, self.body, a);
- if (self.alternative) a.push(self.alternative);
- return make_node(AST_BlockStatement, self, { body: a }).transform(compressor);
- }
- }
- }
- if (is_empty(self.alternative)) self.alternative = null;
- var negated = self.condition.negate(compressor);
- var negated_is_best = best_of(self.condition, negated) === negated;
- if (self.alternative && negated_is_best) {
- negated_is_best = false; // because we already do the switch here.
- self.condition = negated;
- var tmp = self.body;
- self.body = self.alternative || make_node(AST_EmptyStatement);
- self.alternative = tmp;
- }
- if (is_empty(self.body) && is_empty(self.alternative)) {
- return make_node(AST_SimpleStatement, self.condition, {
- body: self.condition
- }).transform(compressor);
- }
- if (self.body instanceof AST_SimpleStatement
- && self.alternative instanceof AST_SimpleStatement) {
- return make_node(AST_SimpleStatement, self, {
- body: make_node(AST_Conditional, self, {
- condition : self.condition,
- consequent : self.body.body,
- alternative : self.alternative.body
- })
- }).transform(compressor);
- }
- if (is_empty(self.alternative) && self.body instanceof AST_SimpleStatement) {
- if (negated_is_best) return make_node(AST_SimpleStatement, self, {
- body: make_node(AST_Binary, self, {
- operator : "||",
- left : negated,
- right : self.body.body
- })
- }).transform(compressor);
- return make_node(AST_SimpleStatement, self, {
- body: make_node(AST_Binary, self, {
- operator : "&&",
- left : self.condition,
- right : self.body.body
- })
- }).transform(compressor);
- }
- if (self.body instanceof AST_EmptyStatement
- && self.alternative
- && self.alternative instanceof AST_SimpleStatement) {
- return make_node(AST_SimpleStatement, self, {
- body: make_node(AST_Binary, self, {
- operator : "||",
- left : self.condition,
- right : self.alternative.body
- })
- }).transform(compressor);
- }
- if (self.body instanceof AST_Exit
- && self.alternative instanceof AST_Exit
- && self.body.TYPE == self.alternative.TYPE) {
- return make_node(self.body.CTOR, self, {
- value: make_node(AST_Conditional, self, {
- condition : self.condition,
- consequent : self.body.value || make_node(AST_Undefined, self.body).optimize(compressor),
- alternative : self.alternative.value || make_node(AST_Undefined, self.alternative).optimize(compressor)
- })
- }).transform(compressor);
- }
- if (self.body instanceof AST_If
- && !self.body.alternative
- && !self.alternative) {
- self.condition = make_node(AST_Binary, self.condition, {
- operator: "&&",
- left: self.condition,
- right: self.body.condition
- }).transform(compressor);
- self.body = self.body.body;
- }
- if (aborts(self.body)) {
- if (self.alternative) {
- var alt = self.alternative;
- self.alternative = null;
- return make_node(AST_BlockStatement, self, {
- body: [ self, alt ]
- }).transform(compressor);
- }
- }
- if (aborts(self.alternative)) {
- var body = self.body;
- self.body = self.alternative;
- self.condition = negated_is_best ? negated : self.condition.negate(compressor);
- self.alternative = null;
- return make_node(AST_BlockStatement, self, {
- body: [ self, body ]
- }).transform(compressor);
- }
- return self;
- });
-
- OPT(AST_Switch, function(self, compressor){
- if (self.body.length == 0 && compressor.option("conditionals")) {
- return make_node(AST_SimpleStatement, self, {
- body: self.expression
- }).transform(compressor);
- }
- var last_branch = self.body[self.body.length - 1];
- if (last_branch) {
- var stat = last_branch.body[last_branch.body.length - 1]; // last statement
- if (stat instanceof AST_Break && loop_body(compressor.loopcontrol_target(stat.label)) === self)
- last_branch.body.pop();
- }
- var exp = self.expression.evaluate(compressor);
- out: if (exp.length == 2) try {
- // constant expression
- self.expression = exp[0];
- if (!compressor.option("dead_code")) break out;
- var value = exp[1];
- var in_if = false;
- var in_block = false;
- var started = false;
- var stopped = false;
- var ruined = false;
- var tt = new TreeTransformer(function(node, descend, in_list){
- if (node instanceof AST_Lambda || node instanceof AST_SimpleStatement) {
- // no need to descend these node types
- return node;
- }
- else if (node instanceof AST_Switch && node === self) {
- node = node.clone();
- descend(node, this);
- return ruined ? node : make_node(AST_BlockStatement, node, {
- body: node.body.reduce(function(a, branch){
- return a.concat(branch.body);
- }, [])
- }).transform(compressor);
- }
- else if (node instanceof AST_If || node instanceof AST_Try) {
- var save = in_if;
- in_if = !in_block;
- descend(node, this);
- in_if = save;
- return node;
- }
- else if (node instanceof AST_StatementWithBody || node instanceof AST_Switch) {
- var save = in_block;
- in_block = true;
- descend(node, this);
- in_block = save;
- return node;
- }
- else if (node instanceof AST_Break && this.loopcontrol_target(node.label) === self) {
- if (in_if) {
- ruined = true;
- return node;
- }
- if (in_block) return node;
- stopped = true;
- return in_list ? MAP.skip : make_node(AST_EmptyStatement, node);
- }
- else if (node instanceof AST_SwitchBranch && this.parent() === self) {
- if (stopped) return MAP.skip;
- if (node instanceof AST_Case) {
- var exp = node.expression.evaluate(compressor);
- if (exp.length < 2) {
- // got a case with non-constant expression, baling out
- throw self;
- }
- if (exp[1] === value || started) {
- started = true;
- if (aborts(node)) stopped = true;
- descend(node, this);
- return node;
- }
- return MAP.skip;
- }
- descend(node, this);
- return node;
- }
- });
- tt.stack = compressor.stack.slice(); // so that's able to see parent nodes
- self = self.transform(tt);
- } catch(ex) {
- if (ex !== self) throw ex;
- }
- return self;
- });
-
- OPT(AST_Case, function(self, compressor){
- self.body = tighten_body(self.body, compressor);
- return self;
- });
-
- OPT(AST_Try, function(self, compressor){
- self.body = tighten_body(self.body, compressor);
- return self;
- });
-
- AST_Definitions.DEFMETHOD("remove_initializers", function(){
- this.definitions.forEach(function(def){ def.value = null });
- });
-
- AST_Definitions.DEFMETHOD("to_assignments", function(){
- var assignments = this.definitions.reduce(function(a, def){
- if (def.value) {
- var name = make_node(AST_SymbolRef, def.name, def.name);
- a.push(make_node(AST_Assign, def, {
- operator : "=",
- left : name,
- right : def.value
- }));
- }
- return a;
- }, []);
- if (assignments.length == 0) return null;
- return AST_Seq.from_array(assignments);
- });
-
- OPT(AST_Definitions, function(self, compressor){
- if (self.definitions.length == 0)
- return make_node(AST_EmptyStatement, self);
- return self;
- });
-
- OPT(AST_Function, function(self, compressor){
- self = AST_Lambda.prototype.optimize.call(self, compressor);
- if (compressor.option("unused")) {
- if (self.name && self.name.unreferenced()) {
- self.name = null;
- }
- }
- return self;
- });
-
- OPT(AST_Call, function(self, compressor){
- if (compressor.option("unsafe")) {
- var exp = self.expression;
- if (exp instanceof AST_SymbolRef && exp.undeclared()) {
- switch (exp.name) {
- case "Array":
- if (self.args.length != 1) {
- return make_node(AST_Array, self, {
- elements: self.args
- });
- }
- break;
- case "Object":
- if (self.args.length == 0) {
- return make_node(AST_Object, self, {
- properties: []
- });
- }
- break;
- case "String":
- if (self.args.length == 0) return make_node(AST_String, self, {
- value: ""
- });
- return make_node(AST_Binary, self, {
- left: self.args[0],
- operator: "+",
- right: make_node(AST_String, self, { value: "" })
- });
- }
- }
- else if (exp instanceof AST_Dot && exp.property == "toString" && self.args.length == 0) {
- return make_node(AST_Binary, self, {
- left: make_node(AST_String, self, { value: "" }),
- operator: "+",
- right: exp.expression
- }).transform(compressor);
- }
- }
- if (compressor.option("side_effects")) {
- if (self.expression instanceof AST_Function
- && self.args.length == 0
- && !AST_Block.prototype.has_side_effects.call(self.expression)) {
- return make_node(AST_Undefined, self).transform(compressor);
- }
- }
- return self;
- });
-
- OPT(AST_New, function(self, compressor){
- if (compressor.option("unsafe")) {
- var exp = self.expression;
- if (exp instanceof AST_SymbolRef && exp.undeclared()) {
- switch (exp.name) {
- case "Object":
- case "RegExp":
- case "Function":
- case "Error":
- case "Array":
- return make_node(AST_Call, self, self).transform(compressor);
- }
- }
- }
- return self;
- });
-
- OPT(AST_Seq, function(self, compressor){
- if (!compressor.option("side_effects"))
- return self;
- if (!self.car.has_side_effects()) {
- // we shouldn't compress (1,eval)(something) to
- // eval(something) because that changes the meaning of
- // eval (becomes lexical instead of global).
- var p;
- if (!(self.cdr instanceof AST_SymbolRef
- && self.cdr.name == "eval"
- && self.cdr.undeclared()
- && (p = compressor.parent()) instanceof AST_Call
- && p.expression === self)) {
- return self.cdr;
- }
- }
- if (compressor.option("cascade")) {
- if (self.car instanceof AST_Assign
- && !self.car.left.has_side_effects()
- && self.car.left.equivalent_to(self.cdr)) {
- return self.car;
- }
- if (!self.car.has_side_effects()
- && !self.cdr.has_side_effects()
- && self.car.equivalent_to(self.cdr)) {
- return self.car;
- }
- }
- return self;
- });
-
- AST_Unary.DEFMETHOD("lift_sequences", function(compressor){
- if (compressor.option("sequences")) {
- if (this.expression instanceof AST_Seq) {
- var seq = this.expression;
- var x = seq.to_array();
- this.expression = x.pop();
- x.push(this);
- seq = AST_Seq.from_array(x).transform(compressor);
- return seq;
- }
- }
- return this;
- });
-
- OPT(AST_UnaryPostfix, function(self, compressor){
- return self.lift_sequences(compressor);
- });
-
- OPT(AST_UnaryPrefix, function(self, compressor){
- self = self.lift_sequences(compressor);
- var e = self.expression;
- if (compressor.option("booleans") && compressor.in_boolean_context()) {
- switch (self.operator) {
- case "!":
- if (e instanceof AST_UnaryPrefix && e.operator == "!") {
- // !!foo ==> foo, if we're in boolean context
- return e.expression;
- }
- break;
- case "typeof":
- // typeof always returns a non-empty string, thus it's
- // always true in booleans
- compressor.warn("Boolean expression always true [{file}:{line},{col}]", self.start);
- return make_node(AST_True, self);
- }
- if (e instanceof AST_Binary && self.operator == "!") {
- self = best_of(self, e.negate(compressor));
- }
- }
- return self.evaluate(compressor)[0];
- });
-
- AST_Binary.DEFMETHOD("lift_sequences", function(compressor){
- if (compressor.option("sequences")) {
- if (this.left instanceof AST_Seq) {
- var seq = this.left;
- var x = seq.to_array();
- this.left = x.pop();
- x.push(this);
- seq = AST_Seq.from_array(x).transform(compressor);
- return seq;
- }
- if (this.right instanceof AST_Seq
- && !(this.operator == "||" || this.operator == "&&")
- && !this.left.has_side_effects()) {
- var seq = this.right;
- var x = seq.to_array();
- this.right = x.pop();
- x.push(this);
- seq = AST_Seq.from_array(x).transform(compressor);
- return seq;
- }
- }
- return this;
- });
-
- var commutativeOperators = makePredicate("== === != !== * & | ^");
-
- OPT(AST_Binary, function(self, compressor){
- function reverse(op) {
- if (!(self.left.has_side_effects() && self.right.has_side_effects())) {
- if (op) self.operator = op;
- var tmp = self.left;
- self.left = self.right;
- self.right = tmp;
- }
- };
- if (commutativeOperators(self.operator)) {
- if (self.right instanceof AST_Constant
- && !(self.left instanceof AST_Constant)) {
- reverse();
- }
- }
- self = self.lift_sequences(compressor);
- if (compressor.option("comparisons")) switch (self.operator) {
- case "===":
- case "!==":
- if ((self.left.is_string(compressor) && self.right.is_string(compressor)) ||
- (self.left.is_boolean() && self.right.is_boolean())) {
- self.operator = self.operator.substr(0, 2);
- }
- // XXX: intentionally falling down to the next case
- case "==":
- case "!=":
- if (self.left instanceof AST_String
- && self.left.value == "undefined"
- && self.right instanceof AST_UnaryPrefix
- && self.right.operator == "typeof"
- && compressor.option("unsafe")) {
- if (!(self.right.expression instanceof AST_SymbolRef)
- || !self.right.expression.undeclared()) {
- self.left = self.right.expression;
- self.right = make_node(AST_Undefined, self.left).optimize(compressor);
- if (self.operator.length == 2) self.operator += "=";
- }
- }
- break;
- }
- if (compressor.option("booleans") && compressor.in_boolean_context()) switch (self.operator) {
- case "&&":
- var ll = self.left.evaluate(compressor);
- var rr = self.right.evaluate(compressor);
- if ((ll.length > 1 && !ll[1]) || (rr.length > 1 && !rr[1])) {
- compressor.warn("Boolean && always false [{file}:{line},{col}]", self.start);
- return make_node(AST_False, self);
- }
- if (ll.length > 1 && ll[1]) {
- return rr[0];
- }
- if (rr.length > 1 && rr[1]) {
- return ll[0];
- }
- break;
- case "||":
- var ll = self.left.evaluate(compressor);
- var rr = self.right.evaluate(compressor);
- if ((ll.length > 1 && ll[1]) || (rr.length > 1 && rr[1])) {
- compressor.warn("Boolean || always true [{file}:{line},{col}]", self.start);
- return make_node(AST_True, self);
- }
- if (ll.length > 1 && !ll[1]) {
- return rr[0];
- }
- if (rr.length > 1 && !rr[1]) {
- return ll[0];
- }
- break;
- case "+":
- var ll = self.left.evaluate(compressor);
- var rr = self.right.evaluate(compressor);
- if ((ll.length > 1 && ll[0] instanceof AST_String && ll[1]) ||
- (rr.length > 1 && rr[0] instanceof AST_String && rr[1])) {
- compressor.warn("+ in boolean context always true [{file}:{line},{col}]", self.start);
- return make_node(AST_True, self);
- }
- break;
- }
- var exp = self.evaluate(compressor);
- if (exp.length > 1) {
- if (best_of(exp[0], self) !== self)
- return exp[0];
- }
- if (compressor.option("comparisons")) {
- if (!(compressor.parent() instanceof AST_Binary)
- || compressor.parent() instanceof AST_Assign) {
- var negated = make_node(AST_UnaryPrefix, self, {
- operator: "!",
- expression: self.negate(compressor)
- });
- self = best_of(self, negated);
- }
- switch (self.operator) {
- case "<": reverse(">"); break;
- case "<=": reverse(">="); break;
- }
- }
- if (self.operator == "+" && self.right instanceof AST_String
- && self.right.getValue() === "" && self.left instanceof AST_Binary
- && self.left.operator == "+" && self.left.is_string(compressor)) {
- return self.left;
- }
- return self;
- });
-
- OPT(AST_SymbolRef, function(self, compressor){
- if (self.undeclared()) {
- var defines = compressor.option("global_defs");
- if (defines && defines.hasOwnProperty(self.name)) {
- return make_node_from_constant(compressor, defines[self.name], self);
- }
- switch (self.name) {
- case "undefined":
- return make_node(AST_Undefined, self);
- case "NaN":
- return make_node(AST_NaN, self);
- case "Infinity":
- return make_node(AST_Infinity, self);
- }
- }
- return self;
- });
-
- OPT(AST_Undefined, function(self, compressor){
- if (compressor.option("unsafe")) {
- var scope = compressor.find_parent(AST_Scope);
- var undef = scope.find_variable("undefined");
- if (undef) {
- var ref = make_node(AST_SymbolRef, self, {
- name : "undefined",
- scope : scope,
- thedef : undef
- });
- ref.reference();
- return ref;
- }
- }
- return self;
- });
-
- var ASSIGN_OPS = [ '+', '-', '/', '*', '%', '>>', '<<', '>>>', '|', '^', '&' ];
- OPT(AST_Assign, function(self, compressor){
- self = self.lift_sequences(compressor);
- if (self.operator == "="
- && self.left instanceof AST_SymbolRef
- && self.right instanceof AST_Binary
- && self.right.left instanceof AST_SymbolRef
- && self.right.left.name == self.left.name
- && member(self.right.operator, ASSIGN_OPS)) {
- self.operator = self.right.operator + "=";
- self.right = self.right.right;
- }
- return self;
- });
-
- OPT(AST_Conditional, function(self, compressor){
- if (!compressor.option("conditionals")) return self;
- if (self.condition instanceof AST_Seq) {
- var car = self.condition.car;
- self.condition = self.condition.cdr;
- return AST_Seq.cons(car, self);
- }
- var cond = self.condition.evaluate(compressor);
- if (cond.length > 1) {
- if (cond[1]) {
- compressor.warn("Condition always true [{file}:{line},{col}]", self.start);
- return self.consequent;
- } else {
- compressor.warn("Condition always false [{file}:{line},{col}]", self.start);
- return self.alternative;
- }
- }
- var negated = cond[0].negate(compressor);
- if (best_of(cond[0], negated) === negated) {
- self = make_node(AST_Conditional, self, {
- condition: negated,
- consequent: self.alternative,
- alternative: self.consequent
- });
- }
- var consequent = self.consequent;
- var alternative = self.alternative;
- if (consequent instanceof AST_Assign
- && alternative instanceof AST_Assign
- && consequent.operator == alternative.operator
- && consequent.left.equivalent_to(alternative.left)
- ) {
- /*
- * Stuff like this:
- * if (foo) exp = something; else exp = something_else;
- * ==>
- * exp = foo ? something : something_else;
- */
- self = make_node(AST_Assign, self, {
- operator: consequent.operator,
- left: consequent.left,
- right: make_node(AST_Conditional, self, {
- condition: self.condition,
- consequent: consequent.right,
- alternative: alternative.right
- })
- });
- }
- return self;
- });
-
- OPT(AST_Boolean, function(self, compressor){
- if (compressor.option("booleans")) {
- var p = compressor.parent();
- if (p instanceof AST_Binary && (p.operator == "=="
- || p.operator == "!=")) {
- compressor.warn("Non-strict equality against boolean: {operator} {value} [{file}:{line},{col}]", {
- operator : p.operator,
- value : self.value,
- file : p.start.file,
- line : p.start.line,
- col : p.start.col,
- });
- return make_node(AST_Number, self, {
- value: +self.value
- });
- }
- return make_node(AST_UnaryPrefix, self, {
- operator: "!",
- expression: make_node(AST_Number, self, {
- value: 1 - self.value
- })
- });
- }
- return self;
- });
-
- OPT(AST_Sub, function(self, compressor){
- var prop = self.property;
- if (prop instanceof AST_String && compressor.option("properties")) {
- prop = prop.getValue();
- if (is_identifier(prop)) {
- return make_node(AST_Dot, self, {
- expression : self.expression,
- property : prop
- });
- }
- }
- return self;
- });
-
- function literals_in_boolean_context(self, compressor) {
- if (compressor.option("booleans") && compressor.in_boolean_context()) {
- return make_node(AST_True, self);
- }
- return self;
- };
- OPT(AST_Array, literals_in_boolean_context);
- OPT(AST_Object, literals_in_boolean_context);
- OPT(AST_RegExp, literals_in_boolean_context);
-
-})();
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/mozilla-ast.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/mozilla-ast.js
deleted file mode 100644
index 982d621a..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/mozilla-ast.js
+++ /dev/null
@@ -1,265 +0,0 @@
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
-
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-"use strict";
-
-(function(){
-
- var MOZ_TO_ME = {
- TryStatement : function(M) {
- return new AST_Try({
- start : my_start_token(M),
- end : my_end_token(M),
- body : from_moz(M.block).body,
- bcatch : from_moz(M.handlers[0]),
- bfinally : M.finalizer ? new AST_Finally(from_moz(M.finalizer)) : null
- });
- },
- CatchClause : function(M) {
- return new AST_Catch({
- start : my_start_token(M),
- end : my_end_token(M),
- argname : from_moz(M.param),
- body : from_moz(M.body).body
- });
- },
- ObjectExpression : function(M) {
- return new AST_Object({
- start : my_start_token(M),
- end : my_end_token(M),
- properties : M.properties.map(function(prop){
- var key = prop.key;
- var name = key.type == "Identifier" ? key.name : key.value;
- var args = {
- start : my_start_token(key),
- end : my_end_token(prop.value),
- key : name,
- value : from_moz(prop.value)
- };
- switch (prop.kind) {
- case "init":
- return new AST_ObjectKeyVal(args);
- case "set":
- args.value.name = from_moz(key);
- return new AST_ObjectSetter(args);
- case "get":
- args.value.name = from_moz(key);
- return new AST_ObjectGetter(args);
- }
- })
- });
- },
- SequenceExpression : function(M) {
- return AST_Seq.from_array(M.expressions.map(from_moz));
- },
- MemberExpression : function(M) {
- return new (M.computed ? AST_Sub : AST_Dot)({
- start : my_start_token(M),
- end : my_end_token(M),
- property : M.computed ? from_moz(M.property) : M.property.name,
- expression : from_moz(M.object)
- });
- },
- SwitchCase : function(M) {
- return new (M.test ? AST_Case : AST_Default)({
- start : my_start_token(M),
- end : my_end_token(M),
- expression : from_moz(M.test),
- body : M.consequent.map(from_moz)
- });
- },
- Literal : function(M) {
- var val = M.value, args = {
- start : my_start_token(M),
- end : my_end_token(M)
- };
- if (val === null) return new AST_Null(args);
- switch (typeof val) {
- case "string":
- args.value = val;
- return new AST_String(args);
- case "number":
- args.value = val;
- return new AST_Number(args);
- case "boolean":
- return new (val ? AST_True : AST_False)(args);
- default:
- args.value = val;
- return new AST_RegExp(args);
- }
- },
- UnaryExpression: From_Moz_Unary,
- UpdateExpression: From_Moz_Unary,
- Identifier: function(M) {
- var p = FROM_MOZ_STACK[FROM_MOZ_STACK.length - 2];
- return new (M.name == "this" ? AST_This
- : p.type == "LabeledStatement" ? AST_Label
- : p.type == "VariableDeclarator" && p.id === M ? (p.kind == "const" ? AST_SymbolConst : AST_SymbolVar)
- : p.type == "FunctionExpression" ? (p.id === M ? AST_SymbolLambda : AST_SymbolFunarg)
- : p.type == "FunctionDeclaration" ? (p.id === M ? AST_SymbolDefun : AST_SymbolFunarg)
- : p.type == "CatchClause" ? AST_SymbolCatch
- : p.type == "BreakStatement" || p.type == "ContinueStatement" ? AST_LabelRef
- : AST_SymbolRef)({
- start : my_start_token(M),
- end : my_end_token(M),
- name : M.name
- });
- }
- };
-
- function From_Moz_Unary(M) {
- return new (M.prefix ? AST_UnaryPrefix : AST_UnaryPostfix)({
- start : my_start_token(M),
- end : my_end_token(M),
- operator : M.operator,
- expression : from_moz(M.argument)
- })
- };
-
- var ME_TO_MOZ = {};
-
- map("Node", AST_Node);
- map("Program", AST_Toplevel, "body@body");
- map("Function", AST_Function, "id>name, params@argnames, body%body");
- map("EmptyStatement", AST_EmptyStatement);
- map("BlockStatement", AST_BlockStatement, "body@body");
- map("ExpressionStatement", AST_SimpleStatement, "expression>body");
- map("IfStatement", AST_If, "test>condition, consequent>body, alternate>alternative");
- map("LabeledStatement", AST_LabeledStatement, "label>label, body>body");
- map("BreakStatement", AST_Break, "label>label");
- map("ContinueStatement", AST_Continue, "label>label");
- map("WithStatement", AST_With, "object>expression, body>body");
- map("SwitchStatement", AST_Switch, "discriminant>expression, cases@body");
- map("ReturnStatement", AST_Return, "argument>value");
- map("ThrowStatement", AST_Throw, "argument>value");
- map("WhileStatement", AST_While, "test>condition, body>body");
- map("DoWhileStatement", AST_Do, "test>condition, body>body");
- map("ForStatement", AST_For, "init>init, test>condition, update>step, body>body");
- map("ForInStatement", AST_ForIn, "left>init, right>object, body>body");
- map("DebuggerStatement", AST_Debugger);
- map("FunctionDeclaration", AST_Defun, "id>name, params@argnames, body%body");
- map("VariableDeclaration", AST_Var, "declarations@definitions");
- map("VariableDeclarator", AST_VarDef, "id>name, init>value");
-
- map("ThisExpression", AST_This);
- map("ArrayExpression", AST_Array, "elements@elements");
- map("FunctionExpression", AST_Function, "id>name, params@argnames, body%body");
- map("BinaryExpression", AST_Binary, "operator=operator, left>left, right>right");
- map("AssignmentExpression", AST_Assign, "operator=operator, left>left, right>right");
- map("LogicalExpression", AST_Binary, "operator=operator, left>left, right>right");
- map("ConditionalExpression", AST_Conditional, "test>condition, consequent>consequent, alternate>alternative");
- map("NewExpression", AST_New, "callee>expression, arguments@args");
- map("CallExpression", AST_Call, "callee>expression, arguments@args");
-
- /* -----[ tools ]----- */
-
- function my_start_token(moznode) {
- return new AST_Token({
- file : moznode.loc && moznode.loc.source,
- line : moznode.loc && moznode.loc.start.line,
- col : moznode.loc && moznode.loc.start.column,
- pos : moznode.start,
- endpos : moznode.start
- });
- };
-
- function my_end_token(moznode) {
- return new AST_Token({
- file : moznode.loc && moznode.loc.source,
- line : moznode.loc && moznode.loc.end.line,
- col : moznode.loc && moznode.loc.end.column,
- pos : moznode.end,
- endpos : moznode.end
- });
- };
-
- function map(moztype, mytype, propmap) {
- var moz_to_me = "function From_Moz_" + moztype + "(M){\n";
- moz_to_me += "return new mytype({\n" +
- "start: my_start_token(M),\n" +
- "end: my_end_token(M)";
-
- if (propmap) propmap.split(/\s*,\s*/).forEach(function(prop){
- var m = /([a-z0-9$_]+)(=|@|>|%)([a-z0-9$_]+)/i.exec(prop);
- if (!m) throw new Error("Can't understand property map: " + prop);
- var moz = "M." + m[1], how = m[2], my = m[3];
- moz_to_me += ",\n" + my + ": ";
- if (how == "@") {
- moz_to_me += moz + ".map(from_moz)";
- } else if (how == ">") {
- moz_to_me += "from_moz(" + moz + ")";
- } else if (how == "=") {
- moz_to_me += moz;
- } else if (how == "%") {
- moz_to_me += "from_moz(" + moz + ").body";
- } else throw new Error("Can't understand operator in propmap: " + prop);
- });
- moz_to_me += "\n})}";
-
- // moz_to_me = parse(moz_to_me).print_to_string({ beautify: true });
- // console.log(moz_to_me);
-
- moz_to_me = new Function("mytype", "my_start_token", "my_end_token", "from_moz", "return(" + moz_to_me + ")")(
- mytype, my_start_token, my_end_token, from_moz
- );
- return MOZ_TO_ME[moztype] = moz_to_me;
- };
-
- var FROM_MOZ_STACK = null;
-
- function from_moz(node) {
- FROM_MOZ_STACK.push(node);
- var ret = node != null ? MOZ_TO_ME[node.type](node) : null;
- FROM_MOZ_STACK.pop();
- return ret;
- };
-
- AST_Node.from_mozilla_ast = function(node){
- var save_stack = FROM_MOZ_STACK;
- FROM_MOZ_STACK = [];
- var ast = from_moz(node);
- FROM_MOZ_STACK = save_stack;
- return ast;
- };
-
-})();
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/output.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/output.js
deleted file mode 100644
index 42b3aad9..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/output.js
+++ /dev/null
@@ -1,1220 +0,0 @@
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
-
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-"use strict";
-
-function OutputStream(options) {
-
- options = defaults(options, {
- indent_start : 0,
- indent_level : 4,
- quote_keys : false,
- space_colon : true,
- ascii_only : false,
- inline_script : false,
- width : 80,
- max_line_len : 32000,
- ie_proof : true,
- beautify : false,
- source_map : null,
- bracketize : false,
- semicolons : true,
- comments : false,
- preserve_line : false
- }, true);
-
- var indentation = 0;
- var current_col = 0;
- var current_line = 1;
- var current_pos = 0;
- var OUTPUT = "";
-
- function to_ascii(str) {
- return str.replace(/[\u0080-\uffff]/g, function(ch) {
- var code = ch.charCodeAt(0).toString(16);
- while (code.length < 4) code = "0" + code;
- return "\\u" + code;
- });
- };
-
- function make_string(str) {
- var dq = 0, sq = 0;
- str = str.replace(/[\\\b\f\n\r\t\x22\x27\u2028\u2029\0]/g, function(s){
- switch (s) {
- case "\\": return "\\\\";
- case "\b": return "\\b";
- case "\f": return "\\f";
- case "\n": return "\\n";
- case "\r": return "\\r";
- case "\u2028": return "\\u2028";
- case "\u2029": return "\\u2029";
- case '"': ++dq; return '"';
- case "'": ++sq; return "'";
- case "\0": return "\\0";
- }
- return s;
- });
- if (options.ascii_only) str = to_ascii(str);
- if (dq > sq) return "'" + str.replace(/\x27/g, "\\'") + "'";
- else return '"' + str.replace(/\x22/g, '\\"') + '"';
- };
-
- function encode_string(str) {
- var ret = make_string(str);
- if (options.inline_script)
- ret = ret.replace(/<\x2fscript([>\/\t\n\f\r ])/gi, "<\\/script$1");
- return ret;
- };
-
- function make_name(name) {
- name = name.toString();
- if (options.ascii_only)
- name = to_ascii(name);
- return name;
- };
-
- function make_indent(back) {
- return repeat_string(" ", options.indent_start + indentation - back * options.indent_level);
- };
-
- /* -----[ beautification/minification ]----- */
-
- var might_need_space = false;
- var might_need_semicolon = false;
- var last = null;
-
- function last_char() {
- return last.charAt(last.length - 1);
- };
-
- function maybe_newline() {
- if (options.max_line_len && current_col > options.max_line_len)
- print("\n");
- };
-
- var requireSemicolonChars = makePredicate("( [ + * / - , .");
-
- function print(str) {
- str = String(str);
- var ch = str.charAt(0);
- if (might_need_semicolon) {
- if ((!ch || ";}".indexOf(ch) < 0) && !/[;]$/.test(last)) {
- if (options.semicolons || requireSemicolonChars(ch)) {
- OUTPUT += ";";
- current_col++;
- current_pos++;
- } else {
- OUTPUT += "\n";
- current_pos++;
- current_line++;
- current_col = 0;
- }
- if (!options.beautify)
- might_need_space = false;
- }
- might_need_semicolon = false;
- maybe_newline();
- }
-
- if (!options.beautify && options.preserve_line && stack[stack.length - 1]) {
- var target_line = stack[stack.length - 1].start.line;
- while (current_line < target_line) {
- OUTPUT += "\n";
- current_pos++;
- current_line++;
- current_col = 0;
- might_need_space = false;
- }
- }
-
- if (might_need_space) {
- var prev = last_char();
- if ((is_identifier_char(prev)
- && (is_identifier_char(ch) || ch == "\\"))
- || (/^[\+\-\/]$/.test(ch) && ch == prev))
- {
- OUTPUT += " ";
- current_col++;
- current_pos++;
- }
- might_need_space = false;
- }
- var a = str.split(/\r?\n/), n = a.length - 1;
- current_line += n;
- if (n == 0) {
- current_col += a[n].length;
- } else {
- current_col = a[n].length;
- }
- current_pos += str.length;
- last = str;
- OUTPUT += str;
- };
-
- var space = options.beautify ? function() {
- print(" ");
- } : function() {
- might_need_space = true;
- };
-
- var indent = options.beautify ? function(half) {
- if (options.beautify) {
- print(make_indent(half ? 0.5 : 0));
- }
- } : noop;
-
- var with_indent = options.beautify ? function(col, cont) {
- if (col === true) col = next_indent();
- var save_indentation = indentation;
- indentation = col;
- var ret = cont();
- indentation = save_indentation;
- return ret;
- } : function(col, cont) { return cont() };
-
- var newline = options.beautify ? function() {
- print("\n");
- } : noop;
-
- var semicolon = options.beautify ? function() {
- print(";");
- } : function() {
- might_need_semicolon = true;
- };
-
- function force_semicolon() {
- might_need_semicolon = false;
- print(";");
- };
-
- function next_indent() {
- return indentation + options.indent_level;
- };
-
- function with_block(cont) {
- var ret;
- print("{");
- newline();
- with_indent(next_indent(), function(){
- ret = cont();
- });
- indent();
- print("}");
- return ret;
- };
-
- function with_parens(cont) {
- print("(");
- //XXX: still nice to have that for argument lists
- //var ret = with_indent(current_col, cont);
- var ret = cont();
- print(")");
- return ret;
- };
-
- function with_square(cont) {
- print("[");
- //var ret = with_indent(current_col, cont);
- var ret = cont();
- print("]");
- return ret;
- };
-
- function comma() {
- print(",");
- space();
- };
-
- function colon() {
- print(":");
- if (options.space_colon) space();
- };
-
- var add_mapping = options.source_map ? function(token, name) {
- try {
- if (token) options.source_map.add(
- token.file || "?",
- current_line, current_col,
- token.line, token.col,
- (!name && token.type == "name") ? token.value : name
- );
- } catch(ex) {
- AST_Node.warn("Couldn't figure out mapping for {file}:{line},{col} → {cline},{ccol} [{name}]", {
- file: token.file,
- line: token.line,
- col: token.col,
- cline: current_line,
- ccol: current_col,
- name: name || ""
- })
- }
- } : noop;
-
- function get() {
- return OUTPUT;
- };
-
- var stack = [];
- return {
- get : get,
- toString : get,
- indent : indent,
- indentation : function() { return indentation },
- current_width : function() { return current_col - indentation },
- should_break : function() { return options.width && this.current_width() >= options.width },
- newline : newline,
- print : print,
- space : space,
- comma : comma,
- colon : colon,
- last : function() { return last },
- semicolon : semicolon,
- force_semicolon : force_semicolon,
- to_ascii : to_ascii,
- print_name : function(name) { print(make_name(name)) },
- print_string : function(str) { print(encode_string(str)) },
- next_indent : next_indent,
- with_indent : with_indent,
- with_block : with_block,
- with_parens : with_parens,
- with_square : with_square,
- add_mapping : add_mapping,
- option : function(opt) { return options[opt] },
- line : function() { return current_line },
- col : function() { return current_col },
- pos : function() { return current_pos },
- push_node : function(node) { stack.push(node) },
- pop_node : function() { return stack.pop() },
- stack : function() { return stack },
- parent : function(n) {
- return stack[stack.length - 2 - (n || 0)];
- }
- };
-
-};
-
-/* -----[ code generators ]----- */
-
-(function(){
-
- /* -----[ utils ]----- */
-
- function DEFPRINT(nodetype, generator) {
- nodetype.DEFMETHOD("_codegen", generator);
- };
-
- AST_Node.DEFMETHOD("print", function(stream, force_parens){
- var self = this, generator = self._codegen;
- stream.push_node(self);
- if (force_parens || self.needs_parens(stream)) {
- stream.with_parens(function(){
- self.add_comments(stream);
- self.add_source_map(stream);
- generator(self, stream);
- });
- } else {
- self.add_comments(stream);
- self.add_source_map(stream);
- generator(self, stream);
- }
- stream.pop_node();
- });
-
- AST_Node.DEFMETHOD("print_to_string", function(options){
- var s = OutputStream(options);
- this.print(s);
- return s.get();
- });
-
- /* -----[ comments ]----- */
-
- AST_Node.DEFMETHOD("add_comments", function(output){
- var c = output.option("comments"), self = this;
- if (c) {
- var start = self.start;
- if (start && !start._comments_dumped) {
- start._comments_dumped = true;
- var comments = start.comments_before;
-
- // XXX: ugly fix for https://github.com/mishoo/UglifyJS2/issues/112
- // if this node is `return` or `throw`, we cannot allow comments before
- // the returned or thrown value.
- if (self instanceof AST_Exit &&
- self.value && self.value.start.comments_before.length > 0) {
- comments = (comments || []).concat(self.value.start.comments_before);
- self.value.start.comments_before = [];
- }
-
- if (c.test) {
- comments = comments.filter(function(comment){
- return c.test(comment.value);
- });
- } else if (typeof c == "function") {
- comments = comments.filter(function(comment){
- return c(self, comment);
- });
- }
- comments.forEach(function(c){
- if (c.type == "comment1") {
- output.print("//" + c.value + "\n");
- output.indent();
- }
- else if (c.type == "comment2") {
- output.print("/*" + c.value + "*/");
- if (start.nlb) {
- output.print("\n");
- output.indent();
- } else {
- output.space();
- }
- }
- });
- }
- }
- });
-
- /* -----[ PARENTHESES ]----- */
-
- function PARENS(nodetype, func) {
- nodetype.DEFMETHOD("needs_parens", func);
- };
-
- PARENS(AST_Node, function(){
- return false;
- });
-
- // a function expression needs parens around it when it's provably
- // the first token to appear in a statement.
- PARENS(AST_Function, function(output){
- return first_in_statement(output);
- });
-
- // same goes for an object literal, because otherwise it would be
- // interpreted as a block of code.
- PARENS(AST_Object, function(output){
- return first_in_statement(output);
- });
-
- PARENS(AST_Unary, function(output){
- var p = output.parent();
- return p instanceof AST_PropAccess && p.expression === this;
- });
-
- PARENS(AST_Seq, function(output){
- var p = output.parent();
- return p instanceof AST_Call // (foo, bar)() or foo(1, (2, 3), 4)
- || p instanceof AST_Unary // !(foo, bar, baz)
- || p instanceof AST_Binary // 1 + (2, 3) + 4 ==> 8
- || p instanceof AST_VarDef // var a = (1, 2), b = a + a; ==> b == 4
- || p instanceof AST_Dot // (1, {foo:2}).foo ==> 2
- || p instanceof AST_Array // [ 1, (2, 3), 4 ] ==> [ 1, 3, 4 ]
- || p instanceof AST_ObjectProperty // { foo: (1, 2) }.foo ==> 2
- || p instanceof AST_Conditional /* (false, true) ? (a = 10, b = 20) : (c = 30)
- * ==> 20 (side effect, set a := 10 and b := 20) */
- ;
- });
-
- PARENS(AST_Binary, function(output){
- var p = output.parent();
- // (foo && bar)()
- if (p instanceof AST_Call && p.expression === this)
- return true;
- // typeof (foo && bar)
- if (p instanceof AST_Unary)
- return true;
- // (foo && bar)["prop"], (foo && bar).prop
- if (p instanceof AST_PropAccess && p.expression === this)
- return true;
- // this deals with precedence: 3 * (2 + 1)
- if (p instanceof AST_Binary) {
- var po = p.operator, pp = PRECEDENCE[po];
- var so = this.operator, sp = PRECEDENCE[so];
- if (pp > sp
- || (pp == sp
- && this === p.right
- && !(so == po &&
- (so == "*" ||
- so == "&&" ||
- so == "||")))) {
- return true;
- }
- }
- });
-
- PARENS(AST_PropAccess, function(output){
- var p = output.parent();
- if (p instanceof AST_New && p.expression === this) {
- // i.e. new (foo.bar().baz)
- //
- // if there's one call into this subtree, then we need
- // parens around it too, otherwise the call will be
- // interpreted as passing the arguments to the upper New
- // expression.
- try {
- this.walk(new TreeWalker(function(node){
- if (node instanceof AST_Call) throw p;
- }));
- } catch(ex) {
- if (ex !== p) throw ex;
- return true;
- }
- }
- });
-
- PARENS(AST_Call, function(output){
- var p = output.parent();
- return p instanceof AST_New && p.expression === this;
- });
-
- PARENS(AST_New, function(output){
- var p = output.parent();
- if (no_constructor_parens(this, output)
- && (p instanceof AST_PropAccess // (new Date).getTime(), (new Date)["getTime"]()
- || p instanceof AST_Call && p.expression === this)) // (new foo)(bar)
- return true;
- });
-
- PARENS(AST_Number, function(output){
- var p = output.parent();
- if (this.getValue() < 0 && p instanceof AST_PropAccess && p.expression === this)
- return true;
- });
-
- PARENS(AST_NaN, function(output){
- var p = output.parent();
- if (p instanceof AST_PropAccess && p.expression === this)
- return true;
- });
-
- function assign_and_conditional_paren_rules(output) {
- var p = output.parent();
- // !(a = false) → true
- if (p instanceof AST_Unary)
- return true;
- // 1 + (a = 2) + 3 → 6, side effect setting a = 2
- if (p instanceof AST_Binary && !(p instanceof AST_Assign))
- return true;
- // (a = func)() —or— new (a = Object)()
- if (p instanceof AST_Call && p.expression === this)
- return true;
- // (a = foo) ? bar : baz
- if (p instanceof AST_Conditional && p.condition === this)
- return true;
- // (a = foo)["prop"] —or— (a = foo).prop
- if (p instanceof AST_PropAccess && p.expression === this)
- return true;
- };
-
- PARENS(AST_Assign, assign_and_conditional_paren_rules);
- PARENS(AST_Conditional, assign_and_conditional_paren_rules);
-
- /* -----[ PRINTERS ]----- */
-
- DEFPRINT(AST_Directive, function(self, output){
- output.print_string(self.value);
- output.semicolon();
- });
- DEFPRINT(AST_Debugger, function(self, output){
- output.print("debugger");
- output.semicolon();
- });
-
- /* -----[ statements ]----- */
-
- function display_body(body, is_toplevel, output) {
- var last = body.length - 1;
- body.forEach(function(stmt, i){
- if (!(stmt instanceof AST_EmptyStatement)) {
- output.indent();
- stmt.print(output);
- if (!(i == last && is_toplevel)) {
- output.newline();
- if (is_toplevel) output.newline();
- }
- }
- });
- };
-
- AST_StatementWithBody.DEFMETHOD("_do_print_body", function(output){
- force_statement(this.body, output);
- });
-
- DEFPRINT(AST_Statement, function(self, output){
- self.body.print(output);
- output.semicolon();
- });
- DEFPRINT(AST_Toplevel, function(self, output){
- display_body(self.body, true, output);
- output.print("");
- });
- DEFPRINT(AST_LabeledStatement, function(self, output){
- self.label.print(output);
- output.colon();
- self.body.print(output);
- });
- DEFPRINT(AST_SimpleStatement, function(self, output){
- self.body.print(output);
- output.semicolon();
- });
- function print_bracketed(body, output) {
- if (body.length > 0) output.with_block(function(){
- display_body(body, false, output);
- });
- else output.print("{}");
- };
- DEFPRINT(AST_BlockStatement, function(self, output){
- print_bracketed(self.body, output);
- });
- DEFPRINT(AST_EmptyStatement, function(self, output){
- output.semicolon();
- });
- DEFPRINT(AST_Do, function(self, output){
- output.print("do");
- output.space();
- self._do_print_body(output);
- output.space();
- output.print("while");
- output.space();
- output.with_parens(function(){
- self.condition.print(output);
- });
- output.semicolon();
- });
- DEFPRINT(AST_While, function(self, output){
- output.print("while");
- output.space();
- output.with_parens(function(){
- self.condition.print(output);
- });
- output.space();
- self._do_print_body(output);
- });
- DEFPRINT(AST_For, function(self, output){
- output.print("for");
- output.space();
- output.with_parens(function(){
- if (self.init) {
- if (self.init instanceof AST_Definitions) {
- self.init.print(output);
- } else {
- parenthesize_for_noin(self.init, output, true);
- }
- output.print(";");
- output.space();
- } else {
- output.print(";");
- }
- if (self.condition) {
- self.condition.print(output);
- output.print(";");
- output.space();
- } else {
- output.print(";");
- }
- if (self.step) {
- self.step.print(output);
- }
- });
- output.space();
- self._do_print_body(output);
- });
- DEFPRINT(AST_ForIn, function(self, output){
- output.print("for");
- output.space();
- output.with_parens(function(){
- self.init.print(output);
- output.space();
- output.print("in");
- output.space();
- self.object.print(output);
- });
- output.space();
- self._do_print_body(output);
- });
- DEFPRINT(AST_With, function(self, output){
- output.print("with");
- output.space();
- output.with_parens(function(){
- self.expression.print(output);
- });
- output.space();
- self._do_print_body(output);
- });
-
- /* -----[ functions ]----- */
- AST_Lambda.DEFMETHOD("_do_print", function(output, nokeyword){
- var self = this;
- if (!nokeyword) {
- output.print("function");
- }
- if (self.name) {
- output.space();
- self.name.print(output);
- }
- output.with_parens(function(){
- self.argnames.forEach(function(arg, i){
- if (i) output.comma();
- arg.print(output);
- });
- });
- output.space();
- print_bracketed(self.body, output);
- });
- DEFPRINT(AST_Lambda, function(self, output){
- self._do_print(output);
- });
-
- /* -----[ exits ]----- */
- AST_Exit.DEFMETHOD("_do_print", function(output, kind){
- output.print(kind);
- if (this.value) {
- output.space();
- this.value.print(output);
- }
- output.semicolon();
- });
- DEFPRINT(AST_Return, function(self, output){
- self._do_print(output, "return");
- });
- DEFPRINT(AST_Throw, function(self, output){
- self._do_print(output, "throw");
- });
-
- /* -----[ loop control ]----- */
- AST_LoopControl.DEFMETHOD("_do_print", function(output, kind){
- output.print(kind);
- if (this.label) {
- output.space();
- this.label.print(output);
- }
- output.semicolon();
- });
- DEFPRINT(AST_Break, function(self, output){
- self._do_print(output, "break");
- });
- DEFPRINT(AST_Continue, function(self, output){
- self._do_print(output, "continue");
- });
-
- /* -----[ if ]----- */
- function make_then(self, output) {
- if (output.option("bracketize")) {
- make_block(self.body, output);
- return;
- }
- // The squeezer replaces "block"-s that contain only a single
- // statement with the statement itself; technically, the AST
- // is correct, but this can create problems when we output an
- // IF having an ELSE clause where the THEN clause ends in an
- // IF *without* an ELSE block (then the outer ELSE would refer
- // to the inner IF). This function checks for this case and
- // adds the block brackets if needed.
- if (!self.body)
- return output.force_semicolon();
- if (self.body instanceof AST_Do
- && output.option("ie_proof")) {
- // https://github.com/mishoo/UglifyJS/issues/#issue/57 IE
- // croaks with "syntax error" on code like this: if (foo)
- // do ... while(cond); else ... we need block brackets
- // around do/while
- make_block(self.body, output);
- return;
- }
- var b = self.body;
- while (true) {
- if (b instanceof AST_If) {
- if (!b.alternative) {
- make_block(self.body, output);
- return;
- }
- b = b.alternative;
- }
- else if (b instanceof AST_StatementWithBody) {
- b = b.body;
- }
- else break;
- }
- force_statement(self.body, output);
- };
- DEFPRINT(AST_If, function(self, output){
- output.print("if");
- output.space();
- output.with_parens(function(){
- self.condition.print(output);
- });
- output.space();
- if (self.alternative) {
- make_then(self, output);
- output.space();
- output.print("else");
- output.space();
- force_statement(self.alternative, output);
- } else {
- self._do_print_body(output);
- }
- });
-
- /* -----[ switch ]----- */
- DEFPRINT(AST_Switch, function(self, output){
- output.print("switch");
- output.space();
- output.with_parens(function(){
- self.expression.print(output);
- });
- output.space();
- if (self.body.length > 0) output.with_block(function(){
- self.body.forEach(function(stmt, i){
- if (i) output.newline();
- output.indent(true);
- stmt.print(output);
- });
- });
- else output.print("{}");
- });
- AST_SwitchBranch.DEFMETHOD("_do_print_body", function(output){
- if (this.body.length > 0) {
- output.newline();
- this.body.forEach(function(stmt){
- output.indent();
- stmt.print(output);
- output.newline();
- });
- }
- });
- DEFPRINT(AST_Default, function(self, output){
- output.print("default:");
- self._do_print_body(output);
- });
- DEFPRINT(AST_Case, function(self, output){
- output.print("case");
- output.space();
- self.expression.print(output);
- output.print(":");
- self._do_print_body(output);
- });
-
- /* -----[ exceptions ]----- */
- DEFPRINT(AST_Try, function(self, output){
- output.print("try");
- output.space();
- print_bracketed(self.body, output);
- if (self.bcatch) {
- output.space();
- self.bcatch.print(output);
- }
- if (self.bfinally) {
- output.space();
- self.bfinally.print(output);
- }
- });
- DEFPRINT(AST_Catch, function(self, output){
- output.print("catch");
- output.space();
- output.with_parens(function(){
- self.argname.print(output);
- });
- output.space();
- print_bracketed(self.body, output);
- });
- DEFPRINT(AST_Finally, function(self, output){
- output.print("finally");
- output.space();
- print_bracketed(self.body, output);
- });
-
- /* -----[ var/const ]----- */
- AST_Definitions.DEFMETHOD("_do_print", function(output, kind){
- output.print(kind);
- output.space();
- this.definitions.forEach(function(def, i){
- if (i) output.comma();
- def.print(output);
- });
- var p = output.parent();
- var in_for = p instanceof AST_For || p instanceof AST_ForIn;
- var avoid_semicolon = in_for && p.init === this;
- if (!avoid_semicolon)
- output.semicolon();
- });
- DEFPRINT(AST_Var, function(self, output){
- self._do_print(output, "var");
- });
- DEFPRINT(AST_Const, function(self, output){
- self._do_print(output, "const");
- });
-
- function parenthesize_for_noin(node, output, noin) {
- if (!noin) node.print(output);
- else try {
- // need to take some precautions here:
- // https://github.com/mishoo/UglifyJS2/issues/60
- node.walk(new TreeWalker(function(node){
- if (node instanceof AST_Binary && node.operator == "in")
- throw output;
- }));
- node.print(output);
- } catch(ex) {
- if (ex !== output) throw ex;
- node.print(output, true);
- }
- };
-
- DEFPRINT(AST_VarDef, function(self, output){
- self.name.print(output);
- if (self.value) {
- output.space();
- output.print("=");
- output.space();
- var p = output.parent(1);
- var noin = p instanceof AST_For || p instanceof AST_ForIn;
- parenthesize_for_noin(self.value, output, noin);
- }
- });
-
- /* -----[ other expressions ]----- */
- DEFPRINT(AST_Call, function(self, output){
- self.expression.print(output);
- if (self instanceof AST_New && no_constructor_parens(self, output))
- return;
- output.with_parens(function(){
- self.args.forEach(function(expr, i){
- if (i) output.comma();
- expr.print(output);
- });
- });
- });
- DEFPRINT(AST_New, function(self, output){
- output.print("new");
- output.space();
- AST_Call.prototype._codegen(self, output);
- });
-
- AST_Seq.DEFMETHOD("_do_print", function(output){
- this.car.print(output);
- if (this.cdr) {
- output.comma();
- if (output.should_break()) {
- output.newline();
- output.indent();
- }
- this.cdr.print(output);
- }
- });
- DEFPRINT(AST_Seq, function(self, output){
- self._do_print(output);
- // var p = output.parent();
- // if (p instanceof AST_Statement) {
- // output.with_indent(output.next_indent(), function(){
- // self._do_print(output);
- // });
- // } else {
- // self._do_print(output);
- // }
- });
- DEFPRINT(AST_Dot, function(self, output){
- var expr = self.expression;
- expr.print(output);
- if (expr instanceof AST_Number && expr.getValue() >= 0) {
- if (!/[xa-f.]/i.test(output.last())) {
- output.print(".");
- }
- }
- output.print(".");
- // the name after dot would be mapped about here.
- output.add_mapping(self.end);
- output.print_name(self.property);
- });
- DEFPRINT(AST_Sub, function(self, output){
- self.expression.print(output);
- output.print("[");
- self.property.print(output);
- output.print("]");
- });
- DEFPRINT(AST_UnaryPrefix, function(self, output){
- var op = self.operator;
- output.print(op);
- if (/^[a-z]/i.test(op))
- output.space();
- self.expression.print(output);
- });
- DEFPRINT(AST_UnaryPostfix, function(self, output){
- self.expression.print(output);
- output.print(self.operator);
- });
- DEFPRINT(AST_Binary, function(self, output){
- self.left.print(output);
- output.space();
- output.print(self.operator);
- output.space();
- self.right.print(output);
- });
- DEFPRINT(AST_Conditional, function(self, output){
- self.condition.print(output);
- output.space();
- output.print("?");
- output.space();
- self.consequent.print(output);
- output.space();
- output.colon();
- self.alternative.print(output);
- });
-
- /* -----[ literals ]----- */
- DEFPRINT(AST_Array, function(self, output){
- output.with_square(function(){
- var a = self.elements, len = a.length;
- if (len > 0) output.space();
- a.forEach(function(exp, i){
- if (i) output.comma();
- exp.print(output);
- });
- if (len > 0) output.space();
- });
- });
- DEFPRINT(AST_Object, function(self, output){
- if (self.properties.length > 0) output.with_block(function(){
- self.properties.forEach(function(prop, i){
- if (i) {
- output.print(",");
- output.newline();
- }
- output.indent();
- prop.print(output);
- });
- output.newline();
- });
- else output.print("{}");
- });
- DEFPRINT(AST_ObjectKeyVal, function(self, output){
- var key = self.key;
- if (output.option("quote_keys")) {
- output.print_string(key);
- } else if ((typeof key == "number"
- || !output.option("beautify")
- && +key + "" == key)
- && parseFloat(key) >= 0) {
- output.print(make_num(key));
- } else if (!is_identifier(key)) {
- output.print_string(key);
- } else {
- output.print_name(key);
- }
- output.colon();
- self.value.print(output);
- });
- DEFPRINT(AST_ObjectSetter, function(self, output){
- output.print("set");
- self.value._do_print(output, true);
- });
- DEFPRINT(AST_ObjectGetter, function(self, output){
- output.print("get");
- self.value._do_print(output, true);
- });
- DEFPRINT(AST_Symbol, function(self, output){
- var def = self.definition();
- output.print_name(def ? def.mangled_name || def.name : self.name);
- });
- DEFPRINT(AST_Undefined, function(self, output){
- output.print("void 0");
- });
- DEFPRINT(AST_Hole, noop);
- DEFPRINT(AST_Infinity, function(self, output){
- output.print("1/0");
- });
- DEFPRINT(AST_NaN, function(self, output){
- output.print("0/0");
- });
- DEFPRINT(AST_This, function(self, output){
- output.print("this");
- });
- DEFPRINT(AST_Constant, function(self, output){
- output.print(self.getValue());
- });
- DEFPRINT(AST_String, function(self, output){
- output.print_string(self.getValue());
- });
- DEFPRINT(AST_Number, function(self, output){
- output.print(make_num(self.getValue()));
- });
- DEFPRINT(AST_RegExp, function(self, output){
- var str = self.getValue().toString();
- if (output.option("ascii_only"))
- str = output.to_ascii(str);
- output.print(str);
- var p = output.parent();
- if (p instanceof AST_Binary && /^in/.test(p.operator) && p.left === self)
- output.print(" ");
- });
-
- function force_statement(stat, output) {
- if (output.option("bracketize")) {
- if (!stat || stat instanceof AST_EmptyStatement)
- output.print("{}");
- else if (stat instanceof AST_BlockStatement)
- stat.print(output);
- else output.with_block(function(){
- output.indent();
- stat.print(output);
- output.newline();
- });
- } else {
- if (!stat || stat instanceof AST_EmptyStatement)
- output.force_semicolon();
- else
- stat.print(output);
- }
- };
-
- // return true if the node at the top of the stack (that means the
- // innermost node in the current output) is lexically the first in
- // a statement.
- function first_in_statement(output) {
- var a = output.stack(), i = a.length, node = a[--i], p = a[--i];
- while (i > 0) {
- if (p instanceof AST_Statement && p.body === node)
- return true;
- if ((p instanceof AST_Seq && p.car === node ) ||
- (p instanceof AST_Call && p.expression === node ) ||
- (p instanceof AST_Dot && p.expression === node ) ||
- (p instanceof AST_Sub && p.expression === node ) ||
- (p instanceof AST_Conditional && p.condition === node ) ||
- (p instanceof AST_Binary && p.left === node ) ||
- (p instanceof AST_UnaryPostfix && p.expression === node ))
- {
- node = p;
- p = a[--i];
- } else {
- return false;
- }
- }
- };
-
- // self should be AST_New. decide if we want to show parens or not.
- function no_constructor_parens(self, output) {
- return self.args.length == 0 && !output.option("beautify");
- };
-
- function best_of(a) {
- var best = a[0], len = best.length;
- for (var i = 1; i < a.length; ++i) {
- if (a[i].length < len) {
- best = a[i];
- len = best.length;
- }
- }
- return best;
- };
-
- function make_num(num) {
- var str = num.toString(10), a = [ str.replace(/^0\./, ".").replace('e+', 'e') ], m;
- if (Math.floor(num) === num) {
- if (num >= 0) {
- a.push("0x" + num.toString(16).toLowerCase(), // probably pointless
- "0" + num.toString(8)); // same.
- } else {
- a.push("-0x" + (-num).toString(16).toLowerCase(), // probably pointless
- "-0" + (-num).toString(8)); // same.
- }
- if ((m = /^(.*?)(0+)$/.exec(num))) {
- a.push(m[1] + "e" + m[2].length);
- }
- } else if ((m = /^0?\.(0+)(.*)$/.exec(num))) {
- a.push(m[2] + "e-" + (m[1].length + m[2].length),
- str.substr(str.indexOf(".")));
- }
- return best_of(a);
- };
-
- function make_block(stmt, output) {
- if (stmt instanceof AST_BlockStatement) {
- stmt.print(output);
- return;
- }
- output.with_block(function(){
- output.indent();
- stmt.print(output);
- output.newline();
- });
- };
-
- /* -----[ source map generators ]----- */
-
- function DEFMAP(nodetype, generator) {
- nodetype.DEFMETHOD("add_source_map", function(stream){
- generator(this, stream);
- });
- };
-
- // We could easily add info for ALL nodes, but it seems to me that
- // would be quite wasteful, hence this noop in the base class.
- DEFMAP(AST_Node, noop);
-
- function basic_sourcemap_gen(self, output) {
- output.add_mapping(self.start);
- };
-
- // XXX: I'm not exactly sure if we need it for all of these nodes,
- // or if we should add even more.
-
- DEFMAP(AST_Directive, basic_sourcemap_gen);
- DEFMAP(AST_Debugger, basic_sourcemap_gen);
- DEFMAP(AST_Symbol, basic_sourcemap_gen);
- DEFMAP(AST_Jump, basic_sourcemap_gen);
- DEFMAP(AST_StatementWithBody, basic_sourcemap_gen);
- DEFMAP(AST_LabeledStatement, noop); // since the label symbol will mark it
- DEFMAP(AST_Lambda, basic_sourcemap_gen);
- DEFMAP(AST_Switch, basic_sourcemap_gen);
- DEFMAP(AST_SwitchBranch, basic_sourcemap_gen);
- DEFMAP(AST_BlockStatement, basic_sourcemap_gen);
- DEFMAP(AST_Toplevel, noop);
- DEFMAP(AST_New, basic_sourcemap_gen);
- DEFMAP(AST_Try, basic_sourcemap_gen);
- DEFMAP(AST_Catch, basic_sourcemap_gen);
- DEFMAP(AST_Finally, basic_sourcemap_gen);
- DEFMAP(AST_Definitions, basic_sourcemap_gen);
- DEFMAP(AST_Constant, basic_sourcemap_gen);
- DEFMAP(AST_ObjectProperty, function(self, output){
- output.add_mapping(self.start, self.key);
- });
-
-})();
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/parse.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/parse.js
deleted file mode 100644
index 5a75e753..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/parse.js
+++ /dev/null
@@ -1,1407 +0,0 @@
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
-
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon
- Parser based on parse-js (http://marijn.haverbeke.nl/parse-js/).
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-"use strict";
-
-var KEYWORDS = 'break case catch const continue debugger default delete do else finally for function if in instanceof new return switch throw try typeof var void while with';
-var KEYWORDS_ATOM = 'false null true';
-var RESERVED_WORDS = 'abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized this throws transient volatile'
- + " " + KEYWORDS_ATOM + " " + KEYWORDS;
-var KEYWORDS_BEFORE_EXPRESSION = 'return new delete throw else case';
-
-KEYWORDS = makePredicate(KEYWORDS);
-RESERVED_WORDS = makePredicate(RESERVED_WORDS);
-KEYWORDS_BEFORE_EXPRESSION = makePredicate(KEYWORDS_BEFORE_EXPRESSION);
-KEYWORDS_ATOM = makePredicate(KEYWORDS_ATOM);
-
-var OPERATOR_CHARS = makePredicate(characters("+-*&%=<>!?|~^"));
-
-var RE_HEX_NUMBER = /^0x[0-9a-f]+$/i;
-var RE_OCT_NUMBER = /^0[0-7]+$/;
-var RE_DEC_NUMBER = /^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i;
-
-var OPERATORS = makePredicate([
- "in",
- "instanceof",
- "typeof",
- "new",
- "void",
- "delete",
- "++",
- "--",
- "+",
- "-",
- "!",
- "~",
- "&",
- "|",
- "^",
- "*",
- "/",
- "%",
- ">>",
- "<<",
- ">>>",
- "<",
- ">",
- "<=",
- ">=",
- "==",
- "===",
- "!=",
- "!==",
- "?",
- "=",
- "+=",
- "-=",
- "/=",
- "*=",
- "%=",
- ">>=",
- "<<=",
- ">>>=",
- "|=",
- "^=",
- "&=",
- "&&",
- "||"
-]);
-
-var WHITESPACE_CHARS = makePredicate(characters(" \u00a0\n\r\t\f\u000b\u200b\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000"));
-
-var PUNC_BEFORE_EXPRESSION = makePredicate(characters("[{(,.;:"));
-
-var PUNC_CHARS = makePredicate(characters("[]{}(),;:"));
-
-var REGEXP_MODIFIERS = makePredicate(characters("gmsiy"));
-
-/* -----[ Tokenizer ]----- */
-
-// regexps adapted from http://xregexp.com/plugins/#unicode
-var UNICODE = {
- letter: new RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0523\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971\\u0972\\u097B-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1159\\u115F-\\u11A2\\u11A8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19A9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2C6F\\u2C71-\\u2C7D\\u2C80-\\u2CE4\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400\\u4DB5\\u4E00\\u9FC3\\uA000-\\uA48C\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA697\\uA717-\\uA71F\\uA722-\\uA788\\uA78B\\uA78C\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA90A-\\uA925\\uA930-\\uA946\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAC00\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),
- non_spacing_mark: new RegExp("[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065E\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0900-\\u0902\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F90-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1DC0-\\u1DE6\\u1DFD-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA67C\\uA67D\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26]"),
- space_combining_mark: new RegExp("[\\u0903\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A19-\\u1A1B\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]"),
- connector_punctuation: new RegExp("[\\u005F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]")
-};
-
-function is_letter(code) {
- return (code >= 97 && code <= 122)
- || (code >= 65 && code <= 90)
- || (code >= 0xaa && UNICODE.letter.test(String.fromCharCode(code)));
-};
-
-function is_digit(code) {
- return code >= 48 && code <= 57; //XXX: find out if "UnicodeDigit" means something else than 0..9
-};
-
-function is_alphanumeric_char(code) {
- return is_digit(code) || is_letter(code);
-};
-
-function is_unicode_combining_mark(ch) {
- return UNICODE.non_spacing_mark.test(ch) || UNICODE.space_combining_mark.test(ch);
-};
-
-function is_unicode_connector_punctuation(ch) {
- return UNICODE.connector_punctuation.test(ch);
-};
-
-function is_identifier(name) {
- return /^[a-z_$][a-z0-9_$]*$/i.test(name) && !RESERVED_WORDS(name);
-};
-
-function is_identifier_start(code) {
- return code == 36 || code == 95 || is_letter(code);
-};
-
-function is_identifier_char(ch) {
- var code = ch.charCodeAt(0);
- return is_identifier_start(code)
- || is_digit(code)
- || code == 8204 // \u200c: zero-width non-joiner
- || code == 8205 // \u200d: zero-width joiner (in my ECMA-262 PDF, this is also 200c)
- || is_unicode_combining_mark(ch)
- || is_unicode_connector_punctuation(ch)
- ;
-};
-
-function parse_js_number(num) {
- if (RE_HEX_NUMBER.test(num)) {
- return parseInt(num.substr(2), 16);
- } else if (RE_OCT_NUMBER.test(num)) {
- return parseInt(num.substr(1), 8);
- } else if (RE_DEC_NUMBER.test(num)) {
- return parseFloat(num);
- }
-};
-
-function JS_Parse_Error(message, line, col, pos) {
- this.message = message;
- this.line = line;
- this.col = col;
- this.pos = pos;
- this.stack = new Error().stack;
-};
-
-JS_Parse_Error.prototype.toString = function() {
- return this.message + " (line: " + this.line + ", col: " + this.col + ", pos: " + this.pos + ")" + "\n\n" + this.stack;
-};
-
-function js_error(message, filename, line, col, pos) {
- AST_Node.warn("ERROR: {message} [{file}:{line},{col}]", {
- message: message,
- file: filename,
- line: line,
- col: col
- });
- throw new JS_Parse_Error(message, line, col, pos);
-};
-
-function is_token(token, type, val) {
- return token.type == type && (val == null || token.value == val);
-};
-
-var EX_EOF = {};
-
-function tokenizer($TEXT, filename) {
-
- var S = {
- text : $TEXT.replace(/\r\n?|[\n\u2028\u2029]/g, "\n").replace(/\uFEFF/g, ''),
- filename : filename,
- pos : 0,
- tokpos : 0,
- line : 1,
- tokline : 0,
- col : 0,
- tokcol : 0,
- newline_before : false,
- regex_allowed : false,
- comments_before : []
- };
-
- function peek() { return S.text.charAt(S.pos); };
-
- function next(signal_eof, in_string) {
- var ch = S.text.charAt(S.pos++);
- if (signal_eof && !ch)
- throw EX_EOF;
- if (ch == "\n") {
- S.newline_before = S.newline_before || !in_string;
- ++S.line;
- S.col = 0;
- } else {
- ++S.col;
- }
- return ch;
- };
-
- function find(what, signal_eof) {
- var pos = S.text.indexOf(what, S.pos);
- if (signal_eof && pos == -1) throw EX_EOF;
- return pos;
- };
-
- function start_token() {
- S.tokline = S.line;
- S.tokcol = S.col;
- S.tokpos = S.pos;
- };
-
- function token(type, value, is_comment) {
- S.regex_allowed = ((type == "operator" && !UNARY_POSTFIX[value]) ||
- (type == "keyword" && KEYWORDS_BEFORE_EXPRESSION(value)) ||
- (type == "punc" && PUNC_BEFORE_EXPRESSION(value)));
- var ret = {
- type : type,
- value : value,
- line : S.tokline,
- col : S.tokcol,
- pos : S.tokpos,
- endpos : S.pos,
- nlb : S.newline_before,
- file : filename
- };
- if (!is_comment) {
- ret.comments_before = S.comments_before;
- S.comments_before = [];
- // make note of any newlines in the comments that came before
- for (var i = 0, len = ret.comments_before.length; i < len; i++) {
- ret.nlb = ret.nlb || ret.comments_before[i].nlb;
- }
- }
- S.newline_before = false;
- return new AST_Token(ret);
- };
-
- function skip_whitespace() {
- while (WHITESPACE_CHARS(peek()))
- next();
- };
-
- function read_while(pred) {
- var ret = "", ch, i = 0;
- while ((ch = peek()) && pred(ch, i++))
- ret += next();
- return ret;
- };
-
- function parse_error(err) {
- js_error(err, filename, S.tokline, S.tokcol, S.tokpos);
- };
-
- function read_num(prefix) {
- var has_e = false, after_e = false, has_x = false, has_dot = prefix == ".";
- var num = read_while(function(ch, i){
- var code = ch.charCodeAt(0);
- switch (code) {
- case 120: case 88: // xX
- return has_x ? false : (has_x = true);
- case 101: case 69: // eE
- return has_x ? true : has_e ? false : (has_e = after_e = true);
- case 45: // -
- return after_e || (i == 0 && !prefix);
- case 43: // +
- return after_e;
- case (after_e = false, 46): // .
- return (!has_dot && !has_x && !has_e) ? (has_dot = true) : false;
- }
- return is_alphanumeric_char(code);
- });
- if (prefix) num = prefix + num;
- var valid = parse_js_number(num);
- if (!isNaN(valid)) {
- return token("num", valid);
- } else {
- parse_error("Invalid syntax: " + num);
- }
- };
-
- function read_escaped_char(in_string) {
- var ch = next(true, in_string);
- switch (ch.charCodeAt(0)) {
- case 110 : return "\n";
- case 114 : return "\r";
- case 116 : return "\t";
- case 98 : return "\b";
- case 118 : return "\u000b"; // \v
- case 102 : return "\f";
- case 48 : return "\0";
- case 120 : return String.fromCharCode(hex_bytes(2)); // \x
- case 117 : return String.fromCharCode(hex_bytes(4)); // \u
- case 10 : return ""; // newline
- default : return ch;
- }
- };
-
- function hex_bytes(n) {
- var num = 0;
- for (; n > 0; --n) {
- var digit = parseInt(next(true), 16);
- if (isNaN(digit))
- parse_error("Invalid hex-character pattern in string");
- num = (num << 4) | digit;
- }
- return num;
- };
-
- var read_string = with_eof_error("Unterminated string constant", function(){
- var quote = next(), ret = "";
- for (;;) {
- var ch = next(true);
- if (ch == "\\") {
- // read OctalEscapeSequence (XXX: deprecated if "strict mode")
- // https://github.com/mishoo/UglifyJS/issues/178
- var octal_len = 0, first = null;
- ch = read_while(function(ch){
- if (ch >= "0" && ch <= "7") {
- if (!first) {
- first = ch;
- return ++octal_len;
- }
- else if (first <= "3" && octal_len <= 2) return ++octal_len;
- else if (first >= "4" && octal_len <= 1) return ++octal_len;
- }
- return false;
- });
- if (octal_len > 0) ch = String.fromCharCode(parseInt(ch, 8));
- else ch = read_escaped_char(true);
- }
- else if (ch == quote) break;
- ret += ch;
- }
- return token("string", ret);
- });
-
- function read_line_comment() {
- next();
- var i = find("\n"), ret;
- if (i == -1) {
- ret = S.text.substr(S.pos);
- S.pos = S.text.length;
- } else {
- ret = S.text.substring(S.pos, i);
- S.pos = i;
- }
- return token("comment1", ret, true);
- };
-
- var read_multiline_comment = with_eof_error("Unterminated multiline comment", function(){
- next();
- var i = find("*/", true);
- var text = S.text.substring(S.pos, i);
- var a = text.split("\n"), n = a.length;
- // update stream position
- S.pos = i + 2;
- S.line += n - 1;
- if (n > 1) S.col = a[n - 1].length;
- else S.col += a[n - 1].length;
- S.col += 2;
- S.newline_before = S.newline_before || text.indexOf("\n") >= 0;
- return token("comment2", text, true);
- });
-
- function read_name() {
- var backslash = false, name = "", ch, escaped = false, hex;
- while ((ch = peek()) != null) {
- if (!backslash) {
- if (ch == "\\") escaped = backslash = true, next();
- else if (is_identifier_char(ch)) name += next();
- else break;
- }
- else {
- if (ch != "u") parse_error("Expecting UnicodeEscapeSequence -- uXXXX");
- ch = read_escaped_char();
- if (!is_identifier_char(ch)) parse_error("Unicode char: " + ch.charCodeAt(0) + " is not valid in identifier");
- name += ch;
- backslash = false;
- }
- }
- if (KEYWORDS(name) && escaped) {
- hex = name.charCodeAt(0).toString(16).toUpperCase();
- name = "\\u" + "0000".substr(hex.length) + hex + name.slice(1);
- }
- return name;
- };
-
- var read_regexp = with_eof_error("Unterminated regular expression", function(regexp){
- var prev_backslash = false, ch, in_class = false;
- while ((ch = next(true))) if (prev_backslash) {
- regexp += "\\" + ch;
- prev_backslash = false;
- } else if (ch == "[") {
- in_class = true;
- regexp += ch;
- } else if (ch == "]" && in_class) {
- in_class = false;
- regexp += ch;
- } else if (ch == "/" && !in_class) {
- break;
- } else if (ch == "\\") {
- prev_backslash = true;
- } else {
- regexp += ch;
- }
- var mods = read_name();
- return token("regexp", new RegExp(regexp, mods));
- });
-
- function read_operator(prefix) {
- function grow(op) {
- if (!peek()) return op;
- var bigger = op + peek();
- if (OPERATORS(bigger)) {
- next();
- return grow(bigger);
- } else {
- return op;
- }
- };
- return token("operator", grow(prefix || next()));
- };
-
- function handle_slash() {
- next();
- var regex_allowed = S.regex_allowed;
- switch (peek()) {
- case "/":
- S.comments_before.push(read_line_comment());
- S.regex_allowed = regex_allowed;
- return next_token();
- case "*":
- S.comments_before.push(read_multiline_comment());
- S.regex_allowed = regex_allowed;
- return next_token();
- }
- return S.regex_allowed ? read_regexp("") : read_operator("/");
- };
-
- function handle_dot() {
- next();
- return is_digit(peek().charCodeAt(0))
- ? read_num(".")
- : token("punc", ".");
- };
-
- function read_word() {
- var word = read_name();
- return KEYWORDS_ATOM(word) ? token("atom", word)
- : !KEYWORDS(word) ? token("name", word)
- : OPERATORS(word) ? token("operator", word)
- : token("keyword", word);
- };
-
- function with_eof_error(eof_error, cont) {
- return function(x) {
- try {
- return cont(x);
- } catch(ex) {
- if (ex === EX_EOF) parse_error(eof_error);
- else throw ex;
- }
- };
- };
-
- function next_token(force_regexp) {
- if (force_regexp != null)
- return read_regexp(force_regexp);
- skip_whitespace();
- start_token();
- var ch = peek();
- if (!ch) return token("eof");
- var code = ch.charCodeAt(0);
- switch (code) {
- case 34: case 39: return read_string();
- case 46: return handle_dot();
- case 47: return handle_slash();
- }
- if (is_digit(code)) return read_num();
- if (PUNC_CHARS(ch)) return token("punc", next());
- if (OPERATOR_CHARS(ch)) return read_operator();
- if (code == 92 || is_identifier_start(code)) return read_word();
- parse_error("Unexpected character '" + ch + "'");
- };
-
- next_token.context = function(nc) {
- if (nc) S = nc;
- return S;
- };
-
- return next_token;
-
-};
-
-/* -----[ Parser (constants) ]----- */
-
-var UNARY_PREFIX = makePredicate([
- "typeof",
- "void",
- "delete",
- "--",
- "++",
- "!",
- "~",
- "-",
- "+"
-]);
-
-var UNARY_POSTFIX = makePredicate([ "--", "++" ]);
-
-var ASSIGNMENT = makePredicate([ "=", "+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&=" ]);
-
-var PRECEDENCE = (function(a, ret){
- for (var i = 0, n = 1; i < a.length; ++i, ++n) {
- var b = a[i];
- for (var j = 0; j < b.length; ++j) {
- ret[b[j]] = n;
- }
- }
- return ret;
-})(
- [
- ["||"],
- ["&&"],
- ["|"],
- ["^"],
- ["&"],
- ["==", "===", "!=", "!=="],
- ["<", ">", "<=", ">=", "in", "instanceof"],
- [">>", "<<", ">>>"],
- ["+", "-"],
- ["*", "/", "%"]
- ],
- {}
-);
-
-var STATEMENTS_WITH_LABELS = array_to_hash([ "for", "do", "while", "switch" ]);
-
-var ATOMIC_START_TOKEN = array_to_hash([ "atom", "num", "string", "regexp", "name" ]);
-
-/* -----[ Parser ]----- */
-
-function parse($TEXT, options) {
-
- options = defaults(options, {
- strict : false,
- filename : null,
- toplevel : null
- });
-
- var S = {
- input : typeof $TEXT == "string" ? tokenizer($TEXT, options.filename) : $TEXT,
- token : null,
- prev : null,
- peeked : null,
- in_function : 0,
- in_directives : true,
- in_loop : 0,
- labels : []
- };
-
- S.token = next();
-
- function is(type, value) {
- return is_token(S.token, type, value);
- };
-
- function peek() { return S.peeked || (S.peeked = S.input()); };
-
- function next() {
- S.prev = S.token;
- if (S.peeked) {
- S.token = S.peeked;
- S.peeked = null;
- } else {
- S.token = S.input();
- }
- S.in_directives = S.in_directives && (
- S.token.type == "string" || is("punc", ";")
- );
- return S.token;
- };
-
- function prev() {
- return S.prev;
- };
-
- function croak(msg, line, col, pos) {
- var ctx = S.input.context();
- js_error(msg,
- ctx.filename,
- line != null ? line : ctx.tokline,
- col != null ? col : ctx.tokcol,
- pos != null ? pos : ctx.tokpos);
- };
-
- function token_error(token, msg) {
- croak(msg, token.line, token.col);
- };
-
- function unexpected(token) {
- if (token == null)
- token = S.token;
- token_error(token, "Unexpected token: " + token.type + " (" + token.value + ")");
- };
-
- function expect_token(type, val) {
- if (is(type, val)) {
- return next();
- }
- token_error(S.token, "Unexpected token " + S.token.type + " «" + S.token.value + "»" + ", expected " + type + " «" + val + "»");
- };
-
- function expect(punc) { return expect_token("punc", punc); };
-
- function can_insert_semicolon() {
- return !options.strict && (
- S.token.nlb || is("eof") || is("punc", "}")
- );
- };
-
- function semicolon() {
- if (is("punc", ";")) next();
- else if (!can_insert_semicolon()) unexpected();
- };
-
- function parenthesised() {
- expect("(");
- var exp = expression(true);
- expect(")");
- return exp;
- };
-
- function embed_tokens(parser) {
- return function() {
- var start = S.token;
- var expr = parser();
- var end = prev();
- expr.start = start;
- expr.end = end;
- return expr;
- };
- };
-
- var statement = embed_tokens(function() {
- var tmp;
- if (is("operator", "/") || is("operator", "/=")) {
- S.peeked = null;
- S.token = S.input(S.token.value.substr(1)); // force regexp
- }
- switch (S.token.type) {
- case "string":
- var dir = S.in_directives, stat = simple_statement();
- // XXXv2: decide how to fix directives
- if (dir && stat.body instanceof AST_String && !is("punc", ","))
- return new AST_Directive({ value: stat.body.value });
- return stat;
- case "num":
- case "regexp":
- case "operator":
- case "atom":
- return simple_statement();
-
- case "name":
- return is_token(peek(), "punc", ":")
- ? labeled_statement()
- : simple_statement();
-
- case "punc":
- switch (S.token.value) {
- case "{":
- return new AST_BlockStatement({
- start : S.token,
- body : block_(),
- end : prev()
- });
- case "[":
- case "(":
- return simple_statement();
- case ";":
- next();
- return new AST_EmptyStatement();
- default:
- unexpected();
- }
-
- case "keyword":
- switch (tmp = S.token.value, next(), tmp) {
- case "break":
- return break_cont(AST_Break);
-
- case "continue":
- return break_cont(AST_Continue);
-
- case "debugger":
- semicolon();
- return new AST_Debugger();
-
- case "do":
- return new AST_Do({
- body : in_loop(statement),
- condition : (expect_token("keyword", "while"), tmp = parenthesised(), semicolon(), tmp)
- });
-
- case "while":
- return new AST_While({
- condition : parenthesised(),
- body : in_loop(statement)
- });
-
- case "for":
- return for_();
-
- case "function":
- return function_(true);
-
- case "if":
- return if_();
-
- case "return":
- if (S.in_function == 0)
- croak("'return' outside of function");
- return new AST_Return({
- value: ( is("punc", ";")
- ? (next(), null)
- : can_insert_semicolon()
- ? null
- : (tmp = expression(true), semicolon(), tmp) )
- });
-
- case "switch":
- return new AST_Switch({
- expression : parenthesised(),
- body : in_loop(switch_body_)
- });
-
- case "throw":
- if (S.token.nlb)
- croak("Illegal newline after 'throw'");
- return new AST_Throw({
- value: (tmp = expression(true), semicolon(), tmp)
- });
-
- case "try":
- return try_();
-
- case "var":
- return tmp = var_(), semicolon(), tmp;
-
- case "const":
- return tmp = const_(), semicolon(), tmp;
-
- case "with":
- return new AST_With({
- expression : parenthesised(),
- body : statement()
- });
-
- default:
- unexpected();
- }
- }
- });
-
- function labeled_statement() {
- var label = as_symbol(AST_Label);
- if (find_if(function(l){ return l.name == label.name }, S.labels)) {
- // ECMA-262, 12.12: An ECMAScript program is considered
- // syntactically incorrect if it contains a
- // LabelledStatement that is enclosed by a
- // LabelledStatement with the same Identifier as label.
- croak("Label " + label.name + " defined twice");
- }
- expect(":");
- S.labels.push(label);
- var stat = statement();
- S.labels.pop();
- return new AST_LabeledStatement({ body: stat, label: label });
- };
-
- function simple_statement(tmp) {
- return new AST_SimpleStatement({ body: (tmp = expression(true), semicolon(), tmp) });
- };
-
- function break_cont(type) {
- var label = null;
- if (!can_insert_semicolon()) {
- label = as_symbol(AST_LabelRef, true);
- }
- if (label != null) {
- if (!find_if(function(l){ return l.name == label.name }, S.labels))
- croak("Undefined label " + label.name);
- }
- else if (S.in_loop == 0)
- croak(type.TYPE + " not inside a loop or switch");
- semicolon();
- return new type({ label: label });
- };
-
- function for_() {
- expect("(");
- var init = null;
- if (!is("punc", ";")) {
- init = is("keyword", "var")
- ? (next(), var_(true))
- : expression(true, true);
- if (is("operator", "in")) {
- if (init instanceof AST_Var && init.definitions.length > 1)
- croak("Only one variable declaration allowed in for..in loop");
- next();
- return for_in(init);
- }
- }
- return regular_for(init);
- };
-
- function regular_for(init) {
- expect(";");
- var test = is("punc", ";") ? null : expression(true);
- expect(";");
- var step = is("punc", ")") ? null : expression(true);
- expect(")");
- return new AST_For({
- init : init,
- condition : test,
- step : step,
- body : in_loop(statement)
- });
- };
-
- function for_in(init) {
- var lhs = init instanceof AST_Var ? init.definitions[0].name : null;
- var obj = expression(true);
- expect(")");
- return new AST_ForIn({
- init : init,
- name : lhs,
- object : obj,
- body : in_loop(statement)
- });
- };
-
- var function_ = function(in_statement, ctor) {
- var is_accessor = ctor === AST_Accessor;
- var name = (is("name") ? as_symbol(in_statement
- ? AST_SymbolDefun
- : is_accessor
- ? AST_SymbolAccessor
- : AST_SymbolLambda)
- : is_accessor && (is("string") || is("num")) ? as_atom_node()
- : null);
- if (in_statement && !name)
- unexpected();
- expect("(");
- if (!ctor) ctor = in_statement ? AST_Defun : AST_Function;
- return new ctor({
- name: name,
- argnames: (function(first, a){
- while (!is("punc", ")")) {
- if (first) first = false; else expect(",");
- a.push(as_symbol(AST_SymbolFunarg));
- }
- next();
- return a;
- })(true, []),
- body: (function(loop, labels){
- ++S.in_function;
- S.in_directives = true;
- S.in_loop = 0;
- S.labels = [];
- var a = block_();
- --S.in_function;
- S.in_loop = loop;
- S.labels = labels;
- return a;
- })(S.in_loop, S.labels)
- });
- };
-
- function if_() {
- var cond = parenthesised(), body = statement(), belse = null;
- if (is("keyword", "else")) {
- next();
- belse = statement();
- }
- return new AST_If({
- condition : cond,
- body : body,
- alternative : belse
- });
- };
-
- function block_() {
- expect("{");
- var a = [];
- while (!is("punc", "}")) {
- if (is("eof")) unexpected();
- a.push(statement());
- }
- next();
- return a;
- };
-
- function switch_body_() {
- expect("{");
- var a = [], cur = null, branch = null, tmp;
- while (!is("punc", "}")) {
- if (is("eof")) unexpected();
- if (is("keyword", "case")) {
- if (branch) branch.end = prev();
- cur = [];
- branch = new AST_Case({
- start : (tmp = S.token, next(), tmp),
- expression : expression(true),
- body : cur
- });
- a.push(branch);
- expect(":");
- }
- else if (is("keyword", "default")) {
- if (branch) branch.end = prev();
- cur = [];
- branch = new AST_Default({
- start : (tmp = S.token, next(), expect(":"), tmp),
- body : cur
- });
- a.push(branch);
- }
- else {
- if (!cur) unexpected();
- cur.push(statement());
- }
- }
- if (branch) branch.end = prev();
- next();
- return a;
- };
-
- function try_() {
- var body = block_(), bcatch = null, bfinally = null;
- if (is("keyword", "catch")) {
- var start = S.token;
- next();
- expect("(");
- var name = as_symbol(AST_SymbolCatch);
- expect(")");
- bcatch = new AST_Catch({
- start : start,
- argname : name,
- body : block_(),
- end : prev()
- });
- }
- if (is("keyword", "finally")) {
- var start = S.token;
- next();
- bfinally = new AST_Finally({
- start : start,
- body : block_(),
- end : prev()
- });
- }
- if (!bcatch && !bfinally)
- croak("Missing catch/finally blocks");
- return new AST_Try({
- body : body,
- bcatch : bcatch,
- bfinally : bfinally
- });
- };
-
- function vardefs(no_in, in_const) {
- var a = [];
- for (;;) {
- a.push(new AST_VarDef({
- start : S.token,
- name : as_symbol(in_const ? AST_SymbolConst : AST_SymbolVar),
- value : is("operator", "=") ? (next(), expression(false, no_in)) : null,
- end : prev()
- }));
- if (!is("punc", ","))
- break;
- next();
- }
- return a;
- };
-
- var var_ = function(no_in) {
- return new AST_Var({
- start : prev(),
- definitions : vardefs(no_in, false),
- end : prev()
- });
- };
-
- var const_ = function() {
- return new AST_Const({
- start : prev(),
- definitions : vardefs(false, true),
- end : prev()
- });
- };
-
- var new_ = function() {
- var start = S.token;
- expect_token("operator", "new");
- var newexp = expr_atom(false), args;
- if (is("punc", "(")) {
- next();
- args = expr_list(")");
- } else {
- args = [];
- }
- return subscripts(new AST_New({
- start : start,
- expression : newexp,
- args : args,
- end : prev()
- }), true);
- };
-
- function as_atom_node() {
- var tok = S.token, ret;
- switch (tok.type) {
- case "name":
- return as_symbol(AST_SymbolRef);
- case "num":
- ret = new AST_Number({ start: tok, end: tok, value: tok.value });
- break;
- case "string":
- ret = new AST_String({ start: tok, end: tok, value: tok.value });
- break;
- case "regexp":
- ret = new AST_RegExp({ start: tok, end: tok, value: tok.value });
- break;
- case "atom":
- switch (tok.value) {
- case "false":
- ret = new AST_False({ start: tok, end: tok });
- break;
- case "true":
- ret = new AST_True({ start: tok, end: tok });
- break;
- case "null":
- ret = new AST_Null({ start: tok, end: tok });
- break;
- }
- break;
- }
- next();
- return ret;
- };
-
- var expr_atom = function(allow_calls) {
- if (is("operator", "new")) {
- return new_();
- }
- var start = S.token;
- if (is("punc")) {
- switch (start.value) {
- case "(":
- next();
- var ex = expression(true);
- ex.start = start;
- ex.end = S.token;
- expect(")");
- return subscripts(ex, allow_calls);
- case "[":
- return subscripts(array_(), allow_calls);
- case "{":
- return subscripts(object_(), allow_calls);
- }
- unexpected();
- }
- if (is("keyword", "function")) {
- next();
- var func = function_(false);
- func.start = start;
- func.end = prev();
- return subscripts(func, allow_calls);
- }
- if (ATOMIC_START_TOKEN[S.token.type]) {
- return subscripts(as_atom_node(), allow_calls);
- }
- unexpected();
- };
-
- function expr_list(closing, allow_trailing_comma, allow_empty) {
- var first = true, a = [];
- while (!is("punc", closing)) {
- if (first) first = false; else expect(",");
- if (allow_trailing_comma && is("punc", closing)) break;
- if (is("punc", ",") && allow_empty) {
- a.push(new AST_Hole({ start: S.token, end: S.token }));
- } else {
- a.push(expression(false));
- }
- }
- next();
- return a;
- };
-
- var array_ = embed_tokens(function() {
- expect("[");
- return new AST_Array({
- elements: expr_list("]", !options.strict, true)
- });
- });
-
- var object_ = embed_tokens(function() {
- expect("{");
- var first = true, a = [];
- while (!is("punc", "}")) {
- if (first) first = false; else expect(",");
- if (!options.strict && is("punc", "}"))
- // allow trailing comma
- break;
- var start = S.token;
- var type = start.type;
- var name = as_property_name();
- if (type == "name" && !is("punc", ":")) {
- if (name == "get") {
- a.push(new AST_ObjectGetter({
- start : start,
- key : name,
- value : function_(false, AST_Accessor),
- end : prev()
- }));
- continue;
- }
- if (name == "set") {
- a.push(new AST_ObjectSetter({
- start : start,
- key : name,
- value : function_(false, AST_Accessor),
- end : prev()
- }));
- continue;
- }
- }
- expect(":");
- a.push(new AST_ObjectKeyVal({
- start : start,
- key : name,
- value : expression(false),
- end : prev()
- }));
- }
- next();
- return new AST_Object({ properties: a });
- });
-
- function as_property_name() {
- var tmp = S.token;
- next();
- switch (tmp.type) {
- case "num":
- case "string":
- case "name":
- case "operator":
- case "keyword":
- case "atom":
- return tmp.value;
- default:
- unexpected();
- }
- };
-
- function as_name() {
- var tmp = S.token;
- next();
- switch (tmp.type) {
- case "name":
- case "operator":
- case "keyword":
- case "atom":
- return tmp.value;
- default:
- unexpected();
- }
- };
-
- function as_symbol(type, noerror) {
- if (!is("name")) {
- if (!noerror) croak("Name expected");
- return null;
- }
- var name = S.token.value;
- var sym = new (name == "this" ? AST_This : type)({
- name : String(S.token.value),
- start : S.token,
- end : S.token
- });
- next();
- return sym;
- };
-
- var subscripts = function(expr, allow_calls) {
- var start = expr.start;
- if (is("punc", ".")) {
- next();
- return subscripts(new AST_Dot({
- start : start,
- expression : expr,
- property : as_name(),
- end : prev()
- }), allow_calls);
- }
- if (is("punc", "[")) {
- next();
- var prop = expression(true);
- expect("]");
- return subscripts(new AST_Sub({
- start : start,
- expression : expr,
- property : prop,
- end : prev()
- }), allow_calls);
- }
- if (allow_calls && is("punc", "(")) {
- next();
- return subscripts(new AST_Call({
- start : start,
- expression : expr,
- args : expr_list(")"),
- end : prev()
- }), true);
- }
- return expr;
- };
-
- var maybe_unary = function(allow_calls) {
- var start = S.token;
- if (is("operator") && UNARY_PREFIX(start.value)) {
- next();
- var ex = make_unary(AST_UnaryPrefix, start.value, maybe_unary(allow_calls));
- ex.start = start;
- ex.end = prev();
- return ex;
- }
- var val = expr_atom(allow_calls);
- while (is("operator") && UNARY_POSTFIX(S.token.value) && !S.token.nlb) {
- val = make_unary(AST_UnaryPostfix, S.token.value, val);
- val.start = start;
- val.end = S.token;
- next();
- }
- return val;
- };
-
- function make_unary(ctor, op, expr) {
- if ((op == "++" || op == "--") && !is_assignable(expr))
- croak("Invalid use of " + op + " operator");
- return new ctor({ operator: op, expression: expr });
- };
-
- var expr_op = function(left, min_prec, no_in) {
- var op = is("operator") ? S.token.value : null;
- if (op == "in" && no_in) op = null;
- var prec = op != null ? PRECEDENCE[op] : null;
- if (prec != null && prec > min_prec) {
- next();
- var right = expr_op(maybe_unary(true), prec, no_in);
- return expr_op(new AST_Binary({
- start : left.start,
- left : left,
- operator : op,
- right : right,
- end : right.end
- }), min_prec, no_in);
- }
- return left;
- };
-
- function expr_ops(no_in) {
- return expr_op(maybe_unary(true), 0, no_in);
- };
-
- var maybe_conditional = function(no_in) {
- var start = S.token;
- var expr = expr_ops(no_in);
- if (is("operator", "?")) {
- next();
- var yes = expression(false);
- expect(":");
- return new AST_Conditional({
- start : start,
- condition : expr,
- consequent : yes,
- alternative : expression(false, no_in),
- end : peek()
- });
- }
- return expr;
- };
-
- function is_assignable(expr) {
- if (!options.strict) return true;
- switch (expr[0]+"") {
- case "dot":
- case "sub":
- case "new":
- case "call":
- return true;
- case "name":
- return expr[1] != "this";
- }
- };
-
- var maybe_assign = function(no_in) {
- var start = S.token;
- var left = maybe_conditional(no_in), val = S.token.value;
- if (is("operator") && ASSIGNMENT(val)) {
- if (is_assignable(left)) {
- next();
- return new AST_Assign({
- start : start,
- left : left,
- operator : val,
- right : maybe_assign(no_in),
- end : prev()
- });
- }
- croak("Invalid assignment");
- }
- return left;
- };
-
- var expression = function(commas, no_in) {
- var start = S.token;
- var expr = maybe_assign(no_in);
- if (commas && is("punc", ",")) {
- next();
- return new AST_Seq({
- start : start,
- car : expr,
- cdr : expression(true, no_in),
- end : peek()
- });
- }
- return expr;
- };
-
- function in_loop(cont) {
- ++S.in_loop;
- var ret = cont();
- --S.in_loop;
- return ret;
- };
-
- return (function(){
- var start = S.token;
- var body = [];
- while (!is("eof"))
- body.push(statement());
- var end = prev();
- var toplevel = options.toplevel;
- if (toplevel) {
- toplevel.body = toplevel.body.concat(body);
- toplevel.end = end;
- } else {
- toplevel = new AST_Toplevel({ start: start, body: body, end: end });
- }
- return toplevel;
- })();
-
-};
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/scope.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/scope.js
deleted file mode 100644
index f23f6eb9..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/scope.js
+++ /dev/null
@@ -1,580 +0,0 @@
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
-
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-"use strict";
-
-function SymbolDef(scope, index, orig) {
- this.name = orig.name;
- this.orig = [ orig ];
- this.scope = scope;
- this.references = [];
- this.global = false;
- this.mangled_name = null;
- this.undeclared = false;
- this.constant = false;
- this.index = index;
-};
-
-SymbolDef.prototype = {
- unmangleable: function(options) {
- return this.global
- || this.undeclared
- || (!(options && options.eval) && (this.scope.uses_eval || this.scope.uses_with));
- },
- mangle: function(options) {
- if (!this.mangled_name && !this.unmangleable(options))
- this.mangled_name = this.scope.next_mangled(options);
- }
-};
-
-AST_Toplevel.DEFMETHOD("figure_out_scope", function(){
- // This does what ast_add_scope did in UglifyJS v1.
- //
- // Part of it could be done at parse time, but it would complicate
- // the parser (and it's already kinda complex). It's also worth
- // having it separated because we might need to call it multiple
- // times on the same tree.
-
- // pass 1: setup scope chaining and handle definitions
- var self = this;
- var scope = self.parent_scope = null;
- var labels = new Dictionary();
- var nesting = 0;
- var tw = new TreeWalker(function(node, descend){
- if (node instanceof AST_Scope) {
- node.init_scope_vars(nesting);
- var save_scope = node.parent_scope = scope;
- var save_labels = labels;
- ++nesting;
- scope = node;
- labels = new Dictionary();
- descend();
- labels = save_labels;
- scope = save_scope;
- --nesting;
- return true; // don't descend again in TreeWalker
- }
- if (node instanceof AST_Directive) {
- node.scope = scope;
- push_uniq(scope.directives, node.value);
- return true;
- }
- if (node instanceof AST_With) {
- for (var s = scope; s; s = s.parent_scope)
- s.uses_with = true;
- return;
- }
- if (node instanceof AST_LabeledStatement) {
- var l = node.label;
- if (labels.has(l.name))
- throw new Error(string_template("Label {name} defined twice", l));
- labels.set(l.name, l);
- descend();
- labels.del(l.name);
- return true; // no descend again
- }
- if (node instanceof AST_Symbol) {
- node.scope = scope;
- }
- if (node instanceof AST_Label) {
- node.thedef = node;
- node.init_scope_vars();
- }
- if (node instanceof AST_SymbolLambda) {
- //scope.def_function(node);
- //
- // https://github.com/mishoo/UglifyJS2/issues/24 — MSIE
- // leaks function expression names into the containing
- // scope. Don't like this fix but seems we can't do any
- // better. IE: please die. Please!
- (node.scope = scope.parent_scope).def_function(node);
- }
- else if (node instanceof AST_SymbolDefun) {
- // Careful here, the scope where this should be defined is
- // the parent scope. The reason is that we enter a new
- // scope when we encounter the AST_Defun node (which is
- // instanceof AST_Scope) but we get to the symbol a bit
- // later.
- (node.scope = scope.parent_scope).def_function(node);
- }
- else if (node instanceof AST_SymbolVar
- || node instanceof AST_SymbolConst) {
- var def = scope.def_variable(node);
- def.constant = node instanceof AST_SymbolConst;
- def.init = tw.parent().value;
- }
- else if (node instanceof AST_SymbolCatch) {
- // XXX: this is wrong according to ECMA-262 (12.4). the
- // `catch` argument name should be visible only inside the
- // catch block. For a quick fix AST_Catch should inherit
- // from AST_Scope. Keeping it this way because of IE,
- // which doesn't obey the standard. (it introduces the
- // identifier in the enclosing scope)
- scope.def_variable(node);
- }
- if (node instanceof AST_LabelRef) {
- var sym = labels.get(node.name);
- if (!sym) throw new Error(string_template("Undefined label {name} [{line},{col}]", {
- name: node.name,
- line: node.start.line,
- col: node.start.col
- }));
- node.thedef = sym;
- }
- });
- self.walk(tw);
-
- // pass 2: find back references and eval
- var func = null;
- var globals = self.globals = new Dictionary();
- var tw = new TreeWalker(function(node, descend){
- if (node instanceof AST_Lambda) {
- var prev_func = func;
- func = node;
- descend();
- func = prev_func;
- return true;
- }
- if (node instanceof AST_LabelRef) {
- node.reference();
- return true;
- }
- if (node instanceof AST_SymbolRef) {
- var name = node.name;
- var sym = node.scope.find_variable(name);
- if (!sym) {
- var g;
- if (globals.has(name)) {
- g = globals.get(name);
- } else {
- g = new SymbolDef(self, globals.size(), node);
- g.undeclared = true;
- globals.set(name, g);
- }
- node.thedef = g;
- if (name == "eval" && tw.parent() instanceof AST_Call) {
- for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope)
- s.uses_eval = true;
- }
- if (name == "arguments") {
- func.uses_arguments = true;
- }
- } else {
- node.thedef = sym;
- }
- node.reference();
- return true;
- }
- });
- self.walk(tw);
-});
-
-AST_Scope.DEFMETHOD("init_scope_vars", function(nesting){
- this.directives = []; // contains the directives defined in this scope, i.e. "use strict"
- this.variables = new Dictionary(); // map name to AST_SymbolVar (variables defined in this scope; includes functions)
- this.functions = new Dictionary(); // map name to AST_SymbolDefun (functions defined in this scope)
- this.uses_with = false; // will be set to true if this or some nested scope uses the `with` statement
- this.uses_eval = false; // will be set to true if this or nested scope uses the global `eval`
- this.parent_scope = null; // the parent scope
- this.enclosed = []; // a list of variables from this or outer scope(s) that are referenced from this or inner scopes
- this.cname = -1; // the current index for mangling functions/variables
- this.nesting = nesting; // the nesting level of this scope (0 means toplevel)
-});
-
-AST_Scope.DEFMETHOD("strict", function(){
- return this.has_directive("use strict");
-});
-
-AST_Lambda.DEFMETHOD("init_scope_vars", function(){
- AST_Scope.prototype.init_scope_vars.apply(this, arguments);
- this.uses_arguments = false;
-});
-
-AST_SymbolRef.DEFMETHOD("reference", function() {
- var def = this.definition();
- def.references.push(this);
- var s = this.scope;
- while (s) {
- push_uniq(s.enclosed, def);
- if (s === def.scope) break;
- s = s.parent_scope;
- }
- this.frame = this.scope.nesting - def.scope.nesting;
-});
-
-AST_Label.DEFMETHOD("init_scope_vars", function(){
- this.references = [];
-});
-
-AST_LabelRef.DEFMETHOD("reference", function(){
- this.thedef.references.push(this);
-});
-
-AST_Scope.DEFMETHOD("find_variable", function(name){
- if (name instanceof AST_Symbol) name = name.name;
- return this.variables.get(name)
- || (this.parent_scope && this.parent_scope.find_variable(name));
-});
-
-AST_Scope.DEFMETHOD("has_directive", function(value){
- return this.parent_scope && this.parent_scope.has_directive(value)
- || (this.directives.indexOf(value) >= 0 ? this : null);
-});
-
-AST_Scope.DEFMETHOD("def_function", function(symbol){
- this.functions.set(symbol.name, this.def_variable(symbol));
-});
-
-AST_Scope.DEFMETHOD("def_variable", function(symbol){
- var def;
- if (!this.variables.has(symbol.name)) {
- def = new SymbolDef(this, this.variables.size(), symbol);
- this.variables.set(symbol.name, def);
- def.global = !this.parent_scope;
- } else {
- def = this.variables.get(symbol.name);
- def.orig.push(symbol);
- }
- return symbol.thedef = def;
-});
-
-AST_Scope.DEFMETHOD("next_mangled", function(options){
- var ext = this.enclosed, n = ext.length;
- out: while (true) {
- var m = base54(++this.cname);
- if (!is_identifier(m)) continue; // skip over "do"
- // we must ensure that the mangled name does not shadow a name
- // from some parent scope that is referenced in this or in
- // inner scopes.
- for (var i = n; --i >= 0;) {
- var sym = ext[i];
- var name = sym.mangled_name || (sym.unmangleable(options) && sym.name);
- if (m == name) continue out;
- }
- return m;
- }
-});
-
-AST_Scope.DEFMETHOD("references", function(sym){
- if (sym instanceof AST_Symbol) sym = sym.definition();
- return this.enclosed.indexOf(sym) < 0 ? null : sym;
-});
-
-AST_Symbol.DEFMETHOD("unmangleable", function(options){
- return this.definition().unmangleable(options);
-});
-
-// property accessors are not mangleable
-AST_SymbolAccessor.DEFMETHOD("unmangleable", function(){
- return true;
-});
-
-// labels are always mangleable
-AST_Label.DEFMETHOD("unmangleable", function(){
- return false;
-});
-
-AST_Symbol.DEFMETHOD("unreferenced", function(){
- return this.definition().references.length == 0
- && !(this.scope.uses_eval || this.scope.uses_with);
-});
-
-AST_Symbol.DEFMETHOD("undeclared", function(){
- return this.definition().undeclared;
-});
-
-AST_LabelRef.DEFMETHOD("undeclared", function(){
- return false;
-});
-
-AST_Label.DEFMETHOD("undeclared", function(){
- return false;
-});
-
-AST_Symbol.DEFMETHOD("definition", function(){
- return this.thedef;
-});
-
-AST_Symbol.DEFMETHOD("global", function(){
- return this.definition().global;
-});
-
-AST_Toplevel.DEFMETHOD("_default_mangler_options", function(options){
- return defaults(options, {
- except : [],
- eval : false,
- sort : false
- });
-});
-
-AST_Toplevel.DEFMETHOD("mangle_names", function(options){
- options = this._default_mangler_options(options);
- // We only need to mangle declaration nodes. Special logic wired
- // into the code generator will display the mangled name if it's
- // present (and for AST_SymbolRef-s it'll use the mangled name of
- // the AST_SymbolDeclaration that it points to).
- var lname = -1;
- var to_mangle = [];
- var tw = new TreeWalker(function(node, descend){
- if (node instanceof AST_LabeledStatement) {
- // lname is incremented when we get to the AST_Label
- var save_nesting = lname;
- descend();
- lname = save_nesting;
- return true; // don't descend again in TreeWalker
- }
- if (node instanceof AST_Scope) {
- var p = tw.parent(), a = [];
- node.variables.each(function(symbol){
- if (options.except.indexOf(symbol.name) < 0) {
- a.push(symbol);
- }
- });
- if (options.sort) a.sort(function(a, b){
- return b.references.length - a.references.length;
- });
- to_mangle.push.apply(to_mangle, a);
- return;
- }
- if (node instanceof AST_Label) {
- var name;
- do name = base54(++lname); while (!is_identifier(name));
- node.mangled_name = name;
- return true;
- }
- });
- this.walk(tw);
- to_mangle.forEach(function(def){ def.mangle(options) });
-});
-
-AST_Toplevel.DEFMETHOD("compute_char_frequency", function(options){
- options = this._default_mangler_options(options);
- var tw = new TreeWalker(function(node){
- if (node instanceof AST_Constant)
- base54.consider(node.print_to_string());
- else if (node instanceof AST_Return)
- base54.consider("return");
- else if (node instanceof AST_Throw)
- base54.consider("throw");
- else if (node instanceof AST_Continue)
- base54.consider("continue");
- else if (node instanceof AST_Break)
- base54.consider("break");
- else if (node instanceof AST_Debugger)
- base54.consider("debugger");
- else if (node instanceof AST_Directive)
- base54.consider(node.value);
- else if (node instanceof AST_While)
- base54.consider("while");
- else if (node instanceof AST_Do)
- base54.consider("do while");
- else if (node instanceof AST_If) {
- base54.consider("if");
- if (node.alternative) base54.consider("else");
- }
- else if (node instanceof AST_Var)
- base54.consider("var");
- else if (node instanceof AST_Const)
- base54.consider("const");
- else if (node instanceof AST_Lambda)
- base54.consider("function");
- else if (node instanceof AST_For)
- base54.consider("for");
- else if (node instanceof AST_ForIn)
- base54.consider("for in");
- else if (node instanceof AST_Switch)
- base54.consider("switch");
- else if (node instanceof AST_Case)
- base54.consider("case");
- else if (node instanceof AST_Default)
- base54.consider("default");
- else if (node instanceof AST_With)
- base54.consider("with");
- else if (node instanceof AST_ObjectSetter)
- base54.consider("set" + node.key);
- else if (node instanceof AST_ObjectGetter)
- base54.consider("get" + node.key);
- else if (node instanceof AST_ObjectKeyVal)
- base54.consider(node.key);
- else if (node instanceof AST_New)
- base54.consider("new");
- else if (node instanceof AST_This)
- base54.consider("this");
- else if (node instanceof AST_Try)
- base54.consider("try");
- else if (node instanceof AST_Catch)
- base54.consider("catch");
- else if (node instanceof AST_Finally)
- base54.consider("finally");
- else if (node instanceof AST_Symbol && node.unmangleable(options))
- base54.consider(node.name);
- else if (node instanceof AST_Unary || node instanceof AST_Binary)
- base54.consider(node.operator);
- else if (node instanceof AST_Dot)
- base54.consider(node.property);
- });
- this.walk(tw);
- base54.sort();
-});
-
-var base54 = (function() {
- var string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_0123456789";
- var chars, frequency;
- function reset() {
- frequency = Object.create(null);
- chars = string.split("").map(function(ch){ return ch.charCodeAt(0) });
- chars.forEach(function(ch){ frequency[ch] = 0 });
- }
- base54.consider = function(str){
- for (var i = str.length; --i >= 0;) {
- var code = str.charCodeAt(i);
- if (code in frequency) ++frequency[code];
- }
- };
- base54.sort = function() {
- chars = mergeSort(chars, function(a, b){
- if (is_digit(a) && !is_digit(b)) return 1;
- if (is_digit(b) && !is_digit(a)) return -1;
- return frequency[b] - frequency[a];
- });
- };
- base54.reset = reset;
- reset();
- base54.get = function(){ return chars };
- base54.freq = function(){ return frequency };
- function base54(num) {
- var ret = "", base = 54;
- do {
- ret += String.fromCharCode(chars[num % base]);
- num = Math.floor(num / base);
- base = 64;
- } while (num > 0);
- return ret;
- };
- return base54;
-})();
-
-AST_Toplevel.DEFMETHOD("scope_warnings", function(options){
- options = defaults(options, {
- undeclared : false, // this makes a lot of noise
- unreferenced : true,
- assign_to_global : true,
- func_arguments : true,
- nested_defuns : true,
- eval : true
- });
- var tw = new TreeWalker(function(node){
- if (options.undeclared
- && node instanceof AST_SymbolRef
- && node.undeclared())
- {
- // XXX: this also warns about JS standard names,
- // i.e. Object, Array, parseInt etc. Should add a list of
- // exceptions.
- AST_Node.warn("Undeclared symbol: {name} [{file}:{line},{col}]", {
- name: node.name,
- file: node.start.file,
- line: node.start.line,
- col: node.start.col
- });
- }
- if (options.assign_to_global)
- {
- var sym = null;
- if (node instanceof AST_Assign && node.left instanceof AST_SymbolRef)
- sym = node.left;
- else if (node instanceof AST_ForIn && node.init instanceof AST_SymbolRef)
- sym = node.init;
- if (sym
- && (sym.undeclared()
- || (sym.global() && sym.scope !== sym.definition().scope))) {
- AST_Node.warn("{msg}: {name} [{file}:{line},{col}]", {
- msg: sym.undeclared() ? "Accidental global?" : "Assignment to global",
- name: sym.name,
- file: sym.start.file,
- line: sym.start.line,
- col: sym.start.col
- });
- }
- }
- if (options.eval
- && node instanceof AST_SymbolRef
- && node.undeclared()
- && node.name == "eval") {
- AST_Node.warn("Eval is used [{file}:{line},{col}]", node.start);
- }
- if (options.unreferenced
- && (node instanceof AST_SymbolDeclaration || node instanceof AST_Label)
- && node.unreferenced()) {
- AST_Node.warn("{type} {name} is declared but not referenced [{file}:{line},{col}]", {
- type: node instanceof AST_Label ? "Label" : "Symbol",
- name: node.name,
- file: node.start.file,
- line: node.start.line,
- col: node.start.col
- });
- }
- if (options.func_arguments
- && node instanceof AST_Lambda
- && node.uses_arguments) {
- AST_Node.warn("arguments used in function {name} [{file}:{line},{col}]", {
- name: node.name ? node.name.name : "anonymous",
- file: node.start.file,
- line: node.start.line,
- col: node.start.col
- });
- }
- if (options.nested_defuns
- && node instanceof AST_Defun
- && !(tw.parent() instanceof AST_Scope)) {
- AST_Node.warn("Function {name} declared in nested statement \"{type}\" [{file}:{line},{col}]", {
- name: node.name.name,
- type: tw.parent().TYPE,
- file: node.start.file,
- line: node.start.line,
- col: node.start.col
- });
- }
- });
- this.walk(tw);
-});
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/sourcemap.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/sourcemap.js
deleted file mode 100644
index 34299081..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/sourcemap.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
-
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-"use strict";
-
-// a small wrapper around fitzgen's source-map library
-function SourceMap(options) {
- options = defaults(options, {
- file : null,
- root : null,
- orig : null,
- });
- var generator = new MOZ_SourceMap.SourceMapGenerator({
- file : options.file,
- sourceRoot : options.root
- });
- var orig_map = options.orig && new MOZ_SourceMap.SourceMapConsumer(options.orig);
- function add(source, gen_line, gen_col, orig_line, orig_col, name) {
- if (orig_map) {
- var info = orig_map.originalPositionFor({
- line: orig_line,
- column: orig_col
- });
- source = info.source;
- orig_line = info.line;
- orig_col = info.column;
- name = info.name;
- }
- generator.addMapping({
- generated : { line: gen_line, column: gen_col },
- original : { line: orig_line, column: orig_col },
- source : source,
- name : name
- });
- };
- return {
- add : add,
- get : function() { return generator },
- toString : function() { return generator.toString() }
- };
-};
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/transform.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/transform.js
deleted file mode 100644
index 8b4fd9fd..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/transform.js
+++ /dev/null
@@ -1,218 +0,0 @@
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
-
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-"use strict";
-
-// Tree transformer helpers.
-// XXX: eventually I should refactor the compressor to use this infrastructure.
-
-function TreeTransformer(before, after) {
- TreeWalker.call(this);
- this.before = before;
- this.after = after;
-}
-TreeTransformer.prototype = new TreeWalker;
-
-(function(undefined){
-
- function _(node, descend) {
- node.DEFMETHOD("transform", function(tw, in_list){
- var x, y;
- tw.push(this);
- if (tw.before) x = tw.before(this, descend, in_list);
- if (x === undefined) {
- if (!tw.after) {
- x = this;
- descend(x, tw);
- } else {
- tw.stack[tw.stack.length - 1] = x = this.clone();
- descend(x, tw);
- y = tw.after(x, in_list);
- if (y !== undefined) x = y;
- }
- }
- tw.pop();
- return x;
- });
- };
-
- function do_list(list, tw) {
- return MAP(list, function(node){
- return node.transform(tw, true);
- });
- };
-
- _(AST_Node, noop);
-
- _(AST_LabeledStatement, function(self, tw){
- self.label = self.label.transform(tw);
- self.body = self.body.transform(tw);
- });
-
- _(AST_SimpleStatement, function(self, tw){
- self.body = self.body.transform(tw);
- });
-
- _(AST_Block, function(self, tw){
- self.body = do_list(self.body, tw);
- });
-
- _(AST_DWLoop, function(self, tw){
- self.condition = self.condition.transform(tw);
- self.body = self.body.transform(tw);
- });
-
- _(AST_For, function(self, tw){
- if (self.init) self.init = self.init.transform(tw);
- if (self.condition) self.condition = self.condition.transform(tw);
- if (self.step) self.step = self.step.transform(tw);
- self.body = self.body.transform(tw);
- });
-
- _(AST_ForIn, function(self, tw){
- self.init = self.init.transform(tw);
- self.object = self.object.transform(tw);
- self.body = self.body.transform(tw);
- });
-
- _(AST_With, function(self, tw){
- self.expression = self.expression.transform(tw);
- self.body = self.body.transform(tw);
- });
-
- _(AST_Exit, function(self, tw){
- if (self.value) self.value = self.value.transform(tw);
- });
-
- _(AST_LoopControl, function(self, tw){
- if (self.label) self.label = self.label.transform(tw);
- });
-
- _(AST_If, function(self, tw){
- self.condition = self.condition.transform(tw);
- self.body = self.body.transform(tw);
- if (self.alternative) self.alternative = self.alternative.transform(tw);
- });
-
- _(AST_Switch, function(self, tw){
- self.expression = self.expression.transform(tw);
- self.body = do_list(self.body, tw);
- });
-
- _(AST_Case, function(self, tw){
- self.expression = self.expression.transform(tw);
- self.body = do_list(self.body, tw);
- });
-
- _(AST_Try, function(self, tw){
- self.body = do_list(self.body, tw);
- if (self.bcatch) self.bcatch = self.bcatch.transform(tw);
- if (self.bfinally) self.bfinally = self.bfinally.transform(tw);
- });
-
- _(AST_Catch, function(self, tw){
- self.argname = self.argname.transform(tw);
- self.body = do_list(self.body, tw);
- });
-
- _(AST_Definitions, function(self, tw){
- self.definitions = do_list(self.definitions, tw);
- });
-
- _(AST_VarDef, function(self, tw){
- if (self.value) self.value = self.value.transform(tw);
- });
-
- _(AST_Lambda, function(self, tw){
- if (self.name) self.name = self.name.transform(tw);
- self.argnames = do_list(self.argnames, tw);
- self.body = do_list(self.body, tw);
- });
-
- _(AST_Call, function(self, tw){
- self.expression = self.expression.transform(tw);
- self.args = do_list(self.args, tw);
- });
-
- _(AST_Seq, function(self, tw){
- self.car = self.car.transform(tw);
- self.cdr = self.cdr.transform(tw);
- });
-
- _(AST_Dot, function(self, tw){
- self.expression = self.expression.transform(tw);
- });
-
- _(AST_Sub, function(self, tw){
- self.expression = self.expression.transform(tw);
- self.property = self.property.transform(tw);
- });
-
- _(AST_Unary, function(self, tw){
- self.expression = self.expression.transform(tw);
- });
-
- _(AST_Binary, function(self, tw){
- self.left = self.left.transform(tw);
- self.right = self.right.transform(tw);
- });
-
- _(AST_Conditional, function(self, tw){
- self.condition = self.condition.transform(tw);
- self.consequent = self.consequent.transform(tw);
- self.alternative = self.alternative.transform(tw);
- });
-
- _(AST_Array, function(self, tw){
- self.elements = do_list(self.elements, tw);
- });
-
- _(AST_Object, function(self, tw){
- self.properties = do_list(self.properties, tw);
- });
-
- _(AST_ObjectProperty, function(self, tw){
- self.value = self.value.transform(tw);
- });
-
-})();
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/utils.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/utils.js
deleted file mode 100644
index c95b9824..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/lib/utils.js
+++ /dev/null
@@ -1,288 +0,0 @@
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
-
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-"use strict";
-
-function array_to_hash(a) {
- var ret = Object.create(null);
- for (var i = 0; i < a.length; ++i)
- ret[a[i]] = true;
- return ret;
-};
-
-function slice(a, start) {
- return Array.prototype.slice.call(a, start || 0);
-};
-
-function characters(str) {
- return str.split("");
-};
-
-function member(name, array) {
- for (var i = array.length; --i >= 0;)
- if (array[i] == name)
- return true;
- return false;
-};
-
-function find_if(func, array) {
- for (var i = 0, n = array.length; i < n; ++i) {
- if (func(array[i]))
- return array[i];
- }
-};
-
-function repeat_string(str, i) {
- if (i <= 0) return "";
- if (i == 1) return str;
- var d = repeat_string(str, i >> 1);
- d += d;
- if (i & 1) d += str;
- return d;
-};
-
-function DefaultsError(msg, defs) {
- this.msg = msg;
- this.defs = defs;
-};
-
-function defaults(args, defs, croak) {
- if (args === true)
- args = {};
- var ret = args || {};
- if (croak) for (var i in ret) if (ret.hasOwnProperty(i) && !defs.hasOwnProperty(i))
- throw new DefaultsError("`" + i + "` is not a supported option", defs);
- for (var i in defs) if (defs.hasOwnProperty(i)) {
- ret[i] = (args && args.hasOwnProperty(i)) ? args[i] : defs[i];
- }
- return ret;
-};
-
-function merge(obj, ext) {
- for (var i in ext) if (ext.hasOwnProperty(i)) {
- obj[i] = ext[i];
- }
- return obj;
-};
-
-function noop() {};
-
-var MAP = (function(){
- function MAP(a, f, backwards) {
- var ret = [], top = [], i;
- function doit() {
- var val = f(a[i], i);
- var is_last = val instanceof Last;
- if (is_last) val = val.v;
- if (val instanceof AtTop) {
- val = val.v;
- if (val instanceof Splice) {
- top.push.apply(top, backwards ? val.v.slice().reverse() : val.v);
- } else {
- top.push(val);
- }
- }
- else if (val !== skip) {
- if (val instanceof Splice) {
- ret.push.apply(ret, backwards ? val.v.slice().reverse() : val.v);
- } else {
- ret.push(val);
- }
- }
- return is_last;
- };
- if (a instanceof Array) {
- if (backwards) {
- for (i = a.length; --i >= 0;) if (doit()) break;
- ret.reverse();
- top.reverse();
- } else {
- for (i = 0; i < a.length; ++i) if (doit()) break;
- }
- }
- else {
- for (i in a) if (a.hasOwnProperty(i)) if (doit()) break;
- }
- return top.concat(ret);
- };
- MAP.at_top = function(val) { return new AtTop(val) };
- MAP.splice = function(val) { return new Splice(val) };
- MAP.last = function(val) { return new Last(val) };
- var skip = MAP.skip = {};
- function AtTop(val) { this.v = val };
- function Splice(val) { this.v = val };
- function Last(val) { this.v = val };
- return MAP;
-})();
-
-function push_uniq(array, el) {
- if (array.indexOf(el) < 0)
- array.push(el);
-};
-
-function string_template(text, props) {
- return text.replace(/\{(.+?)\}/g, function(str, p){
- return props[p];
- });
-};
-
-function remove(array, el) {
- for (var i = array.length; --i >= 0;) {
- if (array[i] === el) array.splice(i, 1);
- }
-};
-
-function mergeSort(array, cmp) {
- if (array.length < 2) return array.slice();
- function merge(a, b) {
- var r = [], ai = 0, bi = 0, i = 0;
- while (ai < a.length && bi < b.length) {
- cmp(a[ai], b[bi]) <= 0
- ? r[i++] = a[ai++]
- : r[i++] = b[bi++];
- }
- if (ai < a.length) r.push.apply(r, a.slice(ai));
- if (bi < b.length) r.push.apply(r, b.slice(bi));
- return r;
- };
- function _ms(a) {
- if (a.length <= 1)
- return a;
- var m = Math.floor(a.length / 2), left = a.slice(0, m), right = a.slice(m);
- left = _ms(left);
- right = _ms(right);
- return merge(left, right);
- };
- return _ms(array);
-};
-
-function set_difference(a, b) {
- return a.filter(function(el){
- return b.indexOf(el) < 0;
- });
-};
-
-function set_intersection(a, b) {
- return a.filter(function(el){
- return b.indexOf(el) >= 0;
- });
-};
-
-// this function is taken from Acorn [1], written by Marijn Haverbeke
-// [1] https://github.com/marijnh/acorn
-function makePredicate(words) {
- if (!(words instanceof Array)) words = words.split(" ");
- var f = "", cats = [];
- out: for (var i = 0; i < words.length; ++i) {
- for (var j = 0; j < cats.length; ++j)
- if (cats[j][0].length == words[i].length) {
- cats[j].push(words[i]);
- continue out;
- }
- cats.push([words[i]]);
- }
- function compareTo(arr) {
- if (arr.length == 1) return f += "return str === " + JSON.stringify(arr[0]) + ";";
- f += "switch(str){";
- for (var i = 0; i < arr.length; ++i) f += "case " + JSON.stringify(arr[i]) + ":";
- f += "return true}return false;";
- }
- // When there are more than three length categories, an outer
- // switch first dispatches on the lengths, to save on comparisons.
- if (cats.length > 3) {
- cats.sort(function(a, b) {return b.length - a.length;});
- f += "switch(str.length){";
- for (var i = 0; i < cats.length; ++i) {
- var cat = cats[i];
- f += "case " + cat[0].length + ":";
- compareTo(cat);
- }
- f += "}";
- // Otherwise, simply generate a flat `switch` statement.
- } else {
- compareTo(words);
- }
- return new Function("str", f);
-};
-
-function Dictionary() {
- this._values = Object.create(null);
- this._size = 0;
-};
-Dictionary.prototype = {
- set: function(key, val) {
- if (!this.has(key)) ++this._size;
- this._values["$" + key] = val;
- return this;
- },
- add: function(key, val) {
- if (this.has(key)) {
- this.get(key).push(val);
- } else {
- this.set(key, [ val ]);
- }
- return this;
- },
- get: function(key) { return this._values["$" + key] },
- del: function(key) {
- if (this.has(key)) {
- --this._size;
- delete this._values["$" + key];
- }
- return this;
- },
- has: function(key) { return ("$" + key) in this._values },
- each: function(f) {
- for (var i in this._values)
- f(this._values[i], i.substr(1));
- },
- size: function() {
- return this._size;
- },
- map: function(f) {
- var ret = [];
- for (var i in this._values)
- ret.push(f(this._values[i], i.substr(1)));
- return ret;
- }
-};
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/package.json b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/package.json
deleted file mode 100644
index 540b610d..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/package.json
+++ /dev/null
@@ -1,96 +0,0 @@
-{
- "_args": [
- [
- {
- "raw": "uglify-js@~2.2.5",
- "scope": null,
- "escapedName": "uglify-js",
- "name": "uglify-js",
- "rawSpec": "~2.2.5",
- "spec": ">=2.2.5 <2.3.0",
- "type": "range"
- },
- "/Users/sdsteve/WebstormProjects/SpotLabNodejs/node_modules/transformers"
- ]
- ],
- "_from": "uglify-js@>=2.2.5 <2.3.0",
- "_id": "uglify-js@2.2.5",
- "_inCache": true,
- "_location": "/transformers/uglify-js",
- "_npmUser": {
- "name": "mishoo",
- "email": "mihai.bazon@gmail.com"
- },
- "_npmVersion": "1.1.66",
- "_phantomChildren": {},
- "_requested": {
- "raw": "uglify-js@~2.2.5",
- "scope": null,
- "escapedName": "uglify-js",
- "name": "uglify-js",
- "rawSpec": "~2.2.5",
- "spec": ">=2.2.5 <2.3.0",
- "type": "range"
- },
- "_requiredBy": [
- "/transformers"
- ],
- "_resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz",
- "_shasum": "a6e02a70d839792b9780488b7b8b184c095c99c7",
- "_shrinkwrap": null,
- "_spec": "uglify-js@~2.2.5",
- "_where": "/Users/sdsteve/WebstormProjects/SpotLabNodejs/node_modules/transformers",
- "bin": {
- "uglifyjs": "bin/uglifyjs"
- },
- "bugs": {
- "url": "https://github.com/mishoo/UglifyJS2/issues"
- },
- "dependencies": {
- "optimist": "~0.3.5",
- "source-map": "~0.1.7"
- },
- "description": "JavaScript parser, mangler/compressor and beautifier toolkit",
- "devDependencies": {},
- "directories": {},
- "dist": {
- "shasum": "a6e02a70d839792b9780488b7b8b184c095c99c7",
- "tarball": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz"
- },
- "engines": {
- "node": ">=0.4.0"
- },
- "homepage": "http://lisperator.net/uglifyjs",
- "main": "tools/node.js",
- "maintainers": [
- {
- "name": "caires",
- "email": "cairesvs@gmail.com"
- },
- {
- "name": "mape",
- "email": "mape@mape.me"
- },
- {
- "name": "mishoo",
- "email": "mihai.bazon@gmail.com"
- }
- ],
- "name": "uglify-js",
- "optionalDependencies": {},
- "readme": "ERROR: No README data found!",
- "repositories": [
- {
- "type": "git",
- "url": "git+https://github.com/mishoo/UglifyJS2.git"
- }
- ],
- "repository": {
- "type": "git",
- "url": "git+https://github.com/mishoo/UglifyJS2.git"
- },
- "scripts": {
- "test": "node test/run-tests.js"
- },
- "version": "2.2.5"
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/arrays.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/arrays.js
deleted file mode 100644
index 10fe6eb5..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/arrays.js
+++ /dev/null
@@ -1,12 +0,0 @@
-holes_and_undefined: {
- input: {
- x = [1, 2, undefined];
- y = [1, , 2, ];
- z = [1, undefined, 3];
- }
- expect: {
- x=[1,2,void 0];
- y=[1,,2];
- z=[1,void 0,3];
- }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/blocks.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/blocks.js
deleted file mode 100644
index 8372adf2..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/blocks.js
+++ /dev/null
@@ -1,49 +0,0 @@
-remove_blocks: {
- input: {
- {;}
- foo();
- {};
- {
- {};
- };
- bar();
- {}
- }
- expect: {
- foo();
- bar();
- }
-}
-
-keep_some_blocks: {
- input: {
- // 1.
- if (foo) {
- {{{}}}
- if (bar) { baz(); }
- {{}}
- } else {
- stuff();
- }
-
- // 2.
- if (foo) {
- for (var i = 0; i < 5; ++i)
- if (bar) baz();
- } else {
- stuff();
- }
- }
- expect: {
- // 1.
- if (foo) {
- if (bar) baz();
- } else stuff();
-
- // 2.
- if (foo) {
- for (var i = 0; i < 5; ++i)
- if (bar) baz();
- } else stuff();
- }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/conditionals.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/conditionals.js
deleted file mode 100644
index dc2bb671..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/conditionals.js
+++ /dev/null
@@ -1,143 +0,0 @@
-ifs_1: {
- options = {
- conditionals: true
- };
- input: {
- if (foo) bar();
- if (!foo); else bar();
- if (foo); else bar();
- if (foo); else;
- }
- expect: {
- foo&&bar();
- foo&&bar();
- foo||bar();
- foo;
- }
-}
-
-ifs_2: {
- options = {
- conditionals: true
- };
- input: {
- if (foo) {
- x();
- } else if (bar) {
- y();
- } else if (baz) {
- z();
- }
-
- if (foo) {
- x();
- } else if (bar) {
- y();
- } else if (baz) {
- z();
- } else {
- t();
- }
- }
- expect: {
- foo ? x() : bar ? y() : baz && z();
- foo ? x() : bar ? y() : baz ? z() : t();
- }
-}
-
-ifs_3_should_warn: {
- options = {
- conditionals : true,
- dead_code : true,
- evaluate : true,
- booleans : true
- };
- input: {
- if (x && !(x + "1") && y) { // 1
- var qq;
- foo();
- } else {
- bar();
- }
-
- if (x || !!(x + "1") || y) { // 2
- foo();
- } else {
- var jj;
- bar();
- }
- }
- expect: {
- var qq; bar(); // 1
- var jj; foo(); // 2
- }
-}
-
-ifs_4: {
- options = {
- conditionals: true
- };
- input: {
- if (foo && bar) {
- x(foo)[10].bar.baz = something();
- } else
- x(foo)[10].bar.baz = something_else();
- }
- expect: {
- x(foo)[10].bar.baz = (foo && bar) ? something() : something_else();
- }
-}
-
-ifs_5: {
- options = {
- if_return: true,
- conditionals: true,
- comparisons: true,
- };
- input: {
- function f() {
- if (foo) return;
- bar();
- baz();
- }
- function g() {
- if (foo) return;
- if (bar) return;
- if (baz) return;
- if (baa) return;
- a();
- b();
- }
- }
- expect: {
- function f() {
- if (!foo) {
- bar();
- baz();
- }
- }
- function g() {
- if (!(foo || bar || baz || baa)) {
- a();
- b();
- }
- }
- }
-}
-
-ifs_6: {
- options = {
- conditionals: true,
- comparisons: true
- };
- input: {
- if (!foo && !bar && !baz && !boo) {
- x = 10;
- } else {
- x = 20;
- }
- }
- expect: {
- x = foo || bar || baz || boo ? 20 : 10;
- }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/dead-code.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/dead-code.js
deleted file mode 100644
index 0fd066eb..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/dead-code.js
+++ /dev/null
@@ -1,89 +0,0 @@
-dead_code_1: {
- options = {
- dead_code: true
- };
- input: {
- function f() {
- a();
- b();
- x = 10;
- return;
- if (x) {
- y();
- }
- }
- }
- expect: {
- function f() {
- a();
- b();
- x = 10;
- return;
- }
- }
-}
-
-dead_code_2_should_warn: {
- options = {
- dead_code: true
- };
- input: {
- function f() {
- g();
- x = 10;
- throw "foo";
- // completely discarding the `if` would introduce some
- // bugs. UglifyJS v1 doesn't deal with this issue; in v2
- // we copy any declarations to the upper scope.
- if (x) {
- y();
- var x;
- function g(){};
- // but nested declarations should not be kept.
- (function(){
- var q;
- function y(){};
- })();
- }
- }
- }
- expect: {
- function f() {
- g();
- x = 10;
- throw "foo";
- var x;
- function g(){};
- }
- }
-}
-
-dead_code_constant_boolean_should_warn_more: {
- options = {
- dead_code : true,
- loops : true,
- booleans : true,
- conditionals : true,
- evaluate : true
- };
- input: {
- while (!((foo && bar) || (x + "0"))) {
- console.log("unreachable");
- var foo;
- function bar() {}
- }
- for (var x = 10; x && (y || x) && (!typeof x); ++x) {
- asdf();
- foo();
- var moo;
- }
- }
- expect: {
- var foo;
- function bar() {}
- // nothing for the while
- // as for the for, it should keep:
- var x = 10;
- var moo;
- }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/debugger.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/debugger.js
deleted file mode 100644
index 7c270734..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/debugger.js
+++ /dev/null
@@ -1,24 +0,0 @@
-keep_debugger: {
- options = {
- drop_debugger: false
- };
- input: {
- debugger;
- }
- expect: {
- debugger;
- }
-}
-
-drop_debugger: {
- options = {
- drop_debugger: true
- };
- input: {
- debugger;
- if (foo) debugger;
- }
- expect: {
- if (foo);
- }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/drop-unused.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/drop-unused.js
deleted file mode 100644
index bf5cd296..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/drop-unused.js
+++ /dev/null
@@ -1,97 +0,0 @@
-unused_funarg_1: {
- options = { unused: true };
- input: {
- function f(a, b, c, d, e) {
- return a + b;
- }
- }
- expect: {
- function f(a, b) {
- return a + b;
- }
- }
-}
-
-unused_funarg_2: {
- options = { unused: true };
- input: {
- function f(a, b, c, d, e) {
- return a + c;
- }
- }
- expect: {
- function f(a, b, c) {
- return a + c;
- }
- }
-}
-
-unused_nested_function: {
- options = { unused: true };
- input: {
- function f(x, y) {
- function g() {
- something();
- }
- return x + y;
- }
- };
- expect: {
- function f(x, y) {
- return x + y;
- }
- }
-}
-
-unused_circular_references_1: {
- options = { unused: true };
- input: {
- function f(x, y) {
- // circular reference
- function g() {
- return h();
- }
- function h() {
- return g();
- }
- return x + y;
- }
- };
- expect: {
- function f(x, y) {
- return x + y;
- }
- }
-}
-
-unused_circular_references_2: {
- options = { unused: true };
- input: {
- function f(x, y) {
- var foo = 1, bar = baz, baz = foo + bar, qwe = moo();
- return x + y;
- }
- };
- expect: {
- function f(x, y) {
- moo(); // keeps side effect
- return x + y;
- }
- }
-}
-
-unused_circular_references_3: {
- options = { unused: true };
- input: {
- function f(x, y) {
- var g = function() { return h() };
- var h = function() { return g() };
- return x + y;
- }
- };
- expect: {
- function f(x, y) {
- return x + y;
- }
- }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/issue-105.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/issue-105.js
deleted file mode 100644
index 349d732d..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/issue-105.js
+++ /dev/null
@@ -1,17 +0,0 @@
-typeof_eq_undefined: {
- options = {
- comparisons: true,
- unsafe: false
- };
- input: { a = typeof b.c != "undefined" }
- expect: { a = "undefined" != typeof b.c }
-}
-
-typeof_eq_undefined_unsafe: {
- options = {
- comparisons: true,
- unsafe: true
- };
- input: { a = typeof b.c != "undefined" }
- expect: { a = b.c !== void 0 }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/issue-12.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/issue-12.js
deleted file mode 100644
index bf87d5c0..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/issue-12.js
+++ /dev/null
@@ -1,11 +0,0 @@
-keep_name_of_getter: {
- options = { unused: true };
- input: { a = { get foo () {} } }
- expect: { a = { get foo () {} } }
-}
-
-keep_name_of_setter: {
- options = { unused: true };
- input: { a = { set foo () {} } }
- expect: { a = { set foo () {} } }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/issue-22.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/issue-22.js
deleted file mode 100644
index a8b7bc60..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/issue-22.js
+++ /dev/null
@@ -1,17 +0,0 @@
-return_with_no_value_in_if_body: {
- options = { conditionals: true };
- input: {
- function foo(bar) {
- if (bar) {
- return;
- } else {
- return 1;
- }
- }
- }
- expect: {
- function foo (bar) {
- return bar ? void 0 : 1;
- }
- }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/issue-44.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/issue-44.js
deleted file mode 100644
index 7a972f9e..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/issue-44.js
+++ /dev/null
@@ -1,31 +0,0 @@
-issue_44_valid_ast_1: {
- options = { unused: true };
- input: {
- function a(b) {
- for (var i = 0, e = b.qoo(); ; i++) {}
- }
- }
- expect: {
- function a(b) {
- var i = 0;
- for (b.qoo(); ; i++);
- }
- }
-}
-
-issue_44_valid_ast_2: {
- options = { unused: true };
- input: {
- function a(b) {
- if (foo) for (var i = 0, e = b.qoo(); ; i++) {}
- }
- }
- expect: {
- function a(b) {
- if (foo) {
- var i = 0;
- for (b.qoo(); ; i++);
- }
- }
- }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/issue-59.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/issue-59.js
deleted file mode 100644
index 82b38806..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/issue-59.js
+++ /dev/null
@@ -1,30 +0,0 @@
-keep_continue: {
- options = {
- dead_code: true,
- evaluate: true
- };
- input: {
- while (a) {
- if (b) {
- switch (true) {
- case c():
- d();
- }
- continue;
- }
- f();
- }
- }
- expect: {
- while (a) {
- if (b) {
- switch (true) {
- case c():
- d();
- }
- continue;
- }
- f();
- }
- }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/labels.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/labels.js
deleted file mode 100644
index 044b7a7e..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/labels.js
+++ /dev/null
@@ -1,163 +0,0 @@
-labels_1: {
- options = { if_return: true, conditionals: true, dead_code: true };
- input: {
- out: {
- if (foo) break out;
- console.log("bar");
- }
- };
- expect: {
- foo || console.log("bar");
- }
-}
-
-labels_2: {
- options = { if_return: true, conditionals: true, dead_code: true };
- input: {
- out: {
- if (foo) print("stuff");
- else break out;
- console.log("here");
- }
- };
- expect: {
- if (foo) {
- print("stuff");
- console.log("here");
- }
- }
-}
-
-labels_3: {
- options = { if_return: true, conditionals: true, dead_code: true };
- input: {
- for (var i = 0; i < 5; ++i) {
- if (i < 3) continue;
- console.log(i);
- }
- };
- expect: {
- for (var i = 0; i < 5; ++i)
- i < 3 || console.log(i);
- }
-}
-
-labels_4: {
- options = { if_return: true, conditionals: true, dead_code: true };
- input: {
- out: for (var i = 0; i < 5; ++i) {
- if (i < 3) continue out;
- console.log(i);
- }
- };
- expect: {
- for (var i = 0; i < 5; ++i)
- i < 3 || console.log(i);
- }
-}
-
-labels_5: {
- options = { if_return: true, conditionals: true, dead_code: true };
- // should keep the break-s in the following
- input: {
- while (foo) {
- if (bar) break;
- console.log("foo");
- }
- out: while (foo) {
- if (bar) break out;
- console.log("foo");
- }
- };
- expect: {
- while (foo) {
- if (bar) break;
- console.log("foo");
- }
- out: while (foo) {
- if (bar) break out;
- console.log("foo");
- }
- }
-}
-
-labels_6: {
- input: {
- out: break out;
- };
- expect: {}
-}
-
-labels_7: {
- options = { if_return: true, conditionals: true, dead_code: true };
- input: {
- while (foo) {
- x();
- y();
- continue;
- }
- };
- expect: {
- while (foo) {
- x();
- y();
- }
- }
-}
-
-labels_8: {
- options = { if_return: true, conditionals: true, dead_code: true };
- input: {
- while (foo) {
- x();
- y();
- break;
- }
- };
- expect: {
- while (foo) {
- x();
- y();
- break;
- }
- }
-}
-
-labels_9: {
- options = { if_return: true, conditionals: true, dead_code: true };
- input: {
- out: while (foo) {
- x();
- y();
- continue out;
- z();
- k();
- }
- };
- expect: {
- while (foo) {
- x();
- y();
- }
- }
-}
-
-labels_10: {
- options = { if_return: true, conditionals: true, dead_code: true };
- input: {
- out: while (foo) {
- x();
- y();
- break out;
- z();
- k();
- }
- };
- expect: {
- out: while (foo) {
- x();
- y();
- break out;
- }
- }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/loops.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/loops.js
deleted file mode 100644
index cdf1f045..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/loops.js
+++ /dev/null
@@ -1,123 +0,0 @@
-while_becomes_for: {
- options = { loops: true };
- input: {
- while (foo()) bar();
- }
- expect: {
- for (; foo(); ) bar();
- }
-}
-
-drop_if_break_1: {
- options = { loops: true };
- input: {
- for (;;)
- if (foo()) break;
- }
- expect: {
- for (; !foo(););
- }
-}
-
-drop_if_break_2: {
- options = { loops: true };
- input: {
- for (;bar();)
- if (foo()) break;
- }
- expect: {
- for (; bar() && !foo(););
- }
-}
-
-drop_if_break_3: {
- options = { loops: true };
- input: {
- for (;bar();) {
- if (foo()) break;
- stuff1();
- stuff2();
- }
- }
- expect: {
- for (; bar() && !foo();) {
- stuff1();
- stuff2();
- }
- }
-}
-
-drop_if_break_4: {
- options = { loops: true, sequences: true };
- input: {
- for (;bar();) {
- x();
- y();
- if (foo()) break;
- z();
- k();
- }
- }
- expect: {
- for (; bar() && (x(), y(), !foo());) z(), k();
- }
-}
-
-drop_if_else_break_1: {
- options = { loops: true };
- input: {
- for (;;) if (foo()) bar(); else break;
- }
- expect: {
- for (; foo(); ) bar();
- }
-}
-
-drop_if_else_break_2: {
- options = { loops: true };
- input: {
- for (;bar();) {
- if (foo()) baz();
- else break;
- }
- }
- expect: {
- for (; bar() && foo();) baz();
- }
-}
-
-drop_if_else_break_3: {
- options = { loops: true };
- input: {
- for (;bar();) {
- if (foo()) baz();
- else break;
- stuff1();
- stuff2();
- }
- }
- expect: {
- for (; bar() && foo();) {
- baz();
- stuff1();
- stuff2();
- }
- }
-}
-
-drop_if_else_break_4: {
- options = { loops: true, sequences: true };
- input: {
- for (;bar();) {
- x();
- y();
- if (foo()) baz();
- else break;
- z();
- k();
- }
- }
- expect: {
- for (; bar() && (x(), y(), foo());) baz(), z(), k();
- }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/properties.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/properties.js
deleted file mode 100644
index 72e245ec..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/properties.js
+++ /dev/null
@@ -1,25 +0,0 @@
-keep_properties: {
- options = {
- properties: false
- };
- input: {
- a["foo"] = "bar";
- }
- expect: {
- a["foo"] = "bar";
- }
-}
-
-dot_properties: {
- options = {
- properties: true
- };
- input: {
- a["foo"] = "bar";
- a["if"] = "if";
- }
- expect: {
- a.foo = "bar";
- a["if"] = "if";
- }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/sequences.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/sequences.js
deleted file mode 100644
index 6f63ace4..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/sequences.js
+++ /dev/null
@@ -1,161 +0,0 @@
-make_sequences_1: {
- options = {
- sequences: true
- };
- input: {
- foo();
- bar();
- baz();
- }
- expect: {
- foo(),bar(),baz();
- }
-}
-
-make_sequences_2: {
- options = {
- sequences: true
- };
- input: {
- if (boo) {
- foo();
- bar();
- baz();
- } else {
- x();
- y();
- z();
- }
- }
- expect: {
- if (boo) foo(),bar(),baz();
- else x(),y(),z();
- }
-}
-
-make_sequences_3: {
- options = {
- sequences: true
- };
- input: {
- function f() {
- foo();
- bar();
- return baz();
- }
- function g() {
- foo();
- bar();
- throw new Error();
- }
- }
- expect: {
- function f() {
- return foo(), bar(), baz();
- }
- function g() {
- throw foo(), bar(), new Error();
- }
- }
-}
-
-make_sequences_4: {
- options = {
- sequences: true
- };
- input: {
- x = 5;
- if (y) z();
-
- x = 5;
- for (i = 0; i < 5; i++) console.log(i);
-
- x = 5;
- for (; i < 5; i++) console.log(i);
-
- x = 5;
- switch (y) {}
-
- x = 5;
- with (obj) {}
- }
- expect: {
- if (x = 5, y) z();
- for (x = 5, i = 0; i < 5; i++) console.log(i);
- for (x = 5; i < 5; i++) console.log(i);
- switch (x = 5, y) {}
- with (x = 5, obj);
- }
-}
-
-lift_sequences_1: {
- options = { sequences: true };
- input: {
- foo = !(x(), y(), bar());
- }
- expect: {
- x(), y(), foo = !bar();
- }
-}
-
-lift_sequences_2: {
- options = { sequences: true, evaluate: true };
- input: {
- q = 1 + (foo(), bar(), 5) + 7 * (5 / (3 - (a(), (QW=ER), c(), 2))) - (x(), y(), 5);
- }
- expect: {
- foo(), bar(), a(), QW = ER, c(), x(), y(), q = 36
- }
-}
-
-lift_sequences_3: {
- options = { sequences: true, conditionals: true };
- input: {
- x = (foo(), bar(), baz()) ? 10 : 20;
- }
- expect: {
- foo(), bar(), x = baz() ? 10 : 20;
- }
-}
-
-lift_sequences_4: {
- options = { side_effects: true };
- input: {
- x = (foo, bar, baz);
- }
- expect: {
- x = baz;
- }
-}
-
-for_sequences: {
- options = { sequences: true };
- input: {
- // 1
- foo();
- bar();
- for (; false;);
- // 2
- foo();
- bar();
- for (x = 5; false;);
- // 3
- x = (foo in bar);
- for (; false;);
- // 4
- x = (foo in bar);
- for (y = 5; false;);
- }
- expect: {
- // 1
- for (foo(), bar(); false;);
- // 2
- for (foo(), bar(), x = 5; false;);
- // 3
- x = (foo in bar);
- for (; false;);
- // 4
- x = (foo in bar);
- for (y = 5; false;);
- }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/switch.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/switch.js
deleted file mode 100644
index 6fde5dd3..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/compress/switch.js
+++ /dev/null
@@ -1,210 +0,0 @@
-constant_switch_1: {
- options = { dead_code: true, evaluate: true };
- input: {
- switch (1+1) {
- case 1: foo(); break;
- case 1+1: bar(); break;
- case 1+1+1: baz(); break;
- }
- }
- expect: {
- bar();
- }
-}
-
-constant_switch_2: {
- options = { dead_code: true, evaluate: true };
- input: {
- switch (1) {
- case 1: foo();
- case 1+1: bar(); break;
- case 1+1+1: baz();
- }
- }
- expect: {
- foo();
- bar();
- }
-}
-
-constant_switch_3: {
- options = { dead_code: true, evaluate: true };
- input: {
- switch (10) {
- case 1: foo();
- case 1+1: bar(); break;
- case 1+1+1: baz();
- default:
- def();
- }
- }
- expect: {
- def();
- }
-}
-
-constant_switch_4: {
- options = { dead_code: true, evaluate: true };
- input: {
- switch (2) {
- case 1:
- x();
- if (foo) break;
- y();
- break;
- case 1+1:
- bar();
- default:
- def();
- }
- }
- expect: {
- bar();
- def();
- }
-}
-
-constant_switch_5: {
- options = { dead_code: true, evaluate: true };
- input: {
- switch (1) {
- case 1:
- x();
- if (foo) break;
- y();
- break;
- case 1+1:
- bar();
- default:
- def();
- }
- }
- expect: {
- // the break inside the if ruins our job
- // we can still get rid of irrelevant cases.
- switch (1) {
- case 1:
- x();
- if (foo) break;
- y();
- }
- // XXX: we could optimize this better by inventing an outer
- // labeled block, but that's kinda tricky.
- }
-}
-
-constant_switch_6: {
- options = { dead_code: true, evaluate: true };
- input: {
- OUT: {
- foo();
- switch (1) {
- case 1:
- x();
- if (foo) break OUT;
- y();
- case 1+1:
- bar();
- break;
- default:
- def();
- }
- }
- }
- expect: {
- OUT: {
- foo();
- x();
- if (foo) break OUT;
- y();
- bar();
- }
- }
-}
-
-constant_switch_7: {
- options = { dead_code: true, evaluate: true };
- input: {
- OUT: {
- foo();
- switch (1) {
- case 1:
- x();
- if (foo) break OUT;
- for (var x = 0; x < 10; x++) {
- if (x > 5) break; // this break refers to the for, not to the switch; thus it
- // shouldn't ruin our optimization
- console.log(x);
- }
- y();
- case 1+1:
- bar();
- break;
- default:
- def();
- }
- }
- }
- expect: {
- OUT: {
- foo();
- x();
- if (foo) break OUT;
- for (var x = 0; x < 10; x++) {
- if (x > 5) break;
- console.log(x);
- }
- y();
- bar();
- }
- }
-}
-
-constant_switch_8: {
- options = { dead_code: true, evaluate: true };
- input: {
- OUT: switch (1) {
- case 1:
- x();
- for (;;) break OUT;
- y();
- break;
- case 1+1:
- bar();
- default:
- def();
- }
- }
- expect: {
- OUT: {
- x();
- for (;;) break OUT;
- y();
- }
- }
-}
-
-constant_switch_9: {
- options = { dead_code: true, evaluate: true };
- input: {
- OUT: switch (1) {
- case 1:
- x();
- for (;;) if (foo) break OUT;
- y();
- case 1+1:
- bar();
- default:
- def();
- }
- }
- expect: {
- OUT: {
- x();
- for (;;) if (foo) break OUT;
- y();
- bar();
- def();
- }
- }
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/run-tests.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/run-tests.js
deleted file mode 100755
index 0568c6a7..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/test/run-tests.js
+++ /dev/null
@@ -1,170 +0,0 @@
-#! /usr/bin/env node
-
-var U = require("../tools/node");
-var path = require("path");
-var fs = require("fs");
-var assert = require("assert");
-var sys = require("util");
-
-var tests_dir = path.dirname(module.filename);
-
-run_compress_tests();
-
-/* -----[ utils ]----- */
-
-function tmpl() {
- return U.string_template.apply(this, arguments);
-}
-
-function log() {
- var txt = tmpl.apply(this, arguments);
- sys.puts(txt);
-}
-
-function log_directory(dir) {
- log("*** Entering [{dir}]", { dir: dir });
-}
-
-function log_start_file(file) {
- log("--- {file}", { file: file });
-}
-
-function log_test(name) {
- log(" Running test [{name}]", { name: name });
-}
-
-function find_test_files(dir) {
- var files = fs.readdirSync(dir).filter(function(name){
- return /\.js$/i.test(name);
- });
- if (process.argv.length > 2) {
- var x = process.argv.slice(2);
- files = files.filter(function(f){
- return x.indexOf(f) >= 0;
- });
- }
- return files;
-}
-
-function test_directory(dir) {
- return path.resolve(tests_dir, dir);
-}
-
-function as_toplevel(input) {
- if (input instanceof U.AST_BlockStatement) input = input.body;
- else if (input instanceof U.AST_Statement) input = [ input ];
- else throw new Error("Unsupported input syntax");
- var toplevel = new U.AST_Toplevel({ body: input });
- toplevel.figure_out_scope();
- return toplevel;
-}
-
-function run_compress_tests() {
- var dir = test_directory("compress");
- log_directory("compress");
- var files = find_test_files(dir);
- function test_file(file) {
- log_start_file(file);
- function test_case(test) {
- log_test(test.name);
- var options = U.defaults(test.options, {
- warnings: false
- });
- var cmp = new U.Compressor(options, true);
- var expect = make_code(as_toplevel(test.expect), false);
- var input = as_toplevel(test.input);
- var input_code = make_code(test.input);
- var output = input.transform(cmp);
- output.figure_out_scope();
- output = make_code(output, false);
- if (expect != output) {
- log("!!! failed\n---INPUT---\n{input}\n---OUTPUT---\n{output}\n---EXPECTED---\n{expected}\n\n", {
- input: input_code,
- output: output,
- expected: expect
- });
- }
- }
- var tests = parse_test(path.resolve(dir, file));
- for (var i in tests) if (tests.hasOwnProperty(i)) {
- test_case(tests[i]);
- }
- }
- files.forEach(function(file){
- test_file(file);
- });
-}
-
-function parse_test(file) {
- var script = fs.readFileSync(file, "utf8");
- var ast = U.parse(script, {
- filename: file
- });
- var tests = {};
- var tw = new U.TreeWalker(function(node, descend){
- if (node instanceof U.AST_LabeledStatement
- && tw.parent() instanceof U.AST_Toplevel) {
- var name = node.label.name;
- tests[name] = get_one_test(name, node.body);
- return true;
- }
- if (!(node instanceof U.AST_Toplevel)) croak(node);
- });
- ast.walk(tw);
- return tests;
-
- function croak(node) {
- throw new Error(tmpl("Can't understand test file {file} [{line},{col}]\n{code}", {
- file: file,
- line: node.start.line,
- col: node.start.col,
- code: make_code(node, false)
- }));
- }
-
- function get_one_test(name, block) {
- var test = { name: name, options: {} };
- var tw = new U.TreeWalker(function(node, descend){
- if (node instanceof U.AST_Assign) {
- if (!(node.left instanceof U.AST_SymbolRef)) {
- croak(node);
- }
- var name = node.left.name;
- test[name] = evaluate(node.right);
- return true;
- }
- if (node instanceof U.AST_LabeledStatement) {
- assert.ok(
- node.label.name == "input" || node.label.name == "expect",
- tmpl("Unsupported label {name} [{line},{col}]", {
- name: node.label.name,
- line: node.label.start.line,
- col: node.label.start.col
- })
- );
- var stat = node.body;
- if (stat instanceof U.AST_BlockStatement) {
- if (stat.body.length == 1) stat = stat.body[0];
- else if (stat.body.length == 0) stat = new U.AST_EmptyStatement();
- }
- test[node.label.name] = stat;
- return true;
- }
- });
- block.walk(tw);
- return test;
- };
-}
-
-function make_code(ast, beautify) {
- if (arguments.length == 1) beautify = true;
- var stream = U.OutputStream({ beautify: beautify });
- ast.print(stream);
- return stream.get();
-}
-
-function evaluate(code) {
- if (code instanceof U.AST_Node)
- code = make_code(code);
- return new Function("return(" + code + ")")();
-}
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/tools/node.js b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/tools/node.js
deleted file mode 100644
index cf87628d..00000000
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/node_modules/transformers/node_modules/uglify-js/tools/node.js
+++ /dev/null
@@ -1,164 +0,0 @@
-var path = require("path");
-var fs = require("fs");
-var vm = require("vm");
-var sys = require("util");
-
-var UglifyJS = vm.createContext({
- sys : sys,
- console : console,
- MOZ_SourceMap : require("source-map")
-});
-
-function load_global(file) {
- file = path.resolve(path.dirname(module.filename), file);
- try {
- var code = fs.readFileSync(file, "utf8");
- return vm.runInContext(code, UglifyJS, file);
- } catch(ex) {
- // XXX: in case of a syntax error, the message is kinda
- // useless. (no location information).
- sys.debug("ERROR in file: " + file + " / " + ex);
- process.exit(1);
- }
-};
-
-var FILES = exports.FILES = [
- "../lib/utils.js",
- "../lib/ast.js",
- "../lib/parse.js",
- "../lib/transform.js",
- "../lib/scope.js",
- "../lib/output.js",
- "../lib/compress.js",
- "../lib/sourcemap.js",
- "../lib/mozilla-ast.js"
-].map(function(file){
- return path.join(path.dirname(fs.realpathSync(__filename)), file);
-});
-
-FILES.forEach(load_global);
-
-UglifyJS.AST_Node.warn_function = function(txt) {
- sys.error("WARN: " + txt);
-};
-
-// XXX: perhaps we shouldn't export everything but heck, I'm lazy.
-for (var i in UglifyJS) {
- if (UglifyJS.hasOwnProperty(i)) {
- exports[i] = UglifyJS[i];
- }
-}
-
-exports.minify = function(files, options) {
- options = UglifyJS.defaults(options, {
- outSourceMap : null,
- sourceRoot : null,
- inSourceMap : null,
- fromString : false,
- warnings : false,
- mangle : {},
- output : null,
- compress : {}
- });
- if (typeof files == "string")
- files = [ files ];
-
- // 1. parse
- var toplevel = null;
- files.forEach(function(file){
- var code = options.fromString
- ? file
- : fs.readFileSync(file, "utf8");
- toplevel = UglifyJS.parse(code, {
- filename: options.fromString ? "?" : file,
- toplevel: toplevel
- });
- });
-
- // 2. compress
- if (options.compress) {
- var compress = { warnings: options.warnings };
- UglifyJS.merge(compress, options.compress);
- toplevel.figure_out_scope();
- var sq = UglifyJS.Compressor(compress);
- toplevel = toplevel.transform(sq);
- }
-
- // 3. mangle
- if (options.mangle) {
- toplevel.figure_out_scope();
- toplevel.compute_char_frequency();
- toplevel.mangle_names(options.mangle);
- }
-
- // 4. output
- var map = null;
- var inMap = null;
- if (options.inSourceMap) {
- inMap = fs.readFileSync(options.inSourceMap, "utf8");
- }
- if (options.outSourceMap) map = UglifyJS.SourceMap({
- file: options.outSourceMap,
- orig: inMap,
- root: options.sourceRoot
- });
- var output = { source_map: map };
- if (options.output) {
- UglifyJS.merge(output, options.output);
- }
- var stream = UglifyJS.OutputStream(output);
- toplevel.print(stream);
- return {
- code : stream + "",
- map : map + ""
- };
-};
-
-// exports.describe_ast = function() {
-// function doitem(ctor) {
-// var sub = {};
-// ctor.SUBCLASSES.forEach(function(ctor){
-// sub[ctor.TYPE] = doitem(ctor);
-// });
-// var ret = {};
-// if (ctor.SELF_PROPS.length > 0) ret.props = ctor.SELF_PROPS;
-// if (ctor.SUBCLASSES.length > 0) ret.sub = sub;
-// return ret;
-// }
-// return doitem(UglifyJS.AST_Node).sub;
-// }
-
-exports.describe_ast = function() {
- var out = UglifyJS.OutputStream({ beautify: true });
- function doitem(ctor) {
- out.print("AST_" + ctor.TYPE);
- var props = ctor.SELF_PROPS.filter(function(prop){
- return !/^\$/.test(prop);
- });
- if (props.length > 0) {
- out.space();
- out.with_parens(function(){
- props.forEach(function(prop, i){
- if (i) out.space();
- out.print(prop);
- });
- });
- }
- if (ctor.documentation) {
- out.space();
- out.print_string(ctor.documentation);
- }
- if (ctor.SUBCLASSES.length > 0) {
- out.space();
- out.with_block(function(){
- ctor.SUBCLASSES.forEach(function(ctor, i){
- out.indent();
- doitem(ctor);
- out.newline();
- });
- });
- }
- };
- doitem(UglifyJS.AST_Node);
- return out + "";
-};
diff --git a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/package.json b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/package.json
index f2a56517..8878be4b 100644
--- a/workshops/monte-carlo-on-ec2-spot-fleet/src/web/package.json
+++ b/workshops/monte-carlo-on-ec2-spot-fleet/src/web/package.json
@@ -6,14 +6,14 @@
"start": "node ./bin/www"
},
"dependencies": {
- "body-parser": "~1.17.1",
+ "aws-sdk": "^2.488.0",
+ "body-parser": "^1.19.0",
"cookie-parser": "~1.4.3",
"debug": "~2.6.3",
- "express": "~4.15.2",
+ "express": "^4.17.1",
"express-validator": "^4.2.1",
"jade": "~1.11.0",
- "morgan": "~1.8.1",
- "serve-favicon": "~2.4.2",
- "aws-sdk": "^2.133.0"
+ "morgan": "~>1.9.1",
+ "serve-favicon": "~2.4.2"
}
}