diff --git a/angularjs-frontend/app/scripts/components/BoardList/KanbanBoardList.scss b/angularjs-frontend/app/scripts/components/BoardList/KanbanBoardList.scss index 7ba9a937..cf04e49a 100755 --- a/angularjs-frontend/app/scripts/components/BoardList/KanbanBoardList.scss +++ b/angularjs-frontend/app/scripts/components/BoardList/KanbanBoardList.scss @@ -59,6 +59,14 @@ padding: 0 .5em; position: relative; + .flex { + display: flex; + flex-shrink: 0; + flex-grow: 1; + flex-direction: row; + flex-wrap: wrap; + } + &.m_collapsed { > * { max-height: 12em; diff --git a/angularjs-frontend/app/scripts/components/BoardList/KanbanBoardList.tpl.html b/angularjs-frontend/app/scripts/components/BoardList/KanbanBoardList.tpl.html index c9d2c7db..af3669af 100755 --- a/angularjs-frontend/app/scripts/components/BoardList/KanbanBoardList.tpl.html +++ b/angularjs-frontend/app/scripts/components/BoardList/KanbanBoardList.tpl.html @@ -1,12 +1,12 @@

Available Boards Pick existing or create new

-
+

Create New Board

-
+
{{$index}}

{{brd.title}}

Created {{ brd.createdDate | timeAgo }} by {{brd.createdBy}}
Updated {{ brd.updatedDate | timeAgo }}
diff --git a/angularjs-frontend/app/scripts/components/Column/KanbanColumn.tpl.html b/angularjs-frontend/app/scripts/components/Column/KanbanColumn.tpl.html index 0614cb22..035affaa 100755 --- a/angularjs-frontend/app/scripts/components/Column/KanbanColumn.tpl.html +++ b/angularjs-frontend/app/scripts/components/Column/KanbanColumn.tpl.html @@ -5,7 +5,7 @@

{{ statusVerbose }}: {{ tasks | taskStatus:ctrl.status | count }} diff --git a/angularjs-frontend/app/scripts/services/api.js b/angularjs-frontend/app/scripts/services/api.js index 9d909096..30491049 100755 --- a/angularjs-frontend/app/scripts/services/api.js +++ b/angularjs-frontend/app/scripts/services/api.js @@ -220,7 +220,12 @@ app.factory('ApiService', ['$http', '$q', 'AuthenticationService', ($http, $q, a }, params, data - })); + }).then( + data => data, + data => { + console.error(data); + return data + })); } //function wrap(fn, data) { diff --git a/angularjs-frontend/app/scripts/services/serverListener.js b/angularjs-frontend/app/scripts/services/serverListener.js index 8882d7a7..1ff7e435 100755 --- a/angularjs-frontend/app/scripts/services/serverListener.js +++ b/angularjs-frontend/app/scripts/services/serverListener.js @@ -17,6 +17,7 @@ app.factory('ServerListenerService', ['$rootScope', '$log', '$window', ($rootSco const refId = Math.random().toString().substr(2); subscribers = [{ refId, eventName, callback }, ...subscribers]; getListener(); + $log.log('App adds listener to ' + eventName + ' event'); return () => { subscribers = subscribers.filter(s => s.refId !== refId); } @@ -31,8 +32,11 @@ app.factory('ServerListenerService', ['$rootScope', '$log', '$window', ($rootSco stomp.heartbeat.outgoing = 5000; stomp.heartbeat.incoming = 0; + $log.log('App connecting to stomp server'); stomp.connect({}, () => { + $log.log('App connected to stomp server'); subscription = stomp.subscribe('/events', (msg) => { + $log.log('App received a message from stomp server'); const { body = null, ack, nack, command } = msg; @@ -96,7 +100,12 @@ app.factory('ServerListenerService', ['$rootScope', '$log', '$window', ($rootSco data: { ...eventDataObj, id: entityId }, msg: { ...bodyObj, eventData: { ...eventDataObj } } // copy into empty object }; - $window._lastSocketMessage = result; + + if (!$window._lastSocketMessage || !$window._lastSocketMessage.length) { + $window._lastSocketMessage = []; + } + // $window.alert(1); + $window._lastSocketMessage.push(result); const handlers = subscribers .filter((s) => (s.eventName === evtType) || (s.eventName === '*')); diff --git a/e2e-tests/.babelrc b/e2e-tests/.babelrc new file mode 100644 index 00000000..b1bfaf4c --- /dev/null +++ b/e2e-tests/.babelrc @@ -0,0 +1,5 @@ +{ + "presets": ["es2015", "stage-0"], + "plugins": ["transform-runtime", "transform-regenerator"], + "sourceMaps": true +} diff --git a/e2e-tests/apropos.spec.js b/e2e-tests/apropos.spec.js new file mode 100644 index 00000000..d0fdd626 --- /dev/null +++ b/e2e-tests/apropos.spec.js @@ -0,0 +1,15 @@ +/** + * Created by andrew on 31/12/15. + */ +describe('Selenium Test Case', function() { + + it('should execute test case without errors', done => { + //var text, value, bool, source, url, title; + //var TestVars = {}; + browser.get("/"); + browser.sleep(10000).then(() => { + done(); + }); + }); + +}); \ No newline at end of file diff --git a/e2e-tests/helpers/draggability.js b/e2e-tests/helpers/draggability.js new file mode 100644 index 00000000..db4b7fdd --- /dev/null +++ b/e2e-tests/helpers/draggability.js @@ -0,0 +1,16 @@ +/** + * Created by andrew on 28/01/16. + */ +export default function(elementToDrag, elementToDragTo) { + + const targetOffset = { x: -10, y: -10 }; + return browser.actions(). + mouseMove(elementToDrag). + mouseDown(elementToDrag). + mouseMove(elementToDragTo, targetOffset). + mouseUp(elementToDragTo, targetOffset). + perform(); + + // return browser.sleep(300); + +} \ No newline at end of file diff --git a/e2e-tests/helpers/injector.js b/e2e-tests/helpers/injector.js new file mode 100644 index 00000000..ebb98866 --- /dev/null +++ b/e2e-tests/helpers/injector.js @@ -0,0 +1,30 @@ +/** + * Created by andrew on 27/01/16. + */ +// http://blog.ng-book.com/accessing-angulars-injector-from-within-protractor/ +'use strict'; + +export const get = function (moduleName) { + return browser.executeAsyncScript( + function(moduleName, callback) { + callback(window.$injector.get(moduleName)); + }, moduleName); +}; + +export const invoke = function (fn, self, locals) { + return browser.executeScript(function(fn, self, locals) { + window.$injector.invoke(fn, self, locals); + }, fn, self, locals); +}; + +export const clearReceivedSocketMessages = function() { + return browser.executeScript('window._lastSocketMessage = [];'); +}; + +export const getReceivedSocketMessages = function() { + return browser.executeScript('return window._lastSocketMessage;'); +}; + +export const setLastSocketMessage = function(val) { + return browser.executeScript('window._lastSocketMessage = [arguments[0]];', val); +}; \ No newline at end of file diff --git a/e2e-tests/helpers/random.js b/e2e-tests/helpers/random.js new file mode 100644 index 00000000..99b91fda --- /dev/null +++ b/e2e-tests/helpers/random.js @@ -0,0 +1,18 @@ +/** + * Created by andrew on 29/01/16. + */ +function* getRandom(templateSet, len) { + if (len) { + yield templateSet[Math.floor(Math.random() * templateSet.length)]; + yield* getRandom(templateSet, len - 1); + } +} + +export function getRandomLatinAlpha(len) { + const templateSet = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'; + return [...getRandom(templateSet, len)].join(''); +} + +export function getRandomEmail() { + return (`${getRandomLatinAlpha(20)}@${getRandomLatinAlpha(10)}.${getRandomLatinAlpha(3)}`).toLowerCase(); +} \ No newline at end of file diff --git a/e2e-tests/helpers/schemas.js b/e2e-tests/helpers/schemas.js new file mode 100644 index 00000000..0ee8ad53 --- /dev/null +++ b/e2e-tests/helpers/schemas.js @@ -0,0 +1,18 @@ +/** + * Created by andrew on 28/01/16. + */ +import BoardCreatedEventSchema from '../../schemas/websocket-events-schema/BoardCreatedEvent.json'; +import TaskCreatedEventSchema from '../../schemas/websocket-events-schema/TaskCreatedEvent.json'; +import TaskDeletedEventSchema from '../../schemas/websocket-events-schema/TaskDeletedEvent.json'; +import TaskScheduledEventSchema from '../../schemas/websocket-events-schema/TaskScheduledEvent.json'; +import TaskStartedEventSchema from '../../schemas/websocket-events-schema/TaskStartedEvent.json'; +import TaskCompletedEventSchema from '../../schemas/websocket-events-schema/TaskCompletedEvent.json'; +import TaskBacklogEventSchema from '../../schemas/websocket-events-schema/TaskBacklogEvent.json'; + +export const BoardCreatedEvent = BoardCreatedEventSchema; +export const TaskCreatedEvent = TaskCreatedEventSchema; +export const TaskDeletedEvent = TaskDeletedEventSchema; +export const TaskScheduledEvent = TaskScheduledEventSchema; +export const TaskStartedEvent = TaskStartedEventSchema; +export const TaskCompletedEvent = TaskCompletedEventSchema; +export const TaskBacklogEvent = TaskBacklogEventSchema; \ No newline at end of file diff --git a/e2e-tests/helpers/ws-helper.js b/e2e-tests/helpers/ws-helper.js new file mode 100644 index 00000000..a9994447 --- /dev/null +++ b/e2e-tests/helpers/ws-helper.js @@ -0,0 +1,55 @@ +/** + * Created by andrew on 10/25/16. + */ + +// https://github.com/andresdominguez/protractor-meetup/blob/master/test/e2e/api-helper.js +// http://stackoverflow.com/questions/20619225/accessing-angular-inside-protractor-test + +// BoardCreatedEvent +export const BoardCreatedEventHelper = () => { + return browser.executeAsyncScript(function(callback) { + const ServerListenerService = window.$injector.get('ServerListenerService'); + const $log = window.$injector.get('$log'); + $log.log('getting ServerListenerService:' + (new Date() - 0)); + ServerListenerService.on('BoardCreatedEvent', function(data) { + $log.log('received event ServerListenerService: ' + (new Date() - 0)); + callback(data); + }); + }); +}; + +// TaskCreatedEvent +export const TaskCreatedEventHelper = () => browser.executeAsyncScript(function(callback) { + const ServerListenerService = window.$injector.get('ServerListenerService'); + ServerListenerService.on('TaskCreatedEvent', callback); +}); + +// TaskDeletedEvent +export const TaskDeletedEventHelper = () => browser.executeAsyncScript(function(callback) { + const ServerListenerService = window.$injector.get('ServerListenerService'); + ServerListenerService.on('TaskDeletedEvent', callback); +}); + +// TaskStartedEvent +export const TaskStartedEventHelper = () => browser.executeAsyncScript(function(callback) { + const ServerListenerService = window.$injector.get('ServerListenerService'); + ServerListenerService.on('TaskStartedEvent', callback); +}); + +// TaskScheduledEvent +export const TaskScheduledEventHelper = () => browser.executeAsyncScript(function(callback) { + const ServerListenerService = window.$injector.get('ServerListenerService'); + ServerListenerService.on('TaskScheduledEvent', callback); +}); + +// TaskCompletedEvent +export const TaskCompletedEventHelper = () => browser.executeAsyncScript(function(callback) { + const ServerListenerService = window.$injector.get('ServerListenerService'); + ServerListenerService.on('TaskCompletedEvent', callback); +}); + +// TaskBacklogEvent +export const TaskBacklogEventHelper = () => browser.executeAsyncScript(function(callback) { + const ServerListenerService = window.$injector.get('ServerListenerService'); + ServerListenerService.on('TaskBacklogEvent', callback); +}); diff --git a/e2e-tests/kanban-e2e.js b/e2e-tests/kanban-e2e.js new file mode 100644 index 00000000..bf48cde5 --- /dev/null +++ b/e2e-tests/kanban-e2e.js @@ -0,0 +1,55 @@ +describe('Selenium Test Case', function() { + it('should execute test case without errors', function() { + var text, value, bool, source, url, title; + var TestVars = {}; + browser.get("http://localhost:5000/"); + element(by.css("button.btn.btn-default")).click(); + element(by.id("inputEmail1")).sendKeys("arevinsky@gmail.com"); + element(by.css("button.btn.btn-default")).click(); + element(by.linkText("Sign Out")).click(); + element(by.id("inputEmail1")).sendKeys(); + element(by.id("inputEmail1")).sendKeys("arevinsky@gmail.com"); + element(by.id("inputEmail1")).sendKeys("arevinsky@gmail.com"); + element(by.id("inputEmail1")).click(); + element(by.css("button.btn.btn-default")).click(); + element(by.xpath("//div[@class='b_board_list']/div[1]/div/div[2]/div")).click(); + element(by.linkText("Close ×")).click(); + element(by.xpath("//div[@class='b_board_list']//span[.='2']")).click(); + element(by.linkText("Close ×")).click(); + element(by.xpath("//div[@class='b_board_list']/div[1]/div/div[4]/div")).click(); + element(by.linkText("Close ×")).click(); + element(by.xpath("//div[@class='b_board_list']/div[1]/div/div[1]/div")).click(); + element(by.css("button.btn.btn-primary")).click(); + element(by.id("inpBoardName")).sendKeys("New test board"); + element(by.css("div.modal-body")).click(); + element(by.id("inpBoardDesc")).sendKeys("simple description"); + element(by.css("button.btn.btn-primary")).click(); + element(by.xpath("//div[@class='b_board_list']//h4[.='New test board']")).click(); + element(by.css("div.b_cnt.m_hor")).click(); + element(by.xpath("//div[@class='b_board']//div[normalize-space(.)='']")).click(); + element(by.xpath("//div[@class='b_board']/div[3]/div[2]/div/div/div")).click(); + element(by.xpath("//div[@class='b_board']/div[3]/div[3]/div/div/div")).click(); + element(by.linkText("Create Task")).click(); + element(by.id("inpTaskTitle")).sendKeys("test task 01"); + element(by.id("inpTaskDesc")).sendKeys("simple description"); + element(by.css("div.modal-footer")).click(); + element(by.css("button.btn.btn-primary")).click(); + element(by.xpath("//div[@class='b_cnt-body']/div/div[3]/div[2]")).click(); + element(by.xpath("//div[@class='b_board']/div[3]/div[1]/div/div/div")).click(); + element(by.xpath("//div[@class='b_board']//div[normalize-space(.)='']")).click(); + element(by.xpath("//div[@class='b_board']/div[3]/div[2]/div/div/div")).click(); + element(by.xpath("//div[@class='b_board']/div[3]/div[3]/div/div/div")).click(); + element(by.linkText("H")).click(); + element(by.css("div.modal-dialog > div.modal-content > div.modal-footer > button.btn.btn-default")).click(); + element(by.xpath("//div[@class='b_board']/div[3]/div[3]/div/div/div")).click(); + element(by.css("div.b_cnt.m_hor")).click(); + element(by.xpath("//div[@class='b_cnt-body']/div/div[3]/div[1]/a[2]")).click(); + element(by.xpath("//div[@id='deleteTaskModal']/div/form/div/div[2]/div[1]/input")).click(); + element(by.xpath("//div[@id='deleteTaskModal']/div/form/div/div[2]/div[2]/input")).click(); + element(by.xpath("//div[@id='deleteTaskModal']/div/form/div/div[2]/div[3]/textarea")).click(); + element(by.css("button.btn.btn-danger")).click(); + element(by.linkText("Close ×")).click(); + element(by.xpath("//div[@class='b_board_list']/div[1]/div/div[14]/div")).click(); + element(by.linkText("Sign Out")).click(); + }); +}); diff --git a/e2e-tests/kanban.spec.js b/e2e-tests/kanban.spec.js new file mode 100644 index 00000000..8671ca6f --- /dev/null +++ b/e2e-tests/kanban.spec.js @@ -0,0 +1,246 @@ +/** + * Created by andrew on 29/12/15. + */ +'use strict'; + +import 'babel-polyfill'; + +console.log('kanban.spec.js is loaded'); + +import { getRandomEmail } from './helpers/random'; + +xdescribe('Logging in to the app', () => { + + const email = getRandomEmail(); + console.log(`Login email generated: ${email}`); + + beforeAll(done => { + browser.get('/'); + browser.sleep(10000).then(() => { + const loginUrl = browser.getCurrentUrl(); + + loginUrl.then((urlVal) => { + if (!/\/login$/i.test(urlVal)) { + console.log(urlVal); + if (browser.isElementPresent(element(by.linkText("Sign Out")))) { + element(by.linkText("Sign Out")).click(); + } + } + done(); + + }, done); + + }); + + }); + + it('first visit lands on a login page', (done) => { + browser.get('/'); + browser.sleep(1000).then(() => { + const loginUrl = browser.getCurrentUrl(); + expect(loginUrl).toMatch(/\/login$/i); + done(); + }); + }); + + it('allows logging-in for any email', done => { + element(by.id("inputEmail1")).sendKeys(email); + element(by.css("button.btn.btn-default")).click(); + + browser.sleep(10000).then(() => { + + const loggedInUrl = browser.getCurrentUrl(); + //console.log(loggedInUrl); + expect(loggedInUrl).not.toMatch(/\/login$/i); + expect(loggedInUrl).toMatch(/\/$/); + done(); + }); + + }); + + it('when logged-in, log out option is available. Leads to login page', done => { + + const signOutLnk = element(by.linkText("Sign Out")); + + expect(signOutLnk.isPresent()).toBe(true); + + signOutLnk.click(); + + browser.sleep(1000).then(() => { + const loginUrl = browser.getCurrentUrl(); + expect(loginUrl).toMatch(/\/login$/i); + done(); + }); + + }); + + describe('When logged in..', () => { + + beforeAll(done => { + browser.get('/'); + browser.sleep(10000).then(() => { + const loginUrl = browser.getCurrentUrl(); + + loginUrl.then((urlVal) => { + if (!/\/login$/i.test(urlVal)) { + console.log(urlVal); + if (browser.isElementPresent(element(by.linkText("Sign Out")))) { + element(by.linkText("Sign Out")).click(); + } + } + element(by.id("inputEmail1")).sendKeys(email); + element(by.css("button.btn.btn-default")).click(); + + browser.sleep(1000).then(() => { + const loggedInUrl = browser.getCurrentUrl(); + loggedInUrl.then(urlVal => { + console.log(urlVal); + }); + + done(); + }); + + }, done); + + }); + + }); + + xit('has all the steps recorded earlier', (done) => { + const actions = [ + () => { + return element(by.xpath("//div[@class='b_board_list']/div[1]/div/div[2]/div")).click(); + }, + () => { + return element(by.linkText("Close ×")).click(); + }, + () => { + return element(by.xpath("//div[@class='b_board_list']//span[.='2']")).click(); + }, + () => { return element(by.linkText("Close ×")).click(); + }, + () => { return element(by.xpath("//div[@class='b_board_list']/div[1]/div/div[4]/div")).click(); + }, + () => { return element(by.linkText("Close ×")).click(); + }, + () => { return element(by.xpath("//div[@class='b_board_list']/div[1]/div/div[1]/div")).click(); + }, + () => { return element(by.css("button.btn.btn-primary")).click(); + }, + () => { return element(by.id("inpBoardName")).sendKeys("New test board"); + }, + () => { return element(by.css("div.modal-body")).click(); + }, + () => { return element(by.id("inpBoardDesc")).sendKeys("simple description"); + }, + () => { return element(by.css("button.btn.btn-primary")).click(); + }, + () => { return element(by.xpath("//div[@class='b_board_list']//h4[.='New test board']")).click(); + }, + () => { return element(by.css("div.b_cnt.m_hor")).click(); + }, + () => { return element(by.xpath("//div[@class='b_board']//div[normalize-space(.)='']")).click(); + }, + () => { return element(by.xpath("//div[@class='b_board']/div[3]/div[2]/div/div/div")).click(); + }, + () => { return element(by.xpath("//div[@class='b_board']/div[3]/div[3]/div/div/div")).click(); + }, + () => { return element(by.linkText("Create Task")).click(); + }, + () => { return element(by.id("inpTaskTitle")).sendKeys("test task 01"); + }, + () => { return element(by.id("inpTaskDesc")).sendKeys("simple description"); + }, + () => { return element(by.css("div.modal-footer")).click(); + }, + () => { return element(by.css("button.btn.btn-primary")).click(); + }, + () => { return element(by.xpath("//div[@class='b_cnt-body']/div/div[3]/div[2]")).click(); + }, + () => { return element(by.xpath("//div[@class='b_board']/div[3]/div[1]/div/div/div")).click(); + }, + () => { return element(by.xpath("//div[@class='b_board']//div[normalize-space(.)='']")).click(); + }, + () => { return element(by.xpath("//div[@class='b_board']/div[3]/div[2]/div/div/div")).click(); + }, + () => { return element(by.xpath("//div[@class='b_board']/div[3]/div[3]/div/div/div")).click(); + }, + () => { return element(by.linkText("H")).click(); + }, + () => { return element(by.css("div.modal-dialog > div.modal-content > div.modal-footer > button.btn.btn-default")).click(); + }, + () => { return element(by.xpath("//div[@class='b_board']/div[3]/div[3]/div/div/div")).click(); + }, + () => { return element(by.css("div.b_cnt.m_hor")).click(); + }, + () => { return element(by.xpath("//div[@class='b_cnt-body']/div/div[3]/div[1]/a[2]")).click(); + }, + () => { return element(by.xpath("//div[@id='deleteTaskModal']/div/form/div/div[2]/div[1]/input")).click(); + }, + () => { return element(by.xpath("//div[@id='deleteTaskModal']/div/form/div/div[2]/div[2]/input")).click(); + }, + () => { return element(by.xpath("//div[@id='deleteTaskModal']/div/form/div/div[2]/div[3]/textarea")).click(); + }, + () => { return element(by.css("button.btn.btn-danger")).click(); + }, + () => { return element(by.linkText("Close ×")).click(); + }, + () => { return element(by.xpath("//div[@class='b_board_list']/div[1]/div/div[14]/div")).click(); + }, + () => { + done(); + } + ]; + + let count = 1; + actions.reduce((p, next) => { + return p.then(() => { + try { + console.log(count++); + const result = next(); + if (result.then) { + result.then(() => { + return true; + }, (err) => { + console.log(err); + return true; + }); + } + } catch (ex) { + console.log(ex); + } + return browser.sleep(150); + }); + }, Promise.resolve(true)); + + + }); + + it('allows to add a board', done => { + + browser.get('/'); + browser.sleep(500).then(() => { + + + const addBoard = element.all(by.css('[data-target="#newBoardModal"]')); + expect(addBoard.count()).toEqual(1); + expect(element(by.css('#newBoardModal')).isDisplayed()).toBe(false); + + + addBoard.click(); + browser.sleep(500).then(() => { + + expect(element(by.css('#newBoardModal')).isDisplayed()).toBe(true); + done(); + }); + + }); + + + + }); + + + }); + +}); diff --git a/e2e-tests/package.json b/e2e-tests/package.json new file mode 100644 index 00000000..de03e71c --- /dev/null +++ b/e2e-tests/package.json @@ -0,0 +1,35 @@ +{ + "name": "e2e-tests", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "postinstall": "./node_modules/protractor/bin/webdriver-manager update", + "test": "babel-node ./node_modules/protractor/bin/protractor --baseUrl http://${SERVICE_HOST:-localhost}:${DOCKER_PORT:-8080}" + }, + "author": "", + "license": "ISC", + "dependencies": { + "babel-core": "^6.17.0", + "babel-plugin-transform-es2015-template-literals": "^6.8.0", + "babel-plugin-transform-regenerator": "^6.16.1", + "babel-plugin-transform-runtime": "^6.15.0", + "babel-polyfill": "^6.16.0", + "babel-preset-es2015": "^6.16.0", + "babel-preset-stage-0": "^6.16.0", + "babel-runtime": "^6.11.6", + "chai": "^3.5.0", + "chai-json-schema": "^1.4.0", + "jasmine": "^2.5.2", + "jasmine-core": "^2.5.2", + "jasmine-spec-reporter": "^2.7.0", + "protractor": "^4.0.9", + "protractor-jasmine2-screenshot-reporter": "^0.3.2", + "should": "^11.1.1", + "should-http": "^0.0.4" + }, + "devDependencies": { + "babel-cli": "^6.16.0", + "protractor-console": "^2.0.1" + } +} diff --git a/e2e-tests/protractor.conf.js b/e2e-tests/protractor.conf.js new file mode 100644 index 00000000..dea2023b --- /dev/null +++ b/e2e-tests/protractor.conf.js @@ -0,0 +1,62 @@ +/** + * Created by andrew on 29/12/15. + */ +'use strict'; + +require('babel-core/register')({ + "presets": ["es2015", "stage-0"], + "plugins": ["transform-runtime", "transform-regenerator"], + "sourceMaps": true +}); + +var HtmlScreenshotReporter = require('protractor-jasmine2-screenshot-reporter'); + +var screenshotReporter = new HtmlScreenshotReporter({ + dest: 'target/screenshots', + filename: 'report_' + (new Date() - 0) + '.html', + cleanDestination: true, + showSummary: true, + showConfiguration: true, + // reportTitle: false, + ignoreSkippedSpecs: true, + showQuickLinks: true +}); + + +console.log('e2e-tests/protractor.conf.js is loaded'); + +exports.config = { + specs: ['*spec.js'], + showStack: true, + capabilities: { + browserName: 'chrome', + "loggingPrefs": { + "driver": "ALL", + "server": "ALL", + "browser": "ALL"} + }, + framework: 'jasmine2', + beforeLaunch: function() { + return new Promise(function(resolve){ + screenshotReporter.beforeLaunch(resolve); + }); + }, +// Close the report after all tests finish + afterLaunch: function(exitCode) { + return new Promise(function(resolve){ + screenshotReporter.afterLaunch(resolve.bind(this, exitCode)); + }); + }, + onPrepare: function() { + // Override the timeout for webdriver. + browser.manage().timeouts().setScriptTimeout(60000); + + // browser.ignoreSynchronization = true; + + var SpecReporter = require('jasmine-spec-reporter'); + // add jasmine spec reporter + jasmine.getEnv().addReporter(new SpecReporter({displayStacktrace: 'all'})); + jasmine.getEnv().addReporter(screenshotReporter); + + } +}; \ No newline at end of file diff --git a/e2e-tests/sockets.spec.js b/e2e-tests/sockets.spec.js new file mode 100644 index 00000000..906d26b8 --- /dev/null +++ b/e2e-tests/sockets.spec.js @@ -0,0 +1,356 @@ +/** + * Created by andrew on 27/01/16. + */ +import 'babel-polyfill'; +import chai from 'chai'; +import chaiJsonSchema from 'chai-json-schema'; +// import * as injector from './helpers/injector'; +import * as schemas from './helpers/schemas'; +import * as ws from './helpers/ws-helper'; + +import dragDrop from './helpers/draggability'; + +import { getRandomEmail, getRandomLatinAlpha } from './helpers/random'; + +const EC = protractor.ExpectedConditions; + +chai.use(chaiJsonSchema); + +console.log('nodejs-server/test/e2e/sockets.spec.js is loaded'); + +const login = (testEmail) => { + + //# Go to the login URL + browser.get('/#/login', 200); + + return browser.sleep(500).then(() => { + + //# Fill out the form and click the button + element(by.id("inputEmail1")).sendKeys(testEmail); + element(by.css("button.btn.btn-default")).click(); + + return browser.sleep(500); + + }); + +}; + +describe('Subscribe to sockets', () => { + + afterEach(function() { + browser.manage().logs().get('browser').then(function(browserLog) { + // expect(browserLog.length).toEqual(0); + // Uncomment to actually see the log. + console.log('log: ' + require('util').inspect(browserLog)); + }); + }); + + + const boardTitle = `New test board ${ getRandomLatinAlpha(8) }`; + const boardDescription = `New test board ${ getRandomLatinAlpha(8) }`; + const testEmail = getRandomEmail(); + + it('should bring me to boards list when logged in', (done) => { + + + //# Overwrite the socketService module with a mocked version + login(testEmail).then(() => { + + expect(browser.getLocationAbsUrl()).toBe('/'); + done(); + + }); + + }); + + it('should be able to create a board and receive BoardCreatedEvent', (done) => { + + browser.get('/'); + console.log(new Date() - 0); + + browser.sleep(700).then(() => { + console.log(new Date() - 0); + + console.log('Open dialog..'); + const addBoard = element(by.css('[data-target="#newBoardModal"]')); + + // console.log('Expecting #newBoardModal trigger to be present'); + // expect(addBoard.isDisplayed()).toBe(true); + browser.wait(EC.elementToBeClickable(addBoard), 10000, "The link addBoard is still not clickable"); + + addBoard.click(); + + console.log(new Date() - 0); + return browser.sleep(700); + }).then(() => { + console.log('Fill dialog..'); + console.log(new Date() - 0); + + console.log('Expecting #newBoardModal modal to be shown'); + + const newModal = element(by.css('#newBoardModal')); + browser.wait(EC.presenceOf(newModal), 10000, "The newModal is still not clickable"); + + element(by.id("inpBoardName")).sendKeys(boardTitle); + element(by.id("inpBoardDesc")).sendKeys(boardDescription); + + browser.sleep(1000).then(() => { + element(by.css("button.btn.btn-primary")).click(); + }); + + return ws.BoardCreatedEventHelper(); + + }).then((...messages) => { + console.log('processing messages..'); + console.log(messages); + + expect(messages.length).toEqual(1); + const [{ type = null, data = {}, msg = null} = {}, ...rest] = messages; + // console.log(rest); + + expect(type).toEqual("BoardCreatedEvent"); + + expect(data.title).toEqual(boardTitle); + expect(data.updatedBy).toEqual(testEmail); + expect(data.createdBy).toEqual(testEmail); + + chai.expect(data).to.be.jsonSchema(schemas.BoardCreatedEvent); + + return browser.sleep(7000); + }).then(() => { + console.log('board created'); + + console.log(new Date() - 0); + console.log('select this board:', `//div[@class='b_board_title']//h4[.='${boardTitle}']`); + + element(by.xpath(`//div[contains(@class, "b_board_title")]//h4[contains(text(),'${boardTitle}') or contains('${boardTitle}', text())]`)).click(); + + return browser.sleep(1000); + }).then(done); + + }); + + describe('Tasks events', () => { + + //beforeAll((done) => { + // element(by.xpath(`//div[@class='b_board_list']//h4[.='${boardTitle}']`)).click(); + // browser.sleep(1000); + //}); + // + // beforeEach((done) => { + // injector.clearReceivedSocketMessages().then(done); + // }); + // + // afterEach((done) => { + // injector.clearReceivedSocketMessages().then(done); + // }); + + const taskTitle = `test task ${ getRandomLatinAlpha(8) }`; + const taskDescription = `test task description ${ getRandomLatinAlpha(8) }`; + + let taskId = null; + + it('Tasks: 1. TaskCreatedEvent', (done) => { + console.log(new Date() - 0); + console.log('click on create task '); + + const createTaskLink = element(by.linkText("Create Task")); + + browser.wait(EC.elementToBeClickable(createTaskLink), 10000, "The link createTaskLink is still not clickable"); + + createTaskLink.click(); + + browser.sleep(500).then(() => { + console.log(new Date() - 0); + + element(by.id("inpTaskTitle")).sendKeys(taskTitle); + element(by.id("inpTaskDesc")).sendKeys(taskDescription); + + browser.sleep(1000).then(() => { + element(by.css("button.btn.btn-primary")).click(); + }); + + return ws.TaskCreatedEventHelper(); + + }).then((...messages) => { + + console.log(messages); + + expect(messages.length).toEqual(1); + const [{ type = null, data = {}, msg = null} = {}, ...rest] = messages; + console.log(rest); + + expect(type).toEqual("TaskCreatedEvent"); + + expect(data.title).toEqual(taskTitle); + expect(data.description).toEqual(taskDescription); + expect(data.updatedBy).toEqual(testEmail); + expect(data.createdBy).toEqual(testEmail); + + taskId = data.id; + + expect(taskId).not.toBeNull(); + + chai.expect(data).to.be.jsonSchema(schemas.TaskCreatedEvent); + + return browser.sleep(500); + + }).then(done); + + }); + + it('Tasks: 2. TaskScheduledEvent', (done) => { + + console.log('Drag task onto "scheduled"'); + console.log('Task ID:' + taskId); + + const taskToDrag = element(by.xpath(`//div[@data-task-id='${taskId}']`)); + const columnToDragTo = element(by.xpath(`//div[@data-column-status='scheduled']`)); + + expect(taskToDrag.isPresent()).toBe(true); + expect(columnToDragTo.isPresent()).toBe(true); + + // injector.clearReceivedSocketMessages(); + + browser.sleep(1000).then(() => { + dragDrop(taskToDrag, columnToDragTo); + }); + + ws.TaskScheduledEventHelper().then((...messages) => { + + console.log(messages); + + expect(messages.length).toEqual(1); + const [{ type = null, data = {}, msg = null} = {}, ...rest] = messages; + console.log(rest); + + expect(type).toEqual("TaskScheduledEvent"); + chai.expect(data).to.be.jsonSchema(schemas.TaskScheduledEvent); + done(); + + }); + + }); + + it('Tasks: 3. TaskStartedEvent', (done) => { + + console.log('Drag task onto "started"'); + + const taskToDrag = element(by.xpath(`//div[@data-task-id='${taskId}']`)); + const columnToDragTo = element(by.xpath(`//div[@data-column-status='started']`)); + + expect(taskToDrag.isPresent()).toBe(true); + expect(columnToDragTo.isPresent()).toBe(true); + + browser.sleep(1000).then(() => { + dragDrop(taskToDrag, columnToDragTo); + }); + + ws.TaskStartedEventHelper().then((...messages) => { + + console.log(messages); + + expect(messages.length).toEqual(1); + const [{ type = null, data = {}, msg = null} = {}, ...rest] = messages; + console.log(rest); + + expect(type).toEqual("TaskStartedEvent"); + chai.expect(data).to.be.jsonSchema(schemas.TaskStartedEvent); + + done(); + }); + + }); + + it('Tasks: 4. TaskCompletedEvent', (done) => { + + console.log('Drag task onto "completed"'); + + const taskToDrag = element(by.xpath(`//div[@data-task-id='${taskId}']`)); + const columnToDragTo = element(by.xpath(`//div[@data-column-status='completed']`)); + + expect(taskToDrag.isPresent()).toBe(true); + expect(columnToDragTo.isPresent()).toBe(true); + + browser.sleep(1000).then(() => { + dragDrop(taskToDrag, columnToDragTo); + }); + + ws.TaskCompletedEventHelper().then((...messages) => { + + console.log(messages); + + expect(messages.length).toEqual(1); + const [{ type = null, data = {}, msg = null} = {}, ...rest] = messages; + console.log(rest); + + expect(type).toEqual("TaskCompletedEvent"); + chai.expect(data).to.be.jsonSchema(schemas.TaskCompletedEvent); + + done(); + }); + + }); + + it('Tasks: 5. TaskBacklogEvent', (done) => { + + console.log('Drag task onto "backlog"'); + + const taskToDrag = element(by.xpath(`//div[@data-task-id='${taskId}']`)); + const columnToDragTo = element(by.xpath(`//div[@data-column-status='backlog']`)); + + expect(taskToDrag.isPresent()).toBe(true); + expect(columnToDragTo.isPresent()).toBe(true); + + browser.sleep(1000).then(() => { + dragDrop(taskToDrag, columnToDragTo); + }); + + ws.TaskBacklogEventHelper().then((...messages) => { + + console.log(messages); + + expect(messages.length).toEqual(1); + const [{ type = null, data = {}, msg = null} = {}, ...rest] = messages; + console.log(rest); + + expect(type).toEqual("TaskBacklogEvent"); + chai.expect(data).to.be.jsonSchema(schemas.TaskBacklogEvent); + + done(); + + }); + + }); + + it('Tasks: 6. TaskDeletedEvent', (done) => { + + console.log('Deleting task'); + element(by.xpath(`//div[@data-task-id='${taskId}']//a[2]`)).click(); + + browser.sleep(700).then(() => { + element(by.css("button.btn.btn-danger")).click(); + }); + + ws.TaskDeletedEventHelper().then((...messages) => { + + console.log(messages); + + expect(messages.length).toEqual(1); + const [{ type = null, data = {}, msg = null} = {}, ...rest] = messages; + console.log(rest); + + expect(type).toEqual("TaskDeletedEvent"); + + console.log(data); + + chai.expect(data).to.be.jsonSchema(schemas.TaskDeletedEvent); + + done(); + }); + + }); + + }); + +}); \ No newline at end of file diff --git a/e2e-tests/yarn.lock b/e2e-tests/yarn.lock new file mode 100644 index 00000000..8aee69c1 --- /dev/null +++ b/e2e-tests/yarn.lock @@ -0,0 +1,2080 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 +"@types/jasmine@^2.2.31": + version "2.5.35" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.35.tgz#5566406dc8417d380d6c2f9562ec3c71ec28ef78" + +"@types/node@^6.0.35": + version "6.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.45.tgz#c4842a9d653d767831e4ff495b6008cc0d579966" + +"@types/q@^0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.30.tgz#fd7ee1af40f21cdd1f519268073b3432ec17d7a3" + +"@types/selenium-webdriver@~2.53.30": + version "2.53.33" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.33.tgz#64672bae3acedf9d9e6bcfa8bdb7c37497751c3d" + +abbrev@1: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + +adm-zip@^0.4.7, adm-zip@0.4.7: + version "0.4.7" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1" + +adm-zip@0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.4.tgz#a61ed5ae6905c3aea58b3a657d25033091052736" + +agent-base@2: + version "2.0.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e" + dependencies: + extend "~3.0.0" + semver "~5.0.1" + +ansi-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +aproba@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" + +are-we-there-yet@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.0 || ^1.1.13" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assertion-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" + +babel-cli@^6.16.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.18.0.tgz#92117f341add9dead90f6fa7d0a97c0cc08ec186" + dependencies: + babel-core "^6.18.0" + babel-polyfill "^6.16.0" + babel-register "^6.18.0" + babel-runtime "^6.9.0" + commander "^2.8.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.0.0" + glob "^5.0.5" + lodash "^4.2.0" + output-file-sync "^1.1.0" + path-is-absolute "^1.0.0" + slash "^1.0.0" + source-map "^0.5.0" + v8flags "^2.0.10" + optionalDependencies: + chokidar "^1.0.0" + +babel-code-frame@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.16.0.tgz#f90e60da0862909d3ce098733b5d3987c97cb8de" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^2.0.0" + +babel-core@^6.17.0, babel-core@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.18.0.tgz#bb5ce9bc0a956e6e94e2f12d597abb3b0b330deb" + dependencies: + babel-code-frame "^6.16.0" + babel-generator "^6.18.0" + babel-helpers "^6.16.0" + babel-messages "^6.8.0" + babel-register "^6.18.0" + babel-runtime "^6.9.1" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.11.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-generator@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.18.0.tgz#e4f104cb3063996d9850556a45aae4a022060a07" + dependencies: + babel-messages "^6.8.0" + babel-runtime "^6.9.0" + babel-types "^6.18.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + +babel-helper-bindify-decorators@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.18.0.tgz#fc00c573676a6e702fffa00019580892ec8780a5" + dependencies: + babel-runtime "^6.0.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-helper-builder-binary-assignment-operator-visitor@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.18.0.tgz#8ae814989f7a53682152e3401a04fabd0bb333a6" + dependencies: + babel-helper-explode-assignable-expression "^6.18.0" + babel-runtime "^6.0.0" + babel-types "^6.18.0" + +babel-helper-call-delegate@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.18.0.tgz#05b14aafa430884b034097ef29e9f067ea4133bd" + dependencies: + babel-helper-hoist-variables "^6.18.0" + babel-runtime "^6.0.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-helper-define-map@^6.18.0, babel-helper-define-map@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.18.0.tgz#8d6c85dc7fbb4c19be3de40474d18e97c3676ec2" + dependencies: + babel-helper-function-name "^6.18.0" + babel-runtime "^6.9.0" + babel-types "^6.18.0" + lodash "^4.2.0" + +babel-helper-explode-assignable-expression@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.18.0.tgz#14b8e8c2d03ad735d4b20f1840b24cd1f65239fe" + dependencies: + babel-runtime "^6.0.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-helper-explode-class@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.18.0.tgz#c44f76f4fa23b9c5d607cbac5d4115e7a76f62cb" + dependencies: + babel-helper-bindify-decorators "^6.18.0" + babel-runtime "^6.0.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-helper-function-name@^6.18.0, babel-helper-function-name@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz#68ec71aeba1f3e28b2a6f0730190b754a9bf30e6" + dependencies: + babel-helper-get-function-arity "^6.18.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-helper-get-function-arity@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.18.0.tgz#a5b19695fd3f9cdfc328398b47dafcd7094f9f24" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.18.0" + +babel-helper-hoist-variables@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.18.0.tgz#a835b5ab8b46d6de9babefae4d98ea41e866b82a" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.18.0" + +babel-helper-optimise-call-expression@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.18.0.tgz#9261d0299ee1a4f08a6dd28b7b7c777348fd8f0f" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.18.0" + +babel-helper-regex@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.18.0.tgz#ae0ebfd77de86cb2f1af258e2cc20b5fe893ecc6" + dependencies: + babel-runtime "^6.9.0" + babel-types "^6.18.0" + lodash "^4.2.0" + +babel-helper-remap-async-to-generator@^6.16.0, babel-helper-remap-async-to-generator@^6.16.2: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.18.0.tgz#336cdf3cab650bb191b02fc16a3708e7be7f9ce5" + dependencies: + babel-helper-function-name "^6.18.0" + babel-runtime "^6.0.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-helper-replace-supers@^6.18.0, babel-helper-replace-supers@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.18.0.tgz#28ec69877be4144dbd64f4cc3a337e89f29a924e" + dependencies: + babel-helper-optimise-call-expression "^6.18.0" + babel-messages "^6.8.0" + babel-runtime "^6.0.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-helpers@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.16.0.tgz#1095ec10d99279460553e67eb3eee9973d3867e3" + dependencies: + babel-runtime "^6.0.0" + babel-template "^6.16.0" + +babel-messages@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-check-es2015-constants@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.8.0.tgz#dbf024c32ed37bfda8dee1e76da02386a8d26fe7" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + +babel-plugin-syntax-class-constructor-call@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + +babel-plugin-syntax-do-expressions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-export-extensions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + +babel-plugin-syntax-function-bind@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-syntax-trailing-function-commas@^6.3.13: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.13.0.tgz#2b84b7d53dd744f94ff1fad7669406274b23f541" + +babel-plugin-transform-async-generator-functions@^6.17.0: + version "6.17.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.17.0.tgz#d0b5a2b2f0940f2b245fa20a00519ed7bc6cae54" + dependencies: + babel-helper-remap-async-to-generator "^6.16.2" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-async-to-generator@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999" + dependencies: + babel-helper-remap-async-to-generator "^6.16.0" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-class-constructor-call@^6.3.13: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.18.0.tgz#80855e38a1ab47b8c6c647f8ea1bcd2c00ca3aae" + dependencies: + babel-plugin-syntax-class-constructor-call "^6.18.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + +babel-plugin-transform-class-properties@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.18.0.tgz#bc1266a39d4c8726e0bd7b15c56235177e6ede57" + dependencies: + babel-helper-function-name "^6.18.0" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.9.1" + +babel-plugin-transform-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.13.0.tgz#82d65c1470ae83e2d13eebecb0a1c2476d62da9d" + dependencies: + babel-helper-define-map "^6.8.0" + babel-helper-explode-class "^6.8.0" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + babel-types "^6.13.0" + +babel-plugin-transform-do-expressions@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.8.0.tgz#fda692af339835cc255bb7544efb8f7c1306c273" + dependencies: + babel-plugin-syntax-do-expressions "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-arrow-functions@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.8.0.tgz#5b63afc3181bdc9a8c4d481b5a4f3f7d7fef3d9d" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.8.0.tgz#ed95d629c4b5a71ae29682b998f70d9833eb366d" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-block-scoping@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.18.0.tgz#3bfdcfec318d46df22525cdea88f1978813653af" + dependencies: + babel-runtime "^6.9.0" + babel-template "^6.15.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + lodash "^4.2.0" + +babel-plugin-transform-es2015-classes@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.18.0.tgz#ffe7a17321bf83e494dcda0ae3fc72df48ffd1d9" + dependencies: + babel-helper-define-map "^6.18.0" + babel-helper-function-name "^6.18.0" + babel-helper-optimise-call-expression "^6.18.0" + babel-helper-replace-supers "^6.18.0" + babel-messages "^6.8.0" + babel-runtime "^6.9.0" + babel-template "^6.14.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-plugin-transform-es2015-computed-properties@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.8.0.tgz#f51010fd61b3bd7b6b60a5fdfd307bb7a5279870" + dependencies: + babel-helper-define-map "^6.8.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + +babel-plugin-transform-es2015-destructuring@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.18.0.tgz#a08fb89415ab82058649558bedb7bf8dafa76ba5" + dependencies: + babel-runtime "^6.9.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.6.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.8.0.tgz#fd8f7f7171fc108cc1c70c3164b9f15a81c25f7d" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.8.0" + +babel-plugin-transform-es2015-for-of@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.18.0.tgz#4c517504db64bf8cfc119a6b8f177211f2028a70" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-function-name@^6.9.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.9.0.tgz#8c135b17dbd064e5bba56ec511baaee2fca82719" + dependencies: + babel-helper-function-name "^6.8.0" + babel-runtime "^6.9.0" + babel-types "^6.9.0" + +babel-plugin-transform-es2015-literals@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.8.0.tgz#50aa2e5c7958fc2ab25d74ec117e0cc98f046468" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-modules-amd@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.18.0.tgz#49a054cbb762bdf9ae2d8a807076cfade6141e40" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.18.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + +babel-plugin-transform-es2015-modules-commonjs@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.18.0.tgz#c15ae5bb11b32a0abdcc98a5837baa4ee8d67bcc" + dependencies: + babel-plugin-transform-strict-mode "^6.18.0" + babel-runtime "^6.0.0" + babel-template "^6.16.0" + babel-types "^6.18.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.18.0.tgz#f09294707163edae4d3b3e8bfacecd01d920b7ad" + dependencies: + babel-helper-hoist-variables "^6.18.0" + babel-runtime "^6.11.6" + babel-template "^6.14.0" + +babel-plugin-transform-es2015-modules-umd@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.18.0.tgz#23351770ece5c1f8e83ed67cb1d7992884491e50" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.18.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + +babel-plugin-transform-es2015-object-super@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.8.0.tgz#1b858740a5a4400887c23dcff6f4d56eea4a24c5" + dependencies: + babel-helper-replace-supers "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-parameters@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.18.0.tgz#9b2cfe238c549f1635ba27fc1daa858be70608b1" + dependencies: + babel-helper-call-delegate "^6.18.0" + babel-helper-get-function-arity "^6.18.0" + babel-runtime "^6.9.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-plugin-transform-es2015-shorthand-properties@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.18.0.tgz#e2ede3b7df47bf980151926534d1dd0cbea58f43" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.18.0" + +babel-plugin-transform-es2015-spread@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.8.0.tgz#0217f737e3b821fa5a669f187c6ed59205f05e9c" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-sticky-regex@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.8.0.tgz#e73d300a440a35d5c64f5c2a344dc236e3df47be" + dependencies: + babel-helper-regex "^6.8.0" + babel-runtime "^6.0.0" + babel-types "^6.8.0" + +babel-plugin-transform-es2015-template-literals@^6.6.0, babel-plugin-transform-es2015-template-literals@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.8.0.tgz#86eb876d0a2c635da4ec048b4f7de9dfc897e66b" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.18.0.tgz#0b14c48629c90ff47a0650077f6aa699bee35798" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-unicode-regex@^6.3.13: + version "6.11.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.11.0.tgz#6298ceabaad88d50a3f4f392d8de997260f6ef2c" + dependencies: + babel-helper-regex "^6.8.0" + babel-runtime "^6.0.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.8.0.tgz#db25742e9339eade676ca9acec46f955599a68a4" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.8.0" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-export-extensions@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.8.0.tgz#fa80ff655b636549431bfd38f6b817bd82e47f5b" + dependencies: + babel-plugin-syntax-export-extensions "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-function-bind@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.8.0.tgz#e7f334ce69f50d28fe850a822eaaab9fa4f4d821" + dependencies: + babel-plugin-syntax-function-bind "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-object-rest-spread@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.16.0.tgz#db441d56fffc1999052fdebe2e2f25ebd28e36a9" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-regenerator@^6.16.0, babel-plugin-transform-regenerator@^6.16.1: + version "6.16.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.16.1.tgz#a75de6b048a14154aae14b0122756c5bed392f59" + dependencies: + babel-runtime "^6.9.0" + babel-types "^6.16.0" + private "~0.1.5" + +babel-plugin-transform-runtime@^6.15.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.15.0.tgz#3d75b4d949ad81af157570273846fb59aeb0d57c" + dependencies: + babel-runtime "^6.9.0" + +babel-plugin-transform-strict-mode@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.18.0.tgz#df7cf2991fe046f44163dcd110d5ca43bc652b9d" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.18.0" + +babel-polyfill@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.16.0.tgz#2d45021df87e26a374b6d4d1a9c65964d17f2422" + dependencies: + babel-runtime "^6.9.1" + core-js "^2.4.0" + regenerator-runtime "^0.9.5" + +babel-preset-es2015@^6.16.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.18.0.tgz#b8c70df84ec948c43dcf2bf770e988eb7da88312" + dependencies: + babel-plugin-check-es2015-constants "^6.3.13" + babel-plugin-transform-es2015-arrow-functions "^6.3.13" + babel-plugin-transform-es2015-block-scoped-functions "^6.3.13" + babel-plugin-transform-es2015-block-scoping "^6.18.0" + babel-plugin-transform-es2015-classes "^6.18.0" + babel-plugin-transform-es2015-computed-properties "^6.3.13" + babel-plugin-transform-es2015-destructuring "^6.18.0" + babel-plugin-transform-es2015-duplicate-keys "^6.6.0" + babel-plugin-transform-es2015-for-of "^6.18.0" + babel-plugin-transform-es2015-function-name "^6.9.0" + babel-plugin-transform-es2015-literals "^6.3.13" + babel-plugin-transform-es2015-modules-amd "^6.18.0" + babel-plugin-transform-es2015-modules-commonjs "^6.18.0" + babel-plugin-transform-es2015-modules-systemjs "^6.18.0" + babel-plugin-transform-es2015-modules-umd "^6.18.0" + babel-plugin-transform-es2015-object-super "^6.3.13" + babel-plugin-transform-es2015-parameters "^6.18.0" + babel-plugin-transform-es2015-shorthand-properties "^6.18.0" + babel-plugin-transform-es2015-spread "^6.3.13" + babel-plugin-transform-es2015-sticky-regex "^6.3.13" + babel-plugin-transform-es2015-template-literals "^6.6.0" + babel-plugin-transform-es2015-typeof-symbol "^6.18.0" + babel-plugin-transform-es2015-unicode-regex "^6.3.13" + babel-plugin-transform-regenerator "^6.16.0" + +babel-preset-stage-0@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.16.0.tgz#f5a263c420532fd57491f1a7315b3036e428f823" + dependencies: + babel-plugin-transform-do-expressions "^6.3.13" + babel-plugin-transform-function-bind "^6.3.13" + babel-preset-stage-1 "^6.16.0" + +babel-preset-stage-1@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.16.0.tgz#9d31fbbdae7b17c549fd3ac93e3cf6902695e479" + dependencies: + babel-plugin-transform-class-constructor-call "^6.3.13" + babel-plugin-transform-export-extensions "^6.3.13" + babel-preset-stage-2 "^6.16.0" + +babel-preset-stage-2@^6.16.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.18.0.tgz#9eb7bf9a8e91c68260d5ba7500493caaada4b5b5" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.18.0" + babel-plugin-transform-decorators "^6.13.0" + babel-preset-stage-3 "^6.17.0" + +babel-preset-stage-3@^6.17.0: + version "6.17.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.17.0.tgz#b6638e46db6e91e3f889013d8ce143917c685e39" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.3.13" + babel-plugin-transform-async-generator-functions "^6.17.0" + babel-plugin-transform-async-to-generator "^6.16.0" + babel-plugin-transform-exponentiation-operator "^6.3.13" + babel-plugin-transform-object-rest-spread "^6.16.0" + +babel-register@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.18.0.tgz#892e2e03865078dd90ad2c715111ec4449b32a68" + dependencies: + babel-core "^6.18.0" + babel-runtime "^6.11.6" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + +babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.9.0, babel-runtime@^6.9.1: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.18.0.tgz#0f4177ffd98492ef13b9f823e9994a02584c9078" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.9.5" + +babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.8.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca" + dependencies: + babel-runtime "^6.9.0" + babel-traverse "^6.16.0" + babel-types "^6.16.0" + babylon "^6.11.0" + lodash "^4.2.0" + +babel-traverse@^6.16.0, babel-traverse@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.18.0.tgz#5aeaa980baed2a07c8c47329cd90c3b90c80f05e" + dependencies: + babel-code-frame "^6.16.0" + babel-messages "^6.8.0" + babel-runtime "^6.9.0" + babel-types "^6.18.0" + babylon "^6.11.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.13.0, babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.8.0, babel-types@^6.9.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.18.0.tgz#1f7d5a73474c59eb9151b2417bbff4e4fce7c3f8" + dependencies: + babel-runtime "^6.9.1" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babylon@^6.11.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.13.0.tgz#58ed40dd2a8120612be5f318c2c0bedbebde4a0b" + +balanced-match@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +bcrypt-pbkdf@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" + dependencies: + tweetnacl "^0.14.3" + +binary-extensions@^1.0.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.7.0.tgz#6c1610db163abfb34edfe42fa423343a1e01185d" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +brace-expansion@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +buffer-shims@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + +caseless@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + +chai-json-schema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/chai-json-schema/-/chai-json-schema-1.4.0.tgz#5f053d746dda9f27fd122e9c1376bc1b8f3a5730" + dependencies: + jsonpointer.js "0.4.0" + tv4 "~1.2.7" + +chai@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" + dependencies: + assertion-error "^1.0.1" + deep-eql "^0.1.3" + type-detect "^1.0.0" + +chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chokidar@^1.0.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +code-point-at@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.0.1.tgz#1104cd34f9b5b45d3eba88f1babc1924e1ce35fb" + dependencies: + number-is-nan "^1.0.0" + +colors@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +commander@^2.8.1, commander@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +convert-source-map@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" + +core-js@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +dashdash@^1.12.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.0.tgz#29e486c5418bf0f356034a993d51686a33e84141" + dependencies: + assert-plus "^1.0.0" + +debug@^2.1.1, debug@^2.2.0, debug@~2.2.0, debug@2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +deep-eql@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" + dependencies: + type-detect "0.1.1" + +deep-extend@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + +del@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +extend@~3.0.0, extend@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +filename-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +for-in@^0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" + +for-own@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" + dependencies: + for-in "^0.1.5" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.1.tgz#4adf0342e1a79afa1e84c8c320a9ffc82392a1f3" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +fs-readdir-recursive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.0.14" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.14.tgz#558e8cc38643d8ef40fe45158486d0d25758eee4" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.29" + +fstream-ignore@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +gauge@~2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.6.0.tgz#d35301ad18e96902b4751dcbbe40f4218b942a46" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-color "^0.1.7" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + +getpass@^0.1.1: + version "0.1.6" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^5.0.5: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.3, glob@^7.0.5, glob@^7.0.6: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.0.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.12.0.tgz#992ce90828c3a55fa8f16fada177adb64664cf9d" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.4: + version "4.1.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.9.tgz#baacba37d19d11f9d146d3578bc99958c3787e29" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +har-validator@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + is-my-json-valid "^2.12.4" + pinkie-promise "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-color@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +hat@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/hat/-/hat-0.0.3.tgz#bb014a9e64b3788aed8005917413d4ff3d502d8a" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-proxy-agent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" + dependencies: + agent-base "2" + debug "2" + extend "3" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ini@^1.3.4, ini@~1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +invariant@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.1.tgz#b097010547668c7e337028ebe816ebe36c8a8d54" + dependencies: + loose-envify "^1.0.0" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.0.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" + +is-dotfile@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-my-json-valid@^2.12.4: + version "2.15.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + +is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + dependencies: + path-is-inside "^1.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +isarray@~1.0.0, isarray@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +jasmine-core@^2.5.2, jasmine-core@~2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.5.2.tgz#6f61bd79061e27f43e6f9355e44b3c6cab6ff297" + +jasmine-spec-reporter@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/jasmine-spec-reporter/-/jasmine-spec-reporter-2.7.0.tgz#42907ff889952a129c0afc2929e195f4e74c98ff" + dependencies: + colors "1.1.2" + +jasmine@^2.5.2, jasmine@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.5.2.tgz#6283cef7085c095cc25d651e954df004f7e3e421" + dependencies: + exit "^0.1.2" + glob "^7.0.6" + jasmine-core "~2.5.2" + +jasminewd2@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-0.0.10.tgz#94f48ae2bc946cad643035467b4bb7ea9c1075ef" + +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" + +js-tokens@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-1.0.3.tgz#14e56eb68c8f1a92c43d59f5014ec29dc20f2ae1" + +js-tokens@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5" + +jsbn@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.0.tgz#9b20715b026cbe3778fd769edccd822d8332a5b2" + +jsonpointer.js@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/jsonpointer.js/-/jsonpointer.js-0.4.0.tgz#002cb123f767aafdeb0196132ce5c4f9941ccaba" + +jsonpointer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5" + +jsprim@^1.2.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" + dependencies: + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +kind-of@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.0.4.tgz#7b8ecf18a4e17f8269d73b501c9f232c96887a74" + dependencies: + is-buffer "^1.0.2" + +lodash@^3.0.0, lodash@^3.10.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + +lodash@^4.2.0: + version "4.16.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.4.tgz#01ce306b9bad1319f2a5528674f88297aeb70127" + +loose-envify@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.2.0.tgz#69a65aad3de542cf4ee0f4fe74e8e33c709ccb0f" + dependencies: + js-tokens "^1.0.1" + +micromatch@^2.1.5: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +mime-db@~1.24.0: + version "1.24.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.24.0.tgz#e2d13f939f0016c6e4e9ad25a8652f126c467f0c" + +mime-types@^2.1.12, mime-types@~2.1.7: + version "2.1.12" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.12.tgz#152ba256777020dd4663f54c2e7bc26381e71729" + dependencies: + mime-db "~1.24.0" + +minimatch@^3.0.0, minimatch@^3.0.2, "minimatch@2 || 3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +mkdirp@^0.5.0, mkdirp@^0.5.1, "mkdirp@>=0.5 0", mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +nan@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232" + +node-pre-gyp@^0.6.29: + version "0.6.31" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.31.tgz#d8a00ddaa301a940615dbcc8caad4024d58f6017" + dependencies: + mkdirp "~0.5.1" + nopt "~3.0.6" + npmlog "^4.0.0" + rc "~1.1.6" + request "^2.75.0" + rimraf "~2.5.4" + semver "~5.3.0" + tar "~2.2.1" + tar-pack "~3.3.0" + +node-uuid@~1.4.7: + version "1.4.7" + resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" + +nopt@~3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + +normalize-path@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" + +npmlog@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.0.tgz#e094503961c70c1774eb76692080e8d578a9f88f" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.6.0" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" + +object.omit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.0.tgz#868597333d54e60662940bb458605dd6ae12fe94" + dependencies: + for-own "^0.1.3" + is-extendable "^0.1.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +once@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + dependencies: + wrappy "1" + +optimist@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +options@>=0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +output-file-sync@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + dependencies: + graceful-fs "^4.1.4" + mkdirp "^0.5.1" + object-assign "^4.1.0" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +private@^0.1.6, private@~0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +protractor-console@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/protractor-console/-/protractor-console-2.0.1.tgz#4697d3ce9c999f53018e0576a3d0cf3322b282a7" + dependencies: + chalk "^1.1.0" + lodash "^3.10.0" + +protractor-jasmine2-screenshot-reporter@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/protractor-jasmine2-screenshot-reporter/-/protractor-jasmine2-screenshot-reporter-0.3.2.tgz#d9c9f952550f63b3ee3efd3a4a2d8f9bbe0be850" + dependencies: + hat "0.0.3" + lodash "^3.0.0" + mkdirp "^0.5.0" + rimraf "^2.4.3" + string.prototype.startswith "^0.2.0" + uuid "^2.0.0" + +protractor@^4.0.9: + version "4.0.9" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-4.0.9.tgz#152f72e3729b2576226e370dc308699cccfa77ba" + dependencies: + "@types/jasmine" "^2.2.31" + "@types/node" "^6.0.35" + "@types/q" "^0.0.30" + "@types/selenium-webdriver" "~2.53.30" + adm-zip "0.4.7" + chalk "^1.1.3" + glob "^7.0.3" + jasmine "2.5.2" + jasminewd2 "0.0.10" + optimist "~0.6.0" + q "1.4.1" + saucelabs "~1.3.0" + selenium-webdriver "2.53.3" + source-map-support "~0.4.0" + webdriver-manager "^10.2.2" + +q@^1.4.1, q@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + +qs@~6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" + +randomatic@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.5.tgz#5e9ef5f2d573c67bd2b8124ae90b5156e457840b" + dependencies: + is-number "^2.0.2" + kind-of "^3.0.2" + +rc@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~1.0.4" + +"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@~2.1.4: + version "2.1.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" + dependencies: + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +regenerate@^1.2.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.1.tgz#0300203a5d2fdcf89116dce84275d011f5903f33" + +regenerator-runtime@^0.9.5: + version "0.9.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz#403d6d40a4bdff9c330dd9392dcbb2d9a8bba1fc" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request@^2.69.0, request@^2.75.0: + version "2.76.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.76.0.tgz#be44505afef70360a0436955106be3945d95560e" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + node-uuid "~1.4.7" + oauth-sign "~0.8.1" + qs "~6.3.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + +rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.5.2, rimraf@~2.5.1, rimraf@~2.5.4, rimraf@2: + version "2.5.4" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" + dependencies: + glob "^7.0.5" + +saucelabs@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.3.0.tgz#d240e8009df7fa87306ec4578a69ba3b5c424fee" + dependencies: + https-proxy-agent "^1.0.0" + +sax@0.6.x: + version "0.6.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9" + +selenium-webdriver@2.53.3: + version "2.53.3" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz#d29ff5a957dff1a1b49dc457756e4e4bfbdce085" + dependencies: + adm-zip "0.4.4" + rimraf "^2.2.8" + tmp "0.0.24" + ws "^1.0.1" + xml2js "0.4.4" + +semver@^5.3.0, semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +semver@~5.0.1: + version "5.0.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" + +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +should-equal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-1.0.1.tgz#0b6e9516f2601a9fb0bb2dcc369afa1c7e200af7" + dependencies: + should-type "^1.0.0" + +should-format@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.2.tgz#1a543ad3abfea5dc2bea4a0ba875ede60fe22b19" + dependencies: + should-type "^1.3.0" + should-type-adaptors "^1.0.1" + +should-http@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/should-http/-/should-http-0.0.4.tgz#b2a39a4780f90d9b238baeacb7bd4c4f3fc7da49" + +should-type-adaptors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz#efe5553cdf68cff66e5c5f51b712dc351c77beaa" + dependencies: + should-type "^1.3.0" + should-util "^1.0.0" + +should-type@^1.0.0, should-type@^1.3.0, should-type@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" + +should-util@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.0.tgz#c98cda374aa6b190df8ba87c9889c2b4db620063" + +should@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/should/-/should-11.1.1.tgz#760756475f0217ebbc5a141cbbf35f02f64feb07" + dependencies: + should-equal "^1.0.0" + should-format "^3.0.2" + should-type "^1.4.0" + should-type-adaptors "^1.0.1" + should-util "^1.0.0" + +signal-exit@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.1.tgz#5a4c884992b63a7acd9badb7894c3ee9cfccad81" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +source-map-support@^0.4.2, source-map-support@~0.4.0: + version "0.4.5" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.5.tgz#4438df4219e1b3c7feb674614b4c67f9722db1e4" + dependencies: + source-map "^0.5.3" + +source-map@^0.5.0, source-map@^0.5.3: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +sshpk@^1.7.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string.prototype.startswith@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/string.prototype.startswith/-/string.prototype.startswith-0.2.0.tgz#da68982e353a4e9ac4a43b450a2045d1c445ae7b" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-json-comments@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +tar-pack@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" + dependencies: + debug "~2.2.0" + fstream "~1.0.10" + fstream-ignore "~1.0.5" + once "~1.3.3" + readable-stream "~2.1.4" + rimraf "~2.5.1" + tar "~2.2.1" + uid-number "~0.0.6" + +tar@~2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +tmp@0.0.24: + version "0.0.24" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.24.tgz#d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12" + +to-fast-properties@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" + +tough-cookie@~2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.1.tgz#99c77dfbb7d804249e8a299d4cb0fd81fef083fd" + +tunnel-agent@~0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + +tv4@~1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/tv4/-/tv4-1.2.7.tgz#bd29389afc73ade49ae5f48142b5d544bf68d120" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.3.tgz#3da382f670f25ded78d7b3d1792119bca0b7132d" + +type-detect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" + +type-detect@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" + +uid-number@~0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +ultron@1.0.x: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" + +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +uuid@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + +v8flags@^2.0.10: + version "2.0.11" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881" + dependencies: + user-home "^1.1.1" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +webdriver-manager@^10.2.2: + version "10.2.5" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-10.2.5.tgz#6433c1a64b038388c295ed0dc9daa71e5df5024e" + dependencies: + adm-zip "^0.4.7" + chalk "^1.1.1" + del "^2.2.0" + glob "^7.0.3" + ini "^1.3.4" + minimist "^1.2.0" + q "^1.4.1" + request "^2.69.0" + rimraf "^2.5.2" + semver "^5.3.0" + +wide-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + dependencies: + string-width "^1.0.1" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +ws@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.1.tgz#082ddb6c641e85d4bb451f03d52f06eabdb1f018" + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +xml2js@0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.4.tgz#3111010003008ae19240eba17497b57c729c555d" + dependencies: + sax "0.6.x" + xmlbuilder ">=1.0.0" + +xmlbuilder@>=1.0.0: + version "8.2.2" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" + +xtend@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + diff --git a/java-server/api-gateway-service/src/main/resources/logback.xml b/java-server/api-gateway-service/src/main/resources/logback.xml index 84cbb835..024af20e 100755 --- a/java-server/api-gateway-service/src/main/resources/logback.xml +++ b/java-server/api-gateway-service/src/main/resources/logback.xml @@ -9,11 +9,13 @@ - + + + diff --git a/java-server/board-query-side/src/main/java/net/chrisrichardson/eventstore/examples/kanban/queryside/board/BoardQueryWorkflow.java b/java-server/board-query-side/src/main/java/net/chrisrichardson/eventstore/examples/kanban/queryside/board/BoardQueryWorkflow.java index f0886427..ac0ae5db 100755 --- a/java-server/board-query-side/src/main/java/net/chrisrichardson/eventstore/examples/kanban/queryside/board/BoardQueryWorkflow.java +++ b/java-server/board-query-side/src/main/java/net/chrisrichardson/eventstore/examples/kanban/queryside/board/BoardQueryWorkflow.java @@ -19,10 +19,11 @@ public BoardQueryWorkflow(BoardUpdateService boardInfoUpdateService) { @EventHandlerMethod public void create(DispatchedEvent de) { + log.debug("BoardQueryWorkflow start processing event : {}", de.getEvent()); BoardCreatedEvent event = de.getEvent(); String id = de.getEntityId(); - log.info("BoardQueryWorkflow got event : {}", de.getEvent()); boardUpdateService.create(id, event.getBoardInfo()); + log.debug("BoardQueryWorkflow finish processing event : {}", de.getEvent()); } } \ No newline at end of file diff --git a/java-server/common-auth/src/main/java/net/chrisrichardson/eventstore/examples/kanban/commonauth/AuthConfiguration.java b/java-server/common-auth/src/main/java/net/chrisrichardson/eventstore/examples/kanban/commonauth/AuthConfiguration.java index 33074ab7..ac233027 100755 --- a/java-server/common-auth/src/main/java/net/chrisrichardson/eventstore/examples/kanban/commonauth/AuthConfiguration.java +++ b/java-server/common-auth/src/main/java/net/chrisrichardson/eventstore/examples/kanban/commonauth/AuthConfiguration.java @@ -24,53 +24,59 @@ @EnableConfigurationProperties({AuthProperties.class}) public class AuthConfiguration extends WebSecurityConfigurerAdapter { - @Autowired - private AuthProperties securityProperties; + @Autowired + private AuthProperties securityProperties; - @Autowired - private TokenAuthenticationService tokenAuthenticationService; + @Autowired + private TokenAuthenticationService tokenAuthenticationService; - @Bean - @Override - public AuthenticationManager authenticationManagerBean() throws Exception { - return super.authenticationManagerBean(); - } + @Bean + @Override + public AuthenticationManager authenticationManagerBean() throws Exception { + return super.authenticationManagerBean(); + } - @Override - protected void configure(AuthenticationManagerBuilder auth) throws Exception { - auth.inMemoryAuthentication(); - } + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.inMemoryAuthentication(); + } - @Override - protected void configure(HttpSecurity http) throws Exception { - http.csrf().disable() - .formLogin().loginPage("/index.html").and() - .authorizeRequests() - .antMatchers("/health").permitAll() - .antMatchers("/swagger-ui.html").permitAll() - .antMatchers("/v2/api-docs").permitAll() - .antMatchers("/js/**").permitAll() - .antMatchers("/styles/**").permitAll() - .antMatchers("/views/**").permitAll() - .antMatchers("/webjars/**").permitAll() - .antMatchers("/swagger-resources/**").permitAll() - .antMatchers("/configuration/**").permitAll() - .antMatchers("/validatorUrl/**").permitAll() - .antMatchers("/index.html").permitAll() - .antMatchers("/events/**").permitAll() - .antMatchers(HttpMethod.POST, "/api/authenticate").permitAll() - .antMatchers(HttpMethod.GET, "/events").permitAll() - .anyRequest().authenticated().and() - .addFilterBefore(new StatelessAuthenticationFilter(tokenAuthenticationService), UsernamePasswordAuthenticationFilter.class); - } + @Override + protected void configure(HttpSecurity http) throws Exception { + http. + csrf() + .disable() + .formLogin() + .loginPage("/index.html") + .and() + .authorizeRequests() + .antMatchers("/health").permitAll() + .antMatchers("/swagger-ui.html").permitAll() + .antMatchers("/v2/api-docs").permitAll() + .antMatchers("/js/**").permitAll() + .antMatchers("/styles/**").permitAll() + .antMatchers("/fonts/**").permitAll() + .antMatchers("/views/**").permitAll() + .antMatchers("/webjars/**").permitAll() + .antMatchers("/swagger-resources/**").permitAll() + .antMatchers("/configuration/**").permitAll() + .antMatchers("/validatorUrl/**").permitAll() + .antMatchers("/index.html").permitAll() + .antMatchers("/events/**").permitAll() + .antMatchers(HttpMethod.POST, "/api/authenticate").permitAll() + .antMatchers(HttpMethod.GET, "/events").permitAll() + .anyRequest().authenticated() + .and() + .addFilterBefore(new StatelessAuthenticationFilter(tokenAuthenticationService), UsernamePasswordAuthenticationFilter.class); + } - @Bean - public TokenService tokenService() { - KeyBasedPersistenceTokenService res = new KeyBasedPersistenceTokenService(); - res.setSecureRandom(new SecureRandom()); - res.setServerSecret(securityProperties.getServerSecret()); - res.setServerInteger(securityProperties.getServerInteger()); + @Bean + public TokenService tokenService() { + KeyBasedPersistenceTokenService res = new KeyBasedPersistenceTokenService(); + res.setSecureRandom(new SecureRandom()); + res.setServerSecret(securityProperties.getServerSecret()); + res.setServerInteger(securityProperties.getServerInteger()); - return res; - } + return res; + } } diff --git a/java-server/common-websocket/src/main/java/net/chrisrichardson/eventstore/examples/kanban/commonwebsocket/PresenceChannelInterceptor.java b/java-server/common-websocket/src/main/java/net/chrisrichardson/eventstore/examples/kanban/commonwebsocket/PresenceChannelInterceptor.java new file mode 100644 index 00000000..1eaad5d4 --- /dev/null +++ b/java-server/common-websocket/src/main/java/net/chrisrichardson/eventstore/examples/kanban/commonwebsocket/PresenceChannelInterceptor.java @@ -0,0 +1,56 @@ +package net.chrisrichardson.eventstore.examples.kanban.commonwebsocket; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.simp.stomp.StompHeaderAccessor; +import org.springframework.messaging.support.ChannelInterceptorAdapter; + +public class PresenceChannelInterceptor extends ChannelInterceptorAdapter { + + private final Logger logger = LoggerFactory.getLogger(PresenceChannelInterceptor.class); + + @Override + public void postSend(Message message, MessageChannel channel, boolean sent) { + + StompHeaderAccessor sha = StompHeaderAccessor.wrap(message); + + logger.info("STOMP command: {}, content type: {}", sha.getCommand(), sha.getContentType()); + + // ignore non-STOMP messages like heartbeat messages + if(sha.getCommand() == null) { + if(sha.isHeartbeat()) { + logger.info("STOMP heartbeat"); + } + return; + } + + String sessionId = sha.getSessionId(); + + switch(sha.getCommand()) { + case CONNECT: + logger.info("STOMP Connect [sessionId: " + sessionId + "]"); + break; + case DISCONNECT: + logger.info("STOMP Disconnect [sessionId: " + sessionId + "]"); + break; + case ACK: + logger.info("STOMP Ack [sessionId: " + sessionId + "]"); + break; + case NACK: + logger.info("STOMP Nack [sessionId: " + sessionId + "]"); + break; + + case CONNECTED: + logger.info("STOMP Connected to [sessionId: " + sessionId + "]"); + break; + case MESSAGE: + logger.info("STOMP Message to [sessionId: " + sessionId + "]"); + break; + default: + break; + + } + } +} \ No newline at end of file diff --git a/java-server/common-websocket/src/main/java/net/chrisrichardson/eventstore/examples/kanban/commonwebsocket/WebSocketConfig.java b/java-server/common-websocket/src/main/java/net/chrisrichardson/eventstore/examples/kanban/commonwebsocket/WebSocketConfig.java index d3fea458..67d91d27 100755 --- a/java-server/common-websocket/src/main/java/net/chrisrichardson/eventstore/examples/kanban/commonwebsocket/WebSocketConfig.java +++ b/java-server/common-websocket/src/main/java/net/chrisrichardson/eventstore/examples/kanban/commonwebsocket/WebSocketConfig.java @@ -2,8 +2,10 @@ import io.eventuate.javaclient.spring.EnableEventHandlers; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.config.ChannelRegistration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; @@ -16,6 +18,22 @@ @EnableEventHandlers public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { + @Bean + public PresenceChannelInterceptor presenceChannelInterceptor() { + return new PresenceChannelInterceptor(); + } + + @Override + public void configureClientInboundChannel(ChannelRegistration registration) { + registration.setInterceptors(presenceChannelInterceptor()); + } + + @Override + public void configureClientOutboundChannel(ChannelRegistration registration) { + registration.taskExecutor().corePoolSize(8); + registration.setInterceptors(presenceChannelInterceptor()); + } + @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/events").withSockJS(); diff --git a/java-server/docker-microservices/_build-and-test-all.sh b/java-server/docker-microservices/_build-and-test-all.sh index 87bc7d58..418afa0a 100755 --- a/java-server/docker-microservices/_build-and-test-all.sh +++ b/java-server/docker-microservices/_build-and-test-all.sh @@ -2,6 +2,8 @@ set -e +ORIGINAL_DIR=$(pwd) + if [ -z "$DOCKER_HOST_IP" ] ; then if [ -z "$DOCKER_HOST" ] ; then export DOCKER_HOST_IP=`hostname` @@ -40,6 +42,12 @@ if [ "$1" = "--no-rm" ] ; then shift fi +JS_TESTS_RUN=false + +if [ "$1" = "--run-js-tests" ] ; then + JS_TESTS_RUN=true + shift +fi ${DOCKER_COMPOSE?} up -d mongodb $EXTRA_INFRASTRUCTURE_SERVICES @@ -70,6 +78,15 @@ cd .. cd ./docker-microservices +if [ $JS_TESTS_RUN = true ] ; then + cd ../../e2e-tests + + npm i + xvfb-run --server-args="-screen 0 1440x890x24" npm run test + + cd $ORIGINAL_DIR +fi + if [ $NO_RM = false ] ; then ${DOCKER_COMPOSE?} stop ${DOCKER_COMPOSE?} rm -v --force diff --git a/java-server/standalone-service/src/main/resources/logback.xml b/java-server/standalone-service/src/main/resources/logback.xml index 84cbb835..8266dfef 100755 --- a/java-server/standalone-service/src/main/resources/logback.xml +++ b/java-server/standalone-service/src/main/resources/logback.xml @@ -8,13 +8,25 @@ %d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n + + logfile.log + true + + %d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n + + - + + - + + + + + diff --git a/java-server/task-command-side-service/src/main/resources/logback.xml b/java-server/task-command-side-service/src/main/resources/logback.xml new file mode 100755 index 00000000..10917901 --- /dev/null +++ b/java-server/task-command-side-service/src/main/resources/logback.xml @@ -0,0 +1,21 @@ + + + + + + + + %d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n + + + + + + + + + + + + + \ No newline at end of file diff --git a/java-server/task-query-side-service/src/main/resources/logback.xml b/java-server/task-query-side-service/src/main/resources/logback.xml new file mode 100755 index 00000000..10917901 --- /dev/null +++ b/java-server/task-query-side-service/src/main/resources/logback.xml @@ -0,0 +1,21 @@ + + + + + + + + %d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n + + + + + + + + + + + + + \ No newline at end of file diff --git a/java-server/task-query-side/src/main/java/net/chrisrichardson/eventstore/examples/kanban/queryside/task/TaskQueryWorkflow.java b/java-server/task-query-side/src/main/java/net/chrisrichardson/eventstore/examples/kanban/queryside/task/TaskQueryWorkflow.java index 122ca0c2..2abed8f8 100755 --- a/java-server/task-query-side/src/main/java/net/chrisrichardson/eventstore/examples/kanban/queryside/task/TaskQueryWorkflow.java +++ b/java-server/task-query-side/src/main/java/net/chrisrichardson/eventstore/examples/kanban/queryside/task/TaskQueryWorkflow.java @@ -13,73 +13,83 @@ @EventSubscriber(id = "taskEventHandlers") public class TaskQueryWorkflow { - private TaskUpdateService taskUpdateService; - - public TaskQueryWorkflow(TaskUpdateService taskUpdateService) { - this.taskUpdateService = taskUpdateService; - } - - private static Logger log = LoggerFactory.getLogger(TaskQueryWorkflow.class); - - @EventHandlerMethod - public void create(DispatchedEvent de) { - String id = de.getEntityId(); - - taskUpdateService.create(id, de.getEvent().getTaskInfo()); - } - - @EventHandlerMethod - public void update(DispatchedEvent de) { - log.info("TaskQueryWorkflow got event : {}", de.getEvent()); - TaskInfo taskInfo = new TaskInfo(); - taskInfo.setTaskDetails(de.getEvent().getTaskDetails()); - taskInfo.setUpdate(de.getEvent().getUpdate()); - - taskUpdateService.update(de.getEntityId(), taskInfo); - } - - @EventHandlerMethod - public void complete(DispatchedEvent de) { - processChangeStatusEvent(de, TaskStatus.completed); - } - - @EventHandlerMethod - public void delete(DispatchedEvent de) { - log.info("TaskQueryWorkflow got event : {}", de.getEvent()); - taskUpdateService.delete(de.getEntityId()); - } - - @EventHandlerMethod - public void schedule(DispatchedEvent de) { - processChangeStatusEvent(de, TaskStatus.scheduled); - } - - @EventHandlerMethod - public void backlog(DispatchedEvent de) { - TaskInfo taskInfo = new TaskInfo(); - taskInfo.setUpdate(de.getEvent().getUpdate()); - taskInfo.setStatus(TaskStatus.backlog); - - updateAndSendEvent(de, taskInfo); - } - - @EventHandlerMethod - public void start(DispatchedEvent de) { - processChangeStatusEvent(de, TaskStatus.started); - } - - private void processChangeStatusEvent(DispatchedEvent de, TaskStatus taskStatus) { - - TaskInfo taskInfo = new TaskInfo(); - taskInfo.setBoardId(de.getEvent().getBoardId()); - taskInfo.setUpdate(de.getEvent().getUpdate()); - taskInfo.setStatus(taskStatus); - - updateAndSendEvent((DispatchedEvent) de, taskInfo); - } - - private void updateAndSendEvent(DispatchedEvent de, TaskInfo taskInfo) { - log.info("TaskQueryWorkflow got event : {}", de.getEvent()); - taskUpdateService.update(de.getEntityId(), taskInfo); - } + private TaskUpdateService taskUpdateService; + + public TaskQueryWorkflow(TaskUpdateService taskUpdateService) { + this.taskUpdateService = taskUpdateService; + } + + private static Logger log = LoggerFactory.getLogger(TaskQueryWorkflow.class); + + @EventHandlerMethod + public void create(DispatchedEvent de) { + log.debug("TaskQueryWorkflow start processing event : {}", de.getEvent()); + String id = de.getEntityId(); + + taskUpdateService.create(id, de.getEvent().getTaskInfo()); + log.debug("TaskQueryWorkflow finish processing event : {}", de.getEvent()); + } + + @EventHandlerMethod + public void update(DispatchedEvent de) { + log.debug("TaskQueryWorkflow start processing event : {}", de.getEvent()); + TaskInfo taskInfo = new TaskInfo(); + taskInfo.setTaskDetails(de.getEvent().getTaskDetails()); + taskInfo.setUpdate(de.getEvent().getUpdate()); + + taskUpdateService.update(de.getEntityId(), taskInfo); + log.debug("TaskQueryWorkflow finish processing event : {}", de.getEvent()); + } + + @EventHandlerMethod + public void complete(DispatchedEvent de) { + log.debug("TaskQueryWorkflow start processing event : {}", de.getEvent()); + processChangeStatusEvent(de, TaskStatus.completed); + log.debug("TaskQueryWorkflow finish processing event : {}", de.getEvent()); + } + + @EventHandlerMethod + public void delete(DispatchedEvent de) { + log.debug("TaskQueryWorkflow start processing event : {}", de.getEvent()); + taskUpdateService.delete(de.getEntityId()); + log.debug("TaskQueryWorkflow finish processing event : {}", de.getEvent()); + } + + @EventHandlerMethod + public void schedule(DispatchedEvent de) { + log.debug("TaskQueryWorkflow start processing event : {}", de.getEvent()); + processChangeStatusEvent(de, TaskStatus.scheduled); + log.debug("TaskQueryWorkflow finish processing event : {}", de.getEvent()); + } + + @EventHandlerMethod + public void backlog(DispatchedEvent de) { + log.debug("TaskQueryWorkflow start processing event : {}", de.getEvent()); + TaskInfo taskInfo = new TaskInfo(); + taskInfo.setUpdate(de.getEvent().getUpdate()); + taskInfo.setStatus(TaskStatus.backlog); + + updateAndSendEvent(de, taskInfo); + log.debug("TaskQueryWorkflow finish processing event : {}", de.getEvent()); + } + + @EventHandlerMethod + public void start(DispatchedEvent de) { + log.debug("TaskQueryWorkflow start processing event : {}", de.getEvent()); + processChangeStatusEvent(de, TaskStatus.started); + log.debug("TaskQueryWorkflow finish processing event : {}", de.getEvent()); + } + + private void processChangeStatusEvent(DispatchedEvent de, TaskStatus taskStatus) { + TaskInfo taskInfo = new TaskInfo(); + taskInfo.setBoardId(de.getEvent().getBoardId()); + taskInfo.setUpdate(de.getEvent().getUpdate()); + taskInfo.setStatus(taskStatus); + + updateAndSendEvent((DispatchedEvent) de, taskInfo); + } + + private void updateAndSendEvent(DispatchedEvent de, TaskInfo taskInfo) { + taskUpdateService.update(de.getEntityId(), taskInfo); + } } \ No newline at end of file diff --git a/java-server/task-query-side/src/main/java/net/chrisrichardson/eventstore/examples/kanban/queryside/task/TaskUpdateService.java b/java-server/task-query-side/src/main/java/net/chrisrichardson/eventstore/examples/kanban/queryside/task/TaskUpdateService.java index ffe2f49f..9ae563be 100755 --- a/java-server/task-query-side/src/main/java/net/chrisrichardson/eventstore/examples/kanban/queryside/task/TaskUpdateService.java +++ b/java-server/task-query-side/src/main/java/net/chrisrichardson/eventstore/examples/kanban/queryside/task/TaskUpdateService.java @@ -22,7 +22,8 @@ public Task create(String id, TaskInfo taskInfo) { public Task delete(String id) { Task taskToDelete = taskRepository.findOne(id); - taskRepository.delete(taskToDelete); + if(taskToDelete!=null) + taskRepository.delete(taskToDelete); return taskToDelete; } diff --git a/prebuilt-angularjs-client/js/app.js b/prebuilt-angularjs-client/js/app.js index 18ad9d5d..a7e9257b 100755 --- a/prebuilt-angularjs-client/js/app.js +++ b/prebuilt-angularjs-client/js/app.js @@ -22,7 +22,7 @@ exports.default = _KanbanModule2.default; /** }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/App/KanbanApp.js","/app/scripts/components/App") -},{"./KanbanAppFilters":2,"./KanbanAppRoutes":3,"./KanbanModule":4,"_process":244,"buffer":240}],2:[function(require,module,exports){ +},{"./KanbanAppFilters":2,"./KanbanAppRoutes":3,"./KanbanModule":4,"_process":351,"buffer":347}],2:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -46,9 +46,10 @@ _KanbanModule2.default.filter('taskStatus', function () { * Created by ANDREW on 9/4/2015. */ + _KanbanModule2.default.filter('count', function () { return function () { - var items = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0]; + var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; return items.length; }; }); @@ -69,7 +70,7 @@ exports.default = _KanbanModule2.default; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/App/KanbanAppFilters.js","/app/scripts/components/App") -},{"./KanbanModule":4,"_process":244,"buffer":240}],3:[function(require,module,exports){ +},{"./KanbanModule":4,"_process":351,"buffer":347}],3:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -119,12 +120,11 @@ _KanbanModule2.default.config(['$locationProvider', '$routeProvider', function ( }]); /** * Created by ANDREW on 9/4/2015. */ - exports.default = _KanbanModule2.default; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/App/KanbanAppRoutes.js","/app/scripts/components/App") -},{"./KanbanModule":4,"_process":244,"buffer":240}],4:[function(require,module,exports){ +},{"./KanbanModule":4,"_process":351,"buffer":347}],4:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -157,7 +157,7 @@ exports.default = _angular2.default.module('kanbanApp', [_angularRoute2.default, }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/App/KanbanModule.js","/app/scripts/components/App") -},{"_process":244,"angular":36,"angular-animate":31,"angular-route":33,"angular-timeago":34,"buffer":240}],5:[function(require,module,exports){ +},{"_process":351,"angular":36,"angular-animate":31,"angular-route":33,"angular-timeago":34,"buffer":347}],5:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -180,22 +180,21 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de _App2.default.controller('KanbanBoardController', _KanbanBoardController2.default); /** * Created by ANDREW on 9/4/2015. */ - exports.default = _App2.default; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/Board/KanbanBoard.js","/app/scripts/components/Board") -},{"../App":1,"./KanbanBoardController":6,"./KanbanBoardDirective":7,"_process":244,"buffer":240}],6:[function(require,module,exports){ +},{"../App":1,"./KanbanBoardController":6,"./KanbanBoardDirective":7,"_process":351,"buffer":347}],6:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - Object.defineProperty(exports, "__esModule", { value: true }); -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } } +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /** * Created by ANDREW on 8/27/2015. @@ -218,6 +217,7 @@ exports.default = ['$scope', '$log', '$timeout', 'ApiService', 'TaskDataService' var _$scope$taskData = $scope.taskData; var taskData = _$scope$taskData === undefined ? {} : _$scope$taskData; + if (!taskTitle) { return; } @@ -450,18 +450,18 @@ exports.default = ['$scope', '$log', '$timeout', 'ApiService', 'TaskDataService' return null; } - var verb = (function (evtName) { - var result = ({ + var verb = function (evtName) { + var result = { 'TaskCreatedEvent': 'created', 'TaskScheduledEvent': 'scheduled', 'TaskStartedEvent': 'started', 'TaskCompletedEvent': 'completed', 'TaskDeletedEvent': 'deleted', 'TaskBacklogEvent': 'back-logged' - })[evtName]; + }[evtName]; return result || 'did something else to..'; - })(eventType.split('.').reverse()[0]); + }(eventType.split('.').reverse()[0]); //if (verb === 'created') { // actor = createdBy; @@ -490,7 +490,7 @@ exports.default = ['$scope', '$log', '$timeout', 'ApiService', 'TaskDataService' }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/Board/KanbanBoardController.js","/app/scripts/components/Board") -},{"_process":244,"buffer":240}],7:[function(require,module,exports){ +},{"_process":351,"buffer":347}],7:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -580,12 +580,11 @@ _App2.default.directive('kbnBoard', ['$document', '$timeout', '$rootScope', func }]); /** * Created by ANDREW on 9/4/2015. */ - exports.default = _App2.default; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/Board/KanbanBoardDirective.js","/app/scripts/components/Board") -},{"../App":1,"_process":244,"buffer":240}],8:[function(require,module,exports){ +},{"../App":1,"_process":351,"buffer":347}],8:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -599,9 +598,10 @@ var _App2 = _interopRequireDefault(_App); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } } /** - * Created by andrew on 06/10/15. - */ +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /** + * Created by andrew on 06/10/15. + */ + _App2.default.directive('kbnBoardList', ['$log', '$timeout', 'ApiService', 'ServerListenerService', function ($log, $timeout, api, listenerSvc) { return { @@ -630,6 +630,7 @@ _App2.default.directive('kbnBoardList', ['$log', '$timeout', 'ApiService', 'Serv var boardName = $scope.boardName; var boardData = $scope.boardData; + if (!boardName) { return; } @@ -709,7 +710,7 @@ exports.default = _App2.default; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/BoardList/KanbanBoardList.js","/app/scripts/components/BoardList") -},{"../App":1,"_process":244,"buffer":240}],9:[function(require,module,exports){ +},{"../App":1,"_process":351,"buffer":347}],9:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -732,12 +733,11 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de _App2.default.controller('KanbanColumnController', _KanbanColumnController2.default); /** * Created by ANDREW on 9/4/2015. */ - exports.default = _App2.default; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/Column/KanbanColumn.js","/app/scripts/components/Column") -},{"../App":1,"./KanbanColumnController":10,"./KanbanColumnDirective":11,"_process":244,"buffer":240}],10:[function(require,module,exports){ +},{"../App":1,"./KanbanColumnController":10,"./KanbanColumnDirective":11,"_process":351,"buffer":347}],10:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -842,7 +842,7 @@ exports.default = ['$scope', 'StatusDataService', function KanbanColumnControlle }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/Column/KanbanColumnController.js","/app/scripts/components/Column") -},{"_process":244,"buffer":240}],11:[function(require,module,exports){ +},{"_process":351,"buffer":347}],11:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -856,9 +856,10 @@ var _App2 = _interopRequireDefault(_App); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } } /** - * Created by ANDREW on 9/4/2015. - */ +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /** + * Created by ANDREW on 9/4/2015. + */ + _App2.default.directive('kbnColumn', ['$document', '$log', 'StatusDataService', function ($document, $log, statusDataSvc) { return { @@ -915,7 +916,7 @@ exports.default = _App2.default; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/Column/KanbanColumnDirective.js","/app/scripts/components/Column") -},{"../App":1,"_process":244,"buffer":240}],12:[function(require,module,exports){ +},{"../App":1,"_process":351,"buffer":347}],12:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -929,9 +930,10 @@ var _App2 = _interopRequireDefault(_App); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } } /** - * Created by ANDREW on 9/4/2015. - */ +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /** + * Created by ANDREW on 9/4/2015. + */ + _App2.default.directive('cntFixed', ['$document', '$log', function ($document, $log) { return { @@ -1078,7 +1080,7 @@ exports.default = _App2.default; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/Containers/KanbanContainers.js","/app/scripts/components/Containers") -},{"../App":1,"_process":244,"buffer":240}],13:[function(require,module,exports){ +},{"../App":1,"_process":351,"buffer":347}],13:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -1123,7 +1125,7 @@ exports.default = _App2.default; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/Header/KanbanHeader.js","/app/scripts/components/Header") -},{"../App":1,"_process":244,"buffer":240}],14:[function(require,module,exports){ +},{"../App":1,"_process":351,"buffer":347}],14:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -1164,12 +1166,11 @@ _App2.default.directive('kbnLogin', ['$log', '$document', '$location', '$timeout }]); /** * Created by andrew on 05/10/15. */ - exports.default = _App2.default; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/Login/KanbanLogin.js","/app/scripts/components/Login") -},{"../App":1,"_process":244,"buffer":240}],15:[function(require,module,exports){ +},{"../App":1,"_process":351,"buffer":347}],15:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -1192,12 +1193,11 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de _App2.default.controller('KanbanTaskController', _KanbanTaskController2.default); /** * Created by ANDREW on 9/4/2015. */ - exports.default = _App2.default; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/Task/KanbanTask.js","/app/scripts/components/Task") -},{"../App":1,"./KanbanTaskController":16,"./KanbanTaskDirective":17,"_process":244,"buffer":240}],16:[function(require,module,exports){ +},{"../App":1,"./KanbanTaskController":16,"./KanbanTaskDirective":17,"_process":351,"buffer":347}],16:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -1262,7 +1262,7 @@ exports.default = ['$scope', function KanbanTaskController($scope) { }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/Task/KanbanTaskController.js","/app/scripts/components/Task") -},{"_process":244,"buffer":240}],17:[function(require,module,exports){ +},{"_process":351,"buffer":347}],17:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -1270,6 +1270,7 @@ var _extends = Object.assign || function (target) { for (var i = 1; i < argument * Created by ANDREW on 9/4/2015. */ + var _App = require('../App'); var _App2 = _interopRequireDefault(_App); @@ -1409,7 +1410,7 @@ _App2.default.directive('kbnTask', ['$log', '$document', function ($log, $docume }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/Task/KanbanTaskDirective.js","/app/scripts/components/Task") -},{"../App":1,"_process":244,"buffer":240,"jquery":245}],18:[function(require,module,exports){ +},{"../App":1,"_process":351,"buffer":347,"jquery":352}],18:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -1514,7 +1515,7 @@ exports.default = _App2.default; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/WorkFlow/KanbanWorkFlow.js","/app/scripts/components/WorkFlow") -},{"../App":1,"_process":244,"buffer":240}],19:[function(require,module,exports){ +},{"../App":1,"_process":351,"buffer":347}],19:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -1558,6 +1559,7 @@ _App2.default.run(["$rootScope", "$location", function ($rootScope, $location) { * Created by ANDREW on 9/4/2015. */ + _App2.default.run(["$injector", "$window", function ($injector, $window) { $window.$injector = $injector; }]); @@ -1566,14 +1568,14 @@ exports.default = _App2.default; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/components/index.js","/app/scripts/components") -},{"./App":1,"./Board":5,"./BoardList":8,"./Column":9,"./Containers":12,"./Header":13,"./Login":14,"./Task":15,"./WorkFlow":18,"_process":244,"buffer":240}],20:[function(require,module,exports){ +},{"./App":1,"./Board":5,"./BoardList":8,"./Column":9,"./Containers":12,"./Header":13,"./Login":14,"./Task":15,"./WorkFlow":18,"_process":351,"buffer":347}],20:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ /** * Created by ANDREW on 8/27/2015. */ -'use strict' +'use strict'; // //http://stackoverflow.com/questions/24827964/browserify-with-twitter-bootstrap -; + Object.defineProperty(exports, "__esModule", { value: true }); @@ -1596,7 +1598,7 @@ exports.default = _index2.default; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/main.js","/app/scripts") -},{"./components/index":19,"./services/index":23,"./util/jquery-bootstrap":29,"_process":244,"babel-polyfill":37,"bootstrap":226,"buffer":240}],21:[function(require,module,exports){ +},{"./components/index":19,"./services/index":23,"./util/jquery-bootstrap":29,"_process":351,"babel-polyfill":37,"bootstrap":333,"buffer":347}],21:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -1604,6 +1606,7 @@ var _extends = Object.assign || function (target) { for (var i = 1; i < argument * Created by ANDREW on 9/10/2015. */ + var _App = require('../components/App'); var _App2 = _interopRequireDefault(_App); @@ -1614,7 +1617,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } } +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } _App2.default.factory('ApiService', ['$http', '$q', 'AuthenticationService', function ($http, $q, authSvc) { @@ -1624,6 +1627,7 @@ _App2.default.factory('ApiService', ['$http', '$q', 'AuthenticationService', fun var auth = authSvc.auth; + var getOpts = { method: 'GET', cache: false, @@ -1701,7 +1705,7 @@ _App2.default.factory('ApiService', ['$http', '$q', 'AuthenticationService', fun }); }, createBoard = function createBoard(boardName) { - var boardData = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; + var boardData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; if (!authSvc.isLoggedIn()) { return $q.reject(null); @@ -1741,7 +1745,7 @@ _App2.default.factory('ApiService', ['$http', '$q', 'AuthenticationService', fun }); }, createTask = function createTask(taskTitle) { - var taskData = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; + var taskData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; if (!authSvc.isLoggedIn()) { return $q.reject(null); @@ -1774,6 +1778,7 @@ _App2.default.factory('ApiService', ['$http', '$q', 'AuthenticationService', fun var _data$backlog = data.backlog; var backlog = _data$backlog === undefined ? [] : _data$backlog; + return [].concat(_toConsumableArray(backlog), _toConsumableArray(tasks)); }).then(function (data) { //debugger; @@ -1812,8 +1817,8 @@ _App2.default.factory('ApiService', ['$http', '$q', 'AuthenticationService', fun }; function makeRequestFor(options) { - var data = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; - var appendPath = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; + var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + var appendPath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var isGet = options.method === 'GET'; var params = isGet ? _extends({ @@ -1842,7 +1847,12 @@ _App2.default.factory('ApiService', ['$http', '$q', 'AuthenticationService', fun headers: (_headers = {}, _defineProperty(_headers, authTokenKey, token), _defineProperty(_headers, 'Cache-Control', 'no-cache'), _defineProperty(_headers, 'Pragma', 'no-cache'), _headers), params: params, data: data - })); + })).then(function (data) { + return data; + }, function (data) { + console.error(data); + return data; + }); }; } @@ -1853,11 +1863,12 @@ _App2.default.factory('ApiService', ['$http', '$q', 'AuthenticationService', fun // return fn(...args); // }; //} + }]); }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/services/api.js","/app/scripts/services") -},{"../components/App":1,"_process":244,"buffer":240}],22:[function(require,module,exports){ +},{"../components/App":1,"_process":351,"buffer":347}],22:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -1865,6 +1876,7 @@ var _extends = Object.assign || function (target) { for (var i = 1; i < argument * Created by andrew on 05/10/15. */ + var _App = require('../components/App'); var _App2 = _interopRequireDefault(_App); @@ -1893,7 +1905,8 @@ _App2.default.factory('AuthenticationService', ['$rootScope', '$q', '$document', }; var auth = function auth(email) { - var again = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; + var again = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var againUsed = false; if (again === true) { @@ -1909,6 +1922,7 @@ _App2.default.factory('AuthenticationService', ['$rootScope', '$q', '$document', var accessToken = _ref.accessToken; var userName = _ref.userName; + if (accessToken) { authPromise = $q(function (rs) { @@ -1942,6 +1956,7 @@ _App2.default.factory('AuthenticationService', ['$rootScope', '$q', '$document', var token = res.data.token; + lastEmail = currentEmail; authPromise = Promise.resolve(token); return token; @@ -2002,7 +2017,7 @@ _App2.default.factory('AuthenticationService', ['$rootScope', '$q', '$document', }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/services/authentication.js","/app/scripts/services") -},{"../components/App":1,"_process":244,"buffer":240}],23:[function(require,module,exports){ +},{"../components/App":1,"_process":351,"buffer":347}],23:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -2022,13 +2037,13 @@ require('./viewport'); }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/services/index.js","/app/scripts/services") -},{"./api":21,"./authentication":22,"./serverListener":24,"./sessionStorage":25,"./statusData":26,"./taskData":27,"./viewport":28,"_process":244,"buffer":240}],24:[function(require,module,exports){ +},{"./api":21,"./authentication":22,"./serverListener":24,"./sessionStorage":25,"./statusData":26,"./taskData":27,"./viewport":28,"_process":351,"buffer":347}],24:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; -var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var _App = require('../components/App'); @@ -2046,9 +2061,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } } /** - * Created by ANDREW on 9/10/2015. - */ +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /** + * Created by ANDREW on 9/10/2015. + */ + _App2.default.factory('ServerListenerService', ['$rootScope', '$log', '$window', function ($rootScope, $log, $window) { @@ -2062,6 +2078,7 @@ _App2.default.factory('ServerListenerService', ['$rootScope', '$log', '$window', var refId = Math.random().toString().substr(2); subscribers = [{ refId: refId, eventName: eventName, callback: callback }].concat(_toConsumableArray(subscribers)); getListener(); + $log.log('App adds listener to ' + eventName + ' event'); return function () { subscribers = subscribers.filter(function (s) { return s.refId !== refId; @@ -2078,14 +2095,19 @@ _App2.default.factory('ServerListenerService', ['$rootScope', '$log', '$window', stomp.heartbeat.outgoing = 5000; stomp.heartbeat.incoming = 0; + $log.log('App connecting to stomp server'); stomp.connect({}, function () { + $log.log('App connected to stomp server'); subscription = stomp.subscribe('/events', function (msg) { + $log.log('App received a message from stomp server'); + var _msg$body = msg.body; var body = _msg$body === undefined ? null : _msg$body; var ack = msg.ack; var nack = msg.nack; var command = msg.command; + if (command != 'MESSAGE') { return; } @@ -2151,7 +2173,12 @@ _App2.default.factory('ServerListenerService', ['$rootScope', '$log', '$window', data: _extends({}, eventDataObj, { id: entityId }), msg: _extends({}, bodyObj, { eventData: _extends({}, eventDataObj) }) // copy into empty object }; - $window._lastSocketMessage = result; + + if (!$window._lastSocketMessage || !$window._lastSocketMessage.length) { + $window._lastSocketMessage = []; + } + // $window.alert(1); + $window._lastSocketMessage.push(result); var handlers = subscribers.filter(function (s) { return s.eventName === evtType || s.eventName === '*'; @@ -2178,7 +2205,7 @@ _App2.default.factory('ServerListenerService', ['$rootScope', '$log', '$window', }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/services/serverListener.js","/app/scripts/services") -},{"../components/App":1,"_process":244,"buffer":240,"sockjs-client":246,"stompjs":308}],25:[function(require,module,exports){ +},{"../components/App":1,"_process":351,"buffer":347,"sockjs-client":353,"stompjs":415}],25:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -2211,14 +2238,14 @@ _App2.default.factory('SessionStorageService', ['$window', function ($window) { case 2: { // SET - var key = args[0]; + var _key2 = args[0]; var value = args[1]; if (value === null) { // DELETE - $window.sessionStorage[key] = null; + $window.sessionStorage[_key2] = null; } else { - $window.sessionStorage[key] = JSON.stringify(value); + $window.sessionStorage[_key2] = JSON.stringify(value); } break; } @@ -2233,7 +2260,7 @@ _App2.default.factory('SessionStorageService', ['$window', function ($window) { }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/services/sessionStorage.js","/app/scripts/services") -},{"../components/App":1,"_process":244,"buffer":240}],26:[function(require,module,exports){ +},{"../components/App":1,"_process":351,"buffer":347}],26:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -2273,7 +2300,7 @@ _App2.default.factory('StatusDataService', function () { }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/services/statusData.js","/app/scripts/services") -},{"../components/App":1,"_process":244,"buffer":240}],27:[function(require,module,exports){ +},{"../components/App":1,"_process":351,"buffer":347}],27:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -2309,7 +2336,7 @@ _App2.default.factory('TaskDataService', ['ApiService', function (api) { }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/services/taskData.js","/app/scripts/services") -},{"../components/App":1,"_process":244,"buffer":240}],28:[function(require,module,exports){ +},{"../components/App":1,"_process":351,"buffer":347}],28:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -2382,7 +2409,7 @@ _App2.default.factory('ViewportService', ['$window', '$timeout', '$rootScope', f }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/services/viewport.js","/app/scripts/services") -},{"../components/App":1,"_process":244,"buffer":240}],29:[function(require,module,exports){ +},{"../components/App":1,"_process":351,"buffer":347}],29:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; @@ -2396,33 +2423,21 @@ window.$ = window.jQuery = _jquery2.default; /** * Created by ANDREW on 8/28/2015. */ + (0, _jquery2.default)('body').on('shown.bs.modal', '.modal', function focusFirstInput() { (0, _jquery2.default)(this).find('input[type="text"]:not([readonly]):not([disabled])').focus(); }); }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/app/scripts/util/jquery-bootstrap.js","/app/scripts/util") -},{"_process":244,"buffer":240,"jquery":245}],30:[function(require,module,exports){ +},{"_process":351,"buffer":347,"jquery":352}],30:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ /** - * @license AngularJS v1.4.7 - * (c) 2010-2015 Google, Inc. http://angularjs.org + * @license AngularJS v1.5.8 + * (c) 2010-2016 Google, Inc. http://angularjs.org * License: MIT */ -(function(window, angular, undefined) {'use strict'; - -/* jshint ignore:start */ -var noop = angular.noop; -var extend = angular.extend; -var jqLite = angular.element; -var forEach = angular.forEach; -var isArray = angular.isArray; -var isString = angular.isString; -var isObject = angular.isObject; -var isUndefined = angular.isUndefined; -var isDefined = angular.isDefined; -var isFunction = angular.isFunction; -var isElement = angular.isElement; +(function(window, angular) {'use strict'; var ELEMENT_NODE = 1; var COMMENT_NODE = 8; @@ -2431,6 +2446,7 @@ var ADD_CLASS_SUFFIX = '-add'; var REMOVE_CLASS_SUFFIX = '-remove'; var EVENT_CLASS_PREFIX = 'ng-'; var ACTIVE_CLASS_SUFFIX = '-active'; +var PREPARE_CLASS_SUFFIX = '-prepare'; var NG_ANIMATE_CLASSNAME = 'ng-animate'; var NG_ANIMATE_CHILDREN_DATA = '$$ngAnimateChildren'; @@ -2447,7 +2463,7 @@ var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMA // Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit // therefore there is no reason to test anymore for other vendor prefixes: // http://caniuse.com/#search=transition -if (isUndefined(window.ontransitionend) && isDefined(window.onwebkittransitionend)) { +if ((window.ontransitionend === void 0) && (window.onwebkittransitionend !== void 0)) { CSS_PREFIX = '-webkit-'; TRANSITION_PROP = 'WebkitTransition'; TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend'; @@ -2456,7 +2472,7 @@ if (isUndefined(window.ontransitionend) && isDefined(window.onwebkittransitionen TRANSITIONEND_EVENT = 'transitionend'; } -if (isUndefined(window.onanimationend) && isDefined(window.onwebkitanimationend)) { +if ((window.onanimationend === void 0) && (window.onwebkitanimationend !== void 0)) { CSS_PREFIX = '-webkit-'; ANIMATION_PROP = 'WebkitAnimation'; ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend'; @@ -2478,10 +2494,7 @@ var ANIMATION_DURATION_PROP = ANIMATION_PROP + DURATION_KEY; var TRANSITION_DELAY_PROP = TRANSITION_PROP + DELAY_KEY; var TRANSITION_DURATION_PROP = TRANSITION_PROP + DURATION_KEY; -var isPromiseLike = function(p) { - return p && p.then ? true : false; -}; - +var ngMinErr = angular.$$minErr('ng'); function assertArg(arg, name, reason) { if (!arg) { throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required")); @@ -2535,8 +2548,7 @@ function stripCommentsFromElement(element) { if (element instanceof jqLite) { switch (element.length) { case 0: - return []; - break; + return element; case 1: // there is no point of stripping anything if the element @@ -2549,7 +2561,6 @@ function stripCommentsFromElement(element) { default: return jqLite(extractElementNode(element)); - break; } } @@ -2590,7 +2601,7 @@ function applyAnimationClassesFactory($$jqLite) { $$removeClass($$jqLite, element, options.removeClass); options.removeClass = null; } - } + }; } function prepareAnimationOptions(options) { @@ -2626,7 +2637,10 @@ function applyAnimationToStyles(element, options) { } } -function mergeAnimationOptions(element, target, newOptions) { +function mergeAnimationDetails(element, oldAnimation, newAnimation) { + var target = oldAnimation.options || {}; + var newOptions = newAnimation.options || {}; + var toAdd = (target.addClass || '') + ' ' + (newOptions.addClass || ''); var toRemove = (target.removeClass || '') + ' ' + (newOptions.removeClass || ''); var classes = resolveElementClasses(element.attr('class'), toAdd, toRemove); @@ -2658,6 +2672,9 @@ function mergeAnimationOptions(element, target, newOptions) { target.removeClass = null; } + oldAnimation.addClass = target.addClass; + oldAnimation.removeClass = target.removeClass; + return target; } @@ -2687,10 +2704,10 @@ function resolveElementClasses(existing, toAdd, toRemove) { var prop, allow; if (val === ADD_CLASS) { prop = 'addClass'; - allow = !existing[klass]; + allow = !existing[klass] || existing[klass + REMOVE_CLASS_SUFFIX]; } else if (val === REMOVE_CLASS) { prop = 'removeClass'; - allow = existing[klass]; + allow = existing[klass] || existing[klass + ADD_CLASS_SUFFIX]; } if (allow) { if (classes[prop].length) { @@ -2720,7 +2737,7 @@ function resolveElementClasses(existing, toAdd, toRemove) { } function getDomNode(element) { - return (element instanceof angular.element) ? element[0] : element; + return (element instanceof jqLite) ? element[0] : element; } function applyGeneratedPreparationClasses(element, event, options) { @@ -2793,7 +2810,7 @@ var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) { queue = scheduler.queue = []; /* waitUntilQuiet does two things: - * 1. It will run the FINAL `fn` value only when an uncancelled RAF has passed through + * 1. It will run the FINAL `fn` value only when an uncanceled RAF has passed through * 2. It will delay the next wave of tasks from running until the quiet `fn` has run. * * The motivation here is that animation code can request more time from the scheduler @@ -2828,16 +2845,101 @@ var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) { } }]; -var $$AnimateChildrenDirective = [function() { - return function(scope, element, attrs) { - var val = attrs.ngAnimateChildren; - if (angular.isString(val) && val.length === 0) { //empty attribute - element.data(NG_ANIMATE_CHILDREN_DATA, true); - } else { - attrs.$observe('ngAnimateChildren', function(value) { +/** + * @ngdoc directive + * @name ngAnimateChildren + * @restrict AE + * @element ANY + * + * @description + * + * ngAnimateChildren allows you to specify that children of this element should animate even if any + * of the children's parents are currently animating. By default, when an element has an active `enter`, `leave`, or `move` + * (structural) animation, child elements that also have an active structural animation are not animated. + * + * Note that even if `ngAnimteChildren` is set, no child animations will run when the parent element is removed from the DOM (`leave` animation). + * + * + * @param {string} ngAnimateChildren If the value is empty, `true` or `on`, + * then child animations are allowed. If the value is `false`, child animations are not allowed. + * + * @example + * + +
+ + +
+
+
+ List of items: +
Item {{item}}
+
+
+
+
+ + + .container.ng-enter, + .container.ng-leave { + transition: all ease 1.5s; + } + + .container.ng-enter, + .container.ng-leave-active { + opacity: 0; + } + + .container.ng-leave, + .container.ng-enter-active { + opacity: 1; + } + + .item { + background: firebrick; + color: #FFF; + margin-bottom: 10px; + } + + .item.ng-enter, + .item.ng-leave { + transition: transform 1.5s ease; + } + + .item.ng-enter { + transform: translateX(50px); + } + + .item.ng-enter-active { + transform: translateX(0); + } + + + angular.module('ngAnimateChildren', ['ngAnimate']) + .controller('mainController', function() { + this.animateChildren = false; + this.enterElement = false; + }); + +
+ */ +var $$AnimateChildrenDirective = ['$interpolate', function($interpolate) { + return { + link: function(scope, element, attrs) { + var val = attrs.ngAnimateChildren; + if (isString(val) && val.length === 0) { //empty attribute + element.data(NG_ANIMATE_CHILDREN_DATA, true); + } else { + // Interpolate and set the value, so that it is available to + // animations that run right after compilation + setData($interpolate(val)(scope)); + attrs.$observe('ngAnimateChildren', setData); + } + + function setData(value) { value = value === 'on' || value === 'true'; element.data(NG_ANIMATE_CHILDREN_DATA, value); - }); + } } }; }]; @@ -3009,7 +3111,7 @@ var ANIMATE_TIMER_KEY = '$$animateCss'; * ``` * * To actually start the animation we need to run `animation.start()` which will then return a promise that we can hook into to detect when the animation ends. - * If we choose not to run the animation then we MUST run `animation.end()` to perform a cleanup on the element (since some CSS classes and stlyes may have been + * If we choose not to run the animation then we MUST run `animation.end()` to perform a cleanup on the element (since some CSS classes and styles may have been * applied to the element during the preparation phase). Note that all other properties such as duration, delay, transitions and keyframes are just properties * and that changing them will not reconfigure the parameters of the animation. * @@ -3028,6 +3130,8 @@ var ANIMATE_TIMER_KEY = '$$animateCss'; * * * `event` - The DOM event (e.g. enter, leave, move). When used, a generated CSS class of `ng-EVENT` and `ng-EVENT-active` will be applied * to the element during the animation. Multiple events can be provided when spaces are used as a separator. (Note that this will not perform any DOM operation.) + * * `structural` - Indicates that the `ng-` prefix will be added to the event class. Setting to `false` or omitting will turn `ng-EVENT` and + * `ng-EVENT-active` in `EVENT` and `EVENT-active`. Unused if `event` is omitted. * * `easing` - The CSS easing value that will be applied to the transition or keyframe animation (or both). * * `transitionStyle` - The raw CSS transition style that will be used (e.g. `1s linear all`). * * `keyframeStyle` - The raw CSS keyframe animation style that will be used (e.g. `1s my_animation linear`). @@ -3044,11 +3148,11 @@ var ANIMATE_TIMER_KEY = '$$animateCss'; * * `stagger` - A numeric time value representing the delay between successively animated elements * ({@link ngAnimate#css-staggering-animations Click here to learn how CSS-based staggering works in ngAnimate.}) * * `staggerIndex` - The numeric index representing the stagger item (e.g. a value of 5 is equal to the sixth item in the stagger; therefore when a - * * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`) - * * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occuring on the classes being added and removed.) + * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`) + * * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occurring on the classes being added and removed.) * * `cleanupStyles` - Whether or not the provided `from` and `to` styles will be removed once * the animation is closed. This is useful for when the styles are used purely for the sake of - * the animation and do not have a lasting visual effect on the element (e.g. a colapse and open animation). + * the animation and do not have a lasting visual effect on the element (e.g. a collapse and open animation). * By default this value is set to `false`. * * @return {object} an object with start and end methods and details about the animation. @@ -3101,7 +3205,7 @@ function computeCssStyles($window, element, properties) { } // by setting this to null in the event that the delay is not set or is set directly as 0 - // then we can still allow for zegative values to be used later on and not mistake this + // then we can still allow for negative values to be used later on and not mistake this // value for being greater than any other negative value. if (val === 0) { val = null; @@ -3192,9 +3296,9 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { var gcsStaggerLookup = createLocalCacheLookup(); this.$get = ['$window', '$$jqLite', '$$AnimateRunner', '$timeout', - '$$forceReflow', '$sniffer', '$$rAFScheduler', '$animate', + '$$forceReflow', '$sniffer', '$$rAFScheduler', '$$animateQueue', function($window, $$jqLite, $$AnimateRunner, $timeout, - $$forceReflow, $sniffer, $$rAFScheduler, $animate) { + $$forceReflow, $sniffer, $$rAFScheduler, $$animateQueue) { var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); @@ -3217,7 +3321,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { } // we keep putting this in multiple times even though the value and the cacheKey are the same - // because we're keeping an interal tally of how many duplicate animations are detected. + // because we're keeping an internal tally of how many duplicate animations are detected. gcsLookup.put(cacheKey, timings); return timings; } @@ -3286,17 +3390,24 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { return timings; } - return function init(element, options) { + return function init(element, initialOptions) { + // all of the animation functions should create + // a copy of the options data, however, if a + // parent service has already created a copy then + // we should stick to using that + var options = initialOptions || {}; + if (!options.$$prepared) { + options = prepareAnimationOptions(copy(options)); + } + var restoreStyles = {}; var node = getDomNode(element); if (!node || !node.parentNode - || !$animate.enabled()) { + || !$$animateQueue.enabled()) { return closeAndReturnNoopAnimator(); } - options = prepareAnimationOptions(options); - var temporaryStyles = []; var classes = element.attr('class'); var styles = packageStyles(options); @@ -3309,6 +3420,8 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { var maxDelayTime; var maxDuration; var maxDurationTime; + var startTime; + var events = []; if (options.duration === 0 || (!$sniffer.animations && !$sniffer.transitions)) { return closeAndReturnNoopAnimator(); @@ -3462,7 +3575,12 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { } if (options.delay != null) { - var delayStyle = parseFloat(options.delay); + var delayStyle; + if (typeof options.delay !== "boolean") { + delayStyle = parseFloat(options.delay); + // number in options.delay means we have to recalculate the delay for the closing timeout + maxDelay = Math.max(delayStyle, 0); + } if (flags.applyTransitionDelay) { temporaryStyles.push(getCssDelayStyle(delayStyle)); @@ -3577,6 +3695,18 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { options.onDone(); } + if (events && events.length) { + // Remove the transitionend / animationend listener(s) + element.off(events.join(' '), onAnimationProgress); + } + + //Cancel the fallback closing timeout and remove the timer data + var animationTimerData = element.data(ANIMATE_TIMER_KEY); + if (animationTimerData) { + $timeout.cancel(animationTimerData[0].timer); + element.removeData(ANIMATE_TIMER_KEY); + } + // if the preparation function fails then the promise is not setup if (runner) { runner.complete(!rejected); @@ -3612,6 +3742,33 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { }; } + function onAnimationProgress(event) { + event.stopPropagation(); + var ev = event.originalEvent || event; + + // we now always use `Date.now()` due to the recent changes with + // event.timeStamp in Firefox, Webkit and Chrome (see #13494 for more info) + var timeStamp = ev.$manualTimeStamp || Date.now(); + + /* Firefox (or possibly just Gecko) likes to not round values up + * when a ms measurement is used for the animation */ + var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES)); + + /* $manualTimeStamp is a mocked timeStamp value which is set + * within browserTrigger(). This is only here so that tests can + * mock animations properly. Real events fallback to event.timeStamp, + * or, if they don't, then a timeStamp is automatically created for them. + * We're checking to see if the timeStamp surpasses the expected delay, + * but we're using elapsedTime instead of the timeStamp on the 2nd + * pre-condition since animationPauseds sometimes close off early */ + if (Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) { + // we set this flag to ensure that if the transition is paused then, when resumed, + // the animation will automatically close itself since transitions cannot be paused. + animationCompleted = true; + close(); + } + } + function start() { if (animationClosed) return; if (!node.parentNode) { @@ -3619,8 +3776,6 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { return; } - var startTime, events = []; - // even though we only pause keyframe animations here the pause flag // will still happen when transitions are used. Only the transition will // not be paused since that is not possible. If the animation ends when @@ -3640,9 +3795,9 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { } }; - // checking the stagger duration prevents an accidently cascade of the CSS delay style + // checking the stagger duration prevents an accidentally cascade of the CSS delay style // being inherited from the parent. If the transition duration is zero then we can safely - // rely that the delay value is an intential stagger delay style. + // rely that the delay value is an intentional stagger delay style. var maxStagger = itemIndex > 0 && ((timings.transitionDuration && stagger.transitionDuration === 0) || (timings.animationDuration && stagger.animationDuration === 0)) @@ -3761,7 +3916,10 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { element.data(ANIMATE_TIMER_KEY, animationsData); } - element.on(events.join(' '), onAnimationProgress); + if (events.length) { + element.on(events.join(' '), onAnimationProgress); + } + if (options.to) { if (options.cleanupStyles) { registerRestorableStyles(restoreStyles, node, Object.keys(options.to)); @@ -3783,30 +3941,6 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { element.removeData(ANIMATE_TIMER_KEY); } } - - function onAnimationProgress(event) { - event.stopPropagation(); - var ev = event.originalEvent || event; - var timeStamp = ev.$manualTimeStamp || ev.timeStamp || Date.now(); - - /* Firefox (or possibly just Gecko) likes to not round values up - * when a ms measurement is used for the animation */ - var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES)); - - /* $manualTimeStamp is a mocked timeStamp value which is set - * within browserTrigger(). This is only here so that tests can - * mock animations properly. Real events fallback to event.timeStamp, - * or, if they don't, then a timeStamp is automatically created for them. - * We're checking to see if the timeStamp surpasses the expected delay, - * but we're using elapsedTime instead of the timeStamp on the 2nd - * pre-condition since animations sometimes close off early */ - if (Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) { - // we set this flag to ensure that if the transition is paused then, when resumed, - // the animation will automatically close itself since transitions cannot be paused. - animationCompleted = true; - close(); - } - } } }; }]; @@ -3836,7 +3970,7 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro var rootBodyElement = jqLite( // this is to avoid using something that exists outside of the body - // we also special case the doc fragement case because our unit test code + // we also special case the doc fragment case because our unit test code // appends the $rootElement to the body after the app has been bootstrapped isDocumentFragment(rootNode) || bodyNode.contains(rootNode) ? rootNode : bodyNode ); @@ -3936,7 +4070,7 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro var coords = getDomNode(anchor).getBoundingClientRect(); // we iterate directly since safari messes up and doesn't return - // all the keys for the coods object when iterated + // all the keys for the coords object when iterated forEach(['width','height','top','left'], function(key) { var value = coords[key]; switch (key) { @@ -4091,6 +4225,8 @@ var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) { var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); // $animateJs(element, 'enter'); return function(element, event, classes, options) { + var animationClosed = false; + // the `classes` argument is optional and if it is not used // then the classes will be resolved from the element's className // property as well as options.addClass/options.removeClass. @@ -4143,8 +4279,32 @@ var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) { applyAnimationClasses(element, options); } + function close() { + animationClosed = true; + applyOptions(); + applyAnimationStyles(element, options); + } + + var runner; + return { + $$willAnimate: true, + end: function() { + if (runner) { + runner.end(); + } else { + close(); + runner = new $$AnimateRunner(); + runner.complete(true); + } + return runner; + }, start: function() { + if (runner) { + return runner; + } + + runner = new $$AnimateRunner(); var closeActiveAnimations; var chain = []; @@ -4169,8 +4329,7 @@ var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) { }); } - var animationClosed = false; - var runner = new $$AnimateRunner({ + runner.setHost({ end: function() { endAnimations(); }, @@ -4183,9 +4342,7 @@ var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) { return runner; function onComplete(success) { - animationClosed = true; - applyOptions(); - applyAnimationStyles(element, options); + close(success); runner.complete(success); } @@ -4405,6 +4562,7 @@ var NG_ANIMATE_PIN_DATA = '$ngAnimatePin'; var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { var PRE_DIGEST_STATE = 1; var RUNNING_STATE = 2; + var ONE_SPACE = ' '; var rules = this.rules = { skip: [], @@ -4412,28 +4570,50 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { join: [] }; + function makeTruthyCssClassMap(classString) { + if (!classString) { + return null; + } + + var keys = classString.split(ONE_SPACE); + var map = Object.create(null); + + forEach(keys, function(key) { + map[key] = true; + }); + return map; + } + + function hasMatchingClasses(newClassString, currentClassString) { + if (newClassString && currentClassString) { + var currentClassMap = makeTruthyCssClassMap(currentClassString); + return newClassString.split(ONE_SPACE).some(function(className) { + return currentClassMap[className]; + }); + } + } + function isAllowed(ruleType, element, currentAnimation, previousAnimation) { return rules[ruleType].some(function(fn) { return fn(element, currentAnimation, previousAnimation); }); } - function hasAnimationClasses(options, and) { - options = options || {}; - var a = (options.addClass || '').length > 0; - var b = (options.removeClass || '').length > 0; + function hasAnimationClasses(animation, and) { + var a = (animation.addClass || '').length > 0; + var b = (animation.removeClass || '').length > 0; return and ? a && b : a || b; } rules.join.push(function(element, newAnimation, currentAnimation) { // if the new animation is class-based then we can just tack that on - return !newAnimation.structural && hasAnimationClasses(newAnimation.options); + return !newAnimation.structural && hasAnimationClasses(newAnimation); }); rules.skip.push(function(element, newAnimation, currentAnimation) { // there is no need to animate anything if no classes are being added and // there is no structural animation that will be triggered - return !newAnimation.structural && !hasAnimationClasses(newAnimation.options); + return !newAnimation.structural && !hasAnimationClasses(newAnimation); }); rules.skip.push(function(element, newAnimation, currentAnimation) { @@ -4459,11 +4639,22 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { }); rules.cancel.push(function(element, newAnimation, currentAnimation) { - var nO = newAnimation.options; - var cO = currentAnimation.options; + // cancel the animation if classes added / removed in both animation cancel each other out, + // but only if the current animation isn't structural - // if the exact same CSS class is added/removed then it's safe to cancel it - return (nO.addClass && nO.addClass === cO.removeClass) || (nO.removeClass && nO.removeClass === cO.addClass); + if (currentAnimation.structural) return false; + + var nA = newAnimation.addClass; + var nR = newAnimation.removeClass; + var cA = currentAnimation.addClass; + var cR = currentAnimation.removeClass; + + // early detection to save the global CPU shortage :) + if ((isUndefined(nA) && isUndefined(nR)) || (isUndefined(cA) && isUndefined(cR))) { + return false; + } + + return hasMatchingClasses(nA, cR) || hasMatchingClasses(nR, cA); }); this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$HashMap', @@ -4522,7 +4713,7 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { } ); - var callbackRegistry = {}; + var callbackRegistry = Object.create(null); // remember that the classNameFilter is set during the provider/config // stage therefore we can optimize here and setup a helper function @@ -4535,18 +4726,28 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); - function normalizeAnimationOptions(element, options) { - return mergeAnimationOptions(element, options, {}); + function normalizeAnimationDetails(element, animation) { + return mergeAnimationDetails(element, animation, {}); } - function findCallbacks(element, event) { + // IE9-11 has no method "contains" in SVG element and in Node.prototype. Bug #10259. + var contains = window.Node.prototype.contains || function(arg) { + // jshint bitwise: false + return this === arg || !!(this.compareDocumentPosition(arg) & 16); + // jshint bitwise: true + }; + + function findCallbacks(parent, element, event) { var targetNode = getDomNode(element); + var targetParentNode = getDomNode(parent); var matches = []; var entries = callbackRegistry[event]; if (entries) { forEach(entries, function(entry) { - if (entry.node.contains(targetNode)) { + if (contains.call(entry.node, targetNode)) { + matches.push(entry.callback); + } else if (event === 'leave' && contains.call(entry.node, targetParentNode)) { matches.push(entry.callback); } }); @@ -4555,7 +4756,24 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { return matches; } - return { + function filterFromRegistry(list, matchContainer, matchCallback) { + var containerNode = extractElementNode(matchContainer); + return list.filter(function(entry) { + var isMatch = entry.node === containerNode && + (!matchCallback || entry.callback === matchCallback); + return !isMatch; + }); + } + + function cleanupEventListeners(phase, element) { + if (phase === 'close' && !element[0].parentNode) { + // If the element is not attached to a parentNode, it has been removed by + // the domOperation, and we can safely remove the event callbacks + $animate.off(element); + } + } + + var $animate = { on: function(event, container, callback) { var node = extractElementNode(container); callbackRegistry[event] = callbackRegistry[event] || []; @@ -4563,24 +4781,36 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { node: node, callback: callback }); + + // Remove the callback when the element is removed from the DOM + jqLite(container).on('$destroy', function() { + var animationDetails = activeAnimationsLookup.get(node); + + if (!animationDetails) { + // If there's an animation ongoing, the callback calling code will remove + // the event listeners. If we'd remove here, the callbacks would be removed + // before the animation ends + $animate.off(event, container, callback); + } + }); }, off: function(event, container, callback) { + if (arguments.length === 1 && !isString(arguments[0])) { + container = arguments[0]; + for (var eventType in callbackRegistry) { + callbackRegistry[eventType] = filterFromRegistry(callbackRegistry[eventType], container); + } + + return; + } + var entries = callbackRegistry[event]; if (!entries) return; callbackRegistry[event] = arguments.length === 1 ? null : filterFromRegistry(entries, container, callback); - - function filterFromRegistry(list, matchContainer, matchCallback) { - var containerNode = extractElementNode(matchContainer); - return list.filter(function(entry) { - var isMatch = entry.node === containerNode && - (!matchCallback || entry.callback === matchCallback); - return !isMatch; - }); - } }, pin: function(element, parentElement) { @@ -4614,19 +4844,13 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { bool = animationsEnabled = !!element; } else { var node = getDomNode(element); - var recordExists = disabledElementsLookup.get(node); if (argCount === 1) { // (element) - Element getter - bool = !recordExists; + bool = !disabledElementsLookup.get(node); } else { // (element, bool) - Element setter - bool = !!bool; - if (!bool) { - disabledElementsLookup.put(node, true); - } else if (recordExists) { - disabledElementsLookup.remove(node); - } + disabledElementsLookup.put(node, !bool); } } } @@ -4635,7 +4859,14 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { } }; - function queueAnimation(element, event, options) { + return $animate; + + function queueAnimation(element, event, initialOptions) { + // we always make a copy of the options since + // there should never be any side effects on + // the input data when running `$animateCss`. + var options = copy(initialOptions); + var node, parent; element = stripCommentsFromElement(element); if (element) { @@ -4692,10 +4923,14 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0; + var documentHidden = $document[0].hidden; + // this is a hard disable of all animations for the application or on // the element itself, therefore there is no need to continue further // past this point if not enabled - var skipAnimations = !animationsEnabled || disabledElementsLookup.get(node); + // Animations are also disabled if the document is currently hidden (page is not visible + // to the user), because browsers slow down or do not flush calls to requestAnimationFrame + var skipAnimations = !animationsEnabled || documentHidden || disabledElementsLookup.get(node); var existingAnimation = (!skipAnimations && activeAnimationsLookup.get(node)) || {}; var hasExistingAnimation = !!existingAnimation.state; @@ -4706,7 +4941,10 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { } if (skipAnimations) { + // Callbacks should fire even if the document is hidden (regression fix for issue #14120) + if (documentHidden) notifyProgress(runner, event, 'start'); close(); + if (documentHidden) notifyProgress(runner, event, 'close'); return runner; } @@ -4718,6 +4956,8 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { structural: isStructural, element: element, event: event, + addClass: options.addClass, + removeClass: options.removeClass, close: close, options: options, runner: runner @@ -4730,11 +4970,10 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { close(); return runner; } else { - mergeAnimationOptions(element, existingAnimation.options, options); + mergeAnimationDetails(element, existingAnimation, newAnimation); return existingAnimation.runner; } } - var cancelAnimationFlag = isAllowed('cancel', element, newAnimation, existingAnimation); if (cancelAnimationFlag) { if (existingAnimation.state === RUNNING_STATE) { @@ -4749,7 +4988,8 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { existingAnimation.close(); } else { // this will merge the new animation options into existing animation options - mergeAnimationOptions(element, existingAnimation.options, newAnimation.options); + mergeAnimationDetails(element, existingAnimation, newAnimation); + return existingAnimation.runner; } } else { @@ -4759,12 +4999,12 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { var joinAnimationFlag = isAllowed('join', element, newAnimation, existingAnimation); if (joinAnimationFlag) { if (existingAnimation.state === RUNNING_STATE) { - normalizeAnimationOptions(element, options); + normalizeAnimationDetails(element, newAnimation); } else { applyGeneratedPreparationClasses(element, isStructural ? event : null, options); event = newAnimation.event = existingAnimation.event; - options = mergeAnimationOptions(element, existingAnimation.options, newAnimation.options); + options = mergeAnimationDetails(element, existingAnimation, newAnimation); //we return the same runner since only the option values of this animation will //be fed into the `existingAnimation`. @@ -4775,7 +5015,7 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { } else { // normalization in this case means that it removes redundant CSS classes that // already exist (addClass) or do not exist (removeClass) on the element - normalizeAnimationOptions(element, options); + normalizeAnimationDetails(element, newAnimation); } // when the options are merged and cleaned up we may end up not having to do @@ -4785,7 +5025,7 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { if (!isValidAnimation) { // animate (from/to) can be quickly checked first, otherwise we check if any classes are present isValidAnimation = (newAnimation.event === 'animate' && Object.keys(newAnimation.options.to || {}).length > 0) - || hasAnimationClasses(newAnimation.options); + || hasAnimationClasses(newAnimation); } if (!isValidAnimation) { @@ -4815,7 +5055,7 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { var isValidAnimation = parentElement.length > 0 && (animationDetails.event === 'animate' || animationDetails.structural - || hasAnimationClasses(animationDetails.options)); + || hasAnimationClasses(animationDetails)); // this means that the previous animation was cancelled // even if the follow-up animation is the same event @@ -4847,13 +5087,18 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { // this combined multiple class to addClass / removeClass into a setClass event // so long as a structural event did not take over the animation - event = !animationDetails.structural && hasAnimationClasses(animationDetails.options, true) + event = !animationDetails.structural && hasAnimationClasses(animationDetails, true) ? 'setClass' : animationDetails.event; markElementAnimationState(element, RUNNING_STATE); var realRunner = $$animation(element, event, animationDetails.options); + // this will update the runner's flow-control events based on + // the `realRunner` object. + runner.setHost(realRunner); + notifyProgress(runner, event, 'start', {}); + realRunner.done(function(status) { close(!status); var animationDetails = activeAnimationsLookup.get(node); @@ -4862,18 +5107,13 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { } notifyProgress(runner, event, 'close', {}); }); - - // this will update the runner's flow-control events based on - // the `realRunner` object. - runner.setHost(realRunner); - notifyProgress(runner, event, 'start', {}); }); return runner; function notifyProgress(runner, event, phase, data) { runInNextPostDigestOrNow(function() { - var callbacks = findCallbacks(element, event); + var callbacks = findCallbacks(parent, element, event); if (callbacks.length) { // do not optimize this call here to RAF because // we don't know how heavy the callback code here will @@ -4883,7 +5123,10 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { forEach(callbacks, function(callback) { callback(element, phase, data); }); + cleanupEventListeners(phase, element); }); + } else { + cleanupEventListeners(phase, element); } }); runner.progress(event, phase, data); @@ -4904,15 +5147,15 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { forEach(children, function(child) { var state = parseInt(child.getAttribute(NG_ANIMATE_ATTR_NAME)); var animationDetails = activeAnimationsLookup.get(child); - switch (state) { - case RUNNING_STATE: - animationDetails.runner.end(); - /* falls through */ - case PRE_DIGEST_STATE: - if (animationDetails) { + if (animationDetails) { + switch (state) { + case RUNNING_STATE: + animationDetails.runner.end(); + /* falls through */ + case PRE_DIGEST_STATE: activeAnimationsLookup.remove(child); - } - break; + break; + } } }); } @@ -4927,41 +5170,61 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { return getDomNode(nodeOrElmA) === getDomNode(nodeOrElmB); } + /** + * This fn returns false if any of the following is true: + * a) animations on any parent element are disabled, and animations on the element aren't explicitly allowed + * b) a parent element has an ongoing structural animation, and animateChildren is false + * c) the element is not a child of the body + * d) the element is not a child of the $rootElement + */ function areAnimationsAllowed(element, parentElement, event) { var bodyElement = jqLite($document[0].body); var bodyElementDetected = isMatchingElement(element, bodyElement) || element[0].nodeName === 'HTML'; var rootElementDetected = isMatchingElement(element, $rootElement); var parentAnimationDetected = false; var animateChildren; + var elementDisabled = disabledElementsLookup.get(getDomNode(element)); - var parentHost = element.data(NG_ANIMATE_PIN_DATA); + var parentHost = jqLite.data(element[0], NG_ANIMATE_PIN_DATA); if (parentHost) { parentElement = parentHost; } - while (parentElement && parentElement.length) { + parentElement = getDomNode(parentElement); + + while (parentElement) { if (!rootElementDetected) { // angular doesn't want to attempt to animate elements outside of the application // therefore we need to ensure that the rootElement is an ancestor of the current element rootElementDetected = isMatchingElement(parentElement, $rootElement); } - var parentNode = parentElement[0]; - if (parentNode.nodeType !== ELEMENT_NODE) { + if (parentElement.nodeType !== ELEMENT_NODE) { // no point in inspecting the #document element break; } - var details = activeAnimationsLookup.get(parentNode) || {}; + var details = activeAnimationsLookup.get(parentElement) || {}; // either an enter, leave or move animation will commence // therefore we can't allow any animations to take place // but if a parent animation is class-based then that's ok if (!parentAnimationDetected) { - parentAnimationDetected = details.structural || disabledElementsLookup.get(parentNode); + var parentElementDisabled = disabledElementsLookup.get(parentElement); + + if (parentElementDisabled === true && elementDisabled !== false) { + // disable animations if the user hasn't explicitly enabled animations on the + // current element + elementDisabled = true; + // element is disabled via parent element, no need to check anything else + break; + } else if (parentElementDisabled === false) { + elementDisabled = false; + } + parentAnimationDetected = details.structural; } if (isUndefined(animateChildren) || animateChildren === true) { - var value = parentElement.data(NG_ANIMATE_CHILDREN_DATA); + var value = jqLite.data(parentElement, NG_ANIMATE_CHILDREN_DATA); if (isDefined(value)) { animateChildren = value; } @@ -4970,28 +5233,32 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { // there is no need to continue traversing at this point if (parentAnimationDetected && animateChildren === false) break; - if (!rootElementDetected) { - // angular doesn't want to attempt to animate elements outside of the application - // therefore we need to ensure that the rootElement is an ancestor of the current element - rootElementDetected = isMatchingElement(parentElement, $rootElement); - if (!rootElementDetected) { - parentHost = parentElement.data(NG_ANIMATE_PIN_DATA); - if (parentHost) { - parentElement = parentHost; - } - } - } - if (!bodyElementDetected) { - // we also need to ensure that the element is or will be apart of the body element + // we also need to ensure that the element is or will be a part of the body element // otherwise it is pointless to even issue an animation to be rendered bodyElementDetected = isMatchingElement(parentElement, bodyElement); } - parentElement = parentElement.parent(); + if (bodyElementDetected && rootElementDetected) { + // If both body and root have been found, any other checks are pointless, + // as no animation data should live outside the application + break; + } + + if (!rootElementDetected) { + // If no rootElement is detected, check if the parentElement is pinned to another element + parentHost = jqLite.data(parentElement, NG_ANIMATE_PIN_DATA); + if (parentHost) { + // The pin target element becomes the next parent element + parentElement = getDomNode(parentHost); + continue; + } + } + + parentElement = parentElement.parentNode; } - var allowAnimation = !parentAnimationDetected || animateChildren; + var allowAnimation = (!parentAnimationDetected || animateChildren) && elementDisabled !== true; return allowAnimation && rootElementDetected && bodyElementDetected; } @@ -5011,171 +5278,6 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { }]; }]; -var $$AnimateAsyncRunFactory = ['$$rAF', function($$rAF) { - var waitQueue = []; - - function waitForTick(fn) { - waitQueue.push(fn); - if (waitQueue.length > 1) return; - $$rAF(function() { - for (var i = 0; i < waitQueue.length; i++) { - waitQueue[i](); - } - waitQueue = []; - }); - } - - return function() { - var passed = false; - waitForTick(function() { - passed = true; - }); - return function(callback) { - passed ? callback() : waitForTick(callback); - }; - }; -}]; - -var $$AnimateRunnerFactory = ['$q', '$sniffer', '$$animateAsyncRun', - function($q, $sniffer, $$animateAsyncRun) { - - var INITIAL_STATE = 0; - var DONE_PENDING_STATE = 1; - var DONE_COMPLETE_STATE = 2; - - AnimateRunner.chain = function(chain, callback) { - var index = 0; - - next(); - function next() { - if (index === chain.length) { - callback(true); - return; - } - - chain[index](function(response) { - if (response === false) { - callback(false); - return; - } - index++; - next(); - }); - } - }; - - AnimateRunner.all = function(runners, callback) { - var count = 0; - var status = true; - forEach(runners, function(runner) { - runner.done(onProgress); - }); - - function onProgress(response) { - status = status && response; - if (++count === runners.length) { - callback(status); - } - } - }; - - function AnimateRunner(host) { - this.setHost(host); - - this._doneCallbacks = []; - this._runInAnimationFrame = $$animateAsyncRun(); - this._state = 0; - } - - AnimateRunner.prototype = { - setHost: function(host) { - this.host = host || {}; - }, - - done: function(fn) { - if (this._state === DONE_COMPLETE_STATE) { - fn(); - } else { - this._doneCallbacks.push(fn); - } - }, - - progress: noop, - - getPromise: function() { - if (!this.promise) { - var self = this; - this.promise = $q(function(resolve, reject) { - self.done(function(status) { - status === false ? reject() : resolve(); - }); - }); - } - return this.promise; - }, - - then: function(resolveHandler, rejectHandler) { - return this.getPromise().then(resolveHandler, rejectHandler); - }, - - 'catch': function(handler) { - return this.getPromise()['catch'](handler); - }, - - 'finally': function(handler) { - return this.getPromise()['finally'](handler); - }, - - pause: function() { - if (this.host.pause) { - this.host.pause(); - } - }, - - resume: function() { - if (this.host.resume) { - this.host.resume(); - } - }, - - end: function() { - if (this.host.end) { - this.host.end(); - } - this._resolve(true); - }, - - cancel: function() { - if (this.host.cancel) { - this.host.cancel(); - } - this._resolve(false); - }, - - complete: function(response) { - var self = this; - if (self._state === INITIAL_STATE) { - self._state = DONE_PENDING_STATE; - self._runInAnimationFrame(function() { - self._resolve(response); - }); - } - }, - - _resolve: function(response) { - if (this._state !== DONE_COMPLETE_STATE) { - forEach(this._doneCallbacks, function(fn) { - fn(response); - }); - this._doneCallbacks.length = 0; - this._state = DONE_COMPLETE_STATE; - } - } - }; - - return AnimateRunner; -}]; - var $$AnimationProvider = ['$animateProvider', function($animateProvider) { var NG_ANIMATE_REF_ATTR = 'ng-animate-ref'; @@ -5311,6 +5413,12 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { options.tempClasses = null; } + var prepareClassName; + if (isStructural) { + prepareClassName = 'ng-' + event + PREPARE_CLASS_SUFFIX; + $$jqLite.addClass(element, prepareClassName); + } + animationQueue.push({ // this data is used by the postDigest code and passed into // the driver step function @@ -5475,7 +5583,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { }; // the anchor animations require that the from and to elements both have at least - // one shared CSS class which effictively marries the two elements together to use + // one shared CSS class which effectively marries the two elements together to use // the same animation driver and to properly sequence the anchor animation. if (group.classes.length) { preparedAnimations.push(group); @@ -5518,8 +5626,6 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { // may attempt more elements, but custom drivers are more particular for (var i = drivers.length - 1; i >= 0; i--) { var driverName = drivers[i]; - if (!$injector.has(driverName)) continue; // TODO(matsko): remove this check - var factory = $injector.get(driverName); var driver = factory(animationDetails); if (driver) { @@ -5533,6 +5639,10 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { if (tempClasses) { $$jqLite.addClass(element, tempClasses); } + if (prepareClassName) { + $$jqLite.removeClass(element, prepareClassName); + prepareClassName = null; + } } function updateAnimationRunners(animation, newRunner) { @@ -5544,7 +5654,8 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { } function update(element) { - getRunner(element).setHost(newRunner); + var runner = getRunner(element); + if (runner) runner.setHost(newRunner); } } @@ -5574,19 +5685,120 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { }]; }]; -/* global angularAnimateModule: true, - - $$AnimateAsyncRunFactory, - $$rAFSchedulerFactory, - $$AnimateChildrenDirective, - $$AnimateRunnerFactory, - $$AnimateQueueProvider, - $$AnimationProvider, - $AnimateCssProvider, - $$AnimateCssDriverProvider, - $$AnimateJsProvider, - $$AnimateJsDriverProvider, -*/ +/** + * @ngdoc directive + * @name ngAnimateSwap + * @restrict A + * @scope + * + * @description + * + * ngAnimateSwap is a animation-oriented directive that allows for the container to + * be removed and entered in whenever the associated expression changes. A + * common usecase for this directive is a rotating banner or slider component which + * contains one image being present at a time. When the active image changes + * then the old image will perform a `leave` animation and the new element + * will be inserted via an `enter` animation. + * + * @animations + * | Animation | Occurs | + * |----------------------------------|--------------------------------------| + * | {@link ng.$animate#enter enter} | when the new element is inserted to the DOM | + * | {@link ng.$animate#leave leave} | when the old element is removed from the DOM | + * + * @example + * + * + *
+ *
+ * {{ number }} + *
+ *
+ *
+ * + * angular.module('ngAnimateSwapExample', ['ngAnimate']) + * .controller('AppCtrl', ['$scope', '$interval', function($scope, $interval) { + * $scope.number = 0; + * $interval(function() { + * $scope.number++; + * }, 1000); + * + * var colors = ['red','blue','green','yellow','orange']; + * $scope.colorClass = function(number) { + * return colors[number % colors.length]; + * }; + * }]); + * + * + * .container { + * height:250px; + * width:250px; + * position:relative; + * overflow:hidden; + * border:2px solid black; + * } + * .container .cell { + * font-size:150px; + * text-align:center; + * line-height:250px; + * position:absolute; + * top:0; + * left:0; + * right:0; + * border-bottom:2px solid black; + * } + * .swap-animation.ng-enter, .swap-animation.ng-leave { + * transition:0.5s linear all; + * } + * .swap-animation.ng-enter { + * top:-250px; + * } + * .swap-animation.ng-enter-active { + * top:0px; + * } + * .swap-animation.ng-leave { + * top:0px; + * } + * .swap-animation.ng-leave-active { + * top:250px; + * } + * .red { background:red; } + * .green { background:green; } + * .blue { background:blue; } + * .yellow { background:yellow; } + * .orange { background:orange; } + * + *
+ */ +var ngAnimateSwapDirective = ['$animate', '$rootScope', function($animate, $rootScope) { + return { + restrict: 'A', + transclude: 'element', + terminal: true, + priority: 600, // we use 600 here to ensure that the directive is caught before others + link: function(scope, $element, attrs, ctrl, $transclude) { + var previousElement, previousScope; + scope.$watchCollection(attrs.ngAnimateSwap || attrs['for'], function(value) { + if (previousElement) { + $animate.leave(previousElement); + } + if (previousScope) { + previousScope.$destroy(); + previousScope = null; + } + if (value || value === 0) { + previousScope = scope.$new(); + $transclude(previousScope, function(element) { + previousElement = element; + $animate.enter(element, null, $element); + }); + } + }); + } + }; +}]; /** * @ngdoc module @@ -5704,7 +5916,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) { *
* Show and hide me *
- * + * * *
-
Sorting predicate = {{predicate}}; reverse = {{reverse}}
+
Sort by = {{propertyName}}; reverse = {{reverse}}
+
+
- [ unsorted ] - +
- + @@ -27004,67 +29417,351 @@ function limitToFilter() {
- Name - + + - Phone Number - + + - Age - + +
{{friend.name}} {{friend.phone}} {{friend.age}}
+ + angular.module('orderByExample2', []) + .controller('ExampleController', ['$scope', function($scope) { + var friends = [ + {name: 'John', phone: '555-1212', age: 10}, + {name: 'Mary', phone: '555-9876', age: 19}, + {name: 'Mike', phone: '555-4321', age: 21}, + {name: 'Adam', phone: '555-5678', age: 35}, + {name: 'Julie', phone: '555-8765', age: 29} + ]; + + $scope.propertyName = 'age'; + $scope.reverse = true; + $scope.friends = friends; + + $scope.sortBy = function(propertyName) { + $scope.reverse = ($scope.propertyName === propertyName) ? !$scope.reverse : false; + $scope.propertyName = propertyName; + }; + }]); + + + .friends { + border-collapse: collapse; + } + + .friends th { + border-bottom: 1px solid; + } + .friends td, .friends th { + border-left: 1px solid; + padding: 5px 10px; + } + .friends td:first-child, .friends th:first-child { + border-left: none; + } + + .sortorder:after { + content: '\25b2'; // BLACK UP-POINTING TRIANGLE + } + .sortorder.reverse:after { + content: '\25bc'; // BLACK DOWN-POINTING TRIANGLE + } + + + // Element locators + var unsortButton = element(by.partialButtonText('unsorted')); + var nameHeader = element(by.partialButtonText('Name')); + var phoneHeader = element(by.partialButtonText('Phone')); + var ageHeader = element(by.partialButtonText('Age')); + var firstName = element(by.repeater('friends').column('friend.name').row(0)); + var lastName = element(by.repeater('friends').column('friend.name').row(4)); + + it('should sort friends by some property, when clicking on the column header', function() { + expect(firstName.getText()).toBe('Adam'); + expect(lastName.getText()).toBe('John'); + + phoneHeader.click(); + expect(firstName.getText()).toBe('John'); + expect(lastName.getText()).toBe('Mary'); + + nameHeader.click(); + expect(firstName.getText()).toBe('Adam'); + expect(lastName.getText()).toBe('Mike'); + + ageHeader.click(); + expect(firstName.getText()).toBe('John'); + expect(lastName.getText()).toBe('Adam'); + }); + + it('should sort friends in reverse order, when clicking on the same column', function() { + expect(firstName.getText()).toBe('Adam'); + expect(lastName.getText()).toBe('John'); + + ageHeader.click(); + expect(firstName.getText()).toBe('John'); + expect(lastName.getText()).toBe('Adam'); + + ageHeader.click(); + expect(firstName.getText()).toBe('Adam'); + expect(lastName.getText()).toBe('John'); + }); + + it('should restore the original order, when clicking "Set to unsorted"', function() { + expect(firstName.getText()).toBe('Adam'); + expect(lastName.getText()).toBe('John'); + + unsortButton.click(); + expect(firstName.getText()).toBe('John'); + expect(lastName.getText()).toBe('Julie'); + }); + + *
* - * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the - * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the - * desired parameters. + * @example + * ### Using `orderBy` inside a controller + * + * It is also possible to call the `orderBy` filter manually, by injecting `orderByFilter`, and + * calling it with the desired parameters. (Alternatively, you could inject the `$filter` factory + * and retrieve the `orderBy` filter with `$filter('orderBy')`.) * - * Example: + + +
+
Sort by = {{propertyName}}; reverse = {{reverse}}
+
+ +
+ + + + + + + + + + + +
+ + + + + + + + +
{{friend.name}}{{friend.phone}}{{friend.age}}
+
+
+ + angular.module('orderByExample3', []) + .controller('ExampleController', ['$scope', 'orderByFilter', function($scope, orderBy) { + var friends = [ + {name: 'John', phone: '555-1212', age: 10}, + {name: 'Mary', phone: '555-9876', age: 19}, + {name: 'Mike', phone: '555-4321', age: 21}, + {name: 'Adam', phone: '555-5678', age: 35}, + {name: 'Julie', phone: '555-8765', age: 29} + ]; + + $scope.propertyName = 'age'; + $scope.reverse = true; + $scope.friends = orderBy(friends, $scope.propertyName, $scope.reverse); + + $scope.sortBy = function(propertyName) { + $scope.reverse = (propertyName !== null && $scope.propertyName === propertyName) + ? !$scope.reverse : false; + $scope.propertyName = propertyName; + $scope.friends = orderBy(friends, $scope.propertyName, $scope.reverse); + }; + }]); + + + .friends { + border-collapse: collapse; + } + + .friends th { + border-bottom: 1px solid; + } + .friends td, .friends th { + border-left: 1px solid; + padding: 5px 10px; + } + .friends td:first-child, .friends th:first-child { + border-left: none; + } + + .sortorder:after { + content: '\25b2'; // BLACK UP-POINTING TRIANGLE + } + .sortorder.reverse:after { + content: '\25bc'; // BLACK DOWN-POINTING TRIANGLE + } + + + // Element locators + var unsortButton = element(by.partialButtonText('unsorted')); + var nameHeader = element(by.partialButtonText('Name')); + var phoneHeader = element(by.partialButtonText('Phone')); + var ageHeader = element(by.partialButtonText('Age')); + var firstName = element(by.repeater('friends').column('friend.name').row(0)); + var lastName = element(by.repeater('friends').column('friend.name').row(4)); + + it('should sort friends by some property, when clicking on the column header', function() { + expect(firstName.getText()).toBe('Adam'); + expect(lastName.getText()).toBe('John'); + + phoneHeader.click(); + expect(firstName.getText()).toBe('John'); + expect(lastName.getText()).toBe('Mary'); + + nameHeader.click(); + expect(firstName.getText()).toBe('Adam'); + expect(lastName.getText()).toBe('Mike'); + + ageHeader.click(); + expect(firstName.getText()).toBe('John'); + expect(lastName.getText()).toBe('Adam'); + }); + + it('should sort friends in reverse order, when clicking on the same column', function() { + expect(firstName.getText()).toBe('Adam'); + expect(lastName.getText()).toBe('John'); + + ageHeader.click(); + expect(firstName.getText()).toBe('John'); + expect(lastName.getText()).toBe('Adam'); + + ageHeader.click(); + expect(firstName.getText()).toBe('Adam'); + expect(lastName.getText()).toBe('John'); + }); + + it('should restore the original order, when clicking "Set to unsorted"', function() { + expect(firstName.getText()).toBe('Adam'); + expect(lastName.getText()).toBe('John'); + + unsortButton.click(); + expect(firstName.getText()).toBe('John'); + expect(lastName.getText()).toBe('Julie'); + }); + +
+ *
* * @example - - -
- - - - - - - - - - - -
Name - (^)Phone NumberAge
{{friend.name}}{{friend.phone}}{{friend.age}}
-
-
+ * ### Using a custom comparator + * + * If you have very specific requirements about the way items are sorted, you can pass your own + * comparator function. For example, you might need to compare some strings in a locale-sensitive + * way. (When specifying a custom comparator, you also need to pass a value for the `reverse` + * argument - passing `false` retains the default sorting order, i.e. ascending.) + * + + +
+
+

Locale-sensitive Comparator

+ + + + + + + + + +
NameFavorite Letter
{{friend.name}}{{friend.favoriteLetter}}
+
+
+

Default Comparator

+ + + + + + + + + +
NameFavorite Letter
{{friend.name}}{{friend.favoriteLetter}}
+
+
+
+ + angular.module('orderByExample4', []) + .controller('ExampleController', ['$scope', function($scope) { + $scope.friends = [ + {name: 'John', favoriteLetter: 'Ä'}, + {name: 'Mary', favoriteLetter: 'Ü'}, + {name: 'Mike', favoriteLetter: 'Ö'}, + {name: 'Adam', favoriteLetter: 'H'}, + {name: 'Julie', favoriteLetter: 'Z'} + ]; + + $scope.localeSensitiveComparator = function(v1, v2) { + // If we don't get strings, just compare by index + if (v1.type !== 'string' || v2.type !== 'string') { + return (v1.index < v2.index) ? -1 : 1; + } - - angular.module('orderByExample', []) - .controller('ExampleController', ['$scope', '$filter', function($scope, $filter) { - var orderBy = $filter('orderBy'); - $scope.friends = [ - { name: 'John', phone: '555-1212', age: 10 }, - { name: 'Mary', phone: '555-9876', age: 19 }, - { name: 'Mike', phone: '555-4321', age: 21 }, - { name: 'Adam', phone: '555-5678', age: 35 }, - { name: 'Julie', phone: '555-8765', age: 29 } - ]; - $scope.order = function(predicate, reverse) { - $scope.friends = orderBy($scope.friends, predicate, reverse); - }; - $scope.order('-age',false); - }]); - -
+ // Compare strings alphabetically, taking locale into account + return v1.value.localeCompare(v2.value); + }; + }]); + + + .friends-container { + display: inline-block; + margin: 0 30px; + } + + .friends { + border-collapse: collapse; + } + + .friends th { + border-bottom: 1px solid; + } + .friends td, .friends th { + border-left: 1px solid; + padding: 5px 10px; + } + .friends td:first-child, .friends th:first-child { + border-left: none; + } + + + // Element locators + var container = element(by.css('.custom-comparator')); + var names = container.all(by.repeater('friends').column('friend.name')); + + it('should sort friends by favorite letter (in correct alphabetical order)', function() { + expect(names.get(0).getText()).toBe('John'); + expect(names.get(1).getText()).toBe('Adam'); + expect(names.get(2).getText()).toBe('Mike'); + expect(names.get(3).getText()).toBe('Mary'); + expect(names.get(4).getText()).toBe('Julie'); + }); + +
+ * */ orderByFilter.$inject = ['$parse']; function orderByFilter($parse) { - return function(array, sortPredicate, reverseOrder) { + return function(array, sortPredicate, reverseOrder, compareFn) { - if (!(isArrayLike(array))) return array; + if (array == null) return array; + if (!isArrayLike(array)) { + throw minErr('orderBy')('notarray', 'Expected array but received: {0}', array); + } if (!isArray(sortPredicate)) { sortPredicate = [sortPredicate]; } if (sortPredicate.length === 0) { sortPredicate = ['+']; } - var predicates = processPredicates(sortPredicate, reverseOrder); - // Add a predicate at the end that evaluates to the element index. This makes the - // sort stable as it works as a tie-breaker when all the input predicates cannot - // distinguish between two elements. - predicates.push({ get: function() { return {}; }, descending: reverseOrder ? -1 : 1}); + var predicates = processPredicates(sortPredicate); + + var descending = reverseOrder ? -1 : 1; + + // Define the `compare()` function. Use a default comparator if none is specified. + var compare = isFunction(compareFn) ? compareFn : defaultCompare; // The next three lines are a version of a Swartzian Transform idiom from Perl // (sometimes called the Decorate-Sort-Undecorate idiom) @@ -27076,8 +29773,12 @@ function orderByFilter($parse) { return array; function getComparisonObject(value, index) { + // NOTE: We are adding an extra `tieBreaker` value based on the element's index. + // This will be used to keep the sort stable when none of the input predicates can + // distinguish between two elements. return { value: value, + tieBreaker: {value: index, type: 'number', index: index}, predicateValues: predicates.map(function(predicate) { return getPredicateValue(predicate.get(value), index); }) @@ -27085,18 +29786,19 @@ function orderByFilter($parse) { } function doComparison(v1, v2) { - var result = 0; - for (var index=0, length = predicates.length; index < length; ++index) { - result = compare(v1.predicateValues[index], v2.predicateValues[index]) * predicates[index].descending; - if (result) break; + for (var i = 0, ii = predicates.length; i < ii; i++) { + var result = compare(v1.predicateValues[i], v2.predicateValues[i]); + if (result) { + return result * predicates[i].descending * descending; + } } - return result; + + return compare(v1.tieBreaker, v2.tieBreaker) * descending; } }; - function processPredicates(sortPredicate, reverseOrder) { - reverseOrder = reverseOrder ? -1 : 1; - return sortPredicate.map(function(predicate) { + function processPredicates(sortPredicates) { + return sortPredicates.map(function(predicate) { var descending = 1, get = identity; if (isFunction(predicate)) { @@ -27114,7 +29816,7 @@ function orderByFilter($parse) { } } } - return { get: get, descending: descending * reverseOrder }; + return {get: get, descending: descending}; }); } @@ -27129,9 +29831,9 @@ function orderByFilter($parse) { } } - function objectValue(value, index) { + function objectValue(value) { // If `valueOf` is a valid function use that - if (typeof value.valueOf === 'function') { + if (isFunction(value.valueOf)) { value = value.valueOf(); if (isPrimitive(value)) return value; } @@ -27140,8 +29842,8 @@ function orderByFilter($parse) { value = value.toString(); if (isPrimitive(value)) return value; } - // We have a basic object so we use the position of the object in the collection - return index; + + return value; } function getPredicateValue(value, index) { @@ -27149,23 +29851,39 @@ function orderByFilter($parse) { if (value === null) { type = 'string'; value = 'null'; - } else if (type === 'string') { - value = value.toLowerCase(); } else if (type === 'object') { - value = objectValue(value, index); + value = objectValue(value); } - return { value: value, type: type }; + return {value: value, type: type, index: index}; } - function compare(v1, v2) { + function defaultCompare(v1, v2) { var result = 0; - if (v1.type === v2.type) { - if (v1.value !== v2.value) { - result = v1.value < v2.value ? -1 : 1; + var type1 = v1.type; + var type2 = v2.type; + + if (type1 === type2) { + var value1 = v1.value; + var value2 = v2.value; + + if (type1 === 'string') { + // Compare strings case-insensitively + value1 = value1.toLowerCase(); + value2 = value2.toLowerCase(); + } else if (type1 === 'object') { + // For basic objects, use the position of the object + // in the collection instead of the value + if (isObject(value1)) value1 = v1.index; + if (isObject(value2)) value2 = v2.index; + } + + if (value1 !== value2) { + result = value1 < value2 ? -1 : 1; } } else { - result = v1.type < v2.type ? -1 : 1; + result = type1 < type2 ? -1 : 1; } + return result; } } @@ -27378,20 +30096,7 @@ var htmlAnchorDirective = valueFn({ * {@link guide/expression expression} inside `ngDisabled` evaluates to truthy. * * A special directive is necessary because we cannot use interpolation inside the `disabled` - * attribute. The following example would make the button enabled on Chrome/Firefox - * but not on older IEs: - * - * ```html - * - *
- * - *
- * ``` - * - * This is because the HTML specification does not require browsers to preserve the values of - * boolean attributes such as `disabled` (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. + * attribute. See the {@link guide/interpolation interpolation guide} for more info. * * @example @@ -27426,15 +30131,9 @@ var htmlAnchorDirective = valueFn({ * Note that this directive should not be used together with {@link ngModel `ngModel`}, * as this can lead to unexpected behavior. * - * ### Why do we need `ngChecked`? + * A special directive is necessary because we cannot use interpolation inside the `checked` + * attribute. See the {@link guide/interpolation interpolation guide} for more info. * - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as checked. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngChecked` directive solves this problem for the `checked` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. * @example @@ -27463,13 +30162,14 @@ var htmlAnchorDirective = valueFn({ * @priority 100 * * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as readonly. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngReadonly` directive solves this problem for the `readonly` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. + * + * Sets the `readonly` attribute on the element, if the expression inside `ngReadonly` is truthy. + * Note that `readonly` applies only to `input` elements with specific types. [See the input docs on + * MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-readonly) for more information. + * + * A special directive is necessary because we cannot use interpolation inside the `readonly` + * attribute. See the {@link guide/interpolation interpolation guide} for more info. + * * @example @@ -27498,13 +30198,18 @@ var htmlAnchorDirective = valueFn({ * @priority 100 * * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as selected. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngSelected` directive solves this problem for the `selected` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. + * + * Sets the `selected` attribute on the element, if the expression inside `ngSelected` is truthy. + * + * A special directive is necessary because we cannot use interpolation inside the `selected` + * attribute. See the {@link guide/interpolation interpolation guide} for more info. + * + *
+ * **Note:** `ngSelected` does not interact with the `select` and `ngModel` directives, it only + * sets the `selected` attribute on the element. If you are using `ngModel` on the select, you + * should not use `ngSelected` on the options, as `ngModel` will set the select value and + * selected options. + *
* * @example @@ -27536,13 +30241,17 @@ var htmlAnchorDirective = valueFn({ * @priority 100 * * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as open. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngOpen` directive solves this problem for the `open` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. + * + * Sets the `open` attribute on the element, if the expression inside `ngOpen` is truthy. + * + * A special directive is necessary because we cannot use interpolation inside the `open` + * attribute. See the {@link guide/interpolation interpolation guide} for more info. + * + * ## A note about browser compatibility + * + * Edge, Firefox, and Internet Explorer do not support the `details` element, it is + * recommended to use {@link ng.ngShow} and {@link ng.ngHide} instead. + * * @example @@ -27788,7 +30497,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { * * However, if the method is used programmatically, for example by adding dynamically created controls, * or controls that have been previously removed without destroying their corresponding DOM element, - * it's the developers responsiblity to make sure the current state propagates to the parent form. + * it's the developers responsibility to make sure the current state propagates to the parent form. * * For example, if an input control is added that is already `$dirty` and has `$error` properties, * calling `$setDirty()` and `$validate()` afterwards will propagate the state to the parent form. @@ -27998,13 +30707,9 @@ function FormController(element, attrs, $scope, $animate, $interpolate) { * * In Angular, forms can be nested. This means that the outer form is valid when all of the child * forms are valid as well. However, browsers do not allow nesting of `
` elements, so - * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to - * `` but can be nested. This allows you to have nested forms, which is very useful when - * using Angular validation directives in forms that are dynamically generated using the - * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name` - * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an - * `ngForm` directive and nest these in an outer `form` element. - * + * Angular provides the {@link ng.directive:ngForm `ngForm`} directive, which behaves identically to + * `form` but can be nested. Nested forms can be useful, for example, if the validity of a sub-group + * of controls needs to be determined. * * # CSS classes * - `ng-valid` is set if the form is valid. @@ -28222,17 +30927,37 @@ var ngFormDirective = formDirectiveFactory(true); ngModelMinErr: false, */ -// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231 -var ISO_DATE_REGEXP = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/; -var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/; -var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i; +// Regex code was initially obtained from SO prior to modification: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231 +var ISO_DATE_REGEXP = /^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/; +// See valid URLs in RFC3987 (http://tools.ietf.org/html/rfc3987) +// Note: We are being more lenient, because browsers are too. +// 1. Scheme +// 2. Slashes +// 3. Username +// 4. Password +// 5. Hostname +// 6. Port +// 7. Path +// 8. Query +// 9. Fragment +// 1111111111111111 222 333333 44444 555555555555555555555555 666 77777777 8888888 999 +var URL_REGEXP = /^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+\])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i; +/* jshint maxlen:220 */ +var EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/; +/* jshint maxlen:200 */ var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/; -var DATE_REGEXP = /^(\d{4})-(\d{2})-(\d{2})$/; -var DATETIMELOCAL_REGEXP = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/; -var WEEK_REGEXP = /^(\d{4})-W(\d\d)$/; -var MONTH_REGEXP = /^(\d{4})-(\d\d)$/; +var DATE_REGEXP = /^(\d{4,})-(\d{2})-(\d{2})$/; +var DATETIMELOCAL_REGEXP = /^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/; +var WEEK_REGEXP = /^(\d{4,})-W(\d\d)$/; +var MONTH_REGEXP = /^(\d{4,})-(\d\d)$/; var TIME_REGEXP = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/; +var PARTIAL_VALIDATION_EVENTS = 'keydown wheel mousedown'; +var PARTIAL_VALIDATION_TYPES = createMap(); +forEach('date,datetime-local,month,time,week'.split(','), function(type) { + PARTIAL_VALIDATION_TYPES[type] = true; +}); + var inputType = { /** @@ -28257,8 +30982,8 @@ var inputType = { * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string * that contains the regular expression body that will be converted to a regular expression * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match - * a RegExp found by evaluating the Angular expression given in the attribute value. + * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} + * does not match a RegExp found by evaluating the Angular expression given in the attribute value. * If the expression evaluates to a RegExp object, then this is used directly. * If the expression evaluates to a string, then it will be converted to a RegExp * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to @@ -28295,11 +31020,11 @@ var inputType = { Single word only!

- text = {{example.text}}
- myForm.input.$valid = {{myForm.input.$valid}}
- myForm.input.$error = {{myForm.input.$error}}
- myForm.$valid = {{myForm.$valid}}
- myForm.$error.required = {{!!myForm.$error.required}}
+ text = {{example.text}}
+ myForm.input.$valid = {{myForm.input.$valid}}
+ myForm.input.$error = {{myForm.input.$error}}
+ myForm.$valid = {{myForm.$valid}}
+ myForm.$error.required = {{!!myForm.$error.required}}
@@ -28545,7 +31270,7 @@ var inputType = { * * @description * Input with time validation and transformation. In browsers that do not yet support - * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 + * the HTML5 time input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 * local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a * Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`. * @@ -28588,7 +31313,7 @@ var inputType = { }]);
- +
@@ -28892,8 +31617,8 @@ var inputType = { * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string * that contains the regular expression body that will be converted to a regular expression * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match - * a RegExp found by evaluating the Angular expression given in the attribute value. + * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} + * does not match a RegExp found by evaluating the Angular expression given in the attribute value. * If the expression evaluates to a RegExp object, then this is used directly. * If the expression evaluates to a string, then it will be converted to a RegExp * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to @@ -28990,8 +31715,8 @@ var inputType = { * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string * that contains the regular expression body that will be converted to a regular expression * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match - * a RegExp found by evaluating the Angular expression given in the attribute value. + * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} + * does not match a RegExp found by evaluating the Angular expression given in the attribute value. * If the expression evaluates to a RegExp object, then this is used directly. * If the expression evaluates to a string, then it will be converted to a RegExp * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to @@ -29089,8 +31814,8 @@ var inputType = { * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string * that contains the regular expression body that will be converted to a regular expression * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match - * a RegExp found by evaluating the Angular expression given in the attribute value. + * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} + * does not match a RegExp found by evaluating the Angular expression given in the attribute value. * If the expression evaluates to a RegExp object, then this is used directly. * If the expression evaluates to a string, then it will be converted to a RegExp * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to @@ -29309,7 +32034,7 @@ function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) { if (!$sniffer.android) { var composing = false; - element.on('compositionstart', function(data) { + element.on('compositionstart', function() { composing = true; }); @@ -29319,6 +32044,8 @@ function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) { }); } + var timeout; + var listener = function(ev) { if (timeout) { $browser.defer.cancel(timeout); @@ -29348,8 +32075,6 @@ function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) { if ($sniffer.hasEvent('input')) { element.on('input', listener); } else { - var timeout; - var deferListener = function(ev, input, origValue) { if (!timeout) { timeout = $browser.defer(function() { @@ -29381,6 +32106,26 @@ function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) { // or form autocomplete on newer browser, we need "change" event to catch it element.on('change', listener); + // Some native input types (date-family) have the ability to change validity without + // firing any input/change events. + // For these event types, when native validators are present and the browser supports the type, + // check for validity changes on various DOM events. + if (PARTIAL_VALIDATION_TYPES[type] && ctrl.$$hasNativeValidators && type === attr.type) { + element.on(PARTIAL_VALIDATION_EVENTS, function(ev) { + if (!timeout) { + var validity = this[VALIDITY_STATE_PROPERTY]; + var origBadInput = validity.badInput; + var origTypeMismatch = validity.typeMismatch; + timeout = $browser.defer(function() { + timeout = null; + if (validity.badInput !== origBadInput || validity.typeMismatch !== origTypeMismatch) { + listener(ev); + } + }); + } + }); + } + ctrl.$render = function() { // Workaround for Firefox validation #12102. var value = ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue; @@ -29550,11 +32295,7 @@ function badInputChecker(scope, element, attr, ctrl) { if (nativeValidation) { ctrl.$parsers.push(function(value) { var validity = element.prop(VALIDITY_STATE_PROPERTY) || {}; - // Detect bug in FF35 for input[email] (https://bugzilla.mozilla.org/show_bug.cgi?id=1064430): - // - also sets validity.badInput (should only be validity.typeMismatch). - // - see http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#e-mail-state-(type=email) - // - can ignore this case as we can still read out the erroneous email... - return validity.badInput && !validity.typeMismatch ? undefined : value; + return validity.badInput || validity.typeMismatch ? undefined : value; }); } } @@ -29588,7 +32329,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) { attr.$observe('min', function(val) { if (isDefined(val) && !isNumber(val)) { - val = parseFloat(val, 10); + val = parseFloat(val); } minVal = isNumber(val) && !isNaN(val) ? val : undefined; // TODO(matsko): implement validateLater to reduce number of validations @@ -29604,7 +32345,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) { attr.$observe('max', function(val) { if (isDefined(val) && !isNumber(val)) { - val = parseFloat(val, 10); + val = parseFloat(val); } maxVal = isNumber(val) && !isNaN(val) ? val : undefined; // TODO(matsko): implement validateLater to reduce number of validations @@ -29726,8 +32467,8 @@ function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filt * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any * length. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match - * a RegExp found by evaluating the Angular expression given in the attribute value. + * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} + * does not match a RegExp found by evaluating the Angular expression given in the attribute value. * If the expression evaluates to a RegExp object, then this is used directly. * If the expression evaluates to a string, then it will be converted to a RegExp * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to @@ -29765,8 +32506,8 @@ function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filt * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any * length. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match - * a RegExp found by evaluating the Angular expression given in the attribute value. + * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} + * value does not match a RegExp found by evaluating the Angular expression given in the attribute value. * If the expression evaluates to a RegExp object, then this is used directly. * If the expression evaluates to a string, then it will be converted to a RegExp * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to @@ -30162,8 +32903,9 @@ var ngBindHtmlDirective = ['$sce', '$parse', '$compile', function($sce, $parse, restrict: 'A', compile: function ngBindHtmlCompile(tElement, tAttrs) { var ngBindHtmlGetter = $parse(tAttrs.ngBindHtml); - var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function getStringValue(value) { - return (value || '').toString(); + var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function sceValueOf(val) { + // Unwrap the value to compare the actual inner safe value, not the wrapper object. + return $sce.valueOf(val); }); $compile.$$addBindingClass(tElement); @@ -30171,9 +32913,9 @@ var ngBindHtmlDirective = ['$sce', '$parse', '$compile', function($sce, $parse, $compile.$$addBindingInfo(element, attr.ngBindHtml); scope.$watch(ngBindHtmlWatch, function ngBindHtmlWatchAction() { - // we re-evaluate the expr because we want a TrustedValueHolderType - // for $sce, not a string - element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || ''); + // The watched value is the unwrapped value. To avoid re-escaping, use the direct getter. + var value = ngBindHtmlGetter(scope); + element.html($sce.getTrustedHtml(value) || ''); }); }; } @@ -30326,7 +33068,9 @@ function classDirective(name, selector) { } function ngClassWatchAction(newVal) { - if (selector === true || scope.$index % 2 === selector) { + // jshint bitwise: false + if (selector === true || (scope.$index & 1) === selector) { + // jshint bitwise: true var newClasses = arrayClasses(newVal || []); if (!oldVal) { addClasses(newClasses); @@ -30335,7 +33079,11 @@ function classDirective(name, selector) { updateClasses(oldClasses, newClasses); } } - oldVal = shallowCopy(newVal); + if (isArray(newVal)) { + oldVal = newVal.map(function(v) { return shallowCopy(v); }); + } else { + oldVal = shallowCopy(newVal); + } } } }; @@ -30404,10 +33152,16 @@ function classDirective(name, selector) { * When the expression changes, the previously added classes are removed and only then are the * new classes added. * - * @animations - * **add** - happens just before the class is applied to the elements + * @knownIssue + * You should not use {@link guide/interpolation interpolation} in the value of the `class` + * attribute, when using the `ngClass` directive on the same element. + * See {@link guide/interpolation#known-issues here} for more info. * - * **remove** - happens just before the class is removed from the element + * @animations + * | Animation | Occurs | + * |----------------------------------|-------------------------------------| + * | {@link ng.$animate#addClass addClass} | just before the class is applied to the element | + * | {@link ng.$animate#removeClass removeClass} | just before the class is removed from the element | * * @element ANY * @param {expression} ngClass {@link guide/expression Expression} to eval. The result @@ -30992,7 +33746,7 @@ var ngControllerDirective = [function() { * * * no-inline-style: this stops Angular from injecting CSS styles into the DOM * - * * no-unsafe-eval: this stops Angular from optimising $parse with unsafe eval of strings + * * no-unsafe-eval: this stops Angular from optimizing $parse with unsafe eval of strings * * You can use these values in the following combinations: * @@ -31009,7 +33763,7 @@ var ngControllerDirective = [function() { * inline styles. E.g. ``. * * * Specifying only `no-inline-style` tells Angular that we must not inject styles, but that we can - * run eval - no automcatic check for unsafe eval will occur. E.g. `` + * run eval - no automatic check for unsafe eval will occur. E.g. `` * * * Specifying both `no-unsafe-eval` and `no-inline-style` tells Angular that we must not inject * styles nor use eval, which is the same as an empty: ng-csp. @@ -31666,8 +34420,10 @@ forEach( * and `leave` effects. * * @animations - * enter - happens just after the `ngIf` contents change and a new DOM element is created and injected into the `ngIf` container - * leave - happens just before the `ngIf` contents are removed from the DOM + * | Animation | Occurs | + * |----------------------------------|-------------------------------------| + * | {@link ng.$animate#enter enter} | just after the `ngIf` contents change and a new DOM element is created and injected into the `ngIf` container | + * | {@link ng.$animate#leave leave} | just before the `ngIf` contents are removed from the DOM | * * @element ANY * @scope @@ -31708,7 +34464,7 @@ forEach( */ -var ngIfDirective = ['$animate', function($animate) { +var ngIfDirective = ['$animate', '$compile', function($animate, $compile) { return { multiElement: true, transclude: 'element', @@ -31724,7 +34480,7 @@ var ngIfDirective = ['$animate', function($animate) { if (!childScope) { $transclude(function(clone, newScope) { childScope = newScope; - clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' '); + clone[clone.length++] = $compile.$$createComment('end ngIf', $attr.ngIf); // Note: We only need the first/last node of the cloned nodes. // However, we need to keep the reference to the jqlite wrapper as it might be changed later // by a directive with templateUrl when its template arrives. @@ -31779,8 +34535,10 @@ var ngIfDirective = ['$animate', function($animate) { * access on some browsers. * * @animations - * enter - animation is used to bring new content into the browser. - * leave - animation is used to animate existing content away. + * | Animation | Occurs | + * |----------------------------------|-------------------------------------| + * | {@link ng.$animate#enter enter} | when the expression changes, on the new include | + * | {@link ng.$animate#leave leave} | when the expression changes, on the old include | * * The enter and leave animation occur concurrently. * @@ -31790,7 +34548,13 @@ var ngIfDirective = ['$animate', function($animate) { * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant, * make sure you wrap it in **single** quotes, e.g. `src="'myPartialTemplate.html'"`. * @param {string=} onload Expression to evaluate when a new partial is loaded. - * + *
+ * **Note:** When using onload on SVG elements in IE11, the browser will try to call + * a function with the name on the window element, which will usually throw a + * "function is undefined" error. To fix this, you can instead use `data-onload` or a + * different form that {@link guide/directive#normalization matches} `onload`. + *
+ * * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll * $anchorScroll} to scroll the viewport after the content is loaded. * @@ -31982,6 +34746,8 @@ var ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate', //set the 2nd param to true to ignore the template request error so that the inner //contents and scope can be cleaned up. $templateRequest(src, true).then(function(response) { + if (scope.$$destroyed) return; + if (thisChangeId !== changeCounter) return; var newScope = scope.$new(); ctrl.template = response; @@ -32003,6 +34769,8 @@ var ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate', currentScope.$emit('$includeContentLoaded', src); scope.$eval(onloadExp); }, function() { + if (scope.$$destroyed) return; + if (thisChangeId === changeCounter) { cleanupLastIncludeContent(); scope.$emit('$includeContentError', src); @@ -32031,12 +34799,12 @@ var ngIncludeFillContentDirective = ['$compile', priority: -400, require: 'ngInclude', link: function(scope, $element, $attr, ctrl) { - if (/SVG/.test($element[0].toString())) { + if (toString.call($element[0]).match(/SVG/)) { // WebKit: https://bugs.webkit.org/show_bug.cgi?id=135698 --- SVG elements do not // support innerHTML, so detect this here and try to generate the contents // specially. $element.empty(); - $compile(jqLiteBuildFragment(ctrl.template, document).childNodes)(scope, + $compile(jqLiteBuildFragment(ctrl.template, window.document).childNodes)(scope, function namespaceAdaptedClone(clone) { $element.append(clone); }, {futureParentElement: $element}); @@ -32260,7 +35028,9 @@ var VALID_CLASS = 'ng-valid', DIRTY_CLASS = 'ng-dirty', UNTOUCHED_CLASS = 'ng-untouched', TOUCHED_CLASS = 'ng-touched', - PENDING_CLASS = 'ng-pending'; + PENDING_CLASS = 'ng-pending', + EMPTY_CLASS = 'ng-empty', + NOT_EMPTY_CLASS = 'ng-not-empty'; var ngModelMinErr = minErr('ngModel'); @@ -32509,9 +35279,9 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ }; ngModelSet = function($scope, newValue) { if (isFunction(parsedNgModel($scope))) { - invokeModelSetter($scope, {$$$p: ctrl.$modelValue}); + invokeModelSetter($scope, {$$$p: newValue}); } else { - parsedNgModelAssign($scope, ctrl.$modelValue); + parsedNgModelAssign($scope, newValue); } }; } else if (!parsedNgModel.assign) { @@ -32536,7 +35306,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * the `$viewValue` are different from last time. * * Since `ng-model` does not do a deep watch, `$render()` is only invoked if the values of - * `$modelValue` and `$viewValue` are actually different from their previous value. If `$modelValue` + * `$modelValue` and `$viewValue` are actually different from their previous values. If `$modelValue` * or `$viewValue` are objects (rather than a string or number) then `$render()` will not be * invoked if you only change a property on the objects. */ @@ -32564,6 +35334,17 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ return isUndefined(value) || value === '' || value === null || value !== value; }; + this.$$updateEmptyClasses = function(value) { + if (ctrl.$isEmpty(value)) { + $animate.removeClass($element, NOT_EMPTY_CLASS); + $animate.addClass($element, EMPTY_CLASS); + } else { + $animate.removeClass($element, EMPTY_CLASS); + $animate.addClass($element, NOT_EMPTY_CLASS); + } + }; + + var currentValidationRunId = 0; /** @@ -32681,11 +35462,14 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * which may be caused by a pending debounced event or because the input is waiting for a some * future event. * - * If you have an input that uses `ng-model-options` to set up debounced events or events such - * as blur you can have a situation where there is a period when the `$viewValue` - * is out of synch with the ngModel's `$modelValue`. + * If you have an input that uses `ng-model-options` to set up debounced updates or updates that + * depend on special events such as blur, you can have a situation where there is a period when + * the `$viewValue` is out of sync with the ngModel's `$modelValue`. * - * In this case, you can run into difficulties if you try to update the ngModel's `$modelValue` + * In this case, you can use `$rollbackViewValue()` to manually cancel the debounced / future update + * and reset the input to the last committed view value. + * + * It is also possible that you run into difficulties if you try to update the ngModel's `$modelValue` * programmatically before these debounced/future events have resolved/occurred, because Angular's * dirty checking mechanism is not able to tell whether the model has actually changed or not. * @@ -32698,39 +35482,63 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * angular.module('cancel-update-example', []) * * .controller('CancelUpdateController', ['$scope', function($scope) { - * $scope.resetWithCancel = function(e) { - * if (e.keyCode == 27) { - * $scope.myForm.myInput1.$rollbackViewValue(); - * $scope.myValue = ''; - * } - * }; - * $scope.resetWithoutCancel = function(e) { + * $scope.model = {}; + * + * $scope.setEmpty = function(e, value, rollback) { * if (e.keyCode == 27) { - * $scope.myValue = ''; + * e.preventDefault(); + * if (rollback) { + * $scope.myForm[value].$rollbackViewValue(); + * } + * $scope.model[value] = ''; * } * }; * }]); * * *
- *

Try typing something in each input. See that the model only updates when you - * blur off the input. - *

- *

Now see what happens if you start typing then press the Escape key

+ *

Both of these inputs are only updated if they are blurred. Hitting escape should + * empty them. Follow these steps and observe the difference:

+ *
    + *
  1. Type something in the input. You will see that the model is not yet updated
  2. + *
  3. Press the Escape key. + *
      + *
    1. In the first example, nothing happens, because the model is already '', and no + * update is detected. If you blur the input, the model will be set to the current view. + *
    2. + *
    3. In the second example, the pending update is cancelled, and the input is set back + * to the last committed view value (''). Blurring the input does nothing. + *
    4. + *
    + *
  4. + *
* * - *

With $rollbackViewValue()

- *
- * myValue: "{{ myValue }}" - * - *

Without $rollbackViewValue()

- *
- * myValue: "{{ myValue }}" + *
+ *

Without $rollbackViewValue():

+ * + * value1: "{{ model.value1 }}" + *
+ * + *
+ *

With $rollbackViewValue():

+ * + * value2: "{{ model.value2 }}" + *
* *
*
+ + div { + display: table-cell; + } + div:nth-child(1) { + padding-right: 30px; + } + + * */ this.$rollbackViewValue = function() { @@ -32844,13 +35652,13 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ forEach(ctrl.$asyncValidators, function(validator, name) { var promise = validator(modelValue, viewValue); if (!isPromiseLike(promise)) { - throw ngModelMinErr("$asyncValidators", + throw ngModelMinErr('nopromise', "Expected asynchronous validator to return a promise but got '{0}' instead.", promise); } setValidity(name, undefined); validatorPromises.push(promise.then(function() { setValidity(name, true); - }, function(error) { + }, function() { allValid = false; setValidity(name, false); })); @@ -32900,6 +35708,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ if (ctrl.$$lastCommittedViewValue === viewValue && (viewValue !== '' || !ctrl.$$hasNativeValidators)) { return; } + ctrl.$$updateEmptyClasses(viewValue); ctrl.$$lastCommittedViewValue = viewValue; // change to dirty @@ -32998,7 +35807,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * However, custom controls might also pass objects to this method. In this case, we should make * a copy of the object before passing it to `$setViewValue`. This is because `ngModel` does not * perform a deep watch of objects, it only looks for a change of identity. If you only change - * the property of the object then ngModel will not realise that the object has changed and + * the property of the object then ngModel will not realize that the object has changed and * will not invoke the `$parsers` and `$validators` pipelines. For this reason, you should * not change properties of the copy once it has been passed to `$setViewValue`. * Otherwise you may cause the model value on the scope to change incorrectly. @@ -33082,6 +35891,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ viewValue = formatters[idx](viewValue); } if (ctrl.$viewValue !== viewValue) { + ctrl.$$updateEmptyClasses(viewValue); ctrl.$viewValue = ctrl.$$lastCommittedViewValue = viewValue; ctrl.$render(); @@ -33112,7 +35922,8 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * require. * - Providing validation behavior (i.e. required, number, email, url). * - Keeping the state of the control (valid/invalid, dirty/pristine, touched/untouched, validation errors). - * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`, `ng-untouched`) including animations. + * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`, + * `ng-untouched`, `ng-empty`, `ng-not-empty`) including animations. * - Registering the control with its parent {@link ng.directive:form form}. * * Note: `ngModel` will try to bind to the property given by evaluating the expression on the @@ -33140,6 +35951,22 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * - {@link ng.directive:select select} * - {@link ng.directive:textarea textarea} * + * # Complex Models (objects or collections) + * + * By default, `ngModel` watches the model by reference, not value. This is important to know when + * binding inputs to models that are objects (e.g. `Date`) or collections (e.g. arrays). If only properties of the + * object or collection change, `ngModel` will not be notified and so the input will not be re-rendered. + * + * The model must be assigned an entirely new object or collection before a re-rendering will occur. + * + * Some directives have options that will cause them to use a custom `$watchCollection` on the model expression + * - for example, `ngOptions` will do so when a `track by` clause is included in the comprehension expression or + * if the select is given the `multiple` attribute. + * + * The `$watchCollection()` method only does a shallow comparison, meaning that changing properties deeper than the + * first level of the object (or only changing the properties of an item in the collection if it's an array) will still + * not trigger a re-rendering of the model. + * * # CSS classes * The following CSS classes are added and removed on the associated input/select/textarea element * depending on the validity of the model. @@ -33153,13 +35980,16 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * - `ng-touched`: the control has been blurred * - `ng-untouched`: the control hasn't been blurred * - `ng-pending`: any `$asyncValidators` are unfulfilled + * - `ng-empty`: the view does not contain a value or the value is deemed "empty", as defined + * by the {@link ngModel.NgModelController#$isEmpty} method + * - `ng-not-empty`: the view contains a non-empty value * * Keep in mind that ngAnimate can detect each of these classes when added and removed. * * ## Animation Hooks * * Animations within models are triggered when any of the associated CSS classes are added and removed - * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`, + * on the input element which is attached to the model. These classes include: `.ng-pristine`, `.ng-dirty`, * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself. * The animations that are triggered within ngModel are similar to how they work in ngClass and * animations can be hooked into using CSS transitions, keyframes as well as JS animations. @@ -33302,7 +36132,7 @@ var ngModelDirective = ['$rootScope', function($rootScope) { }); } - element.on('blur', function(ev) { + element.on('blur', function() { if (modelCtrl.$touched) return; if ($rootScope.$$phase) { @@ -33383,12 +36213,13 @@ var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/;
user.name = 
+
user.data = 
angular.module('optionsExample', []) .controller('ExampleController', ['$scope', function($scope) { - $scope.user = { name: 'say', data: '' }; + $scope.user = { name: 'John', data: '' }; $scope.cancel = function(e) { if (e.keyCode == 27) { @@ -33403,20 +36234,20 @@ var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/; var other = element(by.model('user.data')); it('should allow custom events', function() { - input.sendKeys(' hello'); + input.sendKeys(' Doe'); input.click(); - expect(model.getText()).toEqual('say'); + expect(model.getText()).toEqual('John'); other.click(); - expect(model.getText()).toEqual('say hello'); + expect(model.getText()).toEqual('John Doe'); }); it('should $rollbackViewValue when model changes', function() { - input.sendKeys(' hello'); - expect(input.getAttribute('value')).toEqual('say hello'); + input.sendKeys(' Doe'); + expect(input.getAttribute('value')).toEqual('John Doe'); input.sendKeys(protractor.Key.ESCAPE); - expect(input.getAttribute('value')).toEqual('say'); + expect(input.getAttribute('value')).toEqual('John'); other.click(); - expect(model.getText()).toEqual('say'); + expect(model.getText()).toEqual('John'); }); @@ -33442,7 +36273,7 @@ var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/; angular.module('optionsExample', []) .controller('ExampleController', ['$scope', function($scope) { - $scope.user = { name: 'say' }; + $scope.user = { name: 'Igor' }; }]); @@ -33675,19 +36506,27 @@ var ngOptionsMinErr = minErr('ngOptions'); * * ## Complex Models (objects or collections) * - * **Note:** By default, `ngModel` watches the model by reference, not value. This is important when - * binding any input directive to a model that is an object or a collection. + * By default, `ngModel` watches the model by reference, not value. This is important to know when + * binding the select to a model that is an object or a collection. * - * Since this is a common situation for `ngOptions` the directive additionally watches the model using - * `$watchCollection` when the select has the `multiple` attribute or when there is a `track by` clause in - * the options expression. This allows ngOptions to trigger a re-rendering of the options even if the actual - * object/collection has not changed identity but only a property on the object or an item in the collection - * changes. + * One issue occurs if you want to preselect an option. For example, if you set + * the model to an object that is equal to an object in your collection, `ngOptions` won't be able to set the selection, + * because the objects are not identical. So by default, you should always reference the item in your collection + * for preselections, e.g.: `$scope.selected = $scope.collection[3]`. * - * Note that `$watchCollection` does a shallow comparison of the properties of the object (or the items in the collection - * if the model is an array). This means that changing a property deeper inside the object/collection that the - * first level will not trigger a re-rendering. + * Another solution is to use a `track by` clause, because then `ngOptions` will track the identity + * of the item not by reference, but by the result of the `track by` expression. For example, if your + * collection items have an id property, you would `track by item.id`. * + * A different issue with objects or collections is that ngModel won't detect if an object property or + * a collection item changes. For that reason, `ngOptions` additionally watches the model using + * `$watchCollection`, when the expression contains a `track by` clause or the the select has the `multiple` attribute. + * This allows ngOptions to trigger a re-rendering of the options even if the actual object/collection + * has not changed identity, but only a property on the object or an item in the collection changes. + * + * Note that `$watchCollection` does a shallow comparison of the properties of the object (or the items in the collection + * if the model is an array). This means that changing a property deeper than the first level inside the + * object/collection will not trigger a re-rendering. * * ## `select` **`as`** * @@ -33700,17 +36539,13 @@ var ngOptionsMinErr = minErr('ngOptions'); * ### `select` **`as`** and **`track by`** * *
- * Do not use `select` **`as`** and **`track by`** in the same expression. They are not designed to work together. + * Be careful when using `select` **`as`** and **`track by`** in the same expression. *
* - * Consider the following example: - * - * ```html - * - * ``` + * Given this array of items on the $scope: * * ```js - * $scope.values = [{ + * $scope.items = [{ * id: 1, * label: 'aLabel', * subItem: { name: 'aSubItem' } @@ -33719,20 +36554,33 @@ var ngOptionsMinErr = minErr('ngOptions'); * label: 'bLabel', * subItem: { name: 'bSubItem' } * }]; + * ``` * - * $scope.selected = { name: 'aSubItem' }; + * This will work: + * + * ```html + * + * ``` + * ```js + * $scope.selected = $scope.items[0]; * ``` * - * With the purpose of preserving the selection, the **`track by`** expression is always applied to the element - * of the data source (to `item` in this example). To calculate whether an element is selected, we do the - * following: + * but this will not work: + * + * ```html + * + * ``` + * ```js + * $scope.selected = $scope.items[0].subItem; + * ``` * - * 1. Apply **`track by`** to the elements in the array. In the example: `[1, 2]` - * 2. Apply **`track by`** to the already selected value in `ngModel`. - * In the example: this is not possible as **`track by`** refers to `item.id`, but the selected - * value from `ngModel` is `{name: 'aSubItem'}`, so the **`track by`** expression is applied to - * a wrong object, the selected element can't be found, `` appears as having no selected value. * * * @param {string} ngModel Assignable angular expression to data-bind to. @@ -33870,7 +36718,7 @@ var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s // jshint maxlen: 100 -var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) { +var ngOptionsDirective = ['$compile', '$document', '$parse', function($compile, $document, $parse) { function parseOptionsExpression(optionsExp, selectElement, scope) { @@ -33967,8 +36815,8 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) { var key = (optionValues === optionValuesKeys) ? index : optionValuesKeys[index]; var value = optionValues[key]; - var locals = getLocals(optionValues[key], key); - var selectValue = getTrackByValueFn(optionValues[key], locals); + var locals = getLocals(value, key); + var selectValue = getTrackByValueFn(value, locals); watchedArray.push(selectValue); // Only need to watch the displayFn if there is a specific label expression @@ -34031,20 +36879,13 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) { // we can't just jqLite('
+ + angular.module('ngRepeat', ['ngAnimate']).controller('repeatController', function($scope) { + $scope.friends = [ + {name:'John', age:25, gender:'boy'}, + {name:'Jessie', age:30, gender:'girl'}, + {name:'Johanna', age:28, gender:'girl'}, + {name:'Joy', age:15, gender:'girl'}, + {name:'Mary', age:28, gender:'girl'}, + {name:'Peter', age:95, gender:'boy'}, + {name:'Sebastian', age:50, gender:'boy'}, + {name:'Erika', age:27, gender:'girl'}, + {name:'Patrick', age:40, gender:'boy'}, + {name:'Samantha', age:60, gender:'girl'} + ]; + }); + .example-animate-container { background:white; @@ -34865,7 +37695,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale, } .animate-repeat { - line-height:40px; + line-height:30px; list-style:none; box-sizing:border-box; } @@ -34887,7 +37717,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale, .animate-repeat.ng-move.ng-move-active, .animate-repeat.ng-enter.ng-enter-active { opacity:1; - max-height:40px; + max-height:30px; } @@ -34914,7 +37744,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale, */ -var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { +var ngRepeatDirective = ['$parse', '$animate', '$compile', function($parse, $animate, $compile) { var NG_REMOVED = '$$NG_REMOVED'; var ngRepeatMinErr = minErr('ngRepeat'); @@ -34949,7 +37779,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { $$tlb: true, compile: function ngRepeatCompile($element, $attr) { var expression = $attr.ngRepeat; - var ngRepeatEndComment = document.createComment(' end ngRepeat: ' + expression + ' '); + var ngRepeatEndComment = $compile.$$createComment('end ngRepeat', expression); var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/); @@ -35113,7 +37943,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { if (getBlockStart(block) != nextNode) { // existing item which got moved - $animate.move(getBlockNodes(block.clone), null, jqLite(previousNode)); + $animate.move(getBlockNodes(block.clone), null, previousNode); } previousNode = getBlockEnd(block); updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength); @@ -35125,8 +37955,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { var endNode = ngRepeatEndComment.cloneNode(false); clone[clone.length++] = endNode; - // TODO(perf): support naked previousNode in `enter` to avoid creation of jqLite wrapper? - $animate.enter(clone, null, jqLite(previousNode)); + $animate.enter(clone, null, previousNode); previousNode = endNode; // Note: We only need the first/last node of the cloned nodes. // However, we need to keep the reference to the jqlite wrapper as it might be changed later @@ -35229,12 +38058,14 @@ var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate'; * .my-element.ng-hide-remove.ng-hide-remove-active { ... } * ``` * - * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display + * Keep in mind that, as of AngularJS version 1.3, there is no need to change the display * property to block during animation states--ngAnimate will handle the style toggling automatically for you. * * @animations - * addClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a truthy value and the just before contents are set to visible - * removeClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden + * | Animation | Occurs | + * |----------------------------------|-------------------------------------| + * | {@link $animate#addClass addClass} `.ng-hide` | after the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden | + * | {@link $animate#removeClass removeClass} `.ng-hide` | after the `ngShow` expression evaluates to a truthy value and just before contents are set to visible | * * @element ANY * @param {expression} ngShow If the {@link guide/expression expression} is truthy @@ -35393,12 +38224,15 @@ var ngShowDirective = ['$animate', function($animate) { * .my-element.ng-hide-remove.ng-hide-remove-active { ... } * ``` * - * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display + * Keep in mind that, as of AngularJS version 1.3, there is no need to change the display * property to block during animation states--ngAnimate will handle the style toggling automatically for you. * * @animations - * removeClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden - * addClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a non truthy value and just before the contents are set to visible + * | Animation | Occurs | + * |----------------------------------|-------------------------------------| + * | {@link $animate#addClass addClass} `.ng-hide` | after the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden | + * | {@link $animate#removeClass removeClass} `.ng-hide` | after the `ngHide` expression evaluates to a non truthy value and just before contents are set to visible | + * * * @element ANY * @param {expression} ngHide If the {@link guide/expression expression} is truthy then @@ -35486,6 +38320,11 @@ var ngHideDirective = ['$animate', function($animate) { * @description * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally. * + * @knownIssue + * You should not use {@link guide/interpolation interpolation} in the value of the `style` + * attribute, when using the `ngStyle` directive on the same element. + * See {@link guide/interpolation#known-issues here} for more info. + * * @element ANY * @param {expression} ngStyle * @@ -35560,8 +38399,10 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) { *
* @animations - * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container - * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM + * | Animation | Occurs | + * |----------------------------------|-------------------------------------| + * | {@link ng.$animate#enter enter} | after the ngSwitch contents change and the matched child element is placed inside the container | + * | {@link ng.$animate#leave leave} | after the ngSwitch contents change and just before the former contents are removed from the DOM | * * @usage * @@ -35660,7 +38501,7 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) { */ -var ngSwitchDirective = ['$animate', function($animate) { +var ngSwitchDirective = ['$animate', '$compile', function($animate, $compile) { return { require: 'ngSwitch', @@ -35701,7 +38542,7 @@ var ngSwitchDirective = ['$animate', function($animate) { selectedTransclude.transclude(function(caseElement, selectedScope) { selectedScopes.push(selectedScope); var anchor = selectedTransclude.element; - caseElement[caseElement.length++] = document.createComment(' end ngSwitchWhen: '); + caseElement[caseElement.length++] = $compile.$$createComment('end ngSwitchWhen'); var block = { clone: caseElement }; selectedElements.push(block); @@ -35744,69 +38585,214 @@ var ngSwitchDefaultDirective = ngDirective({ * @description * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion. * - * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted. + * You can specify that you want to insert a named transclusion slot, instead of the default slot, by providing the slot name + * as the value of the `ng-transclude` or `ng-transclude-slot` attribute. + * + * If the transcluded content is not empty (i.e. contains one or more DOM nodes, including whitespace text nodes), any existing + * content of this element will be removed before the transcluded content is inserted. + * If the transcluded content is empty, the existing content is left intact. This lets you provide fallback content in the case + * that no transcluded content is provided. * * @element ANY * + * @param {string} ngTransclude|ngTranscludeSlot the name of the slot to insert at this point. If this is not provided, is empty + * or its value is the same as the name of the attribute then the default slot is used. + * * @example - - - -
-
-
- {{text}} -
-
- - it('should have transcluded', function() { - var titleElement = element(by.model('title')); - titleElement.clear(); - titleElement.sendKeys('TITLE'); - var textElement = element(by.model('text')); - textElement.clear(); - textElement.sendKeys('TEXT'); - expect(element(by.binding('title')).getText()).toEqual('TITLE'); - expect(element(by.binding('text')).getText()).toEqual('TEXT'); - }); - -
+ * ### Basic transclusion + * This example demonstrates basic transclusion of content into a component directive. + * + * + * + *
+ *
+ *
+ * {{text}} + *
+ *
+ * + * it('should have transcluded', function() { + * var titleElement = element(by.model('title')); + * titleElement.clear(); + * titleElement.sendKeys('TITLE'); + * var textElement = element(by.model('text')); + * textElement.clear(); + * textElement.sendKeys('TEXT'); + * expect(element(by.binding('title')).getText()).toEqual('TITLE'); + * expect(element(by.binding('text')).getText()).toEqual('TEXT'); + * }); + * + *
+ * + * @example + * ### Transclude fallback content + * This example shows how to use `NgTransclude` with fallback content, that + * is displayed if no transcluded content is provided. + * + * + * + * + * + * + * + * + * Button2 + * + * + * + * it('should have different transclude element content', function() { + * expect(element(by.id('fallback')).getText()).toBe('Button1'); + * expect(element(by.id('modified')).getText()).toBe('Button2'); + * }); + * + * * + * @example + * ### Multi-slot transclusion + * This example demonstrates using multi-slot transclusion in a component directive. + * + * + * + *
+ *
+ *
+ * + * {{title}} + *

{{text}}

+ *
+ *
+ *
+ * + * angular.module('multiSlotTranscludeExample', []) + * .directive('pane', function(){ + * return { + * restrict: 'E', + * transclude: { + * 'title': '?paneTitle', + * 'body': 'paneBody', + * 'footer': '?paneFooter' + * }, + * template: '
' + + * '
Fallback Title
' + + * '
' + + * '' + + * '
' + * }; + * }) + * .controller('ExampleController', ['$scope', function($scope) { + * $scope.title = 'Lorem Ipsum'; + * $scope.link = "https://google.com"; + * $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...'; + * }]); + *
+ * + * it('should have transcluded the title and the body', function() { + * var titleElement = element(by.model('title')); + * titleElement.clear(); + * titleElement.sendKeys('TITLE'); + * var textElement = element(by.model('text')); + * textElement.clear(); + * textElement.sendKeys('TEXT'); + * expect(element(by.css('.title')).getText()).toEqual('TITLE'); + * expect(element(by.binding('text')).getText()).toEqual('TEXT'); + * expect(element(by.css('.footer')).getText()).toEqual('Fallback Footer'); + * }); + * + *
*/ -var ngTranscludeDirective = ngDirective({ - restrict: 'EAC', - link: function($scope, $element, $attrs, controller, $transclude) { - if (!$transclude) { - throw minErr('ngTransclude')('orphan', - 'Illegal use of ngTransclude directive in the template! ' + - 'No parent directive that requires a transclusion found. ' + - 'Element: {0}', - startingTag($element)); - } +var ngTranscludeMinErr = minErr('ngTransclude'); +var ngTranscludeDirective = ['$compile', function($compile) { + return { + restrict: 'EAC', + terminal: true, + compile: function ngTranscludeCompile(tElement) { - $transclude(function(clone) { - $element.empty(); - $element.append(clone); - }); - } -}); + // Remove and cache any original content to act as a fallback + var fallbackLinkFn = $compile(tElement.contents()); + tElement.empty(); + + return function ngTranscludePostLink($scope, $element, $attrs, controller, $transclude) { + + if (!$transclude) { + throw ngTranscludeMinErr('orphan', + 'Illegal use of ngTransclude directive in the template! ' + + 'No parent directive that requires a transclusion found. ' + + 'Element: {0}', + startingTag($element)); + } + + + // If the attribute is of the form: `ng-transclude="ng-transclude"` then treat it like the default + if ($attrs.ngTransclude === $attrs.$attr.ngTransclude) { + $attrs.ngTransclude = ''; + } + var slotName = $attrs.ngTransclude || $attrs.ngTranscludeSlot; + + // If the slot is required and no transclusion content is provided then this call will throw an error + $transclude(ngTranscludeCloneAttachFn, null, slotName); + + // If the slot is optional and no transclusion content is provided then use the fallback content + if (slotName && !$transclude.isSlotFilled(slotName)) { + useFallbackContent(); + } + + function ngTranscludeCloneAttachFn(clone, transcludedScope) { + if (clone.length) { + $element.append(clone); + } else { + useFallbackContent(); + // There is nothing linked against the transcluded scope since no content was available, + // so it should be safe to clean up the generated scope. + transcludedScope.$destroy(); + } + } + + function useFallbackContent() { + // Since this is the fallback content rather than the transcluded content, + // we link against the scope of this directive rather than the transcluded scope + fallbackLinkFn($scope, function(clone) { + $element.append(clone); + }); + } + }; + } + }; +}]; /** * @ngdoc directive @@ -35858,6 +38844,15 @@ var scriptDirective = ['$templateCache', function($templateCache) { var noopNgModelController = { $setViewValue: noop, $render: noop }; +function chromeHack(optionElement) { + // Workaround for https://code.google.com/p/chromium/issues/detail?id=381459 + // Adding an
+ * + * + var required = element(by.binding('form.input.$error.required')); + var model = element(by.binding('model')); + var input = element(by.id('input')); + + it('should set the required error', function() { + expect(required.getText()).toContain('true'); + + input.sendKeys('123'); + expect(required.getText()).not.toContain('true'); + expect(model.getText()).toContain('123'); + }); + * + * + */ var requiredDirective = function() { return { restrict: 'A', @@ -36346,7 +39408,81 @@ var requiredDirective = function() { }; }; +/** + * @ngdoc directive + * @name ngPattern + * + * @description + * + * ngPattern adds the pattern {@link ngModel.NgModelController#$validators `validator`} to {@link ngModel `ngModel`}. + * It is most often used for text-based {@link input `input`} controls, but can also be applied to custom text-based controls. + * + * The validator sets the `pattern` error key if the {@link ngModel.NgModelController#$viewValue `ngModel.$viewValue`} + * does not match a RegExp which is obtained by evaluating the Angular expression given in the + * `ngPattern` attribute value: + * * If the expression evaluates to a RegExp object, then this is used directly. + * * If the expression evaluates to a string, then it will be converted to a RegExp after wrapping it + * in `^` and `$` characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`. + * + *
+ * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to + * start at the index of the last search's match, thus not taking the whole input value into + * account. + *
+ * + *
+ * **Note:** This directive is also added when the plain `pattern` attribute is used, with two + * differences: + *
    + *
  1. + * `ngPattern` does not set the `pattern` attribute and therefore HTML5 constraint validation is + * not available. + *
  2. + *
  3. + * The `ngPattern` attribute must be an expression, while the `pattern` value must be + * interpolated. + *
  4. + *
+ *
+ * + * @example + * + * + * + *
+ *
+ * + * + *
+ * + *
+ *
+ * input valid? = {{form.input.$valid}}
+ * model = {{model}} + *
+ *
+ *
+ * + var model = element(by.binding('model')); + var input = element(by.id('input')); + it('should validate the input with the default pattern', function() { + input.sendKeys('aaa'); + expect(model.getText()).not.toContain('aaa'); + + input.clear().then(function() { + input.sendKeys('123'); + expect(model.getText()).toContain('123'); + }); + }); + * + *
+ */ var patternDirective = function() { return { restrict: 'A', @@ -36378,7 +39514,72 @@ var patternDirective = function() { }; }; +/** + * @ngdoc directive + * @name ngMaxlength + * + * @description + * + * ngMaxlength adds the maxlength {@link ngModel.NgModelController#$validators `validator`} to {@link ngModel `ngModel`}. + * It is most often used for text-based {@link input `input`} controls, but can also be applied to custom text-based controls. + * + * The validator sets the `maxlength` error key if the {@link ngModel.NgModelController#$viewValue `ngModel.$viewValue`} + * is longer than the integer obtained by evaluating the Angular expression given in the + * `ngMaxlength` attribute value. + * + *
+ * **Note:** This directive is also added when the plain `maxlength` attribute is used, with two + * differences: + *
    + *
  1. + * `ngMaxlength` does not set the `maxlength` attribute and therefore HTML5 constraint + * validation is not available. + *
  2. + *
  3. + * The `ngMaxlength` attribute must be an expression, while the `maxlength` value must be + * interpolated. + *
  4. + *
+ *
+ * + * @example + * + * + * + *
+ *
+ * + * + *
+ * + *
+ *
+ * input valid? = {{form.input.$valid}}
+ * model = {{model}} + *
+ *
+ *
+ * + var model = element(by.binding('model')); + var input = element(by.id('input')); + + it('should validate the input with the default maxlength', function() { + input.sendKeys('abcdef'); + expect(model.getText()).not.toContain('abcdef'); + input.clear().then(function() { + input.sendKeys('abcde'); + expect(model.getText()).toContain('abcde'); + }); + }); + * + *
+ */ var maxlengthDirective = function() { return { restrict: 'A', @@ -36399,6 +39600,70 @@ var maxlengthDirective = function() { }; }; +/** + * @ngdoc directive + * @name ngMinlength + * + * @description + * + * ngMinlength adds the minlength {@link ngModel.NgModelController#$validators `validator`} to {@link ngModel `ngModel`}. + * It is most often used for text-based {@link input `input`} controls, but can also be applied to custom text-based controls. + * + * The validator sets the `minlength` error key if the {@link ngModel.NgModelController#$viewValue `ngModel.$viewValue`} + * is shorter than the integer obtained by evaluating the Angular expression given in the + * `ngMinlength` attribute value. + * + *
+ * **Note:** This directive is also added when the plain `minlength` attribute is used, with two + * differences: + *
    + *
  1. + * `ngMinlength` does not set the `minlength` attribute and therefore HTML5 constraint + * validation is not available. + *
  2. + *
  3. + * The `ngMinlength` value must be an expression, while the `minlength` value must be + * interpolated. + *
  4. + *
+ *
+ * + * @example + * + * + * + *
+ *
+ * + * + *
+ * + *
+ *
+ * input valid? = {{form.input.$valid}}
+ * model = {{model}} + *
+ *
+ *
+ * + var model = element(by.binding('model')); + var input = element(by.id('input')); + + it('should validate the input with the default minlength', function() { + input.sendKeys('ab'); + expect(model.getText()).not.toContain('ab'); + + input.sendKeys('abc'); + expect(model.getText()).toContain('abc'); + }); + * + *
+ */ var minlengthDirective = function() { return { restrict: 'A', @@ -36420,7 +39685,9 @@ var minlengthDirective = function() { if (window.angular.bootstrap) { //AngularJS is already loaded, so we can return here... - console.log('WARNING: Tried to load angular more than once.'); + if (window.console) { + console.log('WARNING: Tried to load angular more than once.'); + } return; } @@ -36511,6 +39778,20 @@ $provide.value("$locale", { "Nov", "Dec" ], + "STANDALONEMONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], "WEEKENDRANGE": [ 5, 6 @@ -36554,83 +39835,125 @@ $provide.value("$locale", { ] }, "id": "en-us", + "localeID": "en_US", "pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;} }); }]); - jqLite(document).ready(function() { - angularInit(document, bootstrap); + jqLite(window.document).ready(function() { + angularInit(window.document, bootstrap); }); -})(window, document); +})(window); !window.angular.$$csp().noInlineStyle && window.angular.element(document.head).prepend(''); }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/angular/angular.js","/node_modules/angular") -},{"_process":244,"buffer":240}],36:[function(require,module,exports){ +},{"_process":351,"buffer":347}],36:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ require('./angular'); module.exports = angular; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/angular/index.js","/node_modules/angular") -},{"./angular":35,"_process":244,"buffer":240}],37:[function(require,module,exports){ +},{"./angular":35,"_process":351,"buffer":347}],37:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ "use strict"; require("core-js/shim"); -require("regenerator/runtime"); +require("regenerator-runtime/runtime"); + +require("core-js/fn/regexp/escape"); if (global._babelPolyfill) { throw new Error("only one instance of babel-polyfill is allowed"); } global._babelPolyfill = true; + +var DEFINE_PROPERTY = "defineProperty"; +function define(O, key, value) { + O[key] || Object[DEFINE_PROPERTY](O, key, { + writable: true, + configurable: true, + value: value + }); +} + +define(String.prototype, "padLeft", "".padStart); +define(String.prototype, "padRight", "".padEnd); + +"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) { + [][key] && define(Array, key, Function.call.bind([][key])); +}); }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/lib/index.js","/node_modules/babel-polyfill/lib") -},{"_process":244,"buffer":240,"core-js/shim":224,"regenerator/runtime":225}],38:[function(require,module,exports){ +},{"_process":351,"buffer":347,"core-js/fn/regexp/escape":38,"core-js/shim":331,"regenerator-runtime/runtime":332}],38:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +require('../../modules/core.regexp.escape'); +module.exports = require('../../modules/_core').RegExp.escape; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/fn/regexp/escape.js","/node_modules/babel-polyfill/node_modules/core-js/fn/regexp") + +},{"../../modules/_core":59,"../../modules/core.regexp.escape":155,"_process":351,"buffer":347}],39:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ module.exports = function(it){ if(typeof it != 'function')throw TypeError(it + ' is not a function!'); return it; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.a-function.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],39:[function(require,module,exports){ +},{"_process":351,"buffer":347}],40:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var cof = require('./_cof'); +module.exports = function(it, msg){ + if(typeof it != 'number' && cof(it) != 'Number')throw TypeError(msg); + return +it; +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_a-number-value.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_cof":54,"_process":351,"buffer":347}],41:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 22.1.3.31 Array.prototype[@@unscopables] -var UNSCOPABLES = require('./$.wks')('unscopables') +var UNSCOPABLES = require('./_wks')('unscopables') , ArrayProto = Array.prototype; -if(ArrayProto[UNSCOPABLES] == undefined)require('./$.hide')(ArrayProto, UNSCOPABLES, {}); +if(ArrayProto[UNSCOPABLES] == undefined)require('./_hide')(ArrayProto, UNSCOPABLES, {}); module.exports = function(key){ ArrayProto[UNSCOPABLES][key] = true; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.add-to-unscopables.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.hide":67,"./$.wks":119,"_process":244,"buffer":240}],40:[function(require,module,exports){ +},{"./_hide":76,"./_wks":153,"_process":351,"buffer":347}],42:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var isObject = require('./$.is-object'); +module.exports = function(it, Constructor, name, forbiddenField){ + if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){ + throw TypeError(name + ': incorrect invocation!'); + } return it; +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"_process":351,"buffer":347}],43:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var isObject = require('./_is-object'); module.exports = function(it){ if(!isObject(it))throw TypeError(it + ' is not an object!'); return it; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.an-object.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.is-object":74,"_process":244,"buffer":240}],41:[function(require,module,exports){ +},{"./_is-object":85,"_process":351,"buffer":347}],44:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) 'use strict'; -var toObject = require('./$.to-object') - , toIndex = require('./$.to-index') - , toLength = require('./$.to-length'); +var toObject = require('./_to-object') + , toIndex = require('./_to-index') + , toLength = require('./_to-length'); module.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){ var O = toObject(this) , len = toLength(O.length) , to = toIndex(target, len) , from = toIndex(start, len) - , $$ = arguments - , end = $$.length > 2 ? $$[2] : undefined + , end = arguments.length > 2 ? arguments[2] : undefined , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to) , inc = 1; if(from < to && to < from + count){ @@ -36645,35 +39968,46 @@ module.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, from += inc; } return O; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.array-copy-within.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_array-copy-within.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.to-index":112,"./$.to-length":115,"./$.to-object":116,"_process":244,"buffer":240}],42:[function(require,module,exports){ +},{"./_to-index":141,"./_to-length":144,"./_to-object":145,"_process":351,"buffer":347}],45:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) 'use strict'; -var toObject = require('./$.to-object') - , toIndex = require('./$.to-index') - , toLength = require('./$.to-length'); -module.exports = [].fill || function fill(value /*, start = 0, end = @length */){ - var O = toObject(this, true) +var toObject = require('./_to-object') + , toIndex = require('./_to-index') + , toLength = require('./_to-length'); +module.exports = function fill(value /*, start = 0, end = @length */){ + var O = toObject(this) , length = toLength(O.length) - , $$ = arguments - , $$len = $$.length - , index = toIndex($$len > 1 ? $$[1] : undefined, length) - , end = $$len > 2 ? $$[2] : undefined + , aLen = arguments.length + , index = toIndex(aLen > 1 ? arguments[1] : undefined, length) + , end = aLen > 2 ? arguments[2] : undefined , endPos = end === undefined ? length : toIndex(end, length); while(endPos > index)O[index++] = value; return O; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.array-fill.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_array-fill.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.to-index":112,"./$.to-length":115,"./$.to-object":116,"_process":244,"buffer":240}],43:[function(require,module,exports){ +},{"./_to-index":141,"./_to-length":144,"./_to-object":145,"_process":351,"buffer":347}],46:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var forOf = require('./_for-of'); + +module.exports = function(iter, ITERATOR){ + var result = []; + forOf(iter, false, result.push, result, ITERATOR); + return result; +}; + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_array-from-iterable.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_for-of":73,"_process":351,"buffer":347}],47:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // false -> Array#indexOf // true -> Array#includes -var toIObject = require('./$.to-iobject') - , toLength = require('./$.to-length') - , toIndex = require('./$.to-index'); +var toIObject = require('./_to-iobject') + , toLength = require('./_to-length') + , toIndex = require('./_to-index'); module.exports = function(IS_INCLUDES){ return function($this, el, fromIndex){ var O = toIObject($this) @@ -36686,13 +40020,13 @@ module.exports = function(IS_INCLUDES){ if(value != value)return true; // Array#toIndex ignores holes, Array#includes - not } else for(;length > index; index++)if(IS_INCLUDES || index in O){ - if(O[index] === el)return IS_INCLUDES || index; + if(O[index] === el)return IS_INCLUDES || index || 0; } return !IS_INCLUDES && -1; }; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.array-includes.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_array-includes.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.to-index":112,"./$.to-iobject":114,"./$.to-length":115,"_process":244,"buffer":240}],44:[function(require,module,exports){ +},{"./_to-index":141,"./_to-iobject":143,"./_to-length":144,"_process":351,"buffer":347}],48:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 0 -> Array#forEach // 1 -> Array#map @@ -36701,25 +40035,26 @@ module.exports = function(IS_INCLUDES){ // 4 -> Array#every // 5 -> Array#find // 6 -> Array#findIndex -var ctx = require('./$.ctx') - , IObject = require('./$.iobject') - , toObject = require('./$.to-object') - , toLength = require('./$.to-length') - , asc = require('./$.array-species-create'); -module.exports = function(TYPE){ +var ctx = require('./_ctx') + , IObject = require('./_iobject') + , toObject = require('./_to-object') + , toLength = require('./_to-length') + , asc = require('./_array-species-create'); +module.exports = function(TYPE, $create){ var IS_MAP = TYPE == 1 , IS_FILTER = TYPE == 2 , IS_SOME = TYPE == 3 , IS_EVERY = TYPE == 4 , IS_FIND_INDEX = TYPE == 6 - , NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + , NO_HOLES = TYPE == 5 || IS_FIND_INDEX + , create = $create || asc; return function($this, callbackfn, that){ var O = toObject($this) , self = IObject(O) , f = ctx(callbackfn, that, 3) , length = toLength(self.length) , index = 0 - , result = IS_MAP ? asc($this, length) : IS_FILTER ? asc($this, 0) : undefined + , result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined , val, res; for(;length > index; index++)if(NO_HOLES || index in self){ val = self[index]; @@ -36737,15 +40072,47 @@ module.exports = function(TYPE){ return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; }; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.array-methods.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.array-species-create":45,"./$.ctx":53,"./$.iobject":70,"./$.to-length":115,"./$.to-object":116,"_process":244,"buffer":240}],45:[function(require,module,exports){ +},{"./_array-species-create":51,"./_ctx":61,"./_iobject":81,"./_to-length":144,"./_to-object":145,"_process":351,"buffer":347}],49:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -// 9.4.2.3 ArraySpeciesCreate(originalArray, length) -var isObject = require('./$.is-object') - , isArray = require('./$.is-array') - , SPECIES = require('./$.wks')('species'); -module.exports = function(original, length){ +var aFunction = require('./_a-function') + , toObject = require('./_to-object') + , IObject = require('./_iobject') + , toLength = require('./_to-length'); + +module.exports = function(that, callbackfn, aLen, memo, isRight){ + aFunction(callbackfn); + var O = toObject(that) + , self = IObject(O) + , length = toLength(O.length) + , index = isRight ? length - 1 : 0 + , i = isRight ? -1 : 1; + if(aLen < 2)for(;;){ + if(index in self){ + memo = self[index]; + index += i; + break; + } + index += i; + if(isRight ? index < 0 : length <= index){ + throw TypeError('Reduce of empty array with no initial value'); + } + } + for(;isRight ? index >= 0 : length > index; index += i)if(index in self){ + memo = callbackfn(memo, self[index], index, O); + } + return memo; +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_array-reduce.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_a-function":39,"./_iobject":81,"./_to-length":144,"./_to-object":145,"_process":351,"buffer":347}],50:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var isObject = require('./_is-object') + , isArray = require('./_is-array') + , SPECIES = require('./_wks')('species'); + +module.exports = function(original){ var C; if(isArray(original)){ C = original.constructor; @@ -36755,73 +40122,100 @@ module.exports = function(original, length){ C = C[SPECIES]; if(C === null)C = undefined; } - } return new (C === undefined ? Array : C)(length); + } return C === undefined ? Array : C; +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-constructor.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_is-array":83,"./_is-object":85,"./_wks":153,"_process":351,"buffer":347}],51:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +// 9.4.2.3 ArraySpeciesCreate(originalArray, length) +var speciesConstructor = require('./_array-species-constructor'); + +module.exports = function(original, length){ + return new (speciesConstructor(original))(length); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.array-species-create.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-create.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.is-array":72,"./$.is-object":74,"./$.wks":119,"_process":244,"buffer":240}],46:[function(require,module,exports){ +},{"./_array-species-constructor":50,"_process":351,"buffer":347}],52:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +'use strict'; +var aFunction = require('./_a-function') + , isObject = require('./_is-object') + , invoke = require('./_invoke') + , arraySlice = [].slice + , factories = {}; + +var construct = function(F, len, args){ + if(!(len in factories)){ + for(var n = [], i = 0; i < len; i++)n[i] = 'a[' + i + ']'; + factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')'); + } return factories[len](F, args); +}; + +module.exports = Function.bind || function bind(that /*, args... */){ + var fn = aFunction(this) + , partArgs = arraySlice.call(arguments, 1); + var bound = function(/* args... */){ + var args = partArgs.concat(arraySlice.call(arguments)); + return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that); + }; + if(isObject(fn.prototype))bound.prototype = fn.prototype; + return bound; +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_bind.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_a-function":39,"./_invoke":80,"./_is-object":85,"_process":351,"buffer":347}],53:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // getting tag from 19.1.3.6 Object.prototype.toString() -var cof = require('./$.cof') - , TAG = require('./$.wks')('toStringTag') +var cof = require('./_cof') + , TAG = require('./_wks')('toStringTag') // ES3 wrong here , ARG = cof(function(){ return arguments; }()) == 'Arguments'; +// fallback for IE11 Script Access Denied error +var tryGet = function(it, key){ + try { + return it[key]; + } catch(e){ /* empty */ } +}; + module.exports = function(it){ var O, T, B; return it === undefined ? 'Undefined' : it === null ? 'Null' // @@toStringTag case - : typeof (T = (O = Object(it))[TAG]) == 'string' ? T + : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T // builtinTag case : ARG ? cof(O) // ES3 arguments fallback : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.classof.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_classof.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.cof":47,"./$.wks":119,"_process":244,"buffer":240}],47:[function(require,module,exports){ +},{"./_cof":54,"./_wks":153,"_process":351,"buffer":347}],54:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ var toString = {}.toString; module.exports = function(it){ return toString.call(it).slice(8, -1); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.cof.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],48:[function(require,module,exports){ +},{"_process":351,"buffer":347}],55:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; -var $ = require('./$') - , hide = require('./$.hide') - , mix = require('./$.mix') - , ctx = require('./$.ctx') - , strictNew = require('./$.strict-new') - , defined = require('./$.defined') - , forOf = require('./$.for-of') - , $iterDefine = require('./$.iter-define') - , step = require('./$.iter-step') - , ID = require('./$.uid')('id') - , $has = require('./$.has') - , isObject = require('./$.is-object') - , setSpecies = require('./$.set-species') - , DESCRIPTORS = require('./$.descriptors') - , isExtensible = Object.isExtensible || isObject - , SIZE = DESCRIPTORS ? '_s' : 'size' - , id = 0; - -var fastKey = function(it, create){ - // return primitive with prefix - if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; - if(!$has(it, ID)){ - // can't set id to frozen object - if(!isExtensible(it))return 'F'; - // not necessary to add id - if(!create)return 'E'; - // add missing object id - hide(it, ID, ++id); - // return object id with prefix - } return 'O' + it[ID]; -}; +var dP = require('./_object-dp').f + , create = require('./_object-create') + , redefineAll = require('./_redefine-all') + , ctx = require('./_ctx') + , anInstance = require('./_an-instance') + , defined = require('./_defined') + , forOf = require('./_for-of') + , $iterDefine = require('./_iter-define') + , step = require('./_iter-step') + , setSpecies = require('./_set-species') + , DESCRIPTORS = require('./_descriptors') + , fastKey = require('./_meta').fastKey + , SIZE = DESCRIPTORS ? '_s' : 'size'; var getEntry = function(that, key){ // fast case @@ -36836,14 +40230,14 @@ var getEntry = function(that, key){ module.exports = { getConstructor: function(wrapper, NAME, IS_MAP, ADDER){ var C = wrapper(function(that, iterable){ - strictNew(that, C, NAME); - that._i = $.create(null); // index - that._f = undefined; // first entry - that._l = undefined; // last entry - that[SIZE] = 0; // size + anInstance(that, C, NAME, '_i'); + that._i = create(null); // index + that._f = undefined; // first entry + that._l = undefined; // last entry + that[SIZE] = 0; // size if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that); }); - mix(C.prototype, { + redefineAll(C.prototype, { // 23.1.3.1 Map.prototype.clear() // 23.2.3.2 Set.prototype.clear() clear: function clear(){ @@ -36875,6 +40269,7 @@ module.exports = { // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) forEach: function forEach(callbackfn /*, that = undefined */){ + anInstance(this, C, 'forEach'); var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3) , entry; while(entry = entry ? entry.n : this._f){ @@ -36889,7 +40284,7 @@ module.exports = { return !!getEntry(this, key); } }); - if(DESCRIPTORS)$.setDesc(C.prototype, 'size', { + if(DESCRIPTORS)dP(C.prototype, 'size', { get: function(){ return defined(this[SIZE]); } @@ -36949,67 +40344,63 @@ module.exports = { setSpecies(NAME); } }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.collection-strong.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_collection-strong.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$":82,"./$.ctx":53,"./$.defined":55,"./$.descriptors":56,"./$.for-of":63,"./$.has":66,"./$.hide":67,"./$.is-object":74,"./$.iter-define":78,"./$.iter-step":80,"./$.mix":89,"./$.set-species":101,"./$.strict-new":105,"./$.uid":118,"_process":244,"buffer":240}],49:[function(require,module,exports){ +},{"./_an-instance":42,"./_ctx":61,"./_defined":63,"./_descriptors":64,"./_for-of":73,"./_iter-define":89,"./_iter-step":91,"./_meta":98,"./_object-create":102,"./_object-dp":103,"./_redefine-all":122,"./_set-species":127,"_process":351,"buffer":347}],56:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // https://github.com/DavidBruant/Map-Set.prototype.toJSON -var forOf = require('./$.for-of') - , classof = require('./$.classof'); +var classof = require('./_classof') + , from = require('./_array-from-iterable'); module.exports = function(NAME){ return function toJSON(){ if(classof(this) != NAME)throw TypeError(NAME + "#toJSON isn't generic"); - var arr = []; - forOf(this, false, arr.push, arr); - return arr; + return from(this); }; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.collection-to-json.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_collection-to-json.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.classof":46,"./$.for-of":63,"_process":244,"buffer":240}],50:[function(require,module,exports){ +},{"./_array-from-iterable":46,"./_classof":53,"_process":351,"buffer":347}],57:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; -var hide = require('./$.hide') - , mix = require('./$.mix') - , anObject = require('./$.an-object') - , strictNew = require('./$.strict-new') - , forOf = require('./$.for-of') - , method = require('./$.array-methods') - , WEAK = require('./$.uid')('weak') - , isObject = require('./$.is-object') - , $has = require('./$.has') - , isExtensible = Object.isExtensible || isObject - , find = method(5) - , findIndex = method(6) - , id = 0; - -// fallback for frozen keys -var frozenStore = function(that){ - return that._l || (that._l = new FrozenStore); -}; -var FrozenStore = function(){ +var redefineAll = require('./_redefine-all') + , getWeak = require('./_meta').getWeak + , anObject = require('./_an-object') + , isObject = require('./_is-object') + , anInstance = require('./_an-instance') + , forOf = require('./_for-of') + , createArrayMethod = require('./_array-methods') + , $has = require('./_has') + , arrayFind = createArrayMethod(5) + , arrayFindIndex = createArrayMethod(6) + , id = 0; + +// fallback for uncaught frozen keys +var uncaughtFrozenStore = function(that){ + return that._l || (that._l = new UncaughtFrozenStore); +}; +var UncaughtFrozenStore = function(){ this.a = []; }; -var findFrozen = function(store, key){ - return find(store.a, function(it){ +var findUncaughtFrozen = function(store, key){ + return arrayFind(store.a, function(it){ return it[0] === key; }); }; -FrozenStore.prototype = { +UncaughtFrozenStore.prototype = { get: function(key){ - var entry = findFrozen(this, key); + var entry = findUncaughtFrozen(this, key); if(entry)return entry[1]; }, has: function(key){ - return !!findFrozen(this, key); + return !!findUncaughtFrozen(this, key); }, set: function(key, value){ - var entry = findFrozen(this, key); + var entry = findUncaughtFrozen(this, key); if(entry)entry[1] = value; else this.a.push([key, value]); }, 'delete': function(key){ - var index = findIndex(this.a, function(it){ + var index = arrayFindIndex(this.a, function(it){ return it[0] === key; }); if(~index)this.a.splice(index, 1); @@ -37020,55 +40411,56 @@ FrozenStore.prototype = { module.exports = { getConstructor: function(wrapper, NAME, IS_MAP, ADDER){ var C = wrapper(function(that, iterable){ - strictNew(that, C, NAME); + anInstance(that, C, NAME, '_i'); that._i = id++; // collection id - that._l = undefined; // leak store for frozen objects + that._l = undefined; // leak store for uncaught frozen objects if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that); }); - mix(C.prototype, { + redefineAll(C.prototype, { // 23.3.3.2 WeakMap.prototype.delete(key) // 23.4.3.3 WeakSet.prototype.delete(value) 'delete': function(key){ if(!isObject(key))return false; - if(!isExtensible(key))return frozenStore(this)['delete'](key); - return $has(key, WEAK) && $has(key[WEAK], this._i) && delete key[WEAK][this._i]; + var data = getWeak(key); + if(data === true)return uncaughtFrozenStore(this)['delete'](key); + return data && $has(data, this._i) && delete data[this._i]; }, // 23.3.3.4 WeakMap.prototype.has(key) // 23.4.3.4 WeakSet.prototype.has(value) has: function has(key){ if(!isObject(key))return false; - if(!isExtensible(key))return frozenStore(this).has(key); - return $has(key, WEAK) && $has(key[WEAK], this._i); + var data = getWeak(key); + if(data === true)return uncaughtFrozenStore(this).has(key); + return data && $has(data, this._i); } }); return C; }, def: function(that, key, value){ - if(!isExtensible(anObject(key))){ - frozenStore(that).set(key, value); - } else { - $has(key, WEAK) || hide(key, WEAK, {}); - key[WEAK][that._i] = value; - } return that; + var data = getWeak(anObject(key), true); + if(data === true)uncaughtFrozenStore(that).set(key, value); + else data[that._i] = value; + return that; }, - frozenStore: frozenStore, - WEAK: WEAK + ufstore: uncaughtFrozenStore }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.collection-weak.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_collection-weak.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.an-object":40,"./$.array-methods":44,"./$.for-of":63,"./$.has":66,"./$.hide":67,"./$.is-object":74,"./$.mix":89,"./$.strict-new":105,"./$.uid":118,"_process":244,"buffer":240}],51:[function(require,module,exports){ +},{"./_an-instance":42,"./_an-object":43,"./_array-methods":48,"./_for-of":73,"./_has":75,"./_is-object":85,"./_meta":98,"./_redefine-all":122,"_process":351,"buffer":347}],58:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; -var global = require('./$.global') - , $def = require('./$.def') - , $redef = require('./$.redef') - , mix = require('./$.mix') - , forOf = require('./$.for-of') - , strictNew = require('./$.strict-new') - , isObject = require('./$.is-object') - , fails = require('./$.fails') - , $iterDetect = require('./$.iter-detect') - , setToStringTag = require('./$.set-to-string-tag'); +var global = require('./_global') + , $export = require('./_export') + , redefine = require('./_redefine') + , redefineAll = require('./_redefine-all') + , meta = require('./_meta') + , forOf = require('./_for-of') + , anInstance = require('./_an-instance') + , isObject = require('./_is-object') + , fails = require('./_fails') + , $iterDetect = require('./_iter-detect') + , setToStringTag = require('./_set-to-string-tag') + , inheritIfRequired = require('./_inherit-if-required'); module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){ var Base = global[NAME] @@ -37078,7 +40470,7 @@ module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){ , O = {}; var fixMethod = function(KEY){ var fn = proto[KEY]; - $redef(proto, KEY, + redefine(proto, KEY, KEY == 'delete' ? function(a){ return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); } : KEY == 'has' ? function has(a){ @@ -37094,7 +40486,8 @@ module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){ }))){ // create collection constructor C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); - mix(C.prototype, methods); + redefineAll(C.prototype, methods); + meta.NEED = true; } else { var instance = new C // early implementations not supports chaining @@ -37104,20 +40497,23 @@ module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){ // most early implementations doesn't supports iterables, most modern - not close it correctly , ACCEPT_ITERABLES = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new // for early implementations -0 and +0 not the same - , BUGGY_ZERO; + , BUGGY_ZERO = !IS_WEAK && fails(function(){ + // V8 ~ Chromium 42- fails only with 5+ elements + var $instance = new C() + , index = 5; + while(index--)$instance[ADDER](index, index); + return !$instance.has(-0); + }); if(!ACCEPT_ITERABLES){ C = wrapper(function(target, iterable){ - strictNew(target, C, NAME); - var that = new Base; + anInstance(target, C, NAME); + var that = inheritIfRequired(new Base, target, C); if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that); return that; }); C.prototype = proto; proto.constructor = C; } - IS_WEAK || instance.forEach(function(val, key){ - BUGGY_ZERO = 1 / key === -Infinity; - }); if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){ fixMethod('delete'); fixMethod('has'); @@ -37131,24 +40527,36 @@ module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){ setToStringTag(C, NAME); O[NAME] = C; - $def($def.G + $def.W + $def.F * (C != Base), O); + $export($export.G + $export.W + $export.F * (C != Base), O); if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP); return C; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.collection.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_collection.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.def":54,"./$.fails":60,"./$.for-of":63,"./$.global":65,"./$.is-object":74,"./$.iter-detect":79,"./$.mix":89,"./$.redef":97,"./$.set-to-string-tag":102,"./$.strict-new":105,"_process":244,"buffer":240}],52:[function(require,module,exports){ +},{"./_an-instance":42,"./_export":68,"./_fails":70,"./_for-of":73,"./_global":74,"./_inherit-if-required":79,"./_is-object":85,"./_iter-detect":90,"./_meta":98,"./_redefine":123,"./_redefine-all":122,"./_set-to-string-tag":128,"_process":351,"buffer":347}],59:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var core = module.exports = {version: '1.2.5'}; +var core = module.exports = {version: '2.4.0'}; if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.core.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_core.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"_process":351,"buffer":347}],60:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +'use strict'; +var $defineProperty = require('./_object-dp') + , createDesc = require('./_property-desc'); + +module.exports = function(object, index, value){ + if(index in object)$defineProperty.f(object, index, createDesc(0, value)); + else object[index] = value; +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_create-property.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],53:[function(require,module,exports){ +},{"./_object-dp":103,"./_property-desc":121,"_process":351,"buffer":347}],61:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // optional / simple context binding -var aFunction = require('./$.a-function'); +var aFunction = require('./_a-function'); module.exports = function(fn, that, length){ aFunction(fn); if(that === undefined)return fn; @@ -37167,103 +40575,126 @@ module.exports = function(fn, that, length){ return fn.apply(that, arguments); }; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.ctx.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.a-function":38,"_process":244,"buffer":240}],54:[function(require,module,exports){ +},{"./_a-function":39,"_process":351,"buffer":347}],62:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var global = require('./$.global') - , core = require('./$.core') - , hide = require('./$.hide') - , $redef = require('./$.redef') - , PROTOTYPE = 'prototype'; -var ctx = function(fn, that){ - return function(){ - return fn.apply(that, arguments); - }; -}; -var $def = function(type, name, source){ - var key, own, out, exp - , isGlobal = type & $def.G - , isProto = type & $def.P - , target = isGlobal ? global : type & $def.S - ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE] - , exports = isGlobal ? core : core[name] || (core[name] = {}); - if(isGlobal)source = name; - for(key in source){ - // contains in native - own = !(type & $def.F) && target && key in target; - // export native or passed - out = (own ? target : source)[key]; - // bind timers to global for call from export context - if(type & $def.B && own)exp = ctx(out, global); - else exp = isProto && typeof out == 'function' ? ctx(Function.call, out) : out; - // extend global - if(target && !own)$redef(target, key, out); - // export - if(exports[key] != out)hide(exports, key, exp); - if(isProto)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out; - } +'use strict'; +var anObject = require('./_an-object') + , toPrimitive = require('./_to-primitive') + , NUMBER = 'number'; + +module.exports = function(hint){ + if(hint !== 'string' && hint !== NUMBER && hint !== 'default')throw TypeError('Incorrect hint'); + return toPrimitive(anObject(this), hint != NUMBER); }; -global.core = core; -// type bitmap -$def.F = 1; // forced -$def.G = 2; // global -$def.S = 4; // static -$def.P = 8; // proto -$def.B = 16; // bind -$def.W = 32; // wrap -module.exports = $def; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.def.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-primitive.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.core":52,"./$.global":65,"./$.hide":67,"./$.redef":97,"_process":244,"buffer":240}],55:[function(require,module,exports){ +},{"./_an-object":43,"./_to-primitive":146,"_process":351,"buffer":347}],63:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 7.2.1 RequireObjectCoercible(argument) module.exports = function(it){ if(it == undefined)throw TypeError("Can't call method on " + it); return it; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.defined.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],56:[function(require,module,exports){ +},{"_process":351,"buffer":347}],64:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // Thank's IE8 for his funny defineProperty -module.exports = !require('./$.fails')(function(){ +module.exports = !require('./_fails')(function(){ return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; }); -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.descriptors.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.fails":60,"_process":244,"buffer":240}],57:[function(require,module,exports){ +},{"./_fails":70,"_process":351,"buffer":347}],65:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var isObject = require('./$.is-object') - , document = require('./$.global').document +var isObject = require('./_is-object') + , document = require('./_global').document // in old IE typeof document.createElement is 'object' , is = isObject(document) && isObject(document.createElement); module.exports = function(it){ return is ? document.createElement(it) : {}; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.dom-create.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_dom-create.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_global":74,"./_is-object":85,"_process":351,"buffer":347}],66:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +// IE 8- don't enum bug keys +module.exports = ( + 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' +).split(','); +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_enum-bug-keys.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.global":65,"./$.is-object":74,"_process":244,"buffer":240}],58:[function(require,module,exports){ +},{"_process":351,"buffer":347}],67:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // all enumerable object keys, includes symbols -var $ = require('./$'); +var getKeys = require('./_object-keys') + , gOPS = require('./_object-gops') + , pIE = require('./_object-pie'); module.exports = function(it){ - var keys = $.getKeys(it) - , getSymbols = $.getSymbols; + var result = getKeys(it) + , getSymbols = gOPS.f; if(getSymbols){ var symbols = getSymbols(it) - , isEnum = $.isEnum + , isEnum = pIE.f , i = 0 , key; - while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))keys.push(key); + while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key); + } return result; +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_enum-keys.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_object-gops":109,"./_object-keys":112,"./_object-pie":113,"_process":351,"buffer":347}],68:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var global = require('./_global') + , core = require('./_core') + , hide = require('./_hide') + , redefine = require('./_redefine') + , ctx = require('./_ctx') + , PROTOTYPE = 'prototype'; + +var $export = function(type, name, source){ + var IS_FORCED = type & $export.F + , IS_GLOBAL = type & $export.G + , IS_STATIC = type & $export.S + , IS_PROTO = type & $export.P + , IS_BIND = type & $export.B + , target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE] + , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) + , expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}) + , key, own, out, exp; + if(IS_GLOBAL)source = name; + for(key in source){ + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + // export native or passed + out = (own ? target : source)[key]; + // bind timers to global for call from export context + exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // extend global + if(target)redefine(target, key, out, type & $export.U); + // export + if(exports[key] != out)hide(exports, key, exp); + if(IS_PROTO && expProto[key] != out)expProto[key] = out; } - return keys; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.enum-keys.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +global.core = core; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_export.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$":82,"_process":244,"buffer":240}],59:[function(require,module,exports){ +},{"./_core":59,"./_ctx":61,"./_global":74,"./_hide":76,"./_redefine":123,"_process":351,"buffer":347}],69:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var MATCH = require('./$.wks')('match'); +var MATCH = require('./_wks')('match'); module.exports = function(KEY){ var re = /./; try { @@ -37275,9 +40706,9 @@ module.exports = function(KEY){ } catch(f){ /* empty */ } } return true; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.fails-is-regexp.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_fails-is-regexp.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.wks":119,"_process":244,"buffer":240}],60:[function(require,module,exports){ +},{"./_wks":153,"_process":351,"buffer":347}],70:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ module.exports = function(exec){ try { @@ -37286,42 +40717,45 @@ module.exports = function(exec){ return true; } }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.fails.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],61:[function(require,module,exports){ +},{"_process":351,"buffer":347}],71:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; -var hide = require('./$.hide') - , redef = require('./$.redef') - , fails = require('./$.fails') - , defined = require('./$.defined') - , wks = require('./$.wks'); +var hide = require('./_hide') + , redefine = require('./_redefine') + , fails = require('./_fails') + , defined = require('./_defined') + , wks = require('./_wks'); + module.exports = function(KEY, length, exec){ var SYMBOL = wks(KEY) - , original = ''[KEY]; + , fns = exec(defined, SYMBOL, ''[KEY]) + , strfn = fns[0] + , rxfn = fns[1]; if(fails(function(){ var O = {}; O[SYMBOL] = function(){ return 7; }; return ''[KEY](O) != 7; })){ - redef(String.prototype, KEY, exec(defined, SYMBOL, original)); + redefine(String.prototype, KEY, strfn); hide(RegExp.prototype, SYMBOL, length == 2 // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) // 21.2.5.11 RegExp.prototype[@@split](string, limit) - ? function(string, arg){ return original.call(string, this, arg); } + ? function(string, arg){ return rxfn.call(string, this, arg); } // 21.2.5.6 RegExp.prototype[@@match](string) // 21.2.5.9 RegExp.prototype[@@search](string) - : function(string){ return original.call(string, this); } + : function(string){ return rxfn.call(string, this); } ); } }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.fix-re-wks.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_fix-re-wks.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.defined":55,"./$.fails":60,"./$.hide":67,"./$.redef":97,"./$.wks":119,"_process":244,"buffer":240}],62:[function(require,module,exports){ +},{"./_defined":63,"./_fails":70,"./_hide":76,"./_redefine":123,"./_wks":153,"_process":351,"buffer":347}],72:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; // 21.2.5.3 get RegExp.prototype.flags -var anObject = require('./$.an-object'); +var anObject = require('./_an-object'); module.exports = function(){ var that = anObject(this) , result = ''; @@ -37332,89 +40766,90 @@ module.exports = function(){ if(that.sticky) result += 'y'; return result; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.flags.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_flags.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.an-object":40,"_process":244,"buffer":240}],63:[function(require,module,exports){ +},{"./_an-object":43,"_process":351,"buffer":347}],73:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var ctx = require('./$.ctx') - , call = require('./$.iter-call') - , isArrayIter = require('./$.is-array-iter') - , anObject = require('./$.an-object') - , toLength = require('./$.to-length') - , getIterFn = require('./core.get-iterator-method'); -module.exports = function(iterable, entries, fn, that){ - var iterFn = getIterFn(iterable) +var ctx = require('./_ctx') + , call = require('./_iter-call') + , isArrayIter = require('./_is-array-iter') + , anObject = require('./_an-object') + , toLength = require('./_to-length') + , getIterFn = require('./core.get-iterator-method') + , BREAK = {} + , RETURN = {}; +var exports = module.exports = function(iterable, entries, fn, that, ITERATOR){ + var iterFn = ITERATOR ? function(){ return iterable; } : getIterFn(iterable) , f = ctx(fn, that, entries ? 2 : 1) , index = 0 - , length, step, iterator; + , length, step, iterator, result; if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!'); // fast case for arrays with default iterator if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){ - entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); + result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); + if(result === BREAK || result === RETURN)return result; } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){ - call(iterator, f, step.value, entries); - } -}; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.for-of.js","/node_modules/babel-polyfill/node_modules/core-js/modules") - -},{"./$.an-object":40,"./$.ctx":53,"./$.is-array-iter":71,"./$.iter-call":76,"./$.to-length":115,"./core.get-iterator-method":120,"_process":244,"buffer":240}],64:[function(require,module,exports){ -(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window -var toString = {}.toString - , toIObject = require('./$.to-iobject') - , getNames = require('./$').getNames; - -var windowNames = typeof window == 'object' && Object.getOwnPropertyNames - ? Object.getOwnPropertyNames(window) : []; - -var getWindowNames = function(it){ - try { - return getNames(it); - } catch(e){ - return windowNames.slice(); + result = call(iterator, f, step.value, entries); + if(result === BREAK || result === RETURN)return result; } }; +exports.BREAK = BREAK; +exports.RETURN = RETURN; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -module.exports.get = function getOwnPropertyNames(it){ - if(windowNames && toString.call(it) == '[object Window]')return getWindowNames(it); - return getNames(toIObject(it)); -}; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.get-names.js","/node_modules/babel-polyfill/node_modules/core-js/modules") - -},{"./$":82,"./$.to-iobject":114,"_process":244,"buffer":240}],65:[function(require,module,exports){ +},{"./_an-object":43,"./_ctx":61,"./_is-array-iter":82,"./_iter-call":87,"./_to-length":144,"./core.get-iterator-method":154,"_process":351,"buffer":347}],74:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 var global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.global.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_global.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],66:[function(require,module,exports){ +},{"_process":351,"buffer":347}],75:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ var hasOwnProperty = {}.hasOwnProperty; module.exports = function(it, key){ return hasOwnProperty.call(it, key); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.has.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_has.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],67:[function(require,module,exports){ +},{"_process":351,"buffer":347}],76:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var $ = require('./$') - , createDesc = require('./$.property-desc'); -module.exports = require('./$.descriptors') ? function(object, key, value){ - return $.setDesc(object, key, createDesc(1, value)); +var dP = require('./_object-dp') + , createDesc = require('./_property-desc'); +module.exports = require('./_descriptors') ? function(object, key, value){ + return dP.f(object, key, createDesc(1, value)); } : function(object, key, value){ object[key] = value; return object; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.hide.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$":82,"./$.descriptors":56,"./$.property-desc":96,"_process":244,"buffer":240}],68:[function(require,module,exports){ +},{"./_descriptors":64,"./_object-dp":103,"./_property-desc":121,"_process":351,"buffer":347}],77:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -module.exports = require('./$.global').document && document.documentElement; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.html.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +module.exports = require('./_global').document && document.documentElement; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_html.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.global":65,"_process":244,"buffer":240}],69:[function(require,module,exports){ +},{"./_global":74,"_process":351,"buffer":347}],78:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +module.exports = !require('./_descriptors') && !require('./_fails')(function(){ + return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7; +}); +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_ie8-dom-define.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_descriptors":64,"./_dom-create":65,"./_fails":70,"_process":351,"buffer":347}],79:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var isObject = require('./_is-object') + , setPrototypeOf = require('./_set-proto').set; +module.exports = function(that, target, C){ + var P, S = target.constructor; + if(S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf){ + setPrototypeOf(that, P); + } return that; +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_inherit-if-required.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_is-object":85,"./_set-proto":126,"_process":351,"buffer":347}],80:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // fast apply, http://jsperf.lnkit.com/fast-apply/5 module.exports = function(fn, args, that){ @@ -37432,71 +40867,71 @@ module.exports = function(fn, args, that){ : fn.call(that, args[0], args[1], args[2], args[3]); } return fn.apply(that, args); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.invoke.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_invoke.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],70:[function(require,module,exports){ +},{"_process":351,"buffer":347}],81:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // fallback for non-array-like ES3 and non-enumerable old V8 strings -var cof = require('./$.cof'); +var cof = require('./_cof'); module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ return cof(it) == 'String' ? it.split('') : Object(it); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.iobject.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_iobject.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.cof":47,"_process":244,"buffer":240}],71:[function(require,module,exports){ +},{"./_cof":54,"_process":351,"buffer":347}],82:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // check on default Array iterator -var Iterators = require('./$.iterators') - , ITERATOR = require('./$.wks')('iterator') +var Iterators = require('./_iterators') + , ITERATOR = require('./_wks')('iterator') , ArrayProto = Array.prototype; module.exports = function(it){ - return (Iterators.Array || ArrayProto[ITERATOR]) === it; + return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.is-array-iter.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_is-array-iter.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.iterators":81,"./$.wks":119,"_process":244,"buffer":240}],72:[function(require,module,exports){ +},{"./_iterators":92,"./_wks":153,"_process":351,"buffer":347}],83:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 7.2.2 IsArray(argument) -var cof = require('./$.cof'); -module.exports = Array.isArray || function(arg){ +var cof = require('./_cof'); +module.exports = Array.isArray || function isArray(arg){ return cof(arg) == 'Array'; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.is-array.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_is-array.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.cof":47,"_process":244,"buffer":240}],73:[function(require,module,exports){ +},{"./_cof":54,"_process":351,"buffer":347}],84:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 20.1.2.3 Number.isInteger(number) -var isObject = require('./$.is-object') +var isObject = require('./_is-object') , floor = Math.floor; module.exports = function isInteger(it){ return !isObject(it) && isFinite(it) && floor(it) === it; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.is-integer.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_is-integer.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.is-object":74,"_process":244,"buffer":240}],74:[function(require,module,exports){ +},{"./_is-object":85,"_process":351,"buffer":347}],85:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ module.exports = function(it){ return typeof it === 'object' ? it !== null : typeof it === 'function'; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.is-object.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],75:[function(require,module,exports){ +},{"_process":351,"buffer":347}],86:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 7.2.8 IsRegExp(argument) -var isObject = require('./$.is-object') - , cof = require('./$.cof') - , MATCH = require('./$.wks')('match'); +var isObject = require('./_is-object') + , cof = require('./_cof') + , MATCH = require('./_wks')('match'); module.exports = function(it){ var isRegExp; return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp'); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.is-regexp.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_is-regexp.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.cof":47,"./$.is-object":74,"./$.wks":119,"_process":244,"buffer":240}],76:[function(require,module,exports){ +},{"./_cof":54,"./_is-object":85,"./_wks":153,"_process":351,"buffer":347}],87:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // call something on iterator step with safe closing on error -var anObject = require('./$.an-object'); +var anObject = require('./_an-object'); module.exports = function(iterator, fn, value, entries){ try { return entries ? fn(anObject(value)[0], value[1]) : fn(value); @@ -37507,44 +40942,46 @@ module.exports = function(iterator, fn, value, entries){ throw e; } }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.iter-call.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_iter-call.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.an-object":40,"_process":244,"buffer":240}],77:[function(require,module,exports){ +},{"./_an-object":43,"_process":351,"buffer":347}],88:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; -var $ = require('./$') - , descriptor = require('./$.property-desc') - , setToStringTag = require('./$.set-to-string-tag') +var create = require('./_object-create') + , descriptor = require('./_property-desc') + , setToStringTag = require('./_set-to-string-tag') , IteratorPrototype = {}; // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() -require('./$.hide')(IteratorPrototype, require('./$.wks')('iterator'), function(){ return this; }); +require('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function(){ return this; }); module.exports = function(Constructor, NAME, next){ - Constructor.prototype = $.create(IteratorPrototype, {next: descriptor(1, next)}); + Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)}); setToStringTag(Constructor, NAME + ' Iterator'); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.iter-create.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_iter-create.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$":82,"./$.hide":67,"./$.property-desc":96,"./$.set-to-string-tag":102,"./$.wks":119,"_process":244,"buffer":240}],78:[function(require,module,exports){ +},{"./_hide":76,"./_object-create":102,"./_property-desc":121,"./_set-to-string-tag":128,"./_wks":153,"_process":351,"buffer":347}],89:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; -var LIBRARY = require('./$.library') - , $def = require('./$.def') - , $redef = require('./$.redef') - , hide = require('./$.hide') - , has = require('./$.has') - , SYMBOL_ITERATOR = require('./$.wks')('iterator') - , Iterators = require('./$.iterators') - , $iterCreate = require('./$.iter-create') - , setToStringTag = require('./$.set-to-string-tag') - , getProto = require('./$').getProto - , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next` - , FF_ITERATOR = '@@iterator' - , KEYS = 'keys' - , VALUES = 'values'; +var LIBRARY = require('./_library') + , $export = require('./_export') + , redefine = require('./_redefine') + , hide = require('./_hide') + , has = require('./_has') + , Iterators = require('./_iterators') + , $iterCreate = require('./_iter-create') + , setToStringTag = require('./_set-to-string-tag') + , getPrototypeOf = require('./_object-gpo') + , ITERATOR = require('./_wks')('iterator') + , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next` + , FF_ITERATOR = '@@iterator' + , KEYS = 'keys' + , VALUES = 'values'; + var returnThis = function(){ return this; }; -module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCE){ + +module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){ $iterCreate(Constructor, NAME, next); var getMethod = function(kind){ if(!BUGGY && kind in proto)return proto[kind]; @@ -37553,43 +40990,54 @@ module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCE) case VALUES: return function values(){ return new Constructor(this, kind); }; } return function entries(){ return new Constructor(this, kind); }; }; - var TAG = NAME + ' Iterator' - , proto = Base.prototype - , _native = proto[SYMBOL_ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT] - , _default = _native || getMethod(DEFAULT) - , methods, key; + var TAG = NAME + ' Iterator' + , DEF_VALUES = DEFAULT == VALUES + , VALUES_BUG = false + , proto = Base.prototype + , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT] + , $default = $native || getMethod(DEFAULT) + , $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined + , $anyNative = NAME == 'Array' ? proto.entries || $native : $native + , methods, key, IteratorPrototype; // Fix native - if(_native){ - var IteratorPrototype = getProto(_default.call(new Base)); - // Set @@toStringTag to native iterators - setToStringTag(IteratorPrototype, TAG, true); - // FF fix - if(!LIBRARY && has(proto, FF_ITERATOR))hide(IteratorPrototype, SYMBOL_ITERATOR, returnThis); + if($anyNative){ + IteratorPrototype = getPrototypeOf($anyNative.call(new Base)); + if(IteratorPrototype !== Object.prototype){ + // Set @@toStringTag to native iterators + setToStringTag(IteratorPrototype, TAG, true); + // fix for some old engines + if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis); + } + } + // fix Array#{values, @@iterator}.name in V8 / FF + if(DEF_VALUES && $native && $native.name !== VALUES){ + VALUES_BUG = true; + $default = function values(){ return $native.call(this); }; } // Define iterator - if((!LIBRARY || FORCE) && (BUGGY || !(SYMBOL_ITERATOR in proto))){ - hide(proto, SYMBOL_ITERATOR, _default); + if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){ + hide(proto, ITERATOR, $default); } // Plug for library - Iterators[NAME] = _default; + Iterators[NAME] = $default; Iterators[TAG] = returnThis; if(DEFAULT){ methods = { - values: DEFAULT == VALUES ? _default : getMethod(VALUES), - keys: IS_SET ? _default : getMethod(KEYS), - entries: DEFAULT != VALUES ? _default : getMethod('entries') + values: DEF_VALUES ? $default : getMethod(VALUES), + keys: IS_SET ? $default : getMethod(KEYS), + entries: $entries }; - if(FORCE)for(key in methods){ - if(!(key in proto))$redef(proto, key, methods[key]); - } else $def($def.P + $def.F * BUGGY, NAME, methods); + if(FORCED)for(key in methods){ + if(!(key in proto))redefine(proto, key, methods[key]); + } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); } return methods; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.iter-define.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_iter-define.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$":82,"./$.def":54,"./$.has":66,"./$.hide":67,"./$.iter-create":77,"./$.iterators":81,"./$.library":84,"./$.redef":97,"./$.set-to-string-tag":102,"./$.wks":119,"_process":244,"buffer":240}],79:[function(require,module,exports){ +},{"./_export":68,"./_has":75,"./_hide":76,"./_iter-create":88,"./_iterators":92,"./_library":94,"./_object-gpo":110,"./_redefine":123,"./_set-to-string-tag":128,"./_wks":153,"_process":351,"buffer":347}],90:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var ITERATOR = require('./$.wks')('iterator') +var ITERATOR = require('./_wks')('iterator') , SAFE_CLOSING = false; try { @@ -37604,217 +41052,527 @@ module.exports = function(exec, skipClosing){ try { var arr = [7] , iter = arr[ITERATOR](); - iter.next = function(){ safe = true; }; + iter.next = function(){ return {done: safe = true}; }; arr[ITERATOR] = function(){ return iter; }; exec(arr); } catch(e){ /* empty */ } return safe; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.iter-detect.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_iter-detect.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.wks":119,"_process":244,"buffer":240}],80:[function(require,module,exports){ +},{"./_wks":153,"_process":351,"buffer":347}],91:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ module.exports = function(done, value){ return {value: value, done: !!done}; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.iter-step.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_iter-step.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],81:[function(require,module,exports){ +},{"_process":351,"buffer":347}],92:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ module.exports = {}; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.iterators.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_iterators.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],82:[function(require,module,exports){ +},{"_process":351,"buffer":347}],93:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var $Object = Object; -module.exports = { - create: $Object.create, - getProto: $Object.getPrototypeOf, - isEnum: {}.propertyIsEnumerable, - getDesc: $Object.getOwnPropertyDescriptor, - setDesc: $Object.defineProperty, - setDescs: $Object.defineProperties, - getKeys: $Object.keys, - getNames: $Object.getOwnPropertyNames, - getSymbols: $Object.getOwnPropertySymbols, - each: [].forEach -}; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.js","/node_modules/babel-polyfill/node_modules/core-js/modules") - -},{"_process":244,"buffer":240}],83:[function(require,module,exports){ -(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var $ = require('./$') - , toIObject = require('./$.to-iobject'); +var getKeys = require('./_object-keys') + , toIObject = require('./_to-iobject'); module.exports = function(object, el){ var O = toIObject(object) - , keys = $.getKeys(O) + , keys = getKeys(O) , length = keys.length , index = 0 , key; while(length > index)if(O[key = keys[index++]] === el)return key; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.keyof.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_keyof.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$":82,"./$.to-iobject":114,"_process":244,"buffer":240}],84:[function(require,module,exports){ +},{"./_object-keys":112,"./_to-iobject":143,"_process":351,"buffer":347}],94:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ module.exports = false; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.library.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_library.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],85:[function(require,module,exports){ +},{"_process":351,"buffer":347}],95:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 20.2.2.14 Math.expm1(x) -module.exports = Math.expm1 || function expm1(x){ +var $expm1 = Math.expm1; +module.exports = (!$expm1 + // Old FF bug + || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168 + // Tor Browser bug + || $expm1(-2e-17) != -2e-17 +) ? function expm1(x){ return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1; -}; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.math-expm1.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +} : $expm1; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_math-expm1.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],86:[function(require,module,exports){ +},{"_process":351,"buffer":347}],96:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 20.2.2.20 Math.log1p(x) module.exports = Math.log1p || function log1p(x){ return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.math-log1p.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_math-log1p.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],87:[function(require,module,exports){ +},{"_process":351,"buffer":347}],97:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 20.2.2.28 Math.sign(x) module.exports = Math.sign || function sign(x){ return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.math-sign.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_math-sign.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"_process":351,"buffer":347}],98:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var META = require('./_uid')('meta') + , isObject = require('./_is-object') + , has = require('./_has') + , setDesc = require('./_object-dp').f + , id = 0; +var isExtensible = Object.isExtensible || function(){ + return true; +}; +var FREEZE = !require('./_fails')(function(){ + return isExtensible(Object.preventExtensions({})); +}); +var setMeta = function(it){ + setDesc(it, META, {value: { + i: 'O' + ++id, // object ID + w: {} // weak collections IDs + }}); +}; +var fastKey = function(it, create){ + // return primitive with prefix + if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if(!has(it, META)){ + // can't set metadata to uncaught frozen object + if(!isExtensible(it))return 'F'; + // not necessary to add metadata + if(!create)return 'E'; + // add missing metadata + setMeta(it); + // return object ID + } return it[META].i; +}; +var getWeak = function(it, create){ + if(!has(it, META)){ + // can't set metadata to uncaught frozen object + if(!isExtensible(it))return true; + // not necessary to add metadata + if(!create)return false; + // add missing metadata + setMeta(it); + // return hash weak collections IDs + } return it[META].w; +}; +// add metadata on freeze-family methods calling +var onFreeze = function(it){ + if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it); + return it; +}; +var meta = module.exports = { + KEY: META, + NEED: false, + fastKey: fastKey, + getWeak: getWeak, + onFreeze: onFreeze +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_fails":70,"./_has":75,"./_is-object":85,"./_object-dp":103,"./_uid":150,"_process":351,"buffer":347}],99:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var Map = require('./es6.map') + , $export = require('./_export') + , shared = require('./_shared')('metadata') + , store = shared.store || (shared.store = new (require('./es6.weak-map'))); + +var getOrCreateMetadataMap = function(target, targetKey, create){ + var targetMetadata = store.get(target); + if(!targetMetadata){ + if(!create)return undefined; + store.set(target, targetMetadata = new Map); + } + var keyMetadata = targetMetadata.get(targetKey); + if(!keyMetadata){ + if(!create)return undefined; + targetMetadata.set(targetKey, keyMetadata = new Map); + } return keyMetadata; +}; +var ordinaryHasOwnMetadata = function(MetadataKey, O, P){ + var metadataMap = getOrCreateMetadataMap(O, P, false); + return metadataMap === undefined ? false : metadataMap.has(MetadataKey); +}; +var ordinaryGetOwnMetadata = function(MetadataKey, O, P){ + var metadataMap = getOrCreateMetadataMap(O, P, false); + return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey); +}; +var ordinaryDefineOwnMetadata = function(MetadataKey, MetadataValue, O, P){ + getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue); +}; +var ordinaryOwnMetadataKeys = function(target, targetKey){ + var metadataMap = getOrCreateMetadataMap(target, targetKey, false) + , keys = []; + if(metadataMap)metadataMap.forEach(function(_, key){ keys.push(key); }); + return keys; +}; +var toMetaKey = function(it){ + return it === undefined || typeof it == 'symbol' ? it : String(it); +}; +var exp = function(O){ + $export($export.S, 'Reflect', O); +}; + +module.exports = { + store: store, + map: getOrCreateMetadataMap, + has: ordinaryHasOwnMetadata, + get: ordinaryGetOwnMetadata, + set: ordinaryDefineOwnMetadata, + keys: ordinaryOwnMetadataKeys, + key: toMetaKey, + exp: exp +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],88:[function(require,module,exports){ +},{"./_export":68,"./_shared":130,"./es6.map":185,"./es6.weak-map":291,"_process":351,"buffer":347}],100:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var global = require('./$.global') - , macrotask = require('./$.task').set +var global = require('./_global') + , macrotask = require('./_task').set , Observer = global.MutationObserver || global.WebKitMutationObserver , process = global.process - , isNode = require('./$.cof')(process) == 'process' - , head, last, notify; - -var flush = function(){ - var parent, domain; - if(isNode && (parent = process.domain)){ - process.domain = null; - parent.exit(); - } - while(head){ - domain = head.domain; - if(domain)domain.enter(); - head.fn.call(); // <- currently we use it only for Promise - try / catch not required - if(domain)domain.exit(); - head = head.next; - } last = undefined; - if(parent)parent.enter(); -}; - -// Node.js -if(isNode){ - notify = function(){ - process.nextTick(flush); - }; -// browsers with MutationObserver -} else if(Observer){ - var toggle = 1 - , node = document.createTextNode(''); - new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new - notify = function(){ - node.data = toggle = -toggle; - }; -// for other environments - macrotask based on: -// - setImmediate -// - MessageChannel -// - window.postMessag -// - onreadystatechange -// - setTimeout -} else { - notify = function(){ - // strange IE + webpack dev server bug - use .call(global) - macrotask.call(global, flush); + , Promise = global.Promise + , isNode = require('./_cof')(process) == 'process'; + +module.exports = function(){ + var head, last, notify; + + var flush = function(){ + var parent, fn; + if(isNode && (parent = process.domain))parent.exit(); + while(head){ + fn = head.fn; + head = head.next; + try { + fn(); + } catch(e){ + if(head)notify(); + else last = undefined; + throw e; + } + } last = undefined; + if(parent)parent.enter(); }; -} -module.exports = function asap(fn){ - var task = {fn: fn, next: undefined, domain: isNode && process.domain}; - if(last)last.next = task; - if(!head){ - head = task; - notify(); - } last = task; -}; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.microtask.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + // Node.js + if(isNode){ + notify = function(){ + process.nextTick(flush); + }; + // browsers with MutationObserver + } else if(Observer){ + var toggle = true + , node = document.createTextNode(''); + new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new + notify = function(){ + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if(Promise && Promise.resolve){ + var promise = Promise.resolve(); + notify = function(){ + promise.then(flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + } else { + notify = function(){ + // strange IE + webpack dev server bug - use .call(global) + macrotask.call(global, flush); + }; + } -},{"./$.cof":47,"./$.global":65,"./$.task":111,"_process":244,"buffer":240}],89:[function(require,module,exports){ -(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var $redef = require('./$.redef'); -module.exports = function(target, src){ - for(var key in src)$redef(target, key, src[key]); - return target; + return function(fn){ + var task = {fn: fn, next: undefined}; + if(last)last.next = task; + if(!head){ + head = task; + notify(); + } last = task; + }; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.mix.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_microtask.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.redef":97,"_process":244,"buffer":240}],90:[function(require,module,exports){ +},{"./_cof":54,"./_global":74,"./_task":140,"_process":351,"buffer":347}],101:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +'use strict'; // 19.1.2.1 Object.assign(target, source, ...) -var $ = require('./$') - , toObject = require('./$.to-object') - , IObject = require('./$.iobject'); +var getKeys = require('./_object-keys') + , gOPS = require('./_object-gops') + , pIE = require('./_object-pie') + , toObject = require('./_to-object') + , IObject = require('./_iobject') + , $assign = Object.assign; // should work with symbols and should have deterministic property order (V8 bug) -module.exports = require('./$.fails')(function(){ - var a = Object.assign - , A = {} +module.exports = !$assign || require('./_fails')(function(){ + var A = {} , B = {} , S = Symbol() , K = 'abcdefghijklmnopqrst'; A[S] = 7; K.split('').forEach(function(k){ B[k] = k; }); - return a({}, A)[S] != 7 || Object.keys(a({}, B)).join('') != K; + return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; }) ? function assign(target, source){ // eslint-disable-line no-unused-vars var T = toObject(target) - , $$ = arguments - , $$len = $$.length + , aLen = arguments.length , index = 1 - , getKeys = $.getKeys - , getSymbols = $.getSymbols - , isEnum = $.isEnum; - while($$len > index){ - var S = IObject($$[index++]) + , getSymbols = gOPS.f + , isEnum = pIE.f; + while(aLen > index){ + var S = IObject(arguments[index++]) , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S) , length = keys.length , j = 0 , key; while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key]; + } return T; +} : $assign; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_object-assign.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_fails":70,"./_iobject":81,"./_object-gops":109,"./_object-keys":112,"./_object-pie":113,"./_to-object":145,"_process":351,"buffer":347}],102:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) +var anObject = require('./_an-object') + , dPs = require('./_object-dps') + , enumBugKeys = require('./_enum-bug-keys') + , IE_PROTO = require('./_shared-key')('IE_PROTO') + , Empty = function(){ /* empty */ } + , PROTOTYPE = 'prototype'; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var createDict = function(){ + // Thrash, waste and sodomy: IE GC bug + var iframe = require('./_dom-create')('iframe') + , i = enumBugKeys.length + , lt = '<' + , gt = '>' + , iframeDocument; + iframe.style.display = 'none'; + require('./_html').appendChild(iframe); + iframe.src = 'javascript:'; // eslint-disable-line no-script-url + // createDict = iframe.contentWindow.Object; + // html.removeChild(iframe); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); + iframeDocument.close(); + createDict = iframeDocument.F; + while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]]; + return createDict(); +}; + +module.exports = Object.create || function create(O, Properties){ + var result; + if(O !== null){ + Empty[PROTOTYPE] = anObject(O); + result = new Empty; + Empty[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = createDict(); + return Properties === undefined ? result : dPs(result, Properties); +}; + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_an-object":43,"./_dom-create":65,"./_enum-bug-keys":66,"./_html":77,"./_object-dps":104,"./_shared-key":129,"_process":351,"buffer":347}],103:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var anObject = require('./_an-object') + , IE8_DOM_DEFINE = require('./_ie8-dom-define') + , toPrimitive = require('./_to-primitive') + , dP = Object.defineProperty; + +exports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){ + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if(IE8_DOM_DEFINE)try { + return dP(O, P, Attributes); + } catch(e){ /* empty */ } + if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); + if('value' in Attributes)O[P] = Attributes.value; + return O; +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_an-object":43,"./_descriptors":64,"./_ie8-dom-define":78,"./_to-primitive":146,"_process":351,"buffer":347}],104:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var dP = require('./_object-dp') + , anObject = require('./_an-object') + , getKeys = require('./_object-keys'); + +module.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){ + anObject(O); + var keys = getKeys(Properties) + , length = keys.length + , i = 0 + , P; + while(length > i)dP.f(O, P = keys[i++], Properties[P]); + return O; +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_object-dps.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_an-object":43,"./_descriptors":64,"./_object-dp":103,"./_object-keys":112,"_process":351,"buffer":347}],105:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +// Forced replacement prototype accessors methods +module.exports = require('./_library')|| !require('./_fails')(function(){ + var K = Math.random(); + // In FF throws only define methods + __defineSetter__.call(null, K, function(){ /* empty */}); + delete require('./_global')[K]; +}); +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_object-forced-pam.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_fails":70,"./_global":74,"./_library":94,"_process":351,"buffer":347}],106:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var pIE = require('./_object-pie') + , createDesc = require('./_property-desc') + , toIObject = require('./_to-iobject') + , toPrimitive = require('./_to-primitive') + , has = require('./_has') + , IE8_DOM_DEFINE = require('./_ie8-dom-define') + , gOPD = Object.getOwnPropertyDescriptor; + +exports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P){ + O = toIObject(O); + P = toPrimitive(P, true); + if(IE8_DOM_DEFINE)try { + return gOPD(O, P); + } catch(e){ /* empty */ } + if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]); +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_descriptors":64,"./_has":75,"./_ie8-dom-define":78,"./_object-pie":113,"./_property-desc":121,"./_to-iobject":143,"./_to-primitive":146,"_process":351,"buffer":347}],107:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window +var toIObject = require('./_to-iobject') + , gOPN = require('./_object-gopn').f + , toString = {}.toString; + +var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + +var getWindowNames = function(it){ + try { + return gOPN(it); + } catch(e){ + return windowNames.slice(); } - return T; -} : Object.assign; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.object-assign.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}; + +module.exports.f = function getOwnPropertyNames(it){ + return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it)); +}; + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn-ext.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_object-gopn":108,"./_to-iobject":143,"_process":351,"buffer":347}],108:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) +var $keys = require('./_object-keys-internal') + , hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype'); + +exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){ + return $keys(O, hiddenKeys); +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_enum-bug-keys":66,"./_object-keys-internal":111,"_process":351,"buffer":347}],109:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +exports.f = Object.getOwnPropertySymbols; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_object-gops.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$":82,"./$.fails":60,"./$.iobject":70,"./$.to-object":116,"_process":244,"buffer":240}],91:[function(require,module,exports){ +},{"_process":351,"buffer":347}],110:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) +var has = require('./_has') + , toObject = require('./_to-object') + , IE_PROTO = require('./_shared-key')('IE_PROTO') + , ObjectProto = Object.prototype; + +module.exports = Object.getPrototypeOf || function(O){ + O = toObject(O); + if(has(O, IE_PROTO))return O[IE_PROTO]; + if(typeof O.constructor == 'function' && O instanceof O.constructor){ + return O.constructor.prototype; + } return O instanceof Object ? ObjectProto : null; +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_has":75,"./_shared-key":129,"./_to-object":145,"_process":351,"buffer":347}],111:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var has = require('./_has') + , toIObject = require('./_to-iobject') + , arrayIndexOf = require('./_array-includes')(false) + , IE_PROTO = require('./_shared-key')('IE_PROTO'); + +module.exports = function(object, names){ + var O = toIObject(object) + , i = 0 + , result = [] + , key; + for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while(names.length > i)if(has(O, key = names[i++])){ + ~arrayIndexOf(result, key) || result.push(key); + } + return result; +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys-internal.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_array-includes":47,"./_has":75,"./_shared-key":129,"./_to-iobject":143,"_process":351,"buffer":347}],112:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +// 19.1.2.14 / 15.2.3.14 Object.keys(O) +var $keys = require('./_object-keys-internal') + , enumBugKeys = require('./_enum-bug-keys'); + +module.exports = Object.keys || function keys(O){ + return $keys(O, enumBugKeys); +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_enum-bug-keys":66,"./_object-keys-internal":111,"_process":351,"buffer":347}],113:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +exports.f = {}.propertyIsEnumerable; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_object-pie.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"_process":351,"buffer":347}],114:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // most Object methods by ES6 should accept primitives -var $def = require('./$.def') - , core = require('./$.core') - , fails = require('./$.fails'); +var $export = require('./_export') + , core = require('./_core') + , fails = require('./_fails'); module.exports = function(KEY, exec){ - var $def = require('./$.def') - , fn = (core.Object || {})[KEY] || Object[KEY] - , exp = {}; + var fn = (core.Object || {})[KEY] || Object[KEY] + , exp = {}; exp[KEY] = exec(fn); - $def($def.S + $def.F * fails(function(){ fn(1); }), 'Object', exp); + $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.object-sap.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.core":52,"./$.def":54,"./$.fails":60,"_process":244,"buffer":240}],92:[function(require,module,exports){ +},{"./_core":59,"./_export":68,"./_fails":70,"_process":351,"buffer":347}],115:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var $ = require('./$') - , toIObject = require('./$.to-iobject') - , isEnum = $.isEnum; +var getKeys = require('./_object-keys') + , toIObject = require('./_to-iobject') + , isEnum = require('./_object-pie').f; module.exports = function(isEntries){ return function(it){ var O = toIObject(it) - , keys = $.getKeys(O) + , keys = getKeys(O) , length = keys.length , i = 0 , result = [] @@ -37824,27 +41582,53 @@ module.exports = function(isEntries){ } return result; }; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.object-to-array.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_object-to-array.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$":82,"./$.to-iobject":114,"_process":244,"buffer":240}],93:[function(require,module,exports){ +},{"./_object-keys":112,"./_object-pie":113,"./_to-iobject":143,"_process":351,"buffer":347}],116:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // all object keys, includes non-enumerable and symbols -var $ = require('./$') - , anObject = require('./$.an-object') - , Reflect = require('./$.global').Reflect; +var gOPN = require('./_object-gopn') + , gOPS = require('./_object-gops') + , anObject = require('./_an-object') + , Reflect = require('./_global').Reflect; module.exports = Reflect && Reflect.ownKeys || function ownKeys(it){ - var keys = $.getNames(anObject(it)) - , getSymbols = $.getSymbols; + var keys = gOPN.f(anObject(it)) + , getSymbols = gOPS.f; return getSymbols ? keys.concat(getSymbols(it)) : keys; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.own-keys.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_own-keys.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_an-object":43,"./_global":74,"./_object-gopn":108,"./_object-gops":109,"_process":351,"buffer":347}],117:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var $parseFloat = require('./_global').parseFloat + , $trim = require('./_string-trim').trim; -},{"./$":82,"./$.an-object":40,"./$.global":65,"_process":244,"buffer":240}],94:[function(require,module,exports){ +module.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str){ + var string = $trim(String(str), 3) + , result = $parseFloat(string); + return result === 0 && string.charAt(0) == '-' ? -0 : result; +} : $parseFloat; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_parse-float.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_global":74,"./_string-trim":138,"./_string-ws":139,"_process":351,"buffer":347}],118:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var $parseInt = require('./_global').parseInt + , $trim = require('./_string-trim').trim + , ws = require('./_string-ws') + , hex = /^[\-+]?0[xX]/; + +module.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix){ + var string = $trim(String(str), 3); + return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10)); +} : $parseInt; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_parse-int.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_global":74,"./_string-trim":138,"./_string-ws":139,"_process":351,"buffer":347}],119:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; -var path = require('./$.path') - , invoke = require('./$.invoke') - , aFunction = require('./$.a-function'); +var path = require('./_path') + , invoke = require('./_invoke') + , aFunction = require('./_a-function'); module.exports = function(/* ...pargs */){ var fn = aFunction(this) , length = arguments.length @@ -37854,25 +41638,24 @@ module.exports = function(/* ...pargs */){ , holder = false; while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true; return function(/* ...args */){ - var that = this - , $$ = arguments - , $$len = $$.length + var that = this + , aLen = arguments.length , j = 0, k = 0, args; - if(!holder && !$$len)return invoke(fn, pargs, that); + if(!holder && !aLen)return invoke(fn, pargs, that); args = pargs.slice(); - if(holder)for(;length > j; j++)if(args[j] === _)args[j] = $$[k++]; - while($$len > k)args.push($$[k++]); + if(holder)for(;length > j; j++)if(args[j] === _)args[j] = arguments[k++]; + while(aLen > k)args.push(arguments[k++]); return invoke(fn, args, that); }; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.partial.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_partial.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.a-function":38,"./$.invoke":69,"./$.path":95,"_process":244,"buffer":240}],95:[function(require,module,exports){ +},{"./_a-function":39,"./_invoke":80,"./_path":120,"_process":351,"buffer":347}],120:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -module.exports = require('./$.global'); -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.path.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +module.exports = require('./_global'); +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_path.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.global":65,"_process":244,"buffer":240}],96:[function(require,module,exports){ +},{"./_global":74,"_process":351,"buffer":347}],121:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ module.exports = function(bitmap, value){ return { @@ -37882,40 +41665,54 @@ module.exports = function(bitmap, value){ value : value }; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.property-desc.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"_process":351,"buffer":347}],122:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var redefine = require('./_redefine'); +module.exports = function(target, src, safe){ + for(var key in src)redefine(target, key, src[key], safe); + return target; +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],97:[function(require,module,exports){ +},{"./_redefine":123,"_process":351,"buffer":347}],123:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -// add fake Function#toString -// for correct work wrapped methods / constructors with methods like LoDash isNative -var global = require('./$.global') - , hide = require('./$.hide') - , SRC = require('./$.uid')('src') +var global = require('./_global') + , hide = require('./_hide') + , has = require('./_has') + , SRC = require('./_uid')('src') , TO_STRING = 'toString' , $toString = Function[TO_STRING] , TPL = ('' + $toString).split(TO_STRING); -require('./$.core').inspectSource = function(it){ +require('./_core').inspectSource = function(it){ return $toString.call(it); }; (module.exports = function(O, key, val, safe){ - if(typeof val == 'function'){ - val.hasOwnProperty(SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); - val.hasOwnProperty('name') || hide(val, 'name', key); - } + var isFunction = typeof val == 'function'; + if(isFunction)has(val, 'name') || hide(val, 'name', key); + if(O[key] === val)return; + if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); if(O === global){ O[key] = val; } else { - if(!safe)delete O[key]; - hide(O, key, val); + if(!safe){ + delete O[key]; + hide(O, key, val); + } else { + if(O[key])O[key] = val; + else hide(O, key, val); + } } +// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative })(Function.prototype, TO_STRING, function toString(){ return typeof this == 'function' && this[SRC] || $toString.call(this); }); -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.redef.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.core":52,"./$.global":65,"./$.hide":67,"./$.uid":118,"_process":244,"buffer":240}],98:[function(require,module,exports){ +},{"./_core":59,"./_global":74,"./_has":75,"./_hide":76,"./_uid":150,"_process":351,"buffer":347}],124:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ module.exports = function(regExp, replace){ var replacer = replace === Object(replace) ? function(part){ @@ -37925,23 +41722,22 @@ module.exports = function(regExp, replace){ return String(it).replace(regExp, replacer); }; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.replacer.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_replacer.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],99:[function(require,module,exports){ +},{"_process":351,"buffer":347}],125:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 7.2.9 SameValue(x, y) module.exports = Object.is || function is(x, y){ return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.same-value.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_same-value.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],100:[function(require,module,exports){ +},{"_process":351,"buffer":347}],126:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // Works with __proto__ only. Old v8 can't work with null proto objects. /* eslint-disable no-proto */ -var getDesc = require('./$').getDesc - , isObject = require('./$.is-object') - , anObject = require('./$.an-object'); +var isObject = require('./_is-object') + , anObject = require('./_an-object'); var check = function(O, proto){ anObject(O); if(!isObject(proto) && proto !== null)throw TypeError(proto + ": can't set as prototype!"); @@ -37950,7 +41746,7 @@ module.exports = { set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line function(test, buggy, set){ try { - set = require('./$.ctx')(Function.call, getDesc(Object.prototype, '__proto__').set, 2); + set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2); set(test, []); buggy = !(test instanceof Array); } catch(e){ buggy = true; } @@ -37963,70 +41759,82 @@ module.exports = { }({}, false) : undefined), check: check }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.set-proto.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_set-proto.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$":82,"./$.an-object":40,"./$.ctx":53,"./$.is-object":74,"_process":244,"buffer":240}],101:[function(require,module,exports){ +},{"./_an-object":43,"./_ctx":61,"./_is-object":85,"./_object-gopd":106,"_process":351,"buffer":347}],127:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; -var global = require('./$.global') - , $ = require('./$') - , DESCRIPTORS = require('./$.descriptors') - , SPECIES = require('./$.wks')('species'); +var global = require('./_global') + , dP = require('./_object-dp') + , DESCRIPTORS = require('./_descriptors') + , SPECIES = require('./_wks')('species'); module.exports = function(KEY){ var C = global[KEY]; - if(DESCRIPTORS && C && !C[SPECIES])$.setDesc(C, SPECIES, { + if(DESCRIPTORS && C && !C[SPECIES])dP.f(C, SPECIES, { configurable: true, get: function(){ return this; } }); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.set-species.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$":82,"./$.descriptors":56,"./$.global":65,"./$.wks":119,"_process":244,"buffer":240}],102:[function(require,module,exports){ +},{"./_descriptors":64,"./_global":74,"./_object-dp":103,"./_wks":153,"_process":351,"buffer":347}],128:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var def = require('./$').setDesc - , has = require('./$.has') - , TAG = require('./$.wks')('toStringTag'); +var def = require('./_object-dp').f + , has = require('./_has') + , TAG = require('./_wks')('toStringTag'); module.exports = function(it, tag, stat){ if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag}); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.set-to-string-tag.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_set-to-string-tag.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$":82,"./$.has":66,"./$.wks":119,"_process":244,"buffer":240}],103:[function(require,module,exports){ +},{"./_has":75,"./_object-dp":103,"./_wks":153,"_process":351,"buffer":347}],129:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var global = require('./$.global') +var shared = require('./_shared')('keys') + , uid = require('./_uid'); +module.exports = function(key){ + return shared[key] || (shared[key] = uid(key)); +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_shared-key.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_shared":130,"./_uid":150,"_process":351,"buffer":347}],130:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var global = require('./_global') , SHARED = '__core-js_shared__' , store = global[SHARED] || (global[SHARED] = {}); module.exports = function(key){ return store[key] || (store[key] = {}); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.shared.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_shared.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.global":65,"_process":244,"buffer":240}],104:[function(require,module,exports){ +},{"./_global":74,"_process":351,"buffer":347}],131:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 7.3.20 SpeciesConstructor(O, defaultConstructor) -var anObject = require('./$.an-object') - , aFunction = require('./$.a-function') - , SPECIES = require('./$.wks')('species'); +var anObject = require('./_an-object') + , aFunction = require('./_a-function') + , SPECIES = require('./_wks')('species'); module.exports = function(O, D){ var C = anObject(O).constructor, S; return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.species-constructor.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_species-constructor.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.a-function":38,"./$.an-object":40,"./$.wks":119,"_process":244,"buffer":240}],105:[function(require,module,exports){ +},{"./_a-function":39,"./_an-object":43,"./_wks":153,"_process":351,"buffer":347}],132:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -module.exports = function(it, Constructor, name){ - if(!(it instanceof Constructor))throw TypeError(name + ": use the 'new' operator!"); - return it; +var fails = require('./_fails'); + +module.exports = function(method, arg){ + return !!method && fails(function(){ + arg ? method.call(null, function(){}, 1) : method.call(null); + }); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.strict-new.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],106:[function(require,module,exports){ +},{"./_fails":70,"_process":351,"buffer":347}],133:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var toInteger = require('./$.to-integer') - , defined = require('./$.defined'); +var toInteger = require('./_to-integer') + , defined = require('./_defined'); // true -> String#at // false -> String#codePointAt module.exports = function(TO_STRING){ @@ -38037,52 +41845,74 @@ module.exports = function(TO_STRING){ , a, b; if(i < 0 || i >= l)return TO_STRING ? '' : undefined; a = s.charCodeAt(i); - return a < 0xd800 || a > 0xdbff || i + 1 === l - || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff - ? TO_STRING ? s.charAt(i) : a - : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; + return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff + ? TO_STRING ? s.charAt(i) : a + : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; }; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.string-at.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_string-at.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.defined":55,"./$.to-integer":113,"_process":244,"buffer":240}],107:[function(require,module,exports){ +},{"./_defined":63,"./_to-integer":142,"_process":351,"buffer":347}],134:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // helper for String#{startsWith, endsWith, includes} -var isRegExp = require('./$.is-regexp') - , defined = require('./$.defined'); +var isRegExp = require('./_is-regexp') + , defined = require('./_defined'); module.exports = function(that, searchString, NAME){ if(isRegExp(searchString))throw TypeError('String#' + NAME + " doesn't accept regex!"); return String(defined(that)); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.string-context.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_string-context.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.defined":55,"./$.is-regexp":75,"_process":244,"buffer":240}],108:[function(require,module,exports){ +},{"./_defined":63,"./_is-regexp":86,"_process":351,"buffer":347}],135:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -// https://github.com/ljharb/proposal-string-pad-left-right -var toLength = require('./$.to-length') - , repeat = require('./$.string-repeat') - , defined = require('./$.defined'); +var $export = require('./_export') + , fails = require('./_fails') + , defined = require('./_defined') + , quot = /"/g; +// B.2.3.2.1 CreateHTML(string, tag, attribute, value) +var createHTML = function(string, tag, attribute, value) { + var S = String(defined(string)) + , p1 = '<' + tag; + if(attribute !== '')p1 += ' ' + attribute + '="' + String(value).replace(quot, '"') + '"'; + return p1 + '>' + S + ''; +}; +module.exports = function(NAME, exec){ + var O = {}; + O[NAME] = exec(createHTML); + $export($export.P + $export.F * fails(function(){ + var test = ''[NAME]('"'); + return test !== test.toLowerCase() || test.split('"').length > 3; + }), 'String', O); +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_defined":63,"./_export":68,"./_fails":70,"_process":351,"buffer":347}],136:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +// https://github.com/tc39/proposal-string-pad-start-end +var toLength = require('./_to-length') + , repeat = require('./_string-repeat') + , defined = require('./_defined'); module.exports = function(that, maxLength, fillString, left){ var S = String(defined(that)) , stringLength = S.length , fillStr = fillString === undefined ? ' ' : String(fillString) , intMaxLength = toLength(maxLength); - if(intMaxLength <= stringLength)return S; - if(fillStr == '')fillStr = ' '; + if(intMaxLength <= stringLength || fillStr == '')return S; var fillLen = intMaxLength - stringLength , stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length)); if(stringFiller.length > fillLen)stringFiller = stringFiller.slice(0, fillLen); return left ? stringFiller + S : S + stringFiller; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.string-pad.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.defined":55,"./$.string-repeat":109,"./$.to-length":115,"_process":244,"buffer":240}],109:[function(require,module,exports){ +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_string-pad.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"./_defined":63,"./_string-repeat":137,"./_to-length":144,"_process":351,"buffer":347}],137:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ 'use strict'; -var toInteger = require('./$.to-integer') - , defined = require('./$.defined'); +var toInteger = require('./_to-integer') + , defined = require('./_defined'); module.exports = function repeat(count){ var str = String(defined(this)) @@ -38092,49 +41922,55 @@ module.exports = function repeat(count){ for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str; return res; }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.string-repeat.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_string-repeat.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.defined":55,"./$.to-integer":113,"_process":244,"buffer":240}],110:[function(require,module,exports){ +},{"./_defined":63,"./_to-integer":142,"_process":351,"buffer":347}],138:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var $def = require('./$.def') - , defined = require('./$.defined') - , fails = require('./$.fails') - , spaces = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' + - '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF' +var $export = require('./_export') + , defined = require('./_defined') + , fails = require('./_fails') + , spaces = require('./_string-ws') , space = '[' + spaces + ']' , non = '\u200b\u0085' , ltrim = RegExp('^' + space + space + '*') , rtrim = RegExp(space + space + '*$'); -var $export = function(KEY, exec){ - var exp = {}; - exp[KEY] = exec(trim); - $def($def.P + $def.F * fails(function(){ +var exporter = function(KEY, exec, ALIAS){ + var exp = {}; + var FORCE = fails(function(){ return !!spaces[KEY]() || non[KEY]() != non; - }), 'String', exp); + }); + var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY]; + if(ALIAS)exp[ALIAS] = fn; + $export($export.P + $export.F * FORCE, 'String', exp); }; // 1 -> String#trimLeft // 2 -> String#trimRight // 3 -> String#trim -var trim = $export.trim = function(string, TYPE){ +var trim = exporter.trim = function(string, TYPE){ string = String(defined(string)); if(TYPE & 1)string = string.replace(ltrim, ''); if(TYPE & 2)string = string.replace(rtrim, ''); return string; }; -module.exports = $export; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.string-trim.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +module.exports = exporter; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_string-trim.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.def":54,"./$.defined":55,"./$.fails":60,"_process":244,"buffer":240}],111:[function(require,module,exports){ +},{"./_defined":63,"./_export":68,"./_fails":70,"./_string-ws":139,"_process":351,"buffer":347}],139:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -'use strict'; -var ctx = require('./$.ctx') - , invoke = require('./$.invoke') - , html = require('./$.html') - , cel = require('./$.dom-create') - , global = require('./$.global') +module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' + + '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_string-ws.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + +},{"_process":351,"buffer":347}],140:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ +var ctx = require('./_ctx') + , invoke = require('./_invoke') + , html = require('./_html') + , cel = require('./_dom-create') + , global = require('./_global') , process = global.process , setTask = global.setImmediate , clearTask = global.clearImmediate @@ -38151,7 +41987,7 @@ var run = function(){ fn(); } }; -var listner = function(event){ +var listener = function(event){ run.call(event.data); }; // Node.js 0.9+ & IE10+ has setImmediate, otherwise: @@ -38169,7 +42005,7 @@ if(!setTask || !clearTask){ delete queue[id]; }; // Node.js 0.8- - if(require('./$.cof')(process) == 'process'){ + if(require('./_cof')(process) == 'process'){ defer = function(id){ process.nextTick(ctx(run, id, 1)); }; @@ -38177,7 +42013,7 @@ if(!setTask || !clearTask){ } else if(MessageChannel){ channel = new MessageChannel; port = channel.port2; - channel.port1.onmessage = listner; + channel.port1.onmessage = listener; defer = ctx(port.postMessage, port, 1); // Browsers with postMessage, skip WebWorkers // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' @@ -38185,7 +42021,7 @@ if(!setTask || !clearTask){ defer = function(id){ global.postMessage(id + '', '*'); }; - global.addEventListener('message', listner, false); + global.addEventListener('message', listener, false); // IE8- } else if(ONREADYSTATECHANGE in cel('script')){ defer = function(id){ @@ -38205,20 +42041,20 @@ module.exports = { set: setTask, clear: clearTask }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.task.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_task.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.cof":47,"./$.ctx":53,"./$.dom-create":57,"./$.global":65,"./$.html":68,"./$.invoke":69,"_process":244,"buffer":240}],112:[function(require,module,exports){ +},{"./_cof":54,"./_ctx":61,"./_dom-create":65,"./_global":74,"./_html":77,"./_invoke":80,"_process":351,"buffer":347}],141:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var toInteger = require('./$.to-integer') +var toInteger = require('./_to-integer') , max = Math.max , min = Math.min; module.exports = function(index, length){ index = toInteger(index); return index < 0 ? max(index + length, 0) : min(index, length); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.to-index.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_to-index.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.to-integer":113,"_process":244,"buffer":240}],113:[function(require,module,exports){ +},{"./_to-integer":142,"_process":351,"buffer":347}],142:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 7.1.4 ToInteger var ceil = Math.ceil @@ -38226,453 +42062,1039 @@ var ceil = Math.ceil module.exports = function(it){ return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.to-integer.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"_process":244,"buffer":240}],114:[function(require,module,exports){ +},{"_process":351,"buffer":347}],143:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // to indexed object, toObject with fallback for non-array-like ES3 strings -var IObject = require('./$.iobject') - , defined = require('./$.defined'); +var IObject = require('./_iobject') + , defined = require('./_defined'); module.exports = function(it){ return IObject(defined(it)); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.to-iobject.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.defined":55,"./$.iobject":70,"_process":244,"buffer":240}],115:[function(require,module,exports){ +},{"./_defined":63,"./_iobject":81,"_process":351,"buffer":347}],144:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 7.1.15 ToLength -var toInteger = require('./$.to-integer') +var toInteger = require('./_to-integer') , min = Math.min; module.exports = function(it){ return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.to-length.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.to-integer":113,"_process":244,"buffer":240}],116:[function(require,module,exports){ +},{"./_to-integer":142,"_process":351,"buffer":347}],145:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ // 7.1.13 ToObject(argument) -var defined = require('./$.defined'); +var defined = require('./_defined'); module.exports = function(it){ return Object(defined(it)); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.to-object.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.defined":55,"_process":244,"buffer":240}],117:[function(require,module,exports){ +},{"./_defined":63,"_process":351,"buffer":347}],146:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -// 7.1.1 ToPrimitive(input [, PreferredType]) -var isObject = require('./$.is-object'); -// instead of the ES6 spec version, we didn't implement @@toPrimitive case -// and the second argument - flag - preferred type is a string -module.exports = function(it, S){ - if(!isObject(it))return it; - var fn, val; - if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; - if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val; - if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; - throw TypeError("Can't convert object to primitive value"); +// 7.1.1 ToPrimitive(input [, PreferredType]) +var isObject = require('./_is-object'); +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function(it, S){ + if(!isObject(it))return it; + var fn, val; + if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val; + if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + throw TypeError("Can't convert object to primitive value"); }; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.to-primitive.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js","/node_modules/babel-polyfill/node_modules/core-js/modules") -},{"./$.is-object":74,"_process":244,"buffer":240}],118:[function(require,module,exports){ +},{"./_is-object":85,"_process":351,"buffer":347}],147:[function(require,module,exports){ (function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var id = 0 - , px = Math.random(); -module.exports = function(key){ - return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); -}; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.uid.js","/node_modules/babel-polyfill/node_modules/core-js/modules") - -},{"_process":244,"buffer":240}],119:[function(require,module,exports){ -(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var store = require('./$.shared')('wks') - , uid = require('./$.uid') - , Symbol = require('./$.global').Symbol; -module.exports = function(name){ - return store[name] || (store[name] = - Symbol && Symbol[name] || (Symbol || uid)('Symbol.' + name)); -}; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/$.wks.js","/node_modules/babel-polyfill/node_modules/core-js/modules") +'use strict'; +if(require('./_descriptors')){ + var LIBRARY = require('./_library') + , global = require('./_global') + , fails = require('./_fails') + , $export = require('./_export') + , $typed = require('./_typed') + , $buffer = require('./_typed-buffer') + , ctx = require('./_ctx') + , anInstance = require('./_an-instance') + , propertyDesc = require('./_property-desc') + , hide = require('./_hide') + , redefineAll = require('./_redefine-all') + , toInteger = require('./_to-integer') + , toLength = require('./_to-length') + , toIndex = require('./_to-index') + , toPrimitive = require('./_to-primitive') + , has = require('./_has') + , same = require('./_same-value') + , classof = require('./_classof') + , isObject = require('./_is-object') + , toObject = require('./_to-object') + , isArrayIter = require('./_is-array-iter') + , create = require('./_object-create') + , getPrototypeOf = require('./_object-gpo') + , gOPN = require('./_object-gopn').f + , getIterFn = require('./core.get-iterator-method') + , uid = require('./_uid') + , wks = require('./_wks') + , createArrayMethod = require('./_array-methods') + , createArrayIncludes = require('./_array-includes') + , speciesConstructor = require('./_species-constructor') + , ArrayIterators = require('./es6.array.iterator') + , Iterators = require('./_iterators') + , $iterDetect = require('./_iter-detect') + , setSpecies = require('./_set-species') + , arrayFill = require('./_array-fill') + , arrayCopyWithin = require('./_array-copy-within') + , $DP = require('./_object-dp') + , $GOPD = require('./_object-gopd') + , dP = $DP.f + , gOPD = $GOPD.f + , RangeError = global.RangeError + , TypeError = global.TypeError + , Uint8Array = global.Uint8Array + , ARRAY_BUFFER = 'ArrayBuffer' + , SHARED_BUFFER = 'Shared' + ARRAY_BUFFER + , BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT' + , PROTOTYPE = 'prototype' + , ArrayProto = Array[PROTOTYPE] + , $ArrayBuffer = $buffer.ArrayBuffer + , $DataView = $buffer.DataView + , arrayForEach = createArrayMethod(0) + , arrayFilter = createArrayMethod(2) + , arraySome = createArrayMethod(3) + , arrayEvery = createArrayMethod(4) + , arrayFind = createArrayMethod(5) + , arrayFindIndex = createArrayMethod(6) + , arrayIncludes = createArrayIncludes(true) + , arrayIndexOf = createArrayIncludes(false) + , arrayValues = ArrayIterators.values + , arrayKeys = ArrayIterators.keys + , arrayEntries = ArrayIterators.entries + , arrayLastIndexOf = ArrayProto.lastIndexOf + , arrayReduce = ArrayProto.reduce + , arrayReduceRight = ArrayProto.reduceRight + , arrayJoin = ArrayProto.join + , arraySort = ArrayProto.sort + , arraySlice = ArrayProto.slice + , arrayToString = ArrayProto.toString + , arrayToLocaleString = ArrayProto.toLocaleString + , ITERATOR = wks('iterator') + , TAG = wks('toStringTag') + , TYPED_CONSTRUCTOR = uid('typed_constructor') + , DEF_CONSTRUCTOR = uid('def_constructor') + , ALL_CONSTRUCTORS = $typed.CONSTR + , TYPED_ARRAY = $typed.TYPED + , VIEW = $typed.VIEW + , WRONG_LENGTH = 'Wrong length!'; + + var $map = createArrayMethod(1, function(O, length){ + return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length); + }); -},{"./$.global":65,"./$.shared":103,"./$.uid":118,"_process":244,"buffer":240}],120:[function(require,module,exports){ -(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -var classof = require('./$.classof') - , ITERATOR = require('./$.wks')('iterator') - , Iterators = require('./$.iterators'); -module.exports = require('./$.core').getIteratorMethod = function(it){ - if(it != undefined)return it[ITERATOR] - || it['@@iterator'] - || Iterators[classof(it)]; -}; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/babel-polyfill/node_modules/core-js/modules/core.get-iterator-method.js","/node_modules/babel-polyfill/node_modules/core-js/modules") + var LITTLE_ENDIAN = fails(function(){ + return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1; + }); -},{"./$.classof":46,"./$.core":52,"./$.iterators":81,"./$.wks":119,"_process":244,"buffer":240}],121:[function(require,module,exports){ -(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){ -'use strict'; -var $ = require('./$') - , DESCRIPTORS = require('./$.descriptors') - , createDesc = require('./$.property-desc') - , html = require('./$.html') - , cel = require('./$.dom-create') - , has = require('./$.has') - , cof = require('./$.cof') - , $def = require('./$.def') - , invoke = require('./$.invoke') - , arrayMethod = require('./$.array-methods') - , IE_PROTO = require('./$.uid')('__proto__') - , isObject = require('./$.is-object') - , anObject = require('./$.an-object') - , aFunction = require('./$.a-function') - , toObject = require('./$.to-object') - , toIObject = require('./$.to-iobject') - , toInteger = require('./$.to-integer') - , toIndex = require('./$.to-index') - , toLength = require('./$.to-length') - , IObject = require('./$.iobject') - , fails = require('./$.fails') - , ObjectProto = Object.prototype - , A = [] - , _slice = A.slice - , _join = A.join - , defineProperty = $.setDesc - , getOwnDescriptor = $.getDesc - , defineProperties = $.setDescs - , $indexOf = require('./$.array-includes')(false) - , factories = {} - , IE8_DOM_DEFINE; - -if(!DESCRIPTORS){ - IE8_DOM_DEFINE = !fails(function(){ - return defineProperty(cel('div'), 'a', {get: function(){ return 7; }}).a != 7; + var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function(){ + new Uint8Array(1).set({}); }); - $.setDesc = function(O, P, Attributes){ - if(IE8_DOM_DEFINE)try { - return defineProperty(O, P, Attributes); - } catch(e){ /* empty */ } - if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); - if('value' in Attributes)anObject(O)[P] = Attributes.value; - return O; - }; - $.getDesc = function(O, P){ - if(IE8_DOM_DEFINE)try { - return getOwnDescriptor(O, P); - } catch(e){ /* empty */ } - if(has(O, P))return createDesc(!ObjectProto.propertyIsEnumerable.call(O, P), O[P]); - }; - $.setDescs = defineProperties = function(O, Properties){ - anObject(O); - var keys = $.getKeys(Properties) - , length = keys.length - , i = 0 - , P; - while(length > i)$.setDesc(O, P = keys[i++], Properties[P]); - return O; - }; -} -$def($def.S + $def.F * !DESCRIPTORS, 'Object', { - // 19.1.2.6 / 15.2.3.3 Object.getOwnPropertyDescriptor(O, P) - getOwnPropertyDescriptor: $.getDesc, - // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) - defineProperty: $.setDesc, - // 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties) - defineProperties: defineProperties -}); - // IE 8- don't enum bug keys -var keys1 = ('constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,' + - 'toLocaleString,toString,valueOf').split(',') - // Additional keys for getOwnPropertyNames - , keys2 = keys1.concat('length', 'prototype') - , keysLen1 = keys1.length; + var strictToLength = function(it, SAME){ + if(it === undefined)throw TypeError(WRONG_LENGTH); + var number = +it + , length = toLength(it); + if(SAME && !same(number, length))throw RangeError(WRONG_LENGTH); + return length; + }; -// Create object with `null` prototype: use iframe Object with cleared prototype -var createDict = function(){ - // Thrash, waste and sodomy: IE GC bug - var iframe = cel('iframe') - , i = keysLen1 - , gt = '>' - , iframeDocument; - iframe.style.display = 'none'; - html.appendChild(iframe); - iframe.src = 'javascript:'; // eslint-disable-line no-script-url - // createDict = iframe.contentWindow.Object; - // html.removeChild(iframe); - iframeDocument = iframe.contentWindow.document; - iframeDocument.open(); - iframeDocument.write('