angular-immutable
Advanced tools
+4
-2
| { | ||
| "name": "angular-immutable", | ||
| "version": "0.0.1", | ||
| "version": "0.1.0", | ||
| "main": "./dist/immutable.js", | ||
@@ -19,4 +19,6 @@ "homepage": "https://github.com/mgechev/angular-immutable", | ||
| "test", | ||
| "tests" | ||
| "tests", | ||
| "demo", | ||
| "lib" | ||
| ] | ||
| } |
+22
-9
@@ -1,2 +0,2 @@ | ||
| (function () { | ||
| (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.angularImmutable = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
| "use strict"; | ||
@@ -6,14 +6,12 @@ var immutableDirective = (function() { | ||
| var scope = true; | ||
| var restrict = 'A'; | ||
| var link = (function(scope, el, attrs) { | ||
| var immutable = attrs.immutable; | ||
| if (!(/^[a-zA-Z0-9_$]+$/).test(immutable)) { | ||
| return ; | ||
| } | ||
| if (!scope[immutable]) { | ||
| if (!get(immutable, scope)) { | ||
| console.warn(("No " + immutable + " property found.")); | ||
| } | ||
| scope.$watch((function() { | ||
| return scope.$parent[immutable]; | ||
| return get(immutable, scope.$parent); | ||
| }), (function(val) { | ||
| scope[immutable] = val.toJS(); | ||
| scope.immutables = val.toJS(); | ||
| })); | ||
@@ -24,7 +22,22 @@ }); | ||
| scope: scope, | ||
| restrict: restrict, | ||
| link: link | ||
| }; | ||
| function get(path, obj) { | ||
| var schema = obj; | ||
| var pList = path.split('.'); | ||
| var len = pList.length; | ||
| for (var i = 0; i < len - 1; i++) { | ||
| var elem = pList[i]; | ||
| if (!schema[elem]) | ||
| schema[elem] = {}; | ||
| schema = schema[elem]; | ||
| } | ||
| return schema[pList[len - 1]]; | ||
| } | ||
| }); | ||
| angular.module('immutable', []).directive('immutable', immutableDirective); | ||
| module.exports = angular.module('immutable', []).directive('immutable', immutableDirective).name; | ||
| }()); | ||
| //# sourceURL=/Users/soocheng/Documents/angular-immutable/lib/immutable.js | ||
| },{}]},{},[1])(1) | ||
| }); |
@@ -1,1 +0,1 @@ | ||
| !function(){"use strict";var t=function(){var t=2e3,n=!0,r=function(t,n,r){var e=r.immutable;/^[a-zA-Z0-9_$]+$/.test(e)&&(t[e]||console.warn("No "+e+" property found."),t.$watch(function(){return t.$parent[e]},function(n){t[e]=n.toJS()}))};return{priority:t,scope:n,link:r}};angular.module("immutable",[]).directive("immutable",t)}(); | ||
| (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.angularImmutable=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){"use strict";var immutableDirective=function(){var priority=2e3;var scope=true;var restrict="A";var link=function(scope,el,attrs){var immutable=attrs.immutable;if(!get(immutable,scope)){console.warn("No "+immutable+" property found.")}scope.$watch(function(){return get(immutable,scope.$parent)},function(val){scope.immutables=val.toJS()})};return{priority:priority,scope:scope,restrict:restrict,link:link};function get(path,obj){var schema=obj;var pList=path.split(".");var len=pList.length;for(var i=0;i<len-1;i++){var elem=pList[i];if(!schema[elem])schema[elem]={};schema=schema[elem]}return schema[pList[len-1]]}};module.exports=angular.module("immutable",[]).directive("immutable",immutableDirective).name},{}]},{},[1])(1)}); |
+6
-6
| { | ||
| "name": "angular-immutable", | ||
| "version": "0.1.0", | ||
| "version": "0.1.1", | ||
| "description": "Immutable data structures in AngularJS", | ||
| "main": "./dist/immutable.js", | ||
| "scripts": { | ||
| "browserify": "browserify -e ./lib/immutable.js -t es6ify -o ./dist/immutable.js -s angularImmutable", | ||
| "build": "npm run browserify && uglifyjs ./dist/immutable.js -o ./dist/immutable.min.js", | ||
| "test": "echo \"Error: no test specified\" && exit 1" | ||
@@ -12,8 +14,6 @@ }, | ||
| "devDependencies": { | ||
| "gulp": "^3.8.11", | ||
| "gulp-rename": "^1.2.0", | ||
| "gulp-traceur": "^0.17.0", | ||
| "gulp-uglify": "^1.1.0", | ||
| "gulp-wrap": "^0.11.0" | ||
| "browserify": "^10.2.0", | ||
| "es6ify": "^1.6.0", | ||
| "uglify-js": "^2.4.21" | ||
| } | ||
| } |
-29
| { | ||
| "requireCurlyBraces": ["else", "for", "while", "do", "try", "catch"], | ||
| "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"], | ||
| "requireSpacesInFunctionExpression": { | ||
| "beforeOpeningCurlyBrace": true | ||
| }, | ||
| "disallowMultipleVarDecl": true, | ||
| "requireSpacesInsideObjectBrackets": "allButNested", | ||
| "disallowSpacesInsideArrayBrackets": true, | ||
| "disallowSpacesInsideParentheses": true, | ||
| "disallowSpaceAfterObjectKeys": true, | ||
| "disallowQuotedKeysInObjects": true, | ||
| "requireSpaceBeforeBinaryOperators": ["?", "+", "/", "*", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="], | ||
| "disallowSpaceAfterBinaryOperators": ["!"], | ||
| "requireSpaceAfterBinaryOperators": ["?", ",", "+", "/", "*", ":", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="], | ||
| "disallowSpaceBeforeBinaryOperators": [","], | ||
| "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], | ||
| "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], | ||
| "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], | ||
| "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], | ||
| "disallowImplicitTypeConversion": ["numeric", "binary", "string"], | ||
| "disallowKeywords": ["with", "eval"], | ||
| "disallowMultipleLineBreaks": true, | ||
| "disallowKeywordsOnNewLine": ["else"], | ||
| "requireLineFeedAtFileEnd": true, | ||
| "disallowTrailingWhitespace": true, | ||
| "excludeFiles": ["node_modules/**", "bower_components/**"], | ||
| "validateIndentation": 2 | ||
| } |
-31
| { | ||
| "browser": true, | ||
| "jquery": true, | ||
| "node": true, | ||
| "esnext": true, | ||
| "bitwise": true, | ||
| "camelcase": true, | ||
| "curly": true, | ||
| "eqeqeq": true, | ||
| "indent": 2, | ||
| "latedef": true, | ||
| "noarg": true, | ||
| "newcap": false, | ||
| "quotmark": "single", | ||
| "unused": true, | ||
| "strict": true, | ||
| "trailing": true, | ||
| "smarttabs": true, | ||
| "white": true, | ||
| "freeze": true, | ||
| "immed": true, | ||
| "noempty": true, | ||
| "plusplus": true, | ||
| "undef": true, | ||
| "laxbreak": true, | ||
| "maxdepth": 3, | ||
| "loopfunc": true, | ||
| "maxcomplexity": 9, | ||
| "maxlen": 80, | ||
| "maxparams": 4 | ||
| } |
Sorry, the diff of this file is not supported yet
-95
| /* global Immutable, angular */ | ||
| var sampleApp = angular.module('sampleApp', ['immutable']); | ||
| function buildCollection(size) { | ||
| 'use strict'; | ||
| var res = []; | ||
| for (var i = 0; i < size; i += 1) { | ||
| res.push(Math.random()); | ||
| } | ||
| return res; | ||
| } | ||
| function SampleCtrl($scope, $timeout) { | ||
| 'use strict'; | ||
| var runs = 0; | ||
| var SIZE = 50000; | ||
| var TOTAL = 100; | ||
| var start = Date.now(); | ||
| $scope.list = Immutable.List(buildCollection(SIZE)); | ||
| $scope.$watchCollection('list', function () { | ||
| }); | ||
| $scope.$watchCollection('list', function () { | ||
| }); | ||
| $scope.$watchCollection('list', function () { | ||
| }); | ||
| $scope.$watchCollection('list', function () { | ||
| }); | ||
| function changeCollection() { | ||
| if (runs >= TOTAL) { | ||
| console.log('%cDone!', | ||
| 'font-size: 50px; color: blue;' + | ||
| 'font-weight: bold; font-family: impact;'); | ||
| console.log('%c' + ((Date.now() - start) / 1000) + | ||
| ' seconds required.', 'font-size: 30px; color: red;'); | ||
| return; | ||
| } | ||
| $timeout(function () { | ||
| var idx = Math.random() * SIZE - 1; | ||
| $scope.list = $scope.list.set(idx, Math.random()); | ||
| // if (runs % 2) { | ||
| // $scope.list = $scope.list.push(Math.random()); | ||
| // } else { | ||
| // $scope.list = $scope.list.pop(); | ||
| // } | ||
| runs += 1; | ||
| changeCollection(); | ||
| }, 0); | ||
| } | ||
| changeCollection(); | ||
| } | ||
| function SampleCtrl2($scope, $timeout) { | ||
| 'use strict'; | ||
| var runs = 0; | ||
| var SIZE = 50000; | ||
| var TOTAL = 100; | ||
| var start = Date.now(); | ||
| $scope.$watchCollection('list', function () { | ||
| }); | ||
| $scope.$watchCollection('list', function () { | ||
| }); | ||
| $scope.$watchCollection('list', function () { | ||
| }); | ||
| $scope.$watchCollection('list', function () { | ||
| }); | ||
| $scope.list = buildCollection(SIZE); | ||
| function changeCollection() { | ||
| if (runs >= TOTAL) { | ||
| console.log('%cDone!', | ||
| 'font-size: 50px; color: blue;' + | ||
| 'font-weight: bold; font-family: impact;'); | ||
| console.log('%c' + ((Date.now() - start) / 1000) + | ||
| ' seconds required.', 'font-size: 30px; color: red;'); | ||
| return; | ||
| } | ||
| $timeout(function () { | ||
| var idx = Math.round(Math.random() * SIZE) - 1; | ||
| $scope.list[idx] = Math.random(); | ||
| // if (runs % 2) { | ||
| // $scope.list = $scope.list.push(Math.random()); | ||
| // } else { | ||
| // $scope.list = $scope.list.pop(); | ||
| // } | ||
| runs += 1; | ||
| changeCollection(); | ||
| }, 0); | ||
| } | ||
| changeCollection(); | ||
| } | ||
| sampleApp.controller('SampleCtrl', SampleCtrl); |
| { | ||
| "name": "angular", | ||
| "version": "1.3.14", | ||
| "main": "./angular.js", | ||
| "ignore": [], | ||
| "dependencies": {}, | ||
| "homepage": "https://github.com/angular/bower-angular", | ||
| "_release": "1.3.14", | ||
| "_resolution": { | ||
| "type": "version", | ||
| "tag": "v1.3.14", | ||
| "commit": "bdd91e1331b48ae89adfb8444998e290b774cc6d" | ||
| }, | ||
| "_source": "git://github.com/angular/bower-angular.git", | ||
| "_target": "~1.3.14", | ||
| "_originalSource": "angular", | ||
| "_direct": true | ||
| } |
| /* Include this file in your html if you are using the CSP mode. */ | ||
| @charset "UTF-8"; | ||
| [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], | ||
| .ng-cloak, .x-ng-cloak, | ||
| .ng-hide:not(.ng-hide-animate) { | ||
| display: none !important; | ||
| } | ||
| ng\:form { | ||
| display: block; | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
| { | ||
| "name": "angular", | ||
| "version": "1.3.14", | ||
| "main": "./angular.js", | ||
| "ignore": [], | ||
| "dependencies": { | ||
| } | ||
| } |
| require('./angular'); | ||
| module.exports = angular; |
| { | ||
| "name": "angular", | ||
| "version": "1.3.14", | ||
| "description": "HTML enhanced for web apps", | ||
| "main": "index.js", | ||
| "scripts": { | ||
| "test": "echo \"Error: no test specified\" && exit 1" | ||
| }, | ||
| "repository": { | ||
| "type": "git", | ||
| "url": "https://github.com/angular/angular.js.git" | ||
| }, | ||
| "keywords": [ | ||
| "angular", | ||
| "framework", | ||
| "browser", | ||
| "client-side" | ||
| ], | ||
| "author": "Angular Core Team <angular-core+npm@google.com>", | ||
| "license": "MIT", | ||
| "bugs": { | ||
| "url": "https://github.com/angular/angular.js/issues" | ||
| }, | ||
| "homepage": "http://angularjs.org" | ||
| } |
| # packaged angular | ||
| This repo is for distribution on `npm` and `bower`. The source for this module is in the | ||
| [main AngularJS repo](https://github.com/angular/angular.js). | ||
| Please file issues and pull requests against that repo. | ||
| ## Install | ||
| You can install this package either with `npm` or with `bower`. | ||
| ### npm | ||
| ```shell | ||
| npm install angular | ||
| ``` | ||
| Then add a `<script>` to your `index.html`: | ||
| ```html | ||
| <script src="/node_modules/angular/angular.js"></script> | ||
| ``` | ||
| Or `require('angular')` from your code. | ||
| ### bower | ||
| ```shell | ||
| bower install angular | ||
| ``` | ||
| Then add a `<script>` to your `index.html`: | ||
| ```html | ||
| <script src="/bower_components/angular/angular.js"></script> | ||
| ``` | ||
| ## Documentation | ||
| Documentation is available on the | ||
| [AngularJS docs site](http://docs.angularjs.org/). | ||
| ## License | ||
| The MIT License | ||
| Copyright (c) 2010-2015 Google, Inc. http://angularjs.org | ||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| of this software and associated documentation files (the "Software"), to deal | ||
| in the Software without restriction, including without limitation the rights | ||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| copies of the Software, and to permit persons to whom the Software is | ||
| furnished to do so, subject to the following conditions: | ||
| The above copyright notice and this permission notice shall be included in | ||
| all copies or substantial portions of the Software. | ||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| THE SOFTWARE. |
| { | ||
| "name": "immutable", | ||
| "description": "Immutable Data Collections", | ||
| "homepage": "https://github.com/facebook/immutable-js", | ||
| "author": { | ||
| "name": "Lee Byron", | ||
| "homepage": "https://github.com/leebyron" | ||
| }, | ||
| "repository": { | ||
| "type": "git", | ||
| "url": "git://github.com/facebook/immutable-js.git" | ||
| }, | ||
| "main": "dist/immutable.js", | ||
| "ignore": [ | ||
| "**/.*", | ||
| "__tests__", | ||
| "resources", | ||
| "src", | ||
| "type-definitions", | ||
| "package.json", | ||
| "Gruntfile.js" | ||
| ], | ||
| "keywords": [ | ||
| "immutable", | ||
| "persistent", | ||
| "lazy", | ||
| "data", | ||
| "datastructure", | ||
| "functional", | ||
| "collection", | ||
| "stateless", | ||
| "sequence", | ||
| "iteration" | ||
| ], | ||
| "license": "BSD", | ||
| "version": "3.6.2", | ||
| "_release": "3.6.2", | ||
| "_resolution": { | ||
| "type": "version", | ||
| "tag": "3.6.2", | ||
| "commit": "082d02b314b4b682c2880cd57e134f1a8cef423b" | ||
| }, | ||
| "_source": "git://github.com/facebook/immutable-js.git", | ||
| "_target": "~3.6.2", | ||
| "_originalSource": "immutable", | ||
| "_direct": true | ||
| } |
| { | ||
| "name": "immutable", | ||
| "description": "Immutable Data Collections", | ||
| "homepage": "https://github.com/facebook/immutable-js", | ||
| "author": { | ||
| "name": "Lee Byron", | ||
| "homepage": "https://github.com/leebyron" | ||
| }, | ||
| "repository": { | ||
| "type": "git", | ||
| "url": "git://github.com/facebook/immutable-js.git" | ||
| }, | ||
| "main": "dist/immutable.js", | ||
| "ignore": [ | ||
| "**/.*", | ||
| "__tests__", | ||
| "resources", | ||
| "src", | ||
| "type-definitions", | ||
| "package.json", | ||
| "Gruntfile.js" | ||
| ], | ||
| "keywords": [ | ||
| "immutable", | ||
| "persistent", | ||
| "lazy", | ||
| "data", | ||
| "datastructure", | ||
| "functional", | ||
| "collection", | ||
| "stateless", | ||
| "sequence", | ||
| "iteration" | ||
| ], | ||
| "license": "BSD" | ||
| } |
| /** | ||
| * Copyright (c) 2014, Facebook, Inc. | ||
| * All rights reserved. | ||
| * | ||
| * This source code is licensed under the BSD-style license found in the | ||
| * LICENSE file in the root directory of this source tree. An additional grant | ||
| * of patent rights can be found in the PATENTS file in the same directory. | ||
| */ | ||
| /** | ||
| * Cursors | ||
| * ------- | ||
| * | ||
| * Cursors allow you to hold a reference to a path in a nested immutable data | ||
| * structure, allowing you to pass smaller sections of a larger nested | ||
| * collection to portions of your application while maintaining a central point | ||
| * aware of changes to the entire data structure. | ||
| * | ||
| * This is particularly useful when used in conjuction with component-based UI | ||
| * libraries like [React](http://facebook.github.io/react/) or to simulate | ||
| * "state" throughout an application while maintaining a single flow of logic. | ||
| * | ||
| * Cursors provide a simple API for getting the value at that path | ||
| * (the equivalent of `this.getIn(keyPath)`), updating the value at that path | ||
| * (the equivalent of `this.updateIn(keyPath)`), and getting a sub-cursor | ||
| * starting from that path. | ||
| * | ||
| * When updated, a new root collection is created and provided to the `onChange` | ||
| * function provided to the first call to `Cursor(map, onChange)`. | ||
| * | ||
| * When this cursor's (or any of its sub-cursors') `update` method is called, | ||
| * the resulting new data structure will be provided to the `onChange` | ||
| * function. Use this callback to keep track of the most current value or | ||
| * update the rest of your application. | ||
| */ | ||
| declare module 'immutable/contrib/cursor' { | ||
| ///<reference path='../../dist/immutable.d.ts'/> | ||
| import Immutable = require('immutable'); | ||
| export function from( | ||
| collection: Immutable.Collection<any, any>, | ||
| onChange?: (newValue: any, oldValue?: any, keyPath?: Array<any>) => any | ||
| ): Cursor; | ||
| export function from( | ||
| collection: Immutable.Collection<any, any>, | ||
| keyPath: Array<any>, | ||
| onChange?: (newValue: any, oldValue?: any, keyPath?: Array<any>) => any | ||
| ): Cursor; | ||
| export function from( | ||
| collection: Immutable.Collection<any, any>, | ||
| key: any, | ||
| onChange?: (newValue: any, oldValue?: any, keyPath?: Array<any>) => any | ||
| ): Cursor; | ||
| export interface Cursor extends Immutable.Seq<any, any> { | ||
| /** | ||
| * Returns a sub-cursor following the key-path starting from this cursor. | ||
| */ | ||
| cursor(subKeyPath: Array<any>): Cursor; | ||
| cursor(subKey: any): Cursor; | ||
| /** | ||
| * Returns the value at the cursor, if the cursor path does not yet exist, | ||
| * returns `notSetValue`. | ||
| */ | ||
| deref(notSetValue?: any): any; | ||
| /** | ||
| * Returns the value at the `key` in the cursor, or `notSetValue` if it | ||
| * does not exist. | ||
| * | ||
| * If the key would return a collection, a new Cursor is returned. | ||
| */ | ||
| get(key: any, notSetValue?: any): any; | ||
| /** | ||
| * Returns the value at the `keyPath` in the cursor, or `notSetValue` if it | ||
| * does not exist. | ||
| * | ||
| * If the keyPath would return a collection, a new Cursor is returned. | ||
| */ | ||
| getIn(keyPath: Array<any>, notSetValue?: any): any; | ||
| getIn(keyPath: Immutable.Iterable<any, any>, notSetValue?: any): any; | ||
| /** | ||
| * Sets `value` at `key` in the cursor, returning a new cursor to the same | ||
| * point in the new data. | ||
| */ | ||
| set(key: any, value: any): Cursor; | ||
| /** | ||
| * Deletes `key` from the cursor, returning a new cursor to the same | ||
| * point in the new data. | ||
| * | ||
| * Note: `delete` cannot be safely used in IE8 | ||
| * @alias remove | ||
| */ | ||
| delete(key: any): Cursor; | ||
| remove(key: any): Cursor; | ||
| /** | ||
| * Clears the value at this cursor, returning a new cursor to the same | ||
| * point in the new data. | ||
| */ | ||
| clear(): Cursor; | ||
| /** | ||
| * Updates the value in the data this cursor points to, triggering the | ||
| * callback for the root cursor and returning a new cursor pointing to the | ||
| * new data. | ||
| */ | ||
| update(updater: (value: any) => any): Cursor; | ||
| update(key: any, updater: (value: any) => any): Cursor; | ||
| update(key: any, notSetValue: any, updater: (value: any) => any): Cursor; | ||
| /** | ||
| * @see `Map#merge` | ||
| */ | ||
| merge(...iterables: Immutable.Iterable<any, any>[]): Cursor; | ||
| merge(...iterables: {[key: string]: any}[]): Cursor; | ||
| /** | ||
| * @see `Map#mergeWith` | ||
| */ | ||
| mergeWith( | ||
| merger: (previous?: any, next?: any) => any, | ||
| ...iterables: Immutable.Iterable<any, any>[] | ||
| ): Cursor; | ||
| mergeWith( | ||
| merger: (previous?: any, next?: any) => any, | ||
| ...iterables: {[key: string]: any}[] | ||
| ): Cursor; | ||
| /** | ||
| * @see `Map#mergeDeep` | ||
| */ | ||
| mergeDeep(...iterables: Immutable.Iterable<any, any>[]): Cursor; | ||
| mergeDeep(...iterables: {[key: string]: any}[]): Cursor; | ||
| /** | ||
| * @see `Map#mergeDeepWith` | ||
| */ | ||
| mergeDeepWith( | ||
| merger: (previous?: any, next?: any) => any, | ||
| ...iterables: Immutable.Iterable<any, any>[] | ||
| ): Cursor; | ||
| mergeDeepWith( | ||
| merger: (previous?: any, next?: any) => any, | ||
| ...iterables: {[key: string]: any}[] | ||
| ): Cursor; | ||
| // Deep persistent changes | ||
| /** | ||
| * Returns a new Cursor having set `value` at this `keyPath`. If any keys in | ||
| * `keyPath` do not exist, a new immutable Map will be created at that key. | ||
| */ | ||
| setIn(keyPath: Array<any>, value: any): Cursor; | ||
| setIn(keyPath: Immutable.Iterable<any, any>, value: any): Cursor; | ||
| /** | ||
| * Returns a new Cursor having removed the value at this `keyPath`. | ||
| * | ||
| * @alias removeIn | ||
| */ | ||
| deleteIn(keyPath: Array<any>): Cursor; | ||
| deleteIn(keyPath: Immutable.Iterable<any, any>): Cursor; | ||
| removeIn(keyPath: Array<any>): Cursor; | ||
| removeIn(keyPath: Immutable.Iterable<any, any>): Cursor; | ||
| /** | ||
| * Returns a new Cursor having applied the `updater` to the value found at | ||
| * the keyPath. | ||
| * | ||
| * If any keys in `keyPath` do not exist, new Immutable `Map`s will | ||
| * be created at those keys. If the `keyPath` does not already contain a | ||
| * value, the `updater` function will be called with `notSetValue`, if | ||
| * provided, otherwise `undefined`. | ||
| * | ||
| * If the `updater` function returns the same value it was called with, then | ||
| * no change will occur. This is still true if `notSetValue` is provided. | ||
| */ | ||
| updateIn( | ||
| keyPath: Array<any>, | ||
| updater: (value: any) => any | ||
| ): Cursor; | ||
| updateIn( | ||
| keyPath: Array<any>, | ||
| notSetValue: any, | ||
| updater: (value: any) => any | ||
| ): Cursor; | ||
| updateIn( | ||
| keyPath: Immutable.Iterable<any, any>, | ||
| updater: (value: any) => any | ||
| ): Cursor; | ||
| updateIn( | ||
| keyPath: Immutable.Iterable<any, any>, | ||
| notSetValue: any, | ||
| updater: (value: any) => any | ||
| ): Cursor; | ||
| /** | ||
| * A combination of `updateIn` and `merge`, returning a new Cursor, but | ||
| * performing the merge at a point arrived at by following the keyPath. | ||
| * In other words, these two lines are equivalent: | ||
| * | ||
| * x.updateIn(['a', 'b', 'c'], abc => abc.merge(y)); | ||
| * x.mergeIn(['a', 'b', 'c'], y); | ||
| * | ||
| */ | ||
| mergeIn( | ||
| keyPath: Immutable.Iterable<any, any>, | ||
| ...iterables: Immutable.Iterable<any, any>[] | ||
| ): Cursor; | ||
| mergeIn( | ||
| keyPath: Array<any>, | ||
| ...iterables: Immutable.Iterable<any, any>[] | ||
| ): Cursor; | ||
| mergeIn( | ||
| keyPath: Array<any>, | ||
| ...iterables: {[key: string]: any}[] | ||
| ): Cursor; | ||
| /** | ||
| * A combination of `updateIn` and `mergeDeep`, returning a new Cursor, but | ||
| * performing the deep merge at a point arrived at by following the keyPath. | ||
| * In other words, these two lines are equivalent: | ||
| * | ||
| * x.updateIn(['a', 'b', 'c'], abc => abc.mergeDeep(y)); | ||
| * x.mergeDeepIn(['a', 'b', 'c'], y); | ||
| * | ||
| */ | ||
| mergeDeepIn( | ||
| keyPath: Immutable.Iterable<any, any>, | ||
| ...iterables: Immutable.Iterable<any, any>[] | ||
| ): Cursor; | ||
| mergeDeepIn( | ||
| keyPath: Array<any>, | ||
| ...iterables: Immutable.Iterable<any, any>[] | ||
| ): Cursor; | ||
| mergeDeepIn( | ||
| keyPath: Array<any>, | ||
| ...iterables: {[key: string]: any}[] | ||
| ): Cursor; | ||
| // Transient changes | ||
| /** | ||
| * Every time you call one of the above functions, a new immutable value is | ||
| * created and the callback is triggered. If you need to apply a series of | ||
| * mutations to a Cursor without triggering the callback repeatedly, | ||
| * `withMutations()` creates a temporary mutable copy of the value which | ||
| * can apply mutations in a highly performant manner. Afterwards the | ||
| * callback is triggered with the final value. | ||
| */ | ||
| withMutations(mutator: (mutable: any) => any): Cursor; | ||
| } | ||
| } |
| /** | ||
| * Copyright (c) 2014, Facebook, Inc. | ||
| * All rights reserved. | ||
| * | ||
| * This source code is licensed under the BSD-style license found in the | ||
| * LICENSE file in the root directory of this source tree. An additional grant | ||
| * of patent rights can be found in the PATENTS file in the same directory. | ||
| */ | ||
| /** | ||
| * Cursor is expected to be required in a node or other CommonJS context: | ||
| * | ||
| * var Cursor = require('immutable/contrib/cursor'); | ||
| * | ||
| * If you wish to use it in the browser, please check out Browserify or WebPack! | ||
| */ | ||
| var Immutable = require('immutable'); | ||
| var Iterable = Immutable.Iterable; | ||
| var Iterator = Iterable.Iterator; | ||
| var Seq = Immutable.Seq; | ||
| var Map = Immutable.Map; | ||
| function cursorFrom(rootData, keyPath, onChange) { | ||
| if (arguments.length === 1) { | ||
| keyPath = []; | ||
| } else if (typeof keyPath === 'function') { | ||
| onChange = keyPath; | ||
| keyPath = []; | ||
| } else { | ||
| keyPath = valToKeyPath(keyPath); | ||
| } | ||
| return makeCursor(rootData, keyPath, onChange); | ||
| } | ||
| var KeyedCursorPrototype = Object.create(Seq.Keyed.prototype); | ||
| var IndexedCursorPrototype = Object.create(Seq.Indexed.prototype); | ||
| function KeyedCursor(rootData, keyPath, onChange, size) { | ||
| this.size = size; | ||
| this._rootData = rootData; | ||
| this._keyPath = keyPath; | ||
| this._onChange = onChange; | ||
| } | ||
| KeyedCursorPrototype.constructor = KeyedCursor; | ||
| function IndexedCursor(rootData, keyPath, onChange, size) { | ||
| this.size = size; | ||
| this._rootData = rootData; | ||
| this._keyPath = keyPath; | ||
| this._onChange = onChange; | ||
| } | ||
| IndexedCursorPrototype.constructor = IndexedCursor; | ||
| KeyedCursorPrototype.toString = function() { | ||
| return this.__toString('Cursor {', '}'); | ||
| } | ||
| IndexedCursorPrototype.toString = function() { | ||
| return this.__toString('Cursor [', ']'); | ||
| } | ||
| KeyedCursorPrototype.deref = | ||
| KeyedCursorPrototype.valueOf = | ||
| IndexedCursorPrototype.deref = | ||
| IndexedCursorPrototype.valueOf = function(notSetValue) { | ||
| return this._rootData.getIn(this._keyPath, notSetValue); | ||
| } | ||
| KeyedCursorPrototype.get = | ||
| IndexedCursorPrototype.get = function(key, notSetValue) { | ||
| return this.getIn([key], notSetValue); | ||
| } | ||
| KeyedCursorPrototype.getIn = | ||
| IndexedCursorPrototype.getIn = function(keyPath, notSetValue) { | ||
| keyPath = listToKeyPath(keyPath); | ||
| if (keyPath.length === 0) { | ||
| return this; | ||
| } | ||
| var value = this._rootData.getIn(newKeyPath(this._keyPath, keyPath), NOT_SET); | ||
| return value === NOT_SET ? notSetValue : wrappedValue(this, keyPath, value); | ||
| } | ||
| IndexedCursorPrototype.set = | ||
| KeyedCursorPrototype.set = function(key, value) { | ||
| return updateCursor(this, function (m) { return m.set(key, value); }, [key]); | ||
| } | ||
| IndexedCursorPrototype.setIn = | ||
| KeyedCursorPrototype.setIn = Map.prototype.setIn; | ||
| KeyedCursorPrototype.remove = | ||
| KeyedCursorPrototype['delete'] = | ||
| IndexedCursorPrototype.remove = | ||
| IndexedCursorPrototype['delete'] = function(key) { | ||
| return updateCursor(this, function (m) { return m.remove(key); }, [key]); | ||
| } | ||
| IndexedCursorPrototype.removeIn = | ||
| IndexedCursorPrototype.deleteIn = | ||
| KeyedCursorPrototype.removeIn = | ||
| KeyedCursorPrototype.deleteIn = Map.prototype.deleteIn; | ||
| KeyedCursorPrototype.clear = | ||
| IndexedCursorPrototype.clear = function() { | ||
| return updateCursor(this, function (m) { return m.clear(); }); | ||
| } | ||
| IndexedCursorPrototype.update = | ||
| KeyedCursorPrototype.update = function(keyOrFn, notSetValue, updater) { | ||
| return arguments.length === 1 ? | ||
| updateCursor(this, keyOrFn) : | ||
| this.updateIn([keyOrFn], notSetValue, updater); | ||
| } | ||
| IndexedCursorPrototype.updateIn = | ||
| KeyedCursorPrototype.updateIn = function(keyPath, notSetValue, updater) { | ||
| return updateCursor(this, function (m) { | ||
| return m.updateIn(keyPath, notSetValue, updater); | ||
| }, keyPath); | ||
| } | ||
| IndexedCursorPrototype.merge = | ||
| KeyedCursorPrototype.merge = function(/*...iters*/) { | ||
| var args = arguments; | ||
| return updateCursor(this, function (m) { | ||
| return m.merge.apply(m, args); | ||
| }); | ||
| } | ||
| IndexedCursorPrototype.mergeWith = | ||
| KeyedCursorPrototype.mergeWith = function(merger/*, ...iters*/) { | ||
| var args = arguments; | ||
| return updateCursor(this, function (m) { | ||
| return m.mergeWith.apply(m, args); | ||
| }); | ||
| } | ||
| IndexedCursorPrototype.mergeIn = | ||
| KeyedCursorPrototype.mergeIn = Map.prototype.mergeIn; | ||
| IndexedCursorPrototype.mergeDeep = | ||
| KeyedCursorPrototype.mergeDeep = function(/*...iters*/) { | ||
| var args = arguments; | ||
| return updateCursor(this, function (m) { | ||
| return m.mergeDeep.apply(m, args); | ||
| }); | ||
| } | ||
| IndexedCursorPrototype.mergeDeepWith = | ||
| KeyedCursorPrototype.mergeDeepWith = function(merger/*, ...iters*/) { | ||
| var args = arguments; | ||
| return updateCursor(this, function (m) { | ||
| return m.mergeDeepWith.apply(m, args); | ||
| }); | ||
| } | ||
| IndexedCursorPrototype.mergeDeepIn = | ||
| KeyedCursorPrototype.mergeDeepIn = Map.prototype.mergeDeepIn; | ||
| KeyedCursorPrototype.withMutations = | ||
| IndexedCursorPrototype.withMutations = function(fn) { | ||
| return updateCursor(this, function (m) { | ||
| return (m || Map()).withMutations(fn); | ||
| }); | ||
| } | ||
| KeyedCursorPrototype.cursor = | ||
| IndexedCursorPrototype.cursor = function(subKeyPath) { | ||
| subKeyPath = valToKeyPath(subKeyPath); | ||
| return subKeyPath.length === 0 ? this : subCursor(this, subKeyPath); | ||
| } | ||
| /** | ||
| * All iterables need to implement __iterate | ||
| */ | ||
| KeyedCursorPrototype.__iterate = | ||
| IndexedCursorPrototype.__iterate = function(fn, reverse) { | ||
| var cursor = this; | ||
| var deref = cursor.deref(); | ||
| return deref && deref.__iterate ? deref.__iterate( | ||
| function (v, k) { return fn(wrappedValue(cursor, [k], v), k, cursor); }, | ||
| reverse | ||
| ) : 0; | ||
| } | ||
| /** | ||
| * All iterables need to implement __iterator | ||
| */ | ||
| KeyedCursorPrototype.__iterator = | ||
| IndexedCursorPrototype.__iterator = function(type, reverse) { | ||
| var deref = this.deref(); | ||
| var cursor = this; | ||
| var iterator = deref && deref.__iterator && | ||
| deref.__iterator(Iterator.ENTRIES, reverse); | ||
| return new Iterator(function () { | ||
| if (!iterator) { | ||
| return { value: undefined, done: true }; | ||
| } | ||
| var step = iterator.next(); | ||
| if (step.done) { | ||
| return step; | ||
| } | ||
| var entry = step.value; | ||
| var k = entry[0]; | ||
| var v = wrappedValue(cursor, [k], entry[1]); | ||
| return { | ||
| value: type === Iterator.KEYS ? k : type === Iterator.VALUES ? v : [k, v], | ||
| done: false | ||
| }; | ||
| }); | ||
| } | ||
| KeyedCursor.prototype = KeyedCursorPrototype; | ||
| IndexedCursor.prototype = IndexedCursorPrototype; | ||
| var NOT_SET = {}; // Sentinel value | ||
| function makeCursor(rootData, keyPath, onChange, value) { | ||
| if (arguments.length < 4) { | ||
| value = rootData.getIn(keyPath); | ||
| } | ||
| var size = value && value.size; | ||
| var CursorClass = Iterable.isIndexed(value) ? IndexedCursor : KeyedCursor; | ||
| return new CursorClass(rootData, keyPath, onChange, size); | ||
| } | ||
| function wrappedValue(cursor, keyPath, value) { | ||
| return Iterable.isIterable(value) ? subCursor(cursor, keyPath, value) : value; | ||
| } | ||
| function subCursor(cursor, keyPath, value) { | ||
| return makeCursor( | ||
| cursor._rootData, | ||
| newKeyPath(cursor._keyPath, keyPath), | ||
| cursor._onChange, | ||
| value | ||
| ); | ||
| } | ||
| function updateCursor(cursor, changeFn, changeKeyPath) { | ||
| var deepChange = arguments.length > 2; | ||
| var newRootData = cursor._rootData.updateIn( | ||
| cursor._keyPath, | ||
| deepChange ? Map() : undefined, | ||
| changeFn | ||
| ); | ||
| var keyPath = cursor._keyPath || []; | ||
| var result = cursor._onChange && cursor._onChange.call( | ||
| undefined, | ||
| newRootData, | ||
| cursor._rootData, | ||
| deepChange ? newKeyPath(keyPath, changeKeyPath) : keyPath | ||
| ); | ||
| if (result !== undefined) { | ||
| newRootData = result; | ||
| } | ||
| return makeCursor(newRootData, cursor._keyPath, cursor._onChange); | ||
| } | ||
| function newKeyPath(head, tail) { | ||
| return head.concat(listToKeyPath(tail)); | ||
| } | ||
| function listToKeyPath(list) { | ||
| return Array.isArray(list) ? list : Immutable.Iterable(list).toArray(); | ||
| } | ||
| function valToKeyPath(val) { | ||
| return Array.isArray(val) ? val : | ||
| Iterable.isIterable(val) ? val.toArray() : | ||
| [val]; | ||
| } | ||
| exports.from = cursorFrom; |
| Cursors | ||
| ------- | ||
| Cursors allow you to hold a reference to a path in a nested immutable data | ||
| structure, allowing you to pass smaller sections of a larger nested | ||
| collection to portions of your application while maintaining a central point | ||
| aware of changes to the entire data structure: an `onChange` function which is | ||
| called whenever a cursor or sub-cursor calls `update`. | ||
| This is particularly useful when used in conjuction with component-based UI | ||
| libraries like [React](http://facebook.github.io/react/) or to simulate | ||
| "state" throughout an application while maintaining a single flow of logic. | ||
| ```javascript | ||
| var Immutable = require('immutable'); | ||
| var Cursor = require('immutable/contrib/cursor'); | ||
| var data = Immutable.fromJS({ a: { b: { c: 1 } } }); | ||
| var cursor = Cursor.from(data, ['a', 'b'], newData => { | ||
| data = newData; | ||
| }); | ||
| // ... elsewhere ... | ||
| cursor.get('c'); // 1 | ||
| cursor = cursor.update('c', x => x + 1); | ||
| cursor.get('c'); // 2 | ||
| // ... back to data ... | ||
| data.getIn(['a', 'b', 'c']); // 2 | ||
| ``` |
| # Contributing to Immutable JS | ||
| We want to make contributing to this project as easy and transparent as | ||
| possible. Hopefully this document makes the process for contributing clear and | ||
| answers any questions you may have. If not, feel free to open an | ||
| [Issue](https://github.com/facebook/immutable-js/issues). | ||
| ## Pull Requests | ||
| All active development of Immutable JS happens on GitHub. We actively welcome | ||
| your [pull requests](https://help.github.com/articles/creating-a-pull-request). | ||
| 1. Fork the repo and create your branch from `master`. | ||
| 2. Install all dependencies. (`npm install`) | ||
| 3. Install the grunt CLI tools. (`npm install -g grunt-cli`) | ||
| 4. If you've added code, add tests. | ||
| 5. If you've changed APIs, update the documentation. | ||
| 6. Build generated JS, run tests and ensure your code passes lint. (`grunt`) | ||
| 7. Be sure to commit the generated JS in `/dist`. | ||
| 8. If you haven't already, complete the Contributor License Agreement ("CLA"). | ||
| ## Contributor License Agreement ("CLA") | ||
| In order to accept your pull request, we need you to submit a CLA. You only need | ||
| to do this once to work on any of Facebook's open source projects. | ||
| Complete your CLA here: <https://code.facebook.com/cla> | ||
| ## `master` is unsafe | ||
| We will do our best to keep `master` in good shape, with tests passing at all | ||
| times. But in order to move fast, we might make API changes that your | ||
| application might not be compatible with. We will do our best to communicate | ||
| these changes and always [version](http://semver.org/) appropriately so you can | ||
| lock into a specific version if need be. If any of this is worrysome to you, | ||
| just use [npm](https://www.npmjs.org/package/immutable). | ||
| ## Issues | ||
| We use GitHub issues to track public bugs and requests. Please ensure your bug | ||
| description is clear and has sufficient instructions to be able to reproduce the | ||
| issue. The best way is to provide a reduced test case on jsFiddle or jsBin. | ||
| Facebook has a [bounty program](https://www.facebook.com/whitehat/) for the safe | ||
| disclosure of security bugs. In those cases, please go through the process | ||
| outlined on that page and do not file a public issue. | ||
| ## Coding Style | ||
| * 2 spaces for indentation (no tabs) | ||
| * 80 character line length strongly preferred. | ||
| * Prefer `'` over `"` | ||
| * ES6 Harmony when possible. | ||
| * Use semicolons; | ||
| * Trailing commas, | ||
| * Avd abbr wrds. | ||
| ## License | ||
| By contributing to Immutable JS, you agree that your contributions will be | ||
| licensed under its BSD license. |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| /** | ||
| * Copyright (c) 2014, Facebook, Inc. | ||
| * All rights reserved. | ||
| * | ||
| * This source code is licensed under the BSD-style license found in the | ||
| * LICENSE file in the root directory of this source tree. An additional grant | ||
| * of patent rights can be found in the PATENTS file in the same directory. | ||
| */ | ||
| !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Immutable=e()}(this,function(){"use strict";function t(t,e){e&&(t.prototype=Object.create(e.prototype)),t.prototype.constructor=t}function e(t){return t.value=!1,t}function r(t){t&&(t.value=!0)}function n(){}function i(t,e){e=e||0;for(var r=Math.max(0,t.length-e),n=Array(r),i=0;r>i;i++)n[i]=t[i+e];return n}function o(t){return void 0===t.size&&(t.size=t.__iterate(s)),t.size}function u(t,e){return e>=0?+e:o(t)+ +e}function s(){return!0}function a(t,e,r){return(0===t||void 0!==r&&-r>=t)&&(void 0===e||void 0!==r&&e>=r)}function h(t,e){return c(t,e,0)}function f(t,e){return c(t,e,e)}function c(t,e,r){return void 0===t?r:0>t?Math.max(0,e+t):void 0===e?t:Math.min(e,t)}function _(t){return y(t)?t:O(t)}function p(t){return d(t)?t:x(t)}function v(t){return m(t)?t:k(t)}function l(t){return y(t)&&!g(t)?t:A(t)}function y(t){return!(!t||!t[pn])}function d(t){return!(!t||!t[vn])}function m(t){return!(!t||!t[ln])}function g(t){return d(t)||m(t)}function w(t){return!(!t||!t[yn])}function S(t){this.next=t}function z(t,e,r,n){var i=0===t?e:1===t?r:[e,r];return n?n.value=i:n={value:i,done:!1},n}function I(){return{value:void 0,done:!0}}function b(t){return!!M(t)}function q(t){return t&&"function"==typeof t.next}function D(t){var e=M(t);return e&&e.call(t)}function M(t){var e=t&&(wn&&t[wn]||t[Sn]);return"function"==typeof e?e:void 0}function E(t){return t&&"number"==typeof t.length}function O(t){return null===t||void 0===t?T():y(t)?t.toSeq():C(t)}function x(t){return null===t||void 0===t?T().toKeyedSeq():y(t)?d(t)?t.toSeq():t.fromEntrySeq():W(t)}function k(t){return null===t||void 0===t?T():y(t)?d(t)?t.entrySeq():t.toIndexedSeq():B(t)}function A(t){return(null===t||void 0===t?T():y(t)?d(t)?t.entrySeq():t:B(t)).toSetSeq()}function j(t){this._array=t,this.size=t.length}function R(t){var e=Object.keys(t);this._object=t,this._keys=e,this.size=e.length}function U(t){this._iterable=t,this.size=t.length||t.size | ||
| }function K(t){this._iterator=t,this._iteratorCache=[]}function L(t){return!(!t||!t[In])}function T(){return bn||(bn=new j([]))}function W(t){var e=Array.isArray(t)?new j(t).fromEntrySeq():q(t)?new K(t).fromEntrySeq():b(t)?new U(t).fromEntrySeq():"object"==typeof t?new R(t):void 0;if(!e)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+t);return e}function B(t){var e=J(t);if(!e)throw new TypeError("Expected Array or iterable object of values: "+t);return e}function C(t){var e=J(t)||"object"==typeof t&&new R(t);if(!e)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+t);return e}function J(t){return E(t)?new j(t):q(t)?new K(t):b(t)?new U(t):void 0}function P(t,e,r,n){var i=t._cache;if(i){for(var o=i.length-1,u=0;o>=u;u++){var s=i[r?o-u:u];if(e(s[1],n?s[0]:u,t)===!1)return u+1}return u}return t.__iterateUncached(e,r)}function H(t,e,r,n){var i=t._cache;if(i){var o=i.length-1,u=0;return new S(function(){var t=i[r?o-u:u];return u++>o?I():z(e,n?t[0]:u-1,t[1])})}return t.__iteratorUncached(e,r)}function N(){throw TypeError("Abstract")}function V(){}function Y(){}function Q(){}function X(t,e){return t===e||t!==t&&e!==e?!0:t&&e?("function"==typeof t.valueOf&&"function"==typeof e.valueOf&&(t=t.valueOf(),e=e.valueOf()),"function"==typeof t.equals&&"function"==typeof e.equals?t.equals(e):t===e||t!==t&&e!==e):!1}function F(t,e){return e?G(e,t,"",{"":t}):Z(t)}function G(t,e,r,n){return Array.isArray(e)?t.call(n,r,k(e).map(function(r,n){return G(t,r,n,e)})):$(e)?t.call(n,r,x(e).map(function(r,n){return G(t,r,n,e)})):e}function Z(t){return Array.isArray(t)?k(t).map(Z).toList():$(t)?x(t).map(Z).toMap():t}function $(t){return t&&t.constructor===Object}function te(t){return t>>>1&1073741824|3221225471&t}function ee(t){if(t===!1||null===t||void 0===t)return 0;if("function"==typeof t.valueOf&&(t=t.valueOf(),t===!1||null===t||void 0===t))return 0;if(t===!0)return 1;var e=typeof t;if("number"===e){var r=0|t;for(r!==t&&(r^=4294967295*t);t>4294967295;)t/=4294967295,r^=t; | ||
| return te(r)}return"string"===e?t.length>xn?re(t):ne(t):"function"==typeof t.hashCode?t.hashCode():ie(t)}function re(t){var e=jn[t];return void 0===e&&(e=ne(t),An===kn&&(An=0,jn={}),An++,jn[t]=e),e}function ne(t){for(var e=0,r=0;t.length>r;r++)e=31*e+t.charCodeAt(r)|0;return te(e)}function ie(t){var e=Mn&&Mn.get(t);if(e)return e;if(e=t[On])return e;if(!Dn){if(e=t.propertyIsEnumerable&&t.propertyIsEnumerable[On])return e;if(e=oe(t))return e}if(Object.isExtensible&&!Object.isExtensible(t))throw Error("Non-extensible objects are not allowed as keys.");if(e=++En,1073741824&En&&(En=0),Mn)Mn.set(t,e);else if(Dn)Object.defineProperty(t,On,{enumerable:!1,configurable:!1,writable:!1,value:e});else if(t.propertyIsEnumerable&&t.propertyIsEnumerable===t.constructor.prototype.propertyIsEnumerable)t.propertyIsEnumerable=function(){return this.constructor.prototype.propertyIsEnumerable.apply(this,arguments)},t.propertyIsEnumerable[On]=e;else{if(!t.nodeType)throw Error("Unable to set a non-enumerable property on object.");t[On]=e}return e}function oe(t){if(t&&t.nodeType>0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}function ue(t,e){if(!t)throw Error(e)}function se(t){ue(1/0!==t,"Cannot perform this action with an infinite size.")}function ae(t,e){this._iter=t,this._useKeys=e,this.size=t.size}function he(t){this._iter=t,this.size=t.size}function fe(t){this._iter=t,this.size=t.size}function ce(t){this._iter=t,this.size=t.size}function _e(t){var e=je(t);return e._iter=t,e.size=t.size,e.flip=function(){return t},e.reverse=function(){var e=t.reverse.apply(this);return e.flip=function(){return t.reverse()},e},e.has=function(e){return t.contains(e)},e.contains=function(e){return t.has(e)},e.cacheResult=Re,e.__iterateUncached=function(e,r){var n=this;return t.__iterate(function(t,r){return e(r,t,n)!==!1},r)},e.__iteratorUncached=function(e,r){if(e===gn){var n=t.__iterator(e,r);return new S(function(){var t=n.next();if(!t.done){var e=t.value[0];t.value[0]=t.value[1],t.value[1]=e | ||
| }return t})}return t.__iterator(e===mn?dn:mn,r)},e}function pe(t,e,r){var n=je(t);return n.size=t.size,n.has=function(e){return t.has(e)},n.get=function(n,i){var o=t.get(n,fn);return o===fn?i:e.call(r,o,n,t)},n.__iterateUncached=function(n,i){var o=this;return t.__iterate(function(t,i,u){return n(e.call(r,t,i,u),i,o)!==!1},i)},n.__iteratorUncached=function(n,i){var o=t.__iterator(gn,i);return new S(function(){var i=o.next();if(i.done)return i;var u=i.value,s=u[0];return z(n,s,e.call(r,u[1],s,t),i)})},n}function ve(t,e){var r=je(t);return r._iter=t,r.size=t.size,r.reverse=function(){return t},t.flip&&(r.flip=function(){var e=_e(t);return e.reverse=function(){return t.flip()},e}),r.get=function(r,n){return t.get(e?r:-1-r,n)},r.has=function(r){return t.has(e?r:-1-r)},r.contains=function(e){return t.contains(e)},r.cacheResult=Re,r.__iterate=function(e,r){var n=this;return t.__iterate(function(t,r){return e(t,r,n)},!r)},r.__iterator=function(e,r){return t.__iterator(e,!r)},r}function le(t,e,r,n){var i=je(t);return n&&(i.has=function(n){var i=t.get(n,fn);return i!==fn&&!!e.call(r,i,n,t)},i.get=function(n,i){var o=t.get(n,fn);return o!==fn&&e.call(r,o,n,t)?o:i}),i.__iterateUncached=function(i,o){var u=this,s=0;return t.__iterate(function(t,o,a){return e.call(r,t,o,a)?(s++,i(t,n?o:s-1,u)):void 0},o),s},i.__iteratorUncached=function(i,o){var u=t.__iterator(gn,o),s=0;return new S(function(){for(;;){var o=u.next();if(o.done)return o;var a=o.value,h=a[0],f=a[1];if(e.call(r,f,h,t))return z(i,n?h:s++,f,o)}})},i}function ye(t,e,r){var n=Le().asMutable();return t.__iterate(function(i,o){n.update(e.call(r,i,o,t),0,function(t){return t+1})}),n.asImmutable()}function de(t,e,r){var n=d(t),i=(w(t)?Ir():Le()).asMutable();t.__iterate(function(o,u){i.update(e.call(r,o,u,t),function(t){return t=t||[],t.push(n?[u,o]:o),t})});var o=Ae(t);return i.map(function(e){return Oe(t,o(e))})}function me(t,e,r,n){var i=t.size;if(a(e,r,i))return t;var o=h(e,i),s=f(r,i);if(o!==o||s!==s)return me(t.toSeq().cacheResult(),e,r,n);var c=s-o;0>c&&(c=0);var _=je(t); | ||
| return _.size=0===c?c:t.size&&c||void 0,!n&&L(t)&&c>=0&&(_.get=function(e,r){return e=u(this,e),e>=0&&c>e?t.get(e+o,r):r}),_.__iterateUncached=function(e,r){var i=this;if(0===c)return 0;if(r)return this.cacheResult().__iterate(e,r);var u=0,s=!0,a=0;return t.__iterate(function(t,r){return s&&(s=u++<o)?void 0:(a++,e(t,n?r:a-1,i)!==!1&&a!==c)}),a},_.__iteratorUncached=function(e,r){if(c&&r)return this.cacheResult().__iterator(e,r);var i=c&&t.__iterator(e,r),u=0,s=0;return new S(function(){for(;u++!==o;)i.next();if(++s>c)return I();var t=i.next();return n||e===mn?t:e===dn?z(e,s-1,void 0,t):z(e,s-1,t.value[1],t)})},_}function ge(t,e,r){var n=je(t);return n.__iterateUncached=function(n,i){var o=this;if(i)return this.cacheResult().__iterate(n,i);var u=0;return t.__iterate(function(t,i,s){return e.call(r,t,i,s)&&++u&&n(t,i,o)}),u},n.__iteratorUncached=function(n,i){var o=this;if(i)return this.cacheResult().__iterator(n,i);var u=t.__iterator(gn,i),s=!0;return new S(function(){if(!s)return I();var t=u.next();if(t.done)return t;var i=t.value,a=i[0],h=i[1];return e.call(r,h,a,o)?n===gn?t:z(n,a,h,t):(s=!1,I())})},n}function we(t,e,r,n){var i=je(t);return i.__iterateUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterate(i,o);var s=!0,a=0;return t.__iterate(function(t,o,h){return s&&(s=e.call(r,t,o,h))?void 0:(a++,i(t,n?o:a-1,u))}),a},i.__iteratorUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterator(i,o);var s=t.__iterator(gn,o),a=!0,h=0;return new S(function(){var t,o,f;do{if(t=s.next(),t.done)return n||i===mn?t:i===dn?z(i,h++,void 0,t):z(i,h++,t.value[1],t);var c=t.value;o=c[0],f=c[1],a&&(a=e.call(r,f,o,u))}while(a);return i===gn?t:z(i,o,f,t)})},i}function Se(t,e){var r=d(t),n=[t].concat(e).map(function(t){return y(t)?r&&(t=p(t)):t=r?W(t):B(Array.isArray(t)?t:[t]),t}).filter(function(t){return 0!==t.size});if(0===n.length)return t;if(1===n.length){var i=n[0];if(i===t||r&&d(i)||m(t)&&m(i))return i}var o=new j(n);return r?o=o.toKeyedSeq():m(t)||(o=o.toSetSeq()),o=o.flatten(!0),o.size=n.reduce(function(t,e){if(void 0!==t){var r=e.size; | ||
| if(void 0!==r)return t+r}},0),o}function ze(t,e,r){var n=je(t);return n.__iterateUncached=function(n,i){function o(t,a){var h=this;t.__iterate(function(t,i){return(!e||e>a)&&y(t)?o(t,a+1):n(t,r?i:u++,h)===!1&&(s=!0),!s},i)}var u=0,s=!1;return o(t,0),u},n.__iteratorUncached=function(n,i){var o=t.__iterator(n,i),u=[],s=0;return new S(function(){for(;o;){var t=o.next();if(t.done===!1){var a=t.value;if(n===gn&&(a=a[1]),e&&!(e>u.length)||!y(a))return r?t:z(n,s++,a,t);u.push(o),o=a.__iterator(n,i)}else o=u.pop()}return I()})},n}function Ie(t,e,r){var n=Ae(t);return t.toSeq().map(function(i,o){return n(e.call(r,i,o,t))}).flatten(!0)}function be(t,e){var r=je(t);return r.size=t.size&&2*t.size-1,r.__iterateUncached=function(r,n){var i=this,o=0;return t.__iterate(function(t){return(!o||r(e,o++,i)!==!1)&&r(t,o++,i)!==!1},n),o},r.__iteratorUncached=function(r,n){var i,o=t.__iterator(mn,n),u=0;return new S(function(){return(!i||u%2)&&(i=o.next(),i.done)?i:u%2?z(r,u++,e):z(r,u++,i.value,i)})},r}function qe(t,e,r){e||(e=Ue);var n=d(t),i=0,o=t.toSeq().map(function(e,n){return[n,e,i++,r?r(e,n,t):e]}).toArray();return o.sort(function(t,r){return e(t[3],r[3])||t[2]-r[2]}).forEach(n?function(t,e){o[e].length=2}:function(t,e){o[e]=t[1]}),n?x(o):m(t)?k(o):A(o)}function De(t,e,r){if(e||(e=Ue),r){var n=t.toSeq().map(function(e,n){return[e,r(e,n,t)]}).reduce(function(t,r){return Me(e,t[1],r[1])?r:t});return n&&n[0]}return t.reduce(function(t,r){return Me(e,t,r)?r:t})}function Me(t,e,r){var n=t(r,e);return 0===n&&r!==e&&(void 0===r||null===r||r!==r)||n>0}function Ee(t,e,r){var n=je(t);return n.size=new j(r).map(function(t){return t.size}).min(),n.__iterate=function(t,e){for(var r,n=this.__iterator(mn,e),i=0;!(r=n.next()).done&&t(r.value,i++,this)!==!1;);return i},n.__iteratorUncached=function(t,n){var i=r.map(function(t){return t=_(t),D(n?t.reverse():t)}),o=0,u=!1;return new S(function(){var r;return u||(r=i.map(function(t){return t.next()}),u=r.some(function(t){return t.done})),u?I():z(t,o++,e.apply(null,r.map(function(t){return t.value}))) | ||
| })},n}function Oe(t,e){return L(t)?e:t.constructor(e)}function xe(t){if(t!==Object(t))throw new TypeError("Expected [K, V] tuple: "+t)}function ke(t){return se(t.size),o(t)}function Ae(t){return d(t)?p:m(t)?v:l}function je(t){return Object.create((d(t)?x:m(t)?k:A).prototype)}function Re(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):O.prototype.cacheResult.call(this)}function Ue(t,e){return t>e?1:e>t?-1:0}function Ke(t){var e=D(t);if(!e){if(!E(t))throw new TypeError("Expected iterable or array-like: "+t);e=D(_(t))}return e}function Le(t){return null===t||void 0===t?Qe():Te(t)?t:Qe().withMutations(function(e){var r=p(t);se(r.size),r.forEach(function(t,r){return e.set(r,t)})})}function Te(t){return!(!t||!t[Rn])}function We(t,e){this.ownerID=t,this.entries=e}function Be(t,e,r){this.ownerID=t,this.bitmap=e,this.nodes=r}function Ce(t,e,r){this.ownerID=t,this.count=e,this.nodes=r}function Je(t,e,r){this.ownerID=t,this.keyHash=e,this.entries=r}function Pe(t,e,r){this.ownerID=t,this.keyHash=e,this.entry=r}function He(t,e,r){this._type=e,this._reverse=r,this._stack=t._root&&Ve(t._root)}function Ne(t,e){return z(t,e[0],e[1])}function Ve(t,e){return{node:t,index:0,__prev:e}}function Ye(t,e,r,n){var i=Object.create(Un);return i.size=t,i._root=e,i.__ownerID=r,i.__hash=n,i.__altered=!1,i}function Qe(){return Kn||(Kn=Ye(0))}function Xe(t,r,n){var i,o;if(t._root){var u=e(cn),s=e(_n);if(i=Fe(t._root,t.__ownerID,0,void 0,r,n,u,s),!s.value)return t;o=t.size+(u.value?n===fn?-1:1:0)}else{if(n===fn)return t;o=1,i=new We(t.__ownerID,[[r,n]])}return t.__ownerID?(t.size=o,t._root=i,t.__hash=void 0,t.__altered=!0,t):i?Ye(o,i):Qe()}function Fe(t,e,n,i,o,u,s,a){return t?t.update(e,n,i,o,u,s,a):u===fn?t:(r(a),r(s),new Pe(e,i,[o,u]))}function Ge(t){return t.constructor===Pe||t.constructor===Je}function Ze(t,e,r,n,i){if(t.keyHash===n)return new Je(e,n,[t.entry,i]);var o,u=(0===r?t.keyHash:t.keyHash>>>r)&hn,s=(0===r?n:n>>>r)&hn,a=u===s?[Ze(t,e,r+sn,n,i)]:(o=new Pe(e,n,i),s>u?[t,o]:[o,t]);return new Be(e,1<<u|1<<s,a) | ||
| }function $e(t,e,r,i){t||(t=new n);for(var o=new Pe(t,ee(r),[r,i]),u=0;e.length>u;u++){var s=e[u];o=o.update(t,0,void 0,s[0],s[1])}return o}function tr(t,e,r,n){for(var i=0,o=0,u=Array(r),s=0,a=1,h=e.length;h>s;s++,a<<=1){var f=e[s];void 0!==f&&s!==n&&(i|=a,u[o++]=f)}return new Be(t,i,u)}function er(t,e,r,n,i){for(var o=0,u=Array(an),s=0;0!==r;s++,r>>>=1)u[s]=1&r?e[o++]:void 0;return u[n]=i,new Ce(t,o+1,u)}function rr(t,e,r){for(var n=[],i=0;r.length>i;i++){var o=r[i],u=p(o);y(o)||(u=u.map(function(t){return F(t)})),n.push(u)}return ir(t,e,n)}function nr(t){return function(e,r){return e&&e.mergeDeepWith&&y(r)?e.mergeDeepWith(t,r):t?t(e,r):r}}function ir(t,e,r){return r=r.filter(function(t){return 0!==t.size}),0===r.length?t:0===t.size&&1===r.length?t.constructor(r[0]):t.withMutations(function(t){for(var n=e?function(r,n){t.update(n,fn,function(t){return t===fn?r:e(t,r)})}:function(e,r){t.set(r,e)},i=0;r.length>i;i++)r[i].forEach(n)})}function or(t,e,r,n){var i=t===fn,o=e.next();if(o.done){var u=i?r:t,s=n(u);return s===u?t:s}ue(i||t&&t.set,"invalid keyPath");var a=o.value,h=i?fn:t.get(a,fn),f=or(h,e,r,n);return f===h?t:f===fn?t.remove(a):(i?Qe():t).set(a,f)}function ur(t){return t-=t>>1&1431655765,t=(858993459&t)+(t>>2&858993459),t=t+(t>>4)&252645135,t+=t>>8,t+=t>>16,127&t}function sr(t,e,r,n){var o=n?t:i(t);return o[e]=r,o}function ar(t,e,r,n){var i=t.length+1;if(n&&e+1===i)return t[e]=r,t;for(var o=Array(i),u=0,s=0;i>s;s++)s===e?(o[s]=r,u=-1):o[s]=t[s+u];return o}function hr(t,e,r){var n=t.length-1;if(r&&e===n)return t.pop(),t;for(var i=Array(n),o=0,u=0;n>u;u++)u===e&&(o=1),i[u]=t[u+o];return i}function fr(t){var e=lr();if(null===t||void 0===t)return e;if(cr(t))return t;var r=v(t),n=r.size;return 0===n?e:(se(n),n>0&&an>n?vr(0,n,sn,null,new _r(r.toArray())):e.withMutations(function(t){t.setSize(n),r.forEach(function(e,r){return t.set(r,e)})}))}function cr(t){return!(!t||!t[Bn])}function _r(t,e){this.array=t,this.ownerID=e}function pr(t,e){function r(t,e,r){return 0===e?n(t,r):i(t,e,r)}function n(t,r){var n=r===s?a&&a.array:t&&t.array,i=r>o?0:o-r,h=u-r; | ||
| return h>an&&(h=an),function(){if(i===h)return Pn;var t=e?--h:i++;return n&&n[t]}}function i(t,n,i){var s,a=t&&t.array,h=i>o?0:o-i>>n,f=(u-i>>n)+1;return f>an&&(f=an),function(){for(;;){if(s){var t=s();if(t!==Pn)return t;s=null}if(h===f)return Pn;var o=e?--f:h++;s=r(a&&a[o],n-sn,i+(o<<n))}}}var o=t._origin,u=t._capacity,s=zr(u),a=t._tail;return r(t._root,t._level,0)}function vr(t,e,r,n,i,o,u){var s=Object.create(Cn);return s.size=e-t,s._origin=t,s._capacity=e,s._level=r,s._root=n,s._tail=i,s.__ownerID=o,s.__hash=u,s.__altered=!1,s}function lr(){return Jn||(Jn=vr(0,0,sn))}function yr(t,r,n){if(r=u(t,r),r>=t.size||0>r)return t.withMutations(function(t){0>r?wr(t,r).set(0,n):wr(t,0,r+1).set(r,n)});r+=t._origin;var i=t._tail,o=t._root,s=e(_n);return r>=zr(t._capacity)?i=dr(i,t.__ownerID,0,r,n,s):o=dr(o,t.__ownerID,t._level,r,n,s),s.value?t.__ownerID?(t._root=o,t._tail=i,t.__hash=void 0,t.__altered=!0,t):vr(t._origin,t._capacity,t._level,o,i):t}function dr(t,e,n,i,o,u){var s=i>>>n&hn,a=t&&t.array.length>s;if(!a&&void 0===o)return t;var h;if(n>0){var f=t&&t.array[s],c=dr(f,e,n-sn,i,o,u);return c===f?t:(h=mr(t,e),h.array[s]=c,h)}return a&&t.array[s]===o?t:(r(u),h=mr(t,e),void 0===o&&s===h.array.length-1?h.array.pop():h.array[s]=o,h)}function mr(t,e){return e&&t&&e===t.ownerID?t:new _r(t?t.array.slice():[],e)}function gr(t,e){if(e>=zr(t._capacity))return t._tail;if(1<<t._level+sn>e){for(var r=t._root,n=t._level;r&&n>0;)r=r.array[e>>>n&hn],n-=sn;return r}}function wr(t,e,r){var i=t.__ownerID||new n,o=t._origin,u=t._capacity,s=o+e,a=void 0===r?u:0>r?u+r:o+r;if(s===o&&a===u)return t;if(s>=a)return t.clear();for(var h=t._level,f=t._root,c=0;0>s+c;)f=new _r(f&&f.array.length?[void 0,f]:[],i),h+=sn,c+=1<<h;c&&(s+=c,o+=c,a+=c,u+=c);for(var _=zr(u),p=zr(a);p>=1<<h+sn;)f=new _r(f&&f.array.length?[f]:[],i),h+=sn;var v=t._tail,l=_>p?gr(t,a-1):p>_?new _r([],i):v;if(v&&p>_&&u>s&&v.array.length){f=mr(f,i);for(var y=f,d=h;d>sn;d-=sn){var m=_>>>d&hn;y=y.array[m]=mr(y.array[m],i)}y.array[_>>>sn&hn]=v}if(u>a&&(l=l&&l.removeAfter(i,0,a)),s>=p)s-=p,a-=p,h=sn,f=null,l=l&&l.removeBefore(i,0,s); | ||
| else if(s>o||_>p){for(c=0;f;){var g=s>>>h&hn;if(g!==p>>>h&hn)break;g&&(c+=(1<<h)*g),h-=sn,f=f.array[g]}f&&s>o&&(f=f.removeBefore(i,h,s-c)),f&&_>p&&(f=f.removeAfter(i,h,p-c)),c&&(s-=c,a-=c)}return t.__ownerID?(t.size=a-s,t._origin=s,t._capacity=a,t._level=h,t._root=f,t._tail=l,t.__hash=void 0,t.__altered=!0,t):vr(s,a,h,f,l)}function Sr(t,e,r){for(var n=[],i=0,o=0;r.length>o;o++){var u=r[o],s=v(u);s.size>i&&(i=s.size),y(u)||(s=s.map(function(t){return F(t)})),n.push(s)}return i>t.size&&(t=t.setSize(i)),ir(t,e,n)}function zr(t){return an>t?0:t-1>>>sn<<sn}function Ir(t){return null===t||void 0===t?Dr():br(t)?t:Dr().withMutations(function(e){var r=p(t);se(r.size),r.forEach(function(t,r){return e.set(r,t)})})}function br(t){return Te(t)&&w(t)}function qr(t,e,r,n){var i=Object.create(Ir.prototype);return i.size=t?t.size:0,i._map=t,i._list=e,i.__ownerID=r,i.__hash=n,i}function Dr(){return Hn||(Hn=qr(Qe(),lr()))}function Mr(t,e,r){var n,i,o=t._map,u=t._list,s=o.get(e),a=void 0!==s;if(r===fn){if(!a)return t;u.size>=an&&u.size>=2*o.size?(i=u.filter(function(t,e){return void 0!==t&&s!==e}),n=i.toKeyedSeq().map(function(t){return t[0]}).flip().toMap(),t.__ownerID&&(n.__ownerID=i.__ownerID=t.__ownerID)):(n=o.remove(e),i=s===u.size-1?u.pop():u.set(s,void 0))}else if(a){if(r===u.get(s)[1])return t;n=o,i=u.set(s,[e,r])}else n=o.set(e,u.size),i=u.set(u.size,[e,r]);return t.__ownerID?(t.size=n.size,t._map=n,t._list=i,t.__hash=void 0,t):qr(n,i)}function Er(t){return null===t||void 0===t?kr():Or(t)?t:kr().unshiftAll(t)}function Or(t){return!(!t||!t[Nn])}function xr(t,e,r,n){var i=Object.create(Vn);return i.size=t,i._head=e,i.__ownerID=r,i.__hash=n,i.__altered=!1,i}function kr(){return Yn||(Yn=xr(0))}function Ar(t){return null===t||void 0===t?Kr():jr(t)?t:Kr().withMutations(function(e){var r=l(t);se(r.size),r.forEach(function(t){return e.add(t)})})}function jr(t){return!(!t||!t[Qn])}function Rr(t,e){return t.__ownerID?(t.size=e.size,t._map=e,t):e===t._map?t:0===e.size?t.__empty():t.__make(e)}function Ur(t,e){var r=Object.create(Xn);return r.size=t?t.size:0,r._map=t,r.__ownerID=e,r | ||
| }function Kr(){return Fn||(Fn=Ur(Qe()))}function Lr(t){return null===t||void 0===t?Br():Tr(t)?t:Br().withMutations(function(e){var r=l(t);se(r.size),r.forEach(function(t){return e.add(t)})})}function Tr(t){return jr(t)&&w(t)}function Wr(t,e){var r=Object.create(Gn);return r.size=t?t.size:0,r._map=t,r.__ownerID=e,r}function Br(){return Zn||(Zn=Wr(Dr()))}function Cr(t,e){var r=function(t){return this instanceof r?void(this._map=Le(t)):new r(t)},n=Object.keys(t),i=r.prototype=Object.create($n);i.constructor=r,e&&(i._name=e),i._defaultValues=t,i._keys=n,i.size=n.length;try{n.forEach(function(t){Object.defineProperty(r.prototype,t,{get:function(){return this.get(t)},set:function(e){ue(this.__ownerID,"Cannot set on an immutable record."),this.set(t,e)}})})}catch(o){}return r}function Jr(t,e,r){var n=Object.create(Object.getPrototypeOf(t));return n._map=e,n.__ownerID=r,n}function Pr(t){return t._name||t.constructor.name}function Hr(t,e){if(t===e)return!0;if(!y(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||d(t)!==d(e)||m(t)!==m(e)||w(t)!==w(e))return!1;if(0===t.size&&0===e.size)return!0;var r=!g(t);if(w(t)){var n=t.entries();return e.every(function(t,e){var i=n.next().value;return i&&X(i[1],t)&&(r||X(i[0],e))})&&n.next().done}var i=!1;if(void 0===t.size)if(void 0===e.size)t.cacheResult();else{i=!0;var o=t;t=e,e=o}var u=!0,s=e.__iterate(function(e,n){return(r?t.has(e):i?X(e,t.get(n,fn)):X(t.get(n,fn),e))?void 0:(u=!1,!1)});return u&&t.size===s}function Nr(t,e,r){if(!(this instanceof Nr))return new Nr(t,e,r);if(ue(0!==r,"Cannot step a Range by 0"),t=t||0,void 0===e&&(e=1/0),r=void 0===r?1:Math.abs(r),t>e&&(r=-r),this._start=t,this._end=e,this._step=r,this.size=Math.max(0,Math.ceil((e-t)/r-1)+1),0===this.size){if(ti)return ti;ti=this}}function Vr(t,e){if(!(this instanceof Vr))return new Vr(t,e);if(this._value=t,this.size=void 0===e?1/0:Math.max(0,e),0===this.size){if(ei)return ei;ei=this}}function Yr(t,e){var r=function(r){t.prototype[r]=e[r]};return Object.keys(e).forEach(r),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(e).forEach(r),t | ||
| }function Qr(t,e){return e}function Xr(t,e){return[e,t]}function Fr(t){return function(){return!t.apply(this,arguments)}}function Gr(t){return function(){return-t.apply(this,arguments)}}function Zr(t){return"string"==typeof t?JSON.stringify(t):t}function $r(){return i(arguments)}function tn(t,e){return e>t?1:t>e?-1:0}function en(t){if(1/0===t.size)return 0;var e=w(t),r=d(t),n=e?1:0,i=t.__iterate(r?e?function(t,e){n=31*n+nn(ee(t),ee(e))|0}:function(t,e){n=n+nn(ee(t),ee(e))|0}:e?function(t){n=31*n+ee(t)|0}:function(t){n=n+ee(t)|0});return rn(i,n)}function rn(t,e){return e=qn(e,3432918353),e=qn(e<<15|e>>>-15,461845907),e=qn(e<<13|e>>>-13,5),e=(e+3864292196|0)^t,e=qn(e^e>>>16,2246822507),e=qn(e^e>>>13,3266489909),e=te(e^e>>>16)}function nn(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}var on=Array.prototype.slice,un="delete",sn=5,an=1<<sn,hn=an-1,fn={},cn={value:!1},_n={value:!1};t(p,_),t(v,_),t(l,_),_.isIterable=y,_.isKeyed=d,_.isIndexed=m,_.isAssociative=g,_.isOrdered=w,_.Keyed=p,_.Indexed=v,_.Set=l;var pn="@@__IMMUTABLE_ITERABLE__@@",vn="@@__IMMUTABLE_KEYED__@@",ln="@@__IMMUTABLE_INDEXED__@@",yn="@@__IMMUTABLE_ORDERED__@@",dn=0,mn=1,gn=2,wn="function"==typeof Symbol&&Symbol.iterator,Sn="@@iterator",zn=wn||Sn;S.prototype.toString=function(){return"[Iterator]"},S.KEYS=dn,S.VALUES=mn,S.ENTRIES=gn,S.prototype.inspect=S.prototype.toSource=function(){return""+this},S.prototype[zn]=function(){return this},t(O,_),O.of=function(){return O(arguments)},O.prototype.toSeq=function(){return this},O.prototype.toString=function(){return this.__toString("Seq {","}")},O.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},O.prototype.__iterate=function(t,e){return P(this,t,e,!0)},O.prototype.__iterator=function(t,e){return H(this,t,e,!0)},t(x,O),x.of=function(){return x(arguments)},x.prototype.toKeyedSeq=function(){return this},x.prototype.toSeq=function(){return this},t(k,O),k.of=function(){return k(arguments)},k.prototype.toIndexedSeq=function(){return this | ||
| },k.prototype.toString=function(){return this.__toString("Seq [","]")},k.prototype.__iterate=function(t,e){return P(this,t,e,!1)},k.prototype.__iterator=function(t,e){return H(this,t,e,!1)},t(A,O),A.of=function(){return A(arguments)},A.prototype.toSetSeq=function(){return this},O.isSeq=L,O.Keyed=x,O.Set=A,O.Indexed=k;var In="@@__IMMUTABLE_SEQ__@@";O.prototype[In]=!0,t(j,k),j.prototype.get=function(t,e){return this.has(t)?this._array[u(this,t)]:e},j.prototype.__iterate=function(t,e){for(var r=this._array,n=r.length-1,i=0;n>=i;i++)if(t(r[e?n-i:i],i,this)===!1)return i+1;return i},j.prototype.__iterator=function(t,e){var r=this._array,n=r.length-1,i=0;return new S(function(){return i>n?I():z(t,i,r[e?n-i++:i++])})},t(R,x),R.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},R.prototype.has=function(t){return this._object.hasOwnProperty(t)},R.prototype.__iterate=function(t,e){for(var r=this._object,n=this._keys,i=n.length-1,o=0;i>=o;o++){var u=n[e?i-o:o];if(t(r[u],u,this)===!1)return o+1}return o},R.prototype.__iterator=function(t,e){var r=this._object,n=this._keys,i=n.length-1,o=0;return new S(function(){var u=n[e?i-o:o];return o++>i?I():z(t,u,r[u])})},R.prototype[yn]=!0,t(U,k),U.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);var r=this._iterable,n=D(r),i=0;if(q(n))for(var o;!(o=n.next()).done&&t(o.value,i++,this)!==!1;);return i},U.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var r=this._iterable,n=D(r);if(!q(n))return new S(I);var i=0;return new S(function(){var e=n.next();return e.done?e:z(t,i++,e.value)})},t(K,k),K.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);for(var r=this._iterator,n=this._iteratorCache,i=0;n.length>i;)if(t(n[i],i++,this)===!1)return i;for(var o;!(o=r.next()).done;){var u=o.value;if(n[i]=u,t(u,i++,this)===!1)break}return i},K.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var r=this._iterator,n=this._iteratorCache,i=0; | ||
| return new S(function(){if(i>=n.length){var e=r.next();if(e.done)return e;n[i]=e.value}return z(t,i,n[i++])})};var bn;t(N,_),t(V,N),t(Y,N),t(Q,N),N.Keyed=V,N.Indexed=Y,N.Set=Q;var qn="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(t,e){t=0|t,e=0|e;var r=65535&t,n=65535&e;return r*n+((t>>>16)*n+r*(e>>>16)<<16>>>0)|0},Dn=function(){try{return Object.defineProperty({},"x",{}),!0}catch(t){return!1}}(),Mn="function"==typeof WeakMap&&new WeakMap,En=0,On="__immutablehash__";"function"==typeof Symbol&&(On=Symbol(On));var xn=16,kn=255,An=0,jn={};t(ae,x),ae.prototype.get=function(t,e){return this._iter.get(t,e)},ae.prototype.has=function(t){return this._iter.has(t)},ae.prototype.valueSeq=function(){return this._iter.valueSeq()},ae.prototype.reverse=function(){var t=this,e=ve(this,!0);return this._useKeys||(e.valueSeq=function(){return t._iter.toSeq().reverse()}),e},ae.prototype.map=function(t,e){var r=this,n=pe(this,t,e);return this._useKeys||(n.valueSeq=function(){return r._iter.toSeq().map(t,e)}),n},ae.prototype.__iterate=function(t,e){var r,n=this;return this._iter.__iterate(this._useKeys?function(e,r){return t(e,r,n)}:(r=e?ke(this):0,function(i){return t(i,e?--r:r++,n)}),e)},ae.prototype.__iterator=function(t,e){if(this._useKeys)return this._iter.__iterator(t,e);var r=this._iter.__iterator(mn,e),n=e?ke(this):0;return new S(function(){var i=r.next();return i.done?i:z(t,e?--n:n++,i.value,i)})},ae.prototype[yn]=!0,t(he,k),he.prototype.contains=function(t){return this._iter.contains(t)},he.prototype.__iterate=function(t,e){var r=this,n=0;return this._iter.__iterate(function(e){return t(e,n++,r)},e)},he.prototype.__iterator=function(t,e){var r=this._iter.__iterator(mn,e),n=0;return new S(function(){var e=r.next();return e.done?e:z(t,n++,e.value,e)})},t(fe,A),fe.prototype.has=function(t){return this._iter.contains(t)},fe.prototype.__iterate=function(t,e){var r=this;return this._iter.__iterate(function(e){return t(e,e,r)},e)},fe.prototype.__iterator=function(t,e){var r=this._iter.__iterator(mn,e); | ||
| return new S(function(){var e=r.next();return e.done?e:z(t,e.value,e.value,e)})},t(ce,x),ce.prototype.entrySeq=function(){return this._iter.toSeq()},ce.prototype.__iterate=function(t,e){var r=this;return this._iter.__iterate(function(e){return e?(xe(e),t(e[1],e[0],r)):void 0},e)},ce.prototype.__iterator=function(t,e){var r=this._iter.__iterator(mn,e);return new S(function(){for(;;){var e=r.next();if(e.done)return e;var n=e.value;if(n)return xe(n),t===gn?e:z(t,n[0],n[1],e)}})},he.prototype.cacheResult=ae.prototype.cacheResult=fe.prototype.cacheResult=ce.prototype.cacheResult=Re,t(Le,V),Le.prototype.toString=function(){return this.__toString("Map {","}")},Le.prototype.get=function(t,e){return this._root?this._root.get(0,void 0,t,e):e},Le.prototype.set=function(t,e){return Xe(this,t,e)},Le.prototype.setIn=function(t,e){return this.updateIn(t,fn,function(){return e})},Le.prototype.remove=function(t){return Xe(this,t,fn)},Le.prototype.deleteIn=function(t){return this.updateIn(t,function(){return fn})},Le.prototype.update=function(t,e,r){return 1===arguments.length?t(this):this.updateIn([t],e,r)},Le.prototype.updateIn=function(t,e,r){r||(r=e,e=void 0);var n=or(this,Ke(t),e,r);return n===fn?void 0:n},Le.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):Qe()},Le.prototype.merge=function(){return rr(this,void 0,arguments)},Le.prototype.mergeWith=function(t){var e=on.call(arguments,1);return rr(this,t,e)},Le.prototype.mergeIn=function(t){var e=on.call(arguments,1);return this.updateIn(t,Qe(),function(t){return t.merge.apply(t,e)})},Le.prototype.mergeDeep=function(){return rr(this,nr(void 0),arguments)},Le.prototype.mergeDeepWith=function(t){var e=on.call(arguments,1);return rr(this,nr(t),e)},Le.prototype.mergeDeepIn=function(t){var e=on.call(arguments,1);return this.updateIn(t,Qe(),function(t){return t.mergeDeep.apply(t,e)})},Le.prototype.sort=function(t){return Ir(qe(this,t))},Le.prototype.sortBy=function(t,e){return Ir(qe(this,e,t))},Le.prototype.withMutations=function(t){var e=this.asMutable(); | ||
| return t(e),e.wasAltered()?e.__ensureOwner(this.__ownerID):this},Le.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new n)},Le.prototype.asImmutable=function(){return this.__ensureOwner()},Le.prototype.wasAltered=function(){return this.__altered},Le.prototype.__iterator=function(t,e){return new He(this,t,e)},Le.prototype.__iterate=function(t,e){var r=this,n=0;return this._root&&this._root.iterate(function(e){return n++,t(e[1],e[0],r)},e),n},Le.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Ye(this.size,this._root,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Le.isMap=Te;var Rn="@@__IMMUTABLE_MAP__@@",Un=Le.prototype;Un[Rn]=!0,Un[un]=Un.remove,Un.removeIn=Un.deleteIn,We.prototype.get=function(t,e,r,n){for(var i=this.entries,o=0,u=i.length;u>o;o++)if(X(r,i[o][0]))return i[o][1];return n},We.prototype.update=function(t,e,n,o,u,s,a){for(var h=u===fn,f=this.entries,c=0,_=f.length;_>c&&!X(o,f[c][0]);c++);var p=_>c;if(p?f[c][1]===u:h)return this;if(r(a),(h||!p)&&r(s),!h||1!==f.length){if(!p&&!h&&f.length>=Ln)return $e(t,f,o,u);var v=t&&t===this.ownerID,l=v?f:i(f);return p?h?c===_-1?l.pop():l[c]=l.pop():l[c]=[o,u]:l.push([o,u]),v?(this.entries=l,this):new We(t,l)}},Be.prototype.get=function(t,e,r,n){void 0===e&&(e=ee(r));var i=1<<((0===t?e:e>>>t)&hn),o=this.bitmap;return 0===(o&i)?n:this.nodes[ur(o&i-1)].get(t+sn,e,r,n)},Be.prototype.update=function(t,e,r,n,i,o,u){void 0===r&&(r=ee(n));var s=(0===e?r:r>>>e)&hn,a=1<<s,h=this.bitmap,f=0!==(h&a);if(!f&&i===fn)return this;var c=ur(h&a-1),_=this.nodes,p=f?_[c]:void 0,v=Fe(p,t,e+sn,r,n,i,o,u);if(v===p)return this;if(!f&&v&&_.length>=Tn)return er(t,_,h,s,v);if(f&&!v&&2===_.length&&Ge(_[1^c]))return _[1^c];if(f&&v&&1===_.length&&Ge(v))return v;var l=t&&t===this.ownerID,y=f?v?h:h^a:h|a,d=f?v?sr(_,c,v,l):hr(_,c,l):ar(_,c,v,l);return l?(this.bitmap=y,this.nodes=d,this):new Be(t,y,d)},Ce.prototype.get=function(t,e,r,n){void 0===e&&(e=ee(r));var i=(0===t?e:e>>>t)&hn,o=this.nodes[i];return o?o.get(t+sn,e,r,n):n},Ce.prototype.update=function(t,e,r,n,i,o,u){void 0===r&&(r=ee(n)); | ||
| var s=(0===e?r:r>>>e)&hn,a=i===fn,h=this.nodes,f=h[s];if(a&&!f)return this;var c=Fe(f,t,e+sn,r,n,i,o,u);if(c===f)return this;var _=this.count;if(f){if(!c&&(_--,Wn>_))return tr(t,h,_,s)}else _++;var p=t&&t===this.ownerID,v=sr(h,s,c,p);return p?(this.count=_,this.nodes=v,this):new Ce(t,_,v)},Je.prototype.get=function(t,e,r,n){for(var i=this.entries,o=0,u=i.length;u>o;o++)if(X(r,i[o][0]))return i[o][1];return n},Je.prototype.update=function(t,e,n,o,u,s,a){void 0===n&&(n=ee(o));var h=u===fn;if(n!==this.keyHash)return h?this:(r(a),r(s),Ze(this,t,e,n,[o,u]));for(var f=this.entries,c=0,_=f.length;_>c&&!X(o,f[c][0]);c++);var p=_>c;if(p?f[c][1]===u:h)return this;if(r(a),(h||!p)&&r(s),h&&2===_)return new Pe(t,this.keyHash,f[1^c]);var v=t&&t===this.ownerID,l=v?f:i(f);return p?h?c===_-1?l.pop():l[c]=l.pop():l[c]=[o,u]:l.push([o,u]),v?(this.entries=l,this):new Je(t,this.keyHash,l)},Pe.prototype.get=function(t,e,r,n){return X(r,this.entry[0])?this.entry[1]:n},Pe.prototype.update=function(t,e,n,i,o,u,s){var a=o===fn,h=X(i,this.entry[0]);return(h?o===this.entry[1]:a)?this:(r(s),a?void r(u):h?t&&t===this.ownerID?(this.entry[1]=o,this):new Pe(t,this.keyHash,[i,o]):(r(u),Ze(this,t,e,ee(i),[i,o])))},We.prototype.iterate=Je.prototype.iterate=function(t,e){for(var r=this.entries,n=0,i=r.length-1;i>=n;n++)if(t(r[e?i-n:n])===!1)return!1},Be.prototype.iterate=Ce.prototype.iterate=function(t,e){for(var r=this.nodes,n=0,i=r.length-1;i>=n;n++){var o=r[e?i-n:n];if(o&&o.iterate(t,e)===!1)return!1}},Pe.prototype.iterate=function(t){return t(this.entry)},t(He,S),He.prototype.next=function(){for(var t=this._type,e=this._stack;e;){var r,n=e.node,i=e.index++;if(n.entry){if(0===i)return Ne(t,n.entry)}else if(n.entries){if(r=n.entries.length-1,r>=i)return Ne(t,n.entries[this._reverse?r-i:i])}else if(r=n.nodes.length-1,r>=i){var o=n.nodes[this._reverse?r-i:i];if(o){if(o.entry)return Ne(t,o.entry);e=this._stack=Ve(o,e)}continue}e=this._stack=this._stack.__prev}return I()};var Kn,Ln=an/4,Tn=an/2,Wn=an/4;t(fr,Y),fr.of=function(){return this(arguments)},fr.prototype.toString=function(){return this.__toString("List [","]") | ||
| },fr.prototype.get=function(t,e){if(t=u(this,t),0>t||t>=this.size)return e;t+=this._origin;var r=gr(this,t);return r&&r.array[t&hn]},fr.prototype.set=function(t,e){return yr(this,t,e)},fr.prototype.remove=function(t){return this.has(t)?0===t?this.shift():t===this.size-1?this.pop():this.splice(t,1):this},fr.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=this._origin=this._capacity=0,this._level=sn,this._root=this._tail=null,this.__hash=void 0,this.__altered=!0,this):lr()},fr.prototype.push=function(){var t=arguments,e=this.size;return this.withMutations(function(r){wr(r,0,e+t.length);for(var n=0;t.length>n;n++)r.set(e+n,t[n])})},fr.prototype.pop=function(){return wr(this,0,-1)},fr.prototype.unshift=function(){var t=arguments;return this.withMutations(function(e){wr(e,-t.length);for(var r=0;t.length>r;r++)e.set(r,t[r])})},fr.prototype.shift=function(){return wr(this,1)},fr.prototype.merge=function(){return Sr(this,void 0,arguments)},fr.prototype.mergeWith=function(t){var e=on.call(arguments,1);return Sr(this,t,e)},fr.prototype.mergeDeep=function(){return Sr(this,nr(void 0),arguments)},fr.prototype.mergeDeepWith=function(t){var e=on.call(arguments,1);return Sr(this,nr(t),e)},fr.prototype.setSize=function(t){return wr(this,0,t)},fr.prototype.slice=function(t,e){var r=this.size;return a(t,e,r)?this:wr(this,h(t,r),f(e,r))},fr.prototype.__iterator=function(t,e){var r=0,n=pr(this,e);return new S(function(){var e=n();return e===Pn?I():z(t,r++,e)})},fr.prototype.__iterate=function(t,e){for(var r,n=0,i=pr(this,e);(r=i())!==Pn&&t(r,n++,this)!==!1;);return n},fr.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?vr(this._origin,this._capacity,this._level,this._root,this._tail,t,this.__hash):(this.__ownerID=t,this)},fr.isList=cr;var Bn="@@__IMMUTABLE_LIST__@@",Cn=fr.prototype;Cn[Bn]=!0,Cn[un]=Cn.remove,Cn.setIn=Un.setIn,Cn.deleteIn=Cn.removeIn=Un.removeIn,Cn.update=Un.update,Cn.updateIn=Un.updateIn,Cn.mergeIn=Un.mergeIn,Cn.mergeDeepIn=Un.mergeDeepIn,Cn.withMutations=Un.withMutations,Cn.asMutable=Un.asMutable,Cn.asImmutable=Un.asImmutable,Cn.wasAltered=Un.wasAltered,_r.prototype.removeBefore=function(t,e,r){if(r===e?1<<e:0||0===this.array.length)return this; | ||
| var n=r>>>e&hn;if(n>=this.array.length)return new _r([],t);var i,o=0===n;if(e>0){var u=this.array[n];if(i=u&&u.removeBefore(t,e-sn,r),i===u&&o)return this}if(o&&!i)return this;var s=mr(this,t);if(!o)for(var a=0;n>a;a++)s.array[a]=void 0;return i&&(s.array[n]=i),s},_r.prototype.removeAfter=function(t,e,r){if(r===e?1<<e:0||0===this.array.length)return this;var n=r-1>>>e&hn;if(n>=this.array.length)return this;var i,o=n===this.array.length-1;if(e>0){var u=this.array[n];if(i=u&&u.removeAfter(t,e-sn,r),i===u&&o)return this}if(o&&!i)return this;var s=mr(this,t);return o||s.array.pop(),i&&(s.array[n]=i),s};var Jn,Pn={};t(Ir,Le),Ir.of=function(){return this(arguments)},Ir.prototype.toString=function(){return this.__toString("OrderedMap {","}")},Ir.prototype.get=function(t,e){var r=this._map.get(t);return void 0!==r?this._list.get(r)[1]:e},Ir.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this):Dr()},Ir.prototype.set=function(t,e){return Mr(this,t,e)},Ir.prototype.remove=function(t){return Mr(this,t,fn)},Ir.prototype.wasAltered=function(){return this._map.wasAltered()||this._list.wasAltered()},Ir.prototype.__iterate=function(t,e){var r=this;return this._list.__iterate(function(e){return e&&t(e[1],e[0],r)},e)},Ir.prototype.__iterator=function(t,e){return this._list.fromEntrySeq().__iterator(t,e)},Ir.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map.__ensureOwner(t),r=this._list.__ensureOwner(t);return t?qr(e,r,t,this.__hash):(this.__ownerID=t,this._map=e,this._list=r,this)},Ir.isOrderedMap=br,Ir.prototype[yn]=!0,Ir.prototype[un]=Ir.prototype.remove;var Hn;t(Er,Y),Er.of=function(){return this(arguments)},Er.prototype.toString=function(){return this.__toString("Stack [","]")},Er.prototype.get=function(t,e){for(var r=this._head;r&&t--;)r=r.next;return r?r.value:e},Er.prototype.peek=function(){return this._head&&this._head.value},Er.prototype.push=function(){if(0===arguments.length)return this;for(var t=this.size+arguments.length,e=this._head,r=arguments.length-1;r>=0;r--)e={value:arguments[r],next:e}; | ||
| return this.__ownerID?(this.size=t,this._head=e,this.__hash=void 0,this.__altered=!0,this):xr(t,e)},Er.prototype.pushAll=function(t){if(t=v(t),0===t.size)return this;se(t.size);var e=this.size,r=this._head;return t.reverse().forEach(function(t){e++,r={value:t,next:r}}),this.__ownerID?(this.size=e,this._head=r,this.__hash=void 0,this.__altered=!0,this):xr(e,r)},Er.prototype.pop=function(){return this.slice(1)},Er.prototype.unshift=function(){return this.push.apply(this,arguments)},Er.prototype.unshiftAll=function(t){return this.pushAll(t)},Er.prototype.shift=function(){return this.pop.apply(this,arguments)},Er.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):kr()},Er.prototype.slice=function(t,e){if(a(t,e,this.size))return this;var r=h(t,this.size),n=f(e,this.size);if(n!==this.size)return Y.prototype.slice.call(this,t,e);for(var i=this.size-r,o=this._head;r--;)o=o.next;return this.__ownerID?(this.size=i,this._head=o,this.__hash=void 0,this.__altered=!0,this):xr(i,o)},Er.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?xr(this.size,this._head,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Er.prototype.__iterate=function(t,e){if(e)return this.toSeq().cacheResult.__iterate(t,e);for(var r=0,n=this._head;n&&t(n.value,r++,this)!==!1;)n=n.next;return r},Er.prototype.__iterator=function(t,e){if(e)return this.toSeq().cacheResult().__iterator(t,e);var r=0,n=this._head;return new S(function(){if(n){var e=n.value;return n=n.next,z(t,r++,e)}return I()})},Er.isStack=Or;var Nn="@@__IMMUTABLE_STACK__@@",Vn=Er.prototype;Vn[Nn]=!0,Vn.withMutations=Un.withMutations,Vn.asMutable=Un.asMutable,Vn.asImmutable=Un.asImmutable,Vn.wasAltered=Un.wasAltered;var Yn;t(Ar,Q),Ar.of=function(){return this(arguments)},Ar.fromKeys=function(t){return this(p(t).keySeq())},Ar.prototype.toString=function(){return this.__toString("Set {","}")},Ar.prototype.has=function(t){return this._map.has(t)},Ar.prototype.add=function(t){return Rr(this,this._map.set(t,!0)) | ||
| },Ar.prototype.remove=function(t){return Rr(this,this._map.remove(t))},Ar.prototype.clear=function(){return Rr(this,this._map.clear())},Ar.prototype.union=function(){var t=on.call(arguments,0);return t=t.filter(function(t){return 0!==t.size}),0===t.length?this:0===this.size&&1===t.length?this.constructor(t[0]):this.withMutations(function(e){for(var r=0;t.length>r;r++)l(t[r]).forEach(function(t){return e.add(t)})})},Ar.prototype.intersect=function(){var t=on.call(arguments,0);if(0===t.length)return this;t=t.map(function(t){return l(t)});var e=this;return this.withMutations(function(r){e.forEach(function(e){t.every(function(t){return t.contains(e)})||r.remove(e)})})},Ar.prototype.subtract=function(){var t=on.call(arguments,0);if(0===t.length)return this;t=t.map(function(t){return l(t)});var e=this;return this.withMutations(function(r){e.forEach(function(e){t.some(function(t){return t.contains(e)})&&r.remove(e)})})},Ar.prototype.merge=function(){return this.union.apply(this,arguments)},Ar.prototype.mergeWith=function(){var t=on.call(arguments,1);return this.union.apply(this,t)},Ar.prototype.sort=function(t){return Lr(qe(this,t))},Ar.prototype.sortBy=function(t,e){return Lr(qe(this,e,t))},Ar.prototype.wasAltered=function(){return this._map.wasAltered()},Ar.prototype.__iterate=function(t,e){var r=this;return this._map.__iterate(function(e,n){return t(n,n,r)},e)},Ar.prototype.__iterator=function(t,e){return this._map.map(function(t,e){return e}).__iterator(t,e)},Ar.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map.__ensureOwner(t);return t?this.__make(e,t):(this.__ownerID=t,this._map=e,this)},Ar.isSet=jr;var Qn="@@__IMMUTABLE_SET__@@",Xn=Ar.prototype;Xn[Qn]=!0,Xn[un]=Xn.remove,Xn.mergeDeep=Xn.merge,Xn.mergeDeepWith=Xn.mergeWith,Xn.withMutations=Un.withMutations,Xn.asMutable=Un.asMutable,Xn.asImmutable=Un.asImmutable,Xn.__empty=Kr,Xn.__make=Ur;var Fn;t(Lr,Ar),Lr.of=function(){return this(arguments)},Lr.fromKeys=function(t){return this(p(t).keySeq())},Lr.prototype.toString=function(){return this.__toString("OrderedSet {","}") | ||
| },Lr.isOrderedSet=Tr;var Gn=Lr.prototype;Gn[yn]=!0,Gn.__empty=Br,Gn.__make=Wr;var Zn;t(Cr,V),Cr.prototype.toString=function(){return this.__toString(Pr(this)+" {","}")},Cr.prototype.has=function(t){return this._defaultValues.hasOwnProperty(t)},Cr.prototype.get=function(t,e){if(!this.has(t))return e;var r=this._defaultValues[t];return this._map?this._map.get(t,r):r},Cr.prototype.clear=function(){if(this.__ownerID)return this._map&&this._map.clear(),this;var t=Object.getPrototypeOf(this).constructor;return t._empty||(t._empty=Jr(this,Qe()))},Cr.prototype.set=function(t,e){if(!this.has(t))throw Error('Cannot set unknown key "'+t+'" on '+Pr(this));var r=this._map&&this._map.set(t,e);return this.__ownerID||r===this._map?this:Jr(this,r)},Cr.prototype.remove=function(t){if(!this.has(t))return this;var e=this._map&&this._map.remove(t);return this.__ownerID||e===this._map?this:Jr(this,e)},Cr.prototype.wasAltered=function(){return this._map.wasAltered()},Cr.prototype.__iterator=function(t,e){var r=this;return p(this._defaultValues).map(function(t,e){return r.get(e)}).__iterator(t,e)},Cr.prototype.__iterate=function(t,e){var r=this;return p(this._defaultValues).map(function(t,e){return r.get(e)}).__iterate(t,e)},Cr.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map&&this._map.__ensureOwner(t);return t?Jr(this,e,t):(this.__ownerID=t,this._map=e,this)};var $n=Cr.prototype;$n[un]=$n.remove,$n.deleteIn=$n.removeIn=Un.removeIn,$n.merge=Un.merge,$n.mergeWith=Un.mergeWith,$n.mergeIn=Un.mergeIn,$n.mergeDeep=Un.mergeDeep,$n.mergeDeepWith=Un.mergeDeepWith,$n.mergeDeepIn=Un.mergeDeepIn,$n.setIn=Un.setIn,$n.update=Un.update,$n.updateIn=Un.updateIn,$n.withMutations=Un.withMutations,$n.asMutable=Un.asMutable,$n.asImmutable=Un.asImmutable,t(Nr,k),Nr.prototype.toString=function(){return 0===this.size?"Range []":"Range [ "+this._start+"..."+this._end+(this._step>1?" by "+this._step:"")+" ]"},Nr.prototype.get=function(t,e){return this.has(t)?this._start+u(this,t)*this._step:e},Nr.prototype.contains=function(t){var e=(t-this._start)/this._step; | ||
| return e>=0&&this.size>e&&e===Math.floor(e)},Nr.prototype.slice=function(t,e){return a(t,e,this.size)?this:(t=h(t,this.size),e=f(e,this.size),t>=e?new Nr(0,0):new Nr(this.get(t,this._end),this.get(e,this._end),this._step))},Nr.prototype.indexOf=function(t){var e=t-this._start;if(e%this._step===0){var r=e/this._step;if(r>=0&&this.size>r)return r}return-1},Nr.prototype.lastIndexOf=function(t){return this.indexOf(t)},Nr.prototype.__iterate=function(t,e){for(var r=this.size-1,n=this._step,i=e?this._start+r*n:this._start,o=0;r>=o;o++){if(t(i,o,this)===!1)return o+1;i+=e?-n:n}return o},Nr.prototype.__iterator=function(t,e){var r=this.size-1,n=this._step,i=e?this._start+r*n:this._start,o=0;return new S(function(){var u=i;return i+=e?-n:n,o>r?I():z(t,o++,u)})},Nr.prototype.equals=function(t){return t instanceof Nr?this._start===t._start&&this._end===t._end&&this._step===t._step:Hr(this,t)};var ti;t(Vr,k),Vr.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},Vr.prototype.get=function(t,e){return this.has(t)?this._value:e},Vr.prototype.contains=function(t){return X(this._value,t)},Vr.prototype.slice=function(t,e){var r=this.size;return a(t,e,r)?this:new Vr(this._value,f(e,r)-h(t,r))},Vr.prototype.reverse=function(){return this},Vr.prototype.indexOf=function(t){return X(this._value,t)?0:-1},Vr.prototype.lastIndexOf=function(t){return X(this._value,t)?this.size:-1},Vr.prototype.__iterate=function(t){for(var e=0;this.size>e;e++)if(t(this._value,e,this)===!1)return e+1;return e},Vr.prototype.__iterator=function(t){var e=this,r=0;return new S(function(){return e.size>r?z(t,r++,e._value):I()})},Vr.prototype.equals=function(t){return t instanceof Vr?X(this._value,t._value):Hr(t)};var ei;_.Iterator=S,Yr(_,{toArray:function(){se(this.size);var t=Array(this.size||0);return this.valueSeq().__iterate(function(e,r){t[r]=e}),t},toIndexedSeq:function(){return new he(this)},toJS:function(){return this.toSeq().map(function(t){return t&&"function"==typeof t.toJS?t.toJS():t}).__toJS() | ||
| },toJSON:function(){return this.toSeq().map(function(t){return t&&"function"==typeof t.toJSON?t.toJSON():t}).__toJS()},toKeyedSeq:function(){return new ae(this,!0)},toMap:function(){return Le(this.toKeyedSeq())},toObject:function(){se(this.size);var t={};return this.__iterate(function(e,r){t[r]=e}),t},toOrderedMap:function(){return Ir(this.toKeyedSeq())},toOrderedSet:function(){return Lr(d(this)?this.valueSeq():this)},toSet:function(){return Ar(d(this)?this.valueSeq():this)},toSetSeq:function(){return new fe(this)},toSeq:function(){return m(this)?this.toIndexedSeq():d(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Er(d(this)?this.valueSeq():this)},toList:function(){return fr(d(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(t,e){return 0===this.size?t+e:t+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+e},concat:function(){var t=on.call(arguments,0);return Oe(this,Se(this,t))},contains:function(t){return this.some(function(e){return X(e,t)})},entries:function(){return this.__iterator(gn)},every:function(t,e){se(this.size);var r=!0;return this.__iterate(function(n,i,o){return t.call(e,n,i,o)?void 0:(r=!1,!1)}),r},filter:function(t,e){return Oe(this,le(this,t,e,!0))},find:function(t,e,r){var n=this.findEntry(t,e);return n?n[1]:r},findEntry:function(t,e){var r;return this.__iterate(function(n,i,o){return t.call(e,n,i,o)?(r=[i,n],!1):void 0}),r},findLastEntry:function(t,e){return this.toSeq().reverse().findEntry(t,e)},forEach:function(t,e){return se(this.size),this.__iterate(e?t.bind(e):t)},join:function(t){se(this.size),t=void 0!==t?""+t:",";var e="",r=!0;return this.__iterate(function(n){r?r=!1:e+=t,e+=null!==n&&void 0!==n?n:""}),e},keys:function(){return this.__iterator(dn)},map:function(t,e){return Oe(this,pe(this,t,e))},reduce:function(t,e,r){se(this.size);var n,i;return arguments.length<2?i=!0:n=e,this.__iterate(function(e,o,u){i?(i=!1,n=e):n=t.call(r,n,e,o,u)}),n},reduceRight:function(){var t=this.toKeyedSeq().reverse();return t.reduce.apply(t,arguments) | ||
| },reverse:function(){return Oe(this,ve(this,!0))},slice:function(t,e){return Oe(this,me(this,t,e,!0))},some:function(t,e){return!this.every(Fr(t),e)},sort:function(t){return Oe(this,qe(this,t))},values:function(){return this.__iterator(mn)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some(function(){return!0})},count:function(t,e){return o(t?this.toSeq().filter(t,e):this)},countBy:function(t,e){return ye(this,t,e)},equals:function(t){return Hr(this,t)},entrySeq:function(){var t=this;if(t._cache)return new j(t._cache);var e=t.toSeq().map(Xr).toIndexedSeq();return e.fromEntrySeq=function(){return t.toSeq()},e},filterNot:function(t,e){return this.filter(Fr(t),e)},findLast:function(t,e,r){return this.toKeyedSeq().reverse().find(t,e,r)},first:function(){return this.find(s)},flatMap:function(t,e){return Oe(this,Ie(this,t,e))},flatten:function(t){return Oe(this,ze(this,t,!0))},fromEntrySeq:function(){return new ce(this)},get:function(t,e){return this.find(function(e,r){return X(r,t)},void 0,e)},getIn:function(t,e){for(var r,n=this,i=Ke(t);!(r=i.next()).done;){var o=r.value;if(n=n&&n.get?n.get(o,fn):fn,n===fn)return e}return n},groupBy:function(t,e){return de(this,t,e)},has:function(t){return this.get(t,fn)!==fn},hasIn:function(t){return this.getIn(t,fn)!==fn},isSubset:function(t){return t="function"==typeof t.contains?t:_(t),this.every(function(e){return t.contains(e)})},isSuperset:function(t){return t.isSubset(this)},keySeq:function(){return this.toSeq().map(Qr).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},max:function(t){return De(this,t)},maxBy:function(t,e){return De(this,e,t)},min:function(t){return De(this,t?Gr(t):tn)},minBy:function(t,e){return De(this,e?Gr(e):tn,t)},rest:function(){return this.slice(1)},skip:function(t){return this.slice(Math.max(0,t))},skipLast:function(t){return Oe(this,this.toSeq().reverse().skip(t).reverse())},skipWhile:function(t,e){return Oe(this,we(this,t,e,!0))},skipUntil:function(t,e){return this.skipWhile(Fr(t),e) | ||
| },sortBy:function(t,e){return Oe(this,qe(this,e,t))},take:function(t){return this.slice(0,Math.max(0,t))},takeLast:function(t){return Oe(this,this.toSeq().reverse().take(t).reverse())},takeWhile:function(t,e){return Oe(this,ge(this,t,e))},takeUntil:function(t,e){return this.takeWhile(Fr(t),e)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=en(this))}});var ri=_.prototype;ri[pn]=!0,ri[zn]=ri.values,ri.__toJS=ri.toArray,ri.__toStringMapper=Zr,ri.inspect=ri.toSource=function(){return""+this},ri.chain=ri.flatMap,function(){try{Object.defineProperty(ri,"length",{get:function(){if(!_.noLengthWarning){var t;try{throw Error()}catch(e){t=e.stack}if(-1===t.indexOf("_wrapObject"))return console&&console.warn&&console.warn("iterable.length has been deprecated, use iterable.size or iterable.count(). This warning will become a silent error in a future version. "+t),this.size}}})}catch(t){}}(),Yr(p,{flip:function(){return Oe(this,_e(this))},findKey:function(t,e){var r=this.findEntry(t,e);return r&&r[0]},findLastKey:function(t,e){return this.toSeq().reverse().findKey(t,e)},keyOf:function(t){return this.findKey(function(e){return X(e,t)})},lastKeyOf:function(t){return this.findLastKey(function(e){return X(e,t)})},mapEntries:function(t,e){var r=this,n=0;return Oe(this,this.toSeq().map(function(i,o){return t.call(e,[o,i],n++,r)}).fromEntrySeq())},mapKeys:function(t,e){var r=this;return Oe(this,this.toSeq().flip().map(function(n,i){return t.call(e,n,i,r)}).flip())}});var ni=p.prototype;ni[vn]=!0,ni[zn]=ri.entries,ni.__toJS=ri.toObject,ni.__toStringMapper=function(t,e){return e+": "+Zr(t)},Yr(v,{toKeyedSeq:function(){return new ae(this,!1)},filter:function(t,e){return Oe(this,le(this,t,e,!1))},findIndex:function(t,e){var r=this.findEntry(t,e);return r?r[0]:-1},indexOf:function(t){var e=this.toKeyedSeq().keyOf(t);return void 0===e?-1:e},lastIndexOf:function(t){return this.toSeq().reverse().indexOf(t)},reverse:function(){return Oe(this,ve(this,!1))},slice:function(t,e){return Oe(this,me(this,t,e,!1)) | ||
| },splice:function(t,e){var r=arguments.length;if(e=Math.max(0|e,0),0===r||2===r&&!e)return this;t=h(t,this.size);var n=this.slice(0,t);return Oe(this,1===r?n:n.concat(i(arguments,2),this.slice(t+e)))},findLastIndex:function(t,e){var r=this.toKeyedSeq().findLastKey(t,e);return void 0===r?-1:r},first:function(){return this.get(0)},flatten:function(t){return Oe(this,ze(this,t,!1))},get:function(t,e){return t=u(this,t),0>t||1/0===this.size||void 0!==this.size&&t>this.size?e:this.find(function(e,r){return r===t},void 0,e)},has:function(t){return t=u(this,t),t>=0&&(void 0!==this.size?1/0===this.size||this.size>t:-1!==this.indexOf(t))},interpose:function(t){return Oe(this,be(this,t))},interleave:function(){var t=[this].concat(i(arguments)),e=Ee(this.toSeq(),k.of,t),r=e.flatten(!0);return e.size&&(r.size=e.size*t.length),Oe(this,r)},last:function(){return this.get(-1)},skipWhile:function(t,e){return Oe(this,we(this,t,e,!1))},zip:function(){var t=[this].concat(i(arguments));return Oe(this,Ee(this,$r,t))},zipWith:function(t){var e=i(arguments);return e[0]=this,Oe(this,Ee(this,t,e))}}),v.prototype[ln]=!0,v.prototype[yn]=!0,Yr(l,{get:function(t,e){return this.has(t)?t:e},contains:function(t){return this.has(t)},keySeq:function(){return this.valueSeq()}}),l.prototype.has=ri.contains,Yr(x,p.prototype),Yr(k,v.prototype),Yr(A,l.prototype),Yr(V,p.prototype),Yr(Y,v.prototype),Yr(Q,l.prototype);var ii={Iterable:_,Seq:O,Collection:N,Map:Le,OrderedMap:Ir,List:fr,Stack:Er,Set:Ar,OrderedSet:Lr,Record:Cr,Range:Nr,Repeat:Vr,is:X,fromJS:F};return ii}); |
| BSD License | ||
| For Immutable JS software | ||
| Copyright (c) 2014, Facebook, Inc. All rights reserved. | ||
| Redistribution and use in source and binary forms, with or without modification, | ||
| are permitted provided that the following conditions are met: | ||
| * Redistributions of source code must retain the above copyright notice, this | ||
| list of conditions and the following disclaimer. | ||
| * Redistributions in binary form must reproduce the above copyright notice, | ||
| this list of conditions and the following disclaimer in the documentation | ||
| and/or other materials provided with the distribution. | ||
| * Neither the name Facebook nor the names of its contributors may be used to | ||
| endorse or promote products derived from this software without specific | ||
| prior written permission. | ||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| Additional Grant of Patent Rights | ||
| "Software" means the Immutable JS software distributed by Facebook, Inc. | ||
| Facebook hereby grants you a perpetual, worldwide, royalty-free, non-exclusive, | ||
| irrevocable (subject to the termination provision below) license under any | ||
| rights in any patent claims owned by Facebook, to make, have made, use, sell, | ||
| offer to sell, import, and otherwise transfer the Software. For avoidance of | ||
| doubt, no license is granted under Facebook’s rights in any patent claims that | ||
| are infringed by (i) modifications to the Software made by you or a third party, | ||
| or (ii) the Software in combination with any software or other technology | ||
| provided by you or a third party. | ||
| The license granted hereunder will terminate, automatically and without notice, | ||
| for anyone that makes any claim (including by filing any lawsuit, assertion or | ||
| other action) alleging (a) direct, indirect, or contributory infringement or | ||
| inducement to infringe any patent: (i) by Facebook or any of its subsidiaries or | ||
| affiliates, whether or not such claim is related to the Software, (ii) by any | ||
| party if such claim arises in whole or in part from any software, product or | ||
| service of Facebook or any of its subsidiaries or affiliates, whether or not | ||
| such claim is related to the Software, or (iii) by any party relating to the | ||
| Software; or (b) that any right in any patent claim of Facebook is invalid or | ||
| unenforceable. |
| Immutable collections for JavaScript | ||
| ==================================== | ||
| [](https://travis-ci.org/facebook/immutable-js) | ||
| [Immutable][] data cannot be changed once created, leading to much simpler | ||
| application development, no defensive copying, and enabling advanced memoization | ||
| and change detection techniques with simple logic. [Persistent][] data presents | ||
| a mutative API which does not update the data in-place, but instead always | ||
| yields new updated data. | ||
| `Immutable` provides Persistent Immutable `List`, `Stack`, `Map`, `OrderedMap`, | ||
| `Set`, `OrderedSet` and `Record`. They are highly efficient on modern JavaScript | ||
| VMs by using structural sharing via [hash maps tries][] and | ||
| [vector tries][] as popularized by Clojure and Scala, | ||
| minimizing the need to copy or cache data. | ||
| `Immutable` also provides a lazy `Seq`, allowing efficient | ||
| chaining of collection methods like `map` and `filter` without creating | ||
| intermediate representations. Create some `Seq` with `Range` and `Repeat`. | ||
| [Persistent]: http://en.wikipedia.org/wiki/Persistent_data_structure | ||
| [Immutable]: http://en.wikipedia.org/wiki/Immutable_object | ||
| [hash maps tries]: (http://en.wikipedia.org/wiki/Hash_array_mapped_trie) | ||
| [vector tries]: (http://hypirion.com/musings/understanding-persistent-vector-pt-1) | ||
| Getting started | ||
| --------------- | ||
| Install `immutable` using npm. | ||
| ```shell | ||
| npm install immutable | ||
| ``` | ||
| Then require it into any module. | ||
| ```javascript | ||
| var Immutable = require('immutable'); | ||
| var map1 = Immutable.Map({a:1, b:2, c:3}); | ||
| var map2 = map1.set('b', 50); | ||
| map1.get('b'); // 2 | ||
| map2.get('b'); // 50 | ||
| ``` | ||
| ### Browser | ||
| To use `immutable` from a browser, download [dist/immutable.min.js](./dist/immutable.min.js) | ||
| or use a CDN such as [CDNJS](https://cdnjs.com/libraries/immutable) | ||
| or [jsDelivr](http://www.jsdelivr.com/#!immutable.js). | ||
| Then, add it as a script tag to your page: | ||
| ```html | ||
| <script src="immutable.min.js"></script> | ||
| <script> | ||
| var map1 = Immutable.Map({a:1, b:2, c:3}); | ||
| var map2 = map1.set('b', 50); | ||
| map1.get('b'); // 2 | ||
| map2.get('b'); // 50 | ||
| </script> | ||
| ``` | ||
| Or use an AMD loader (such as [RequireJS](http://requirejs.org/)): | ||
| ```javascript | ||
| require(['./immutable.min.js'], function (Immutable) { | ||
| var map1 = Immutable.Map({a:1, b:2, c:3}); | ||
| var map2 = map1.set('b', 50); | ||
| map1.get('b'); // 2 | ||
| map2.get('b'); // 50 | ||
| }); | ||
| ``` | ||
| If you're using [browserify](http://browserify.org/), the `immutable` npm module | ||
| also works from the browser. | ||
| ### TypeScript | ||
| Use these Immutable collections and sequences as you would use native | ||
| collections in your [TypeScript](http://typescriptlang.org) programs while still taking | ||
| advantage of type generics, error detection, and auto-complete in your IDE. | ||
| Just add a reference with a relative path to the type declarations at the top | ||
| of your file. | ||
| ```javascript | ||
| ///<reference path='./node_modules/immutable/dist/Immutable.d.ts'/> | ||
| import Immutable = require('immutable'); | ||
| var map1: Immutable.Map<string, number>; | ||
| map1 = Immutable.Map({a:1, b:2, c:3}); | ||
| var map2 = map1.set('b', 20); | ||
| map1.get('b'); // 2 | ||
| map2.get('b'); // 50 | ||
| ``` | ||
| The case for Immutability | ||
| ------------------------- | ||
| Much of what makes application development difficult is tracking mutation and | ||
| maintaining state. Developing with immutable data encourages you to think | ||
| differently about how data flows through your application. | ||
| Subscribing to data events throughout your application, by using | ||
| `Object.observe`, or any other mechanism, creates a huge overhead of | ||
| book-keeping which can hurt performance, sometimes dramatically, and creates | ||
| opportunities for areas of your application to get out of sync with each other | ||
| due to easy to make programmer error. Since immutable data never changes, | ||
| subscribing to changes throughout the model is a dead-end and new data can only | ||
| ever be passed from above. | ||
| This model of data flow aligns well with the architecture of [React][] | ||
| and especially well with an application designed using the ideas of [Flux][]. | ||
| When data is passed from above rather than being subscribed to, and you're only | ||
| interested in doing work when something has changed, you can use equality. | ||
| `Immutable` always returns itself when a mutation results in an identical | ||
| collection, allowing for using `===` equality to determine if something | ||
| has changed. | ||
| ```javascript | ||
| var map1 = Immutable.Map({a:1, b:2, c:3}); | ||
| var map2 = map1.set('b', 2); | ||
| assert(map1 === map2); | ||
| var map3 = map1.set('b', 50); | ||
| assert(map1 !== map3); | ||
| ``` | ||
| If an object is immutable, it can be "copied" simply by making another reference | ||
| to it instead of copying the entire object. Because a reference is much smaller | ||
| than the object itself, this results in memory savings and a potential boost in | ||
| execution speed for programs which rely on copies (such as an undo-stack). | ||
| ```javascript | ||
| var map1 = Immutable.Map({a:1, b:2, c:3}); | ||
| var clone = map1; | ||
| ``` | ||
| [React]: http://facebook.github.io/react/ | ||
| [Flux]: http://facebook.github.io/flux/docs/overview.html | ||
| JavaScript-first API | ||
| -------------------- | ||
| While `immutable` is inspired by Clojure, Scala, Haskell and other functional | ||
| programming environments, it's designed to bring these powerful concepts to | ||
| JavaScript, and therefore has an Object-Oriented API that closely mirrors that | ||
| of [ES6][] [Array][], [Map][], and [Set][]. | ||
| [ES6]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla | ||
| [Array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array | ||
| [Map]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map | ||
| [Set]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set | ||
| The difference for the immutable collections is that methods which would mutate | ||
| the collection, like `push`, `set`, `unshift` or `splice` instead return a new | ||
| immutable collection. Methods which return new arrays like `slice` or `concat` | ||
| instead return new immutable collections. | ||
| ```javascript | ||
| var list1 = Immutable.List.of(1, 2); | ||
| var list2 = list1.push(3, 4, 5); | ||
| var list3 = list2.unshift(0); | ||
| var list4 = list1.concat(list2, list3); | ||
| assert(list1.size === 2); | ||
| assert(list2.size === 5); | ||
| assert(list3.size === 6); | ||
| assert(list4.size === 13); | ||
| assert(list4.get(0) === 1); | ||
| ``` | ||
| Almost all of the methods on [Array][] will be found in similar form on | ||
| `Immutable.List`, those of [Map][] found on `Immutable.Map`, and those of [Set][] | ||
| found on `Immutable.Set`, including collection operations like `forEach()` | ||
| and `map()`. | ||
| ```javascript | ||
| var alpha = Immutable.Map({a:1, b:2, c:3, d:4}); | ||
| alpha.map((v, k) => k.toUpperCase()).join(); | ||
| // 'A,B,C,D' | ||
| ``` | ||
| ### Accepts raw JavaScript objects. | ||
| Designed to inter-operate with your existing JavaScript, `immutable` | ||
| accepts plain JavaScript Arrays and Objects anywhere a method expects an | ||
| `Iterable` with no performance penalty. | ||
| ```javascript | ||
| var map1 = Immutable.Map({a:1, b:2, c:3, d:4}); | ||
| var map2 = Immutable.Map({c:10, a:20, t:30}); | ||
| var obj = {d:100, o:200, g:300}; | ||
| var map3 = map1.merge(map2, obj); | ||
| // Map { a: 20, b: 2, c: 10, d: 100, t: 30, o: 200, g: 300 } | ||
| ``` | ||
| This is possible because `immutable` can treat any JavaScript Array or Object | ||
| as an Iterable. You can take advantage of this in order to get sophisticated | ||
| collection methods on JavaScript Objects, which otherwise have a very sparse | ||
| native API. Because Seq evaluates lazily and does not cache intermediate | ||
| results, these operations can be extremely efficient. | ||
| ```javascript | ||
| var myObject = {a:1,b:2,c:3}; | ||
| Seq(myObject).map(x => x * x).toObject(); | ||
| // { a: 1, b: 4, c: 9 } | ||
| ``` | ||
| ### Converts back to raw JavaScript objects. | ||
| All `immutable` Iterables can be converted to plain JavaScript Arrays and | ||
| Objects shallowly with `toArray()` and `toObject()` or deeply with `toJS()`. | ||
| All Immutable Iterables also implement `toJSON()` allowing them to be passed to | ||
| `JSON.stringify` directly. | ||
| ```javascript | ||
| var deep = Immutable.Map({ a: 1, b: 2, c: Immutable.List.of(3, 4, 5) }); | ||
| deep.toObject() // { a: 1, b: 2, c: List [ 3, 4, 5 ] } | ||
| deep.toArray() // [ 1, 2, List [ 3, 4, 5 ] ] | ||
| deep.toJS() // { a: 1, b: 2, c: [ 3, 4, 5 ] } | ||
| JSON.stringify(deep) // '{"a":1,"b":2,"c":[3,4,5]}' | ||
| ``` | ||
| ### Embraces ES6 | ||
| `Immutable` takes advantage of features added to JavaScript in [ES6][], | ||
| the latest standard version of ECMAScript (JavaScript), including [Iterators][], | ||
| [Arrow Functions][], [Classes][], and [Modules][]. It's also inspired by the | ||
| [Map][] and [Set][] collections added to ES6. The library is "transpiled" to ES3 | ||
| in order to support all modern browsers. | ||
| All examples are presented in ES6. To run in all browsers, they need to be | ||
| translated to ES3. | ||
| ```js | ||
| // ES6 | ||
| foo.map(x => x * x); | ||
| // ES3 | ||
| foo.map(function (x) { return x * x; }); | ||
| ``` | ||
| [Iterators]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol | ||
| [Arrow Functions]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions | ||
| [Classes]: http://wiki.ecmascript.org/doku.php?id=strawman:maximally_minimal_classes | ||
| [Modules]: http://www.2ality.com/2014/09/es6-modules-final.html | ||
| Nested Structures | ||
| ----------------- | ||
| The collections in `immutable` are intended to be nested, allowing for deep | ||
| trees of data, similar to JSON. | ||
| ```javascript | ||
| var nested = Immutable.fromJS({a:{b:{c:[3,4,5]}}}); | ||
| // Map { a: Map { b: Map { c: List [ 3, 4, 5 ] } } } | ||
| ``` | ||
| A few power-tools allow for reading and operating on nested data. The | ||
| most useful are `mergeDeep`, `getIn`, `setIn`, and `updateIn`, found on `List`, | ||
| `Map` and `OrderedMap`. | ||
| ```javascript | ||
| var nested2 = nested.mergeDeep({a:{b:{d:6}}}); | ||
| // Map { a: Map { b: Map { c: List [ 3, 4, 5 ], d: 6 } } } | ||
| ``` | ||
| ```javascript | ||
| nested2.getIn(['a', 'b', 'd']); // 6 | ||
| var nested3 = nested2.updateIn(['a', 'b', 'd'], value => value + 1); | ||
| // Map { a: Map { b: Map { c: List [ 3, 4, 5 ], d: 7 } } } | ||
| var nested4 = nested3.updateIn(['a', 'b', 'c'], list => list.push(6)); | ||
| // Map { a: Map { b: Map { c: List [ 3, 4, 5, 6 ], d: 7 } } } | ||
| ``` | ||
| Lazy Seq | ||
| -------- | ||
| `Seq` describes a lazy operation, allowing them to efficiently chain | ||
| use of all the Iterable methods (such as `map` and `filter`). | ||
| **Seq is immutable** — Once a Seq is created, it cannot be | ||
| changed, appended to, rearranged or otherwise modified. Instead, any mutative | ||
| method called on a Seq will return a new Seq. | ||
| **Seq is lazy** — Seq does as little work as necessary to respond to any | ||
| method call. | ||
| For example, the following does not perform any work, because the resulting | ||
| Seq is never used: | ||
| var oddSquares = Immutable.Seq.of(1,2,3,4,5,6,7,8) | ||
| .filter(x => x % 2).map(x => x * x); | ||
| Once the Seq is used, it performs only the work necessary. In this | ||
| example, no intermediate arrays are ever created, filter is called three times, | ||
| and map is only called twice: | ||
| console.log(oddSquares.get(1)); // 9 | ||
| Any collection can be converted to a lazy Seq with `.toSeq()`. | ||
| var seq = Immutable.Map({a:1, b:1, c:1}).toSeq(); | ||
| Seq allow for the efficient chaining of sequence operations, especially when | ||
| converting to a different concrete type (such as to a JS object): | ||
| seq.flip().map(key => key.toUpperCase()).flip().toObject(); | ||
| // Map { A: 1, B: 1, C: 1 } | ||
| As well as expressing logic that would otherwise seem memory-limited: | ||
| Immutable.Range(1, Infinity) | ||
| .skip(1000) | ||
| .map(n => -n) | ||
| .filter(n => n % 2 === 0) | ||
| .take(2) | ||
| .reduce((r, n) => r * n, 1); | ||
| // 1006008 | ||
| Note: An iterable is always iterated in the same order, however that order may | ||
| not always be well defined, as is the case for the `Map`. | ||
| Equality treats Collections as Data | ||
| ----------------------------------- | ||
| `Immutable` provides equality which treats immutable data structures as pure | ||
| data, performing a deep equality check if necessary. | ||
| ```javascript | ||
| var map1 = Immutable.Map({a:1, b:1, c:1}); | ||
| var map2 = Immutable.Map({a:1, b:1, c:1}); | ||
| assert(map1 !== map2); | ||
| assert(Immutable.is(map1, map2) === true); | ||
| ``` | ||
| `Immutable.is()` uses the same measure of equality as [Object.is][] | ||
| including if both are immutable and all keys and values are equal | ||
| using the same measure of equality. | ||
| [Object.is]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is | ||
| Batching Mutations | ||
| ------------------ | ||
| > If a tree falls in the woods, does it make a sound? | ||
| > | ||
| > If a pure function mutates some local data in order to produce an immutable | ||
| > return value, is that ok? | ||
| > | ||
| > — Rich Hickey, Clojure | ||
| Applying a mutation to create a new immutable object results in some overhead, | ||
| which can add up to a performance penalty. If you need to apply a series of | ||
| mutations locally before returning, `Immutable` gives you the ability to create | ||
| a temporary mutable (transient) copy of a collection and apply a batch of | ||
| mutations in a performant manner by using `withMutations`. In fact, this is | ||
| exactly how `Immutable` applies complex mutations itself. | ||
| As an example, building `list2` results in the creation of 1, not 3, new | ||
| immutable Lists. | ||
| ```javascript | ||
| var list1 = Immutable.List.of(1,2,3); | ||
| var list2 = list1.withMutations(function (list) { | ||
| list.push(4).push(5).push(6); | ||
| }); | ||
| assert(list1.size === 3); | ||
| assert(list2.size === 6); | ||
| ``` | ||
| Note: `immutable` also provides `asMutable` and `asImmutable`, but only | ||
| encourages their use when `withMutations` will not suffice. Use caution to not | ||
| return a mutable copy, which could result in undesired behavior. | ||
| Documentation | ||
| ------------- | ||
| [Read the docs](http://facebook.github.io/immutable-js/docs/) and eat your vegetables. | ||
| Docs are automatically generated from [Immutable.d.ts](./type-definitions/Immutable.d.ts). | ||
| Please contribute! | ||
| Also, don't miss the [Wiki](https://github.com/facebook/immutable-js/wiki) which | ||
| contains articles on specific topics. Can't find something? Open an [issue](https://github.com/facebook/immutable-js/issues). | ||
| Contribution | ||
| ------------ | ||
| Use [Github issues](https://github.com/facebook/immutable-js/issues) for requests. | ||
| We actively welcome pull requests, learn how to [contribute](./CONTRIBUTING.md). | ||
| Changelog | ||
| --------- | ||
| Changes are tracked as [Github releases](https://github.com/facebook/immutable-js/releases). | ||
| Thanks | ||
| ------ | ||
| [Hugh Jackson](https://github.com/hughfdjackson/), for providing the npm package | ||
| name. If you're looking for his unsupported package, see [v1.4.1](https://www.npmjs.org/package/immutable/1.4.1). | ||
| [Phil Bagwell](https://www.youtube.com/watch?v=K2NYwP90bNs), for his inspiration | ||
| and research in persistent data structures. | ||
| License | ||
| ------- | ||
| `Immutable` is [BSD-licensed](./LICENSE). We also provide an additional [patent grant](./PATENTS). |
| { | ||
| "name": "demo", | ||
| "version": "0.0.0", | ||
| "authors": [ | ||
| "mgechev <mgechev@gmail.com>" | ||
| ], | ||
| "license": "MIT", | ||
| "private": true, | ||
| "ignore": [ | ||
| "**/.*", | ||
| "node_modules", | ||
| "bower_components", | ||
| "test", | ||
| "tests" | ||
| ], | ||
| "dependencies": { | ||
| "angular": "~1.3.14", | ||
| "immutable": "~3.6.2" | ||
| } | ||
| } |
| <!DOCTYPE html> | ||
| <html lang="en"> | ||
| <head> | ||
| <meta charset="UTF-8"> | ||
| <title></title> | ||
| </head> | ||
| <body ng-app="sampleApp" ng-controller="SampleCtrl"> | ||
| <ul> | ||
| <li immutable="list" ng-repeat="item in list track by $index" ng-bind="item"></li> | ||
| </ul> | ||
| <script src="./bower_components/angular/angular.js"></script> | ||
| <script src="./bower_components/immutable/dist/immutable.js"></script> | ||
| <script src="./app.js"></script> | ||
| <script src="../dist/immutable.js"></script> | ||
| </body> | ||
| </html> |
-26
| var gulp = require('gulp'); | ||
| var traceur = require('gulp-traceur'); | ||
| var uglify = require('gulp-uglify'); | ||
| var rename = require('gulp-rename'); | ||
| var wrap = require('gulp-wrap'); | ||
| gulp.task('watch', function () { | ||
| 'use strict'; | ||
| return gulp.watch('./lib/**/*.js', ['traceur']); | ||
| }); | ||
| gulp.task('traceur', function () { | ||
| 'use strict'; | ||
| return gulp.src('./lib/**/*.js') | ||
| .pipe(traceur()) | ||
| .pipe(wrap('(function () {\n<%= contents %>\n}());')) | ||
| .pipe(gulp.dest('./dist/')); | ||
| }); | ||
| gulp.task('build', ['traceur'], function () { | ||
| 'use strict'; | ||
| return gulp.src('./dist/immutable.js') | ||
| .pipe(rename('immutable.min.js')) | ||
| .pipe(uglify()) | ||
| .pipe(gulp.dest('./dist')); | ||
| }); |
| /* global angular */ | ||
| var immutableDirective = () => { | ||
| let priority = 2000; | ||
| let scope = true; | ||
| let link = (scope, el, attrs) => { | ||
| let { immutable } = attrs; | ||
| if (!(/^[a-zA-Z0-9_$]+$/).test(immutable)) { | ||
| return; | ||
| } | ||
| if (!scope[immutable]) { | ||
| console.warn(`No ${immutable} property found.`); | ||
| } | ||
| scope.$watch(() => { | ||
| return scope.$parent[immutable]; | ||
| }, (val) => { | ||
| scope[immutable] = val.toJS(); | ||
| }); | ||
| }; | ||
| return { priority, scope, link }; | ||
| }; | ||
| angular.module('immutable', []) | ||
| .directive('immutable', immutableDirective); |
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
Mixed license
LicensePackage contains multiple licenses.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
3
-40%0
-100%4
-33.33%1
-99.53%1
-97.73%5395
-99.7%5
-85.71%65
-99.79%