diff --git a/.gitignore b/.gitignore index 631be81..17e6b29 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ .DS_Store /node_modules/ +/index.js +/index.d.ts diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..54e8e7d --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +/pnpm-lock.yaml diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..96f0f00 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2013-2025 Adam Haile +Certain portions of this library are Copyright (c) 2024-2025 Josh Junon + +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. diff --git a/README.md b/README.md index a627aa7..6aa21df 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,19 @@ # SArray -Convenient array signals for [S.js](https://github.com/adamhaile/S). +Convenient array signals for [S.js](https://github.com/surplus/s). -SArray adds utility methods to S signals carrying arrays. These utility methods parallel the standard ES3/5/6 array methods. +SArray adds utility methods to S signals carrying arrays. These utility methods parallel the standard ES3/5/6 array methods. ```javascript // transformations without SArray -var arr = S.data([1, 2, 3]), - mapped = S(() => arr().map(x => x * 2)), - filtered = S(() => arr().filter(x => x > 2)); +var arr = S.data([1, 2, 3]), + mapped = S(() => arr().map((x) => x * 2)), + filtered = S(() => arr().filter((x) => x > 2)); // transformations with SArray -var arr = SArray([1, 2, 3]), - mapped = arr.map(x => x * 2), // arr() now has array methods - filtered = arr.filter(x => x > 2); +var arr = SArray([1, 2, 3]), + mapped = arr.map((x) => x * 2), // arr() now has array methods + filtered = arr.filter((x) => x > 2); // mutations without SArray var tmp = S.sample(arr).slice(0); @@ -24,12 +24,12 @@ arr(tmp); arr.push(4); // SArray methods also return SArrays -var mappedAndFiltered = arr.map(x => x * 2).filter(x => x > 2); +var mappedAndFiltered = arr.map((x) => x * 2).filter((x) => x > 2); // Any array-carrying signal can be 'lifted' to create an SArray var plain = S.data([1, 2, 3]), - arr = SArray.lift(plain), - mapped = arr.map(x => x * 2); // etc + arr = SArray.lift(plain), + mapped = arr.map((x) => x * 2); // etc // When an array signal changes, map() will re-use prior computations // for new items that === the old. @@ -39,4 +39,4 @@ arr.push(4); rands(); // ["0.83", "0.75", "0.77", "0.25"] unchanged values reused ``` -For a full list of methods and thier signatures, consult [index.d.ts](index.d.ts). \ No newline at end of file +For a full list of methods and their signatures, consult [index.ts](index.ts). \ No newline at end of file diff --git a/es/index.d.ts b/es/index.d.ts deleted file mode 100644 index 610f15f..0000000 --- a/es/index.d.ts +++ /dev/null @@ -1,53 +0,0 @@ -export interface SArray { - (): T[]; - concat(...others: (() => T | T[])[]): SArray; - every(pred: (v: T) => boolean): () => boolean; - filter(pred: (v: T) => boolean): SArray; - find(pred: (v: T) => boolean): () => T | undefined; - forEach(fn: (v: T) => void, exit?: (v: T, i: number) => void, move?: (from: number[], to: number[]) => void): SArray; - includes(v: T): () => boolean; - map(fn: (v: T, m: U | undefined, i: number) => U, exit?: (v: T, m: U, i: number) => void, move?: (items: T[], mapped: U[], from: number[], to: number[]) => void): SArray; - sort(fn: (a: T, b: T) => number): SArray; - reduce(fn: (cur: U, v: T, i?: number, l?: T[]) => U, seed: U | (() => U)): () => U; - reduceRight(fn: (cur: U, v: T, i?: number, l?: T[]) => U, seed: U | (() => U)): () => U; - reverse(): SArray; - slice(s: number, e: number): SArray; - some(pred: (v: T) => boolean): () => boolean; - mapS(fn: (v: T, m: U | undefined, i: number) => U, exit?: (v: T, m: U, i: number) => void, move?: (items: T[], mapped: (() => U)[], from: number[], to: number[]) => void): SSignalArray; - mapSample(fn: (v: T, m: U | undefined, i: number) => U, exit?: (v: T, m: U, i: number) => void, move?: (items: T[], mapped: U[], from: number[], to: number[]) => void): SArray; - mapSequentially(fn: (v: T, m: U | undefined, i: number) => U): SArray; - orderBy(key: (v: T) => U): SArray; -} -export interface SSignalArray extends SArray<() => T> { - combine(): SArray; -} -export interface SDataArray extends SArray { - (v: T[]): T[]; - push(v: T): SDataArray; - pop(): T | undefined; - unshift(v: T): SDataArray; - shift(): T | undefined; - splice(i: number, len: number, ...items: T[]): SDataArray; - remove(v: T): SDataArray; - removeAll(v: T): SDataArray; -} -export default function SArray(values: T[]): SDataArray; -export declare function lift(seq: () => T[]): SArray; -export declare function mapS(seq: () => T[], enter: (v: T, m: U | undefined, i: number) => U, exit?: (v: T, m: U, i: number) => void, move?: (items: T[], mapped: (() => U)[], from: number[], to: number[]) => void): () => (() => U)[]; -export declare function mapSample(seq: () => T[], enter: (v: T, m: U | undefined, i: number) => U, exit?: (v: T, m: U, i: number) => void, move?: (items: T[], mapped: U[], from: number[], to: number[]) => void): () => U[]; -export declare function mapSequentially(seq: () => T[], update: (v: T, m: U | undefined, i: number) => U): () => U[]; -export declare function forEach(seq: () => T[], enter: (v: T, i: number) => void, exit?: (v: T, i: number) => void, move?: (from: number[], to: number[]) => void): () => T[]; -export declare function combine(seq: () => (() => T)[]): () => T[]; -export declare function map(seq: () => T[], enter: (v: T, m: U | undefined, i: number) => U, exit?: (v: T, m: U, i: number) => void, move?: (items: T[], mapped: U[], from: number[], to: number[]) => void): () => U[]; -export declare function find(seq: () => T[], pred: (v: T) => boolean): () => T | undefined; -export declare function includes(seq: () => T[], o: T): () => boolean; -export declare function sort(seq: () => T[], fn?: (a: T, b: T) => number): () => T[]; -export declare function orderBy(seq: () => T[], by: keyof T | ((v: T) => any)): () => T[]; -export declare function filter(seq: () => T[], predicate: (v: T) => boolean): () => T[]; -export declare function concat(seq: () => T[], ...others: (() => T | T[])[]): () => T[]; -export declare function reduce(seq: () => T[], fn: (r: U, t: T, i: number, s: T[]) => U, seed: U | (() => U)): () => U; -export declare function reduceRight(seq: () => T[], fn: (r: U, t: T, i: number, s: T[]) => U, seed: U | (() => U)): () => U; -export declare function every(seq: () => T[], fn: (v: T) => boolean): () => boolean; -export declare function some(seq: () => T[], fn?: (v: T) => boolean): () => boolean; -export declare function reverse(seq: () => T[]): () => T[]; -export declare function slice(seq: () => T[], s: number, e: number): () => T[]; diff --git a/es/index.js b/es/index.js deleted file mode 100644 index 46012fc..0000000 --- a/es/index.js +++ /dev/null @@ -1,526 +0,0 @@ -// synchronous array signals for S.js -import S from "s-js"; -export default function SArray(values) { - if (!Array.isArray(values)) - throw new Error("SArray must be initialized with an array"); - var dirty = S.data(false), mutations = [], mutcount = 0, pops = 0, shifts = 0, data = S.root(function () { return S.on(dirty, update, values, true); }); - // add mutators - var array = function array(newvalues) { - if (arguments.length > 0) { - mutation(function array() { values = newvalues; }); - return newvalues; - } - else { - return data(); - } - }; - array.push = push; - array.pop = pop; - array.unshift = unshift; - array.shift = shift; - array.splice = splice; - // not ES5 - array.remove = remove; - array.removeAll = removeAll; - lift(array); - return array; - function mutation(m) { - mutations[mutcount++] = m; - dirty(true); - } - function update() { - if (pops) - values.splice(values.length - pops, pops); - if (shifts) - values.splice(0, shifts); - pops = 0; - shifts = 0; - for (var i = 0; i < mutcount; i++) { - mutations[i](); - mutations[i] = null; - } - mutcount = 0; - return values; - } - // mutators - function push(item) { - mutation(function push() { values.push(item); }); - return array; - } - function pop() { - array(); - if ((pops + shifts) < values.length) { - var value = values[values.length - ++pops]; - dirty(true); - return value; - } - } - function unshift(item) { - mutation(function unshift() { values.unshift(item); }); - return array; - } - function shift() { - array(); - if ((pops + shifts) < values.length) { - var value = values[shifts++]; - dirty(true); - return value; - } - } - function splice( /* arguments */) { - var args = Array.prototype.slice.call(arguments); - mutation(function splice() { Array.prototype.splice.apply(values, args); }); - return array; - } - function remove(item) { - mutation(function remove() { - for (var i = 0; i < values.length; i++) { - if (values[i] === item) { - values.splice(i, 1); - break; - } - } - }); - return array; - } - function removeAll(item) { - mutation(function removeAll() { - for (var i = 0; i < values.length;) { - if (values[i] === item) { - values.splice(i, 1); - } - else { - i++; - } - } - }); - return array; - } -} -// util to add transformer methods -export function lift(seq) { - var _seq = seq; - _seq.concat = chainConcat; - _seq.every = chainEvery; - _seq.filter = chainFilter; - _seq.find = chainFind; - //s.findIndex = findIndex; - _seq.forEach = chainForEach; - _seq.includes = chainIncludes; - //s.indexOf = indexOf; - //s.join = join; - //s.lastIndexOf = lastIndexOf; - _seq.map = chainMap; - _seq.sort = chainSort; - _seq.reduce = chainReduce; - _seq.reduceRight = chainReduceRight; - _seq.reverse = chainReverse; - _seq.slice = chainSlice; - _seq.some = chainSome; - // non-ES5 transformers - _seq.mapS = chainMapS; - _seq.mapSample = chainMapSample; - _seq.mapSequentially = chainMapSequentially; - _seq.orderBy = chainOrderBy; - return _seq; -} -export function mapS(seq, enter, exit, move) { - var items = [], mapped = [], disposers = [], len = 0; - S(function () { S.cleanup(function () { disposers.forEach(function (d) { d(); }); }); }); - return S.on(seq, function mapS() { - var new_items = seq(), new_len = new_items.length, temp = new Array(new_len), tempdisposers = new Array(new_len), from = null, to = null, i, j, k, item; - if (move) - from = [], to = []; - // 1) step through all old items and see if they can be found in the new set; if so, save them in a temp array and mark them moved; if not, exit them - NEXT: for (i = 0, k = 0; i < len; i++) { - item = items[i]; - for (j = 0; j < new_len; j++, k = (k + 1) % new_len) { - if (item === new_items[k] && !temp.hasOwnProperty(k.toString())) { - temp[k] = mapped[i]; - tempdisposers[k] = disposers[i]; - if (move && i !== k) { - from.push(i); - to.push(k); - } - k = (k + 1) % new_len; - continue NEXT; - } - } - if (exit) - exit(item, mapped[i](), i); - disposers[i](); - } - if (move && from.length) - move(items, mapped, from, to); - // 2) set all the new values, pulling from the temp array if copied, otherwise entering the new value - for (i = 0; i < new_len; i++) { - if (temp.hasOwnProperty(i.toString())) { - mapped[i] = temp[i]; - disposers[i] = tempdisposers[i]; - } - else { - mapped[i] = S.root(mapper); - } - } - // 3) in case the new set is shorter than the old, set the length of the mapped array - len = mapped.length = new_len; - // 4) save a copy of the mapped items for the next update - items = new_items.slice(); - return mapped; - function mapper(disposer) { - disposers[i] = disposer; - var _item = new_items[i], _i = i; - return S(function (value) { return enter(_item, value, _i); }, undefined); - } - }); -} -function chainMapS(enter, exit, move) { - var r = lift(mapS(this, enter, exit, move)); - r.combine = chainCombine; - return r; -} -export function mapSample(seq, enter, exit, move) { - var items = [], mapped = [], disposers = [], len = 0; - S(function () { S.cleanup(function () { disposers.forEach(function (d) { d(); }); }); }); - return S.on(seq, function mapSample() { - var new_items = seq(), new_len = new_items.length, new_indices, new_indices_next, temp, tempdisposers, from = null, to = null, i, j, start, end, new_end, item; - // fast path for empty arrays - if (new_len === 0) { - if (len !== 0) { - if (exit !== undefined) { - for (i = 0; i < len; i++) { - item = items[i]; - exit(item, mapped[i], i); - disposers[i](); - } - } - else { - for (i = 0; i < len; i++) { - disposers[i](); - } - } - items = []; - mapped = []; - disposers = []; - len = 0; - } - } - else if (len === 0) { - for (j = 0; j < new_len; j++) { - items[j] = new_items[j]; - mapped[j] = S.root(mapper); - } - len = new_len; - } - else { - new_indices = new Map(); - temp = new Array(new_len); - tempdisposers = new Array(new_len); - if (move) - from = [], to = []; - // skip common prefix and suffix - for (start = 0, end = Math.min(len, new_len); start < end && items[start] === new_items[start]; start++) - ; - for (end = len - 1, new_end = new_len - 1; end >= 0 && new_end >= 0 && items[end] === new_items[new_end]; end--, new_end--) { - temp[new_end] = mapped[end]; - tempdisposers[new_end] = disposers[end]; - } - // 0) prepare a map of all indices in new_items, scanning backwards so we encounter them in natural order - new_indices_next = new Array(new_end + 1); - for (j = new_end; j >= start; j--) { - item = new_items[j]; - i = new_indices.get(item); - new_indices_next[j] = i === undefined ? -1 : i; - new_indices.set(item, j); - } - // 1) step through all old items and see if they can be found in the new set; if so, save them in a temp array and mark them moved; if not, exit them - for (i = start; i <= end; i++) { - item = items[i]; - j = new_indices.get(item); - if (j !== undefined && j !== -1) { - temp[j] = mapped[i]; - tempdisposers[j] = disposers[i]; - if (move && i !== j) { - from.push(i); - to.push(j); - } - j = new_indices_next[j]; - new_indices.set(item, j); - } - else { - if (exit) - exit(item, mapped[i], i); - disposers[i](); - } - } - if (move && (from.length !== 0 || end !== len - 1)) { - end++, new_end++; - while (end < len) { - from.push(end++); - to.push(new_end++); - } - move(items, mapped, from, to); - } - // 2) set all the new values, pulling from the temp array if copied, otherwise entering the new value - for (j = start; j < new_len; j++) { - if (temp.hasOwnProperty(j)) { - mapped[j] = temp[j]; - disposers[j] = tempdisposers[j]; - } - else { - mapped[j] = S.root(mapper); - } - } - // 3) in case the new set is shorter than the old, set the length of the mapped array - len = mapped.length = new_len; - // 4) save a copy of the mapped items for the next update - items = new_items.slice(); - } - return mapped; - function mapper(disposer) { - disposers[j] = disposer; - return enter(new_items[j], mapped[j], j); - } - }); -} -function chainMapSample(enter, exit, move) { - return lift(mapSample(this, enter, exit, move)); -} -export function mapSequentially(seq, update) { - var mapped = []; - return S(function mapSequentially() { - var s = seq(); - for (var i = 0; i < s.length; i++) { - mapped[i] = update(s[i], mapped[i], i); - } - if (mapped.length > s.length) - mapped.length = s.length; - return mapped; - }); -} -function chainMapSequentially(enter) { - return lift(mapSequentially(this, enter)); -} -export function forEach(seq, enter, exit, move) { - var items = [], len = 0; - return S.on(seq, function forEach() { - var new_items = seq(), new_len = new_items.length, found = new Array(new_len), from = [], to = [], i, j, k, item; - // 1) step through all old items and see if they can be found in the new set; if so, save them in a temp array and mark them moved; if not, exit them - NEXT: for (i = 0, k = 0; i < len; i++) { - item = items[i]; - for (j = 0; j < new_len; j++, k = (k + 1) % new_len) { - if (item === new_items[k] && !found[k]) { - found[k] = true; - if (i !== k) { - from.push(i); - to.push(k); - } - k = (k + 1) % new_len; - continue NEXT; - } - } - if (exit) - exit(item, i); - } - if (move && from.length) - move(from, to); - // 2) set all the new values, pulling from the temp array if copied, otherwise entering the new value - for (var i = 0; i < new_len; i++) { - if (!found[i]) - enter(new_items[i], i); - } - // 3) in case the new set is shorter than the old, set the length of the mapped array - len = new_len; - // 4) save a copy of the mapped items for the next update - items = new_items.slice(); - return items; - }); -} -function chainForEach(enter, exit, move) { - return lift(forEach(this, enter, exit, move)); -} -export function combine(seq) { - return S(function combine() { - var s = seq(), result = new Array(s.length); - for (var i = 0; i < s.length; i++) { - result[i] = s[i](); - } - return result; - }); -} -function chainCombine() { - return lift(combine(this)); -} -export function map(seq, enter, exit, move) { - return combine(mapS(seq, enter, exit, move == undefined ? undefined : - function (items, mapped, from, to) { move(items, mapped.map(function (s) { return s(); }), from, to); })); -} -function chainMap(enter, exit, move) { - return lift(map(this, enter, exit, move)); -} -export function find(seq, pred) { - return S(function find() { - var s = seq(), i, item; - for (i = 0; i < s.length; i++) { - item = s[i]; - if (pred(item)) - return item; - } - return undefined; - }); -} -function chainFind(pred) { - return find(this, pred); -} -export function includes(seq, o) { - return S(function find() { - var s = seq(); - for (var i = 0; i < s.length; i++) { - if (s[i] === o) - return true; - } - return false; - }); -} -function chainIncludes(o) { - return includes(this, o); -} -export function sort(seq, fn) { - return S(function sort() { - var copy = seq().slice(0); - if (fn) - copy.sort(fn); - else - copy.sort(); - return copy; - }); -} -function chainSort(fn) { - return lift(sort(this, fn)); -} -export function orderBy(seq, by) { - var key, fn; - if (typeof by !== 'function') { - key = by; - fn = function (o) { return o[key]; }; - } - else { - fn = by; - } - return S(function orderBy() { - var copy = seq().slice(0); - copy.sort(function (a, b) { - a = fn(a); - b = fn(b); - return a < b ? -1 : a > b ? 1 : 0; - }); - return copy; - }); -} -function chainOrderBy(by) { - return lift(orderBy(this, by)); -} -export function filter(seq, predicate) { - return S(function filter() { - var s = seq(), result = [], i, v; - for (i = 0; i < s.length; i++) { - v = s[i]; - if (predicate(v)) - result.push(v); - } - return result; - }); -} -function chainFilter(predicate) { - return lift(filter(this, predicate)); -} -export function concat(seq) { - var others = []; - for (var _a = 1; _a < arguments.length; _a++) { - others[_a - 1] = arguments[_a]; - } - return S(function concat() { - var s = seq(); - for (var i = 0; i < others.length; i++) { - s = s.concat(others[i]()); - } - return s; - }); -} -function chainConcat() { - var others = []; - for (var _a = 0; _a < arguments.length; _a++) { - others[_a] = arguments[_a]; - } - return lift(concat.apply(void 0, [this].concat(others))); -} -export function reduce(seq, fn, seed) { - return S(function reduce() { - var s = seq(), result = seed instanceof Function ? seed() : seed; - for (var i = 0; i < s.length; i++) { - result = fn(result, s[i], i, s); - } - return result; - }); -} -function chainReduce(fn, seed) { - return reduce(this, fn, seed); -} -export function reduceRight(seq, fn, seed) { - return S(function reduceRight() { - var s = seq(), result = seed instanceof Function ? seed() : seed; - for (var i = s.length - 1; i >= 0; i--) { - result = fn(result, s[i], i, s); - } - return result; - }); -} -function chainReduceRight(fn, seed) { - return reduceRight(this, fn, seed); -} -export function every(seq, fn) { - return S(function every() { - var s = seq(); - for (var i = 0; i < s.length; i++) { - if (!fn(s[i])) - return false; - } - return true; - }); -} -function chainEvery(fn) { - return every(this, fn); -} -export function some(seq, fn) { - return S(function some() { - var s = seq(); - if (fn === undefined) - return s.length !== 0; - for (var i = 0; i < s.length; i++) { - if (fn(s[i])) - return true; - } - return false; - }); -} -function chainSome(fn) { - return some(this, fn); -} -export function reverse(seq) { - return S(function () { - var copy = seq().slice(0); - copy.reverse(); - return copy; - }); -} -function chainReverse() { - return lift(reverse(this)); -} -export function slice(seq, s, e) { - return S(function () { - return seq().slice(s, e); - }); -} -function chainSlice(s, e) { - return lift(slice(this, s, e)); -} diff --git a/index.js b/index.js deleted file mode 100644 index c8abf3a..0000000 --- a/index.js +++ /dev/null @@ -1,558 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('s-js')) : - typeof define === 'function' && define.amd ? define(['exports', 's-js'], factory) : - (factory((global.SArray = {}),global.S)); -}(this, (function (exports,S) { 'use strict'; - - S = S && S.hasOwnProperty('default') ? S['default'] : S; - - // synchronous array signals for S.js - function SArray(values) { - if (!Array.isArray(values)) - throw new Error("SArray must be initialized with an array"); - var dirty = S.data(false), mutations = [], mutcount = 0, pops = 0, shifts = 0, data = S.root(function () { return S.on(dirty, update, values, true); }); - // add mutators - var array = function array(newvalues) { - if (arguments.length > 0) { - mutation(function array() { values = newvalues; }); - return newvalues; - } - else { - return data(); - } - }; - array.push = push; - array.pop = pop; - array.unshift = unshift; - array.shift = shift; - array.splice = splice; - // not ES5 - array.remove = remove; - array.removeAll = removeAll; - lift(array); - return array; - function mutation(m) { - mutations[mutcount++] = m; - dirty(true); - } - function update() { - if (pops) - values.splice(values.length - pops, pops); - if (shifts) - values.splice(0, shifts); - pops = 0; - shifts = 0; - for (var i = 0; i < mutcount; i++) { - mutations[i](); - mutations[i] = null; - } - mutcount = 0; - return values; - } - // mutators - function push(item) { - mutation(function push() { values.push(item); }); - return array; - } - function pop() { - array(); - if ((pops + shifts) < values.length) { - var value = values[values.length - ++pops]; - dirty(true); - return value; - } - } - function unshift(item) { - mutation(function unshift() { values.unshift(item); }); - return array; - } - function shift() { - array(); - if ((pops + shifts) < values.length) { - var value = values[shifts++]; - dirty(true); - return value; - } - } - function splice( /* arguments */) { - var args = Array.prototype.slice.call(arguments); - mutation(function splice() { Array.prototype.splice.apply(values, args); }); - return array; - } - function remove(item) { - mutation(function remove() { - for (var i = 0; i < values.length; i++) { - if (values[i] === item) { - values.splice(i, 1); - break; - } - } - }); - return array; - } - function removeAll(item) { - mutation(function removeAll() { - for (var i = 0; i < values.length;) { - if (values[i] === item) { - values.splice(i, 1); - } - else { - i++; - } - } - }); - return array; - } - } - // util to add transformer methods - function lift(seq) { - var _seq = seq; - _seq.concat = chainConcat; - _seq.every = chainEvery; - _seq.filter = chainFilter; - _seq.find = chainFind; - //s.findIndex = findIndex; - _seq.forEach = chainForEach; - _seq.includes = chainIncludes; - //s.indexOf = indexOf; - //s.join = join; - //s.lastIndexOf = lastIndexOf; - _seq.map = chainMap; - _seq.sort = chainSort; - _seq.reduce = chainReduce; - _seq.reduceRight = chainReduceRight; - _seq.reverse = chainReverse; - _seq.slice = chainSlice; - _seq.some = chainSome; - // non-ES5 transformers - _seq.mapS = chainMapS; - _seq.mapSample = chainMapSample; - _seq.mapSequentially = chainMapSequentially; - _seq.orderBy = chainOrderBy; - return _seq; - } - function mapS(seq, enter, exit, move) { - var items = [], mapped = [], disposers = [], len = 0; - S(function () { S.cleanup(function () { disposers.forEach(function (d) { d(); }); }); }); - return S.on(seq, function mapS() { - var new_items = seq(), new_len = new_items.length, temp = new Array(new_len), tempdisposers = new Array(new_len), from = null, to = null, i, j, k, item; - if (move) - from = [], to = []; - // 1) step through all old items and see if they can be found in the new set; if so, save them in a temp array and mark them moved; if not, exit them - NEXT: for (i = 0, k = 0; i < len; i++) { - item = items[i]; - for (j = 0; j < new_len; j++, k = (k + 1) % new_len) { - if (item === new_items[k] && !temp.hasOwnProperty(k.toString())) { - temp[k] = mapped[i]; - tempdisposers[k] = disposers[i]; - if (move && i !== k) { - from.push(i); - to.push(k); - } - k = (k + 1) % new_len; - continue NEXT; - } - } - if (exit) - exit(item, mapped[i](), i); - disposers[i](); - } - if (move && from.length) - move(items, mapped, from, to); - // 2) set all the new values, pulling from the temp array if copied, otherwise entering the new value - for (i = 0; i < new_len; i++) { - if (temp.hasOwnProperty(i.toString())) { - mapped[i] = temp[i]; - disposers[i] = tempdisposers[i]; - } - else { - mapped[i] = S.root(mapper); - } - } - // 3) in case the new set is shorter than the old, set the length of the mapped array - len = mapped.length = new_len; - // 4) save a copy of the mapped items for the next update - items = new_items.slice(); - return mapped; - function mapper(disposer) { - disposers[i] = disposer; - var _item = new_items[i], _i = i; - return S(function (value) { return enter(_item, value, _i); }, undefined); - } - }); - } - function chainMapS(enter, exit, move) { - var r = lift(mapS(this, enter, exit, move)); - r.combine = chainCombine; - return r; - } - function mapSample(seq, enter, exit, move) { - var items = [], mapped = [], disposers = [], len = 0; - S(function () { S.cleanup(function () { disposers.forEach(function (d) { d(); }); }); }); - return S.on(seq, function mapSample() { - var new_items = seq(), new_len = new_items.length, new_indices, new_indices_next, temp, tempdisposers, from = null, to = null, i, j, start, end, new_end, item; - // fast path for empty arrays - if (new_len === 0) { - if (len !== 0) { - if (exit !== undefined) { - for (i = 0; i < len; i++) { - item = items[i]; - exit(item, mapped[i], i); - disposers[i](); - } - } - else { - for (i = 0; i < len; i++) { - disposers[i](); - } - } - items = []; - mapped = []; - disposers = []; - len = 0; - } - } - else if (len === 0) { - for (j = 0; j < new_len; j++) { - items[j] = new_items[j]; - mapped[j] = S.root(mapper); - } - len = new_len; - } - else { - new_indices = new Map(); - temp = new Array(new_len); - tempdisposers = new Array(new_len); - if (move) - from = [], to = []; - // skip common prefix and suffix - for (start = 0, end = Math.min(len, new_len); start < end && items[start] === new_items[start]; start++) - ; - for (end = len - 1, new_end = new_len - 1; end >= 0 && new_end >= 0 && items[end] === new_items[new_end]; end--, new_end--) { - temp[new_end] = mapped[end]; - tempdisposers[new_end] = disposers[end]; - } - // 0) prepare a map of all indices in new_items, scanning backwards so we encounter them in natural order - new_indices_next = new Array(new_end + 1); - for (j = new_end; j >= start; j--) { - item = new_items[j]; - i = new_indices.get(item); - new_indices_next[j] = i === undefined ? -1 : i; - new_indices.set(item, j); - } - // 1) step through all old items and see if they can be found in the new set; if so, save them in a temp array and mark them moved; if not, exit them - for (i = start; i <= end; i++) { - item = items[i]; - j = new_indices.get(item); - if (j !== undefined && j !== -1) { - temp[j] = mapped[i]; - tempdisposers[j] = disposers[i]; - if (move && i !== j) { - from.push(i); - to.push(j); - } - j = new_indices_next[j]; - new_indices.set(item, j); - } - else { - if (exit) - exit(item, mapped[i], i); - disposers[i](); - } - } - if (move && (from.length !== 0 || end !== len - 1)) { - end++, new_end++; - while (end < len) { - from.push(end++); - to.push(new_end++); - } - move(items, mapped, from, to); - } - // 2) set all the new values, pulling from the temp array if copied, otherwise entering the new value - for (j = start; j < new_len; j++) { - if (temp.hasOwnProperty(j)) { - mapped[j] = temp[j]; - disposers[j] = tempdisposers[j]; - } - else { - mapped[j] = S.root(mapper); - } - } - // 3) in case the new set is shorter than the old, set the length of the mapped array - len = mapped.length = new_len; - // 4) save a copy of the mapped items for the next update - items = new_items.slice(); - } - return mapped; - function mapper(disposer) { - disposers[j] = disposer; - return enter(new_items[j], mapped[j], j); - } - }); - } - function chainMapSample(enter, exit, move) { - return lift(mapSample(this, enter, exit, move)); - } - function mapSequentially(seq, update) { - var mapped = []; - return S(function mapSequentially() { - var s = seq(); - for (var i = 0; i < s.length; i++) { - mapped[i] = update(s[i], mapped[i], i); - } - if (mapped.length > s.length) - mapped.length = s.length; - return mapped; - }); - } - function chainMapSequentially(enter) { - return lift(mapSequentially(this, enter)); - } - function forEach(seq, enter, exit, move) { - var items = [], len = 0; - return S.on(seq, function forEach() { - var new_items = seq(), new_len = new_items.length, found = new Array(new_len), from = [], to = [], i, j, k, item; - // 1) step through all old items and see if they can be found in the new set; if so, save them in a temp array and mark them moved; if not, exit them - NEXT: for (i = 0, k = 0; i < len; i++) { - item = items[i]; - for (j = 0; j < new_len; j++, k = (k + 1) % new_len) { - if (item === new_items[k] && !found[k]) { - found[k] = true; - if (i !== k) { - from.push(i); - to.push(k); - } - k = (k + 1) % new_len; - continue NEXT; - } - } - if (exit) - exit(item, i); - } - if (move && from.length) - move(from, to); - // 2) set all the new values, pulling from the temp array if copied, otherwise entering the new value - for (var i = 0; i < new_len; i++) { - if (!found[i]) - enter(new_items[i], i); - } - // 3) in case the new set is shorter than the old, set the length of the mapped array - len = new_len; - // 4) save a copy of the mapped items for the next update - items = new_items.slice(); - return items; - }); - } - function chainForEach(enter, exit, move) { - return lift(forEach(this, enter, exit, move)); - } - function combine(seq) { - return S(function combine() { - var s = seq(), result = new Array(s.length); - for (var i = 0; i < s.length; i++) { - result[i] = s[i](); - } - return result; - }); - } - function chainCombine() { - return lift(combine(this)); - } - function map(seq, enter, exit, move) { - return combine(mapS(seq, enter, exit, move == undefined ? undefined : - function (items, mapped, from, to) { move(items, mapped.map(function (s) { return s(); }), from, to); })); - } - function chainMap(enter, exit, move) { - return lift(map(this, enter, exit, move)); - } - function find(seq, pred) { - return S(function find() { - var s = seq(), i, item; - for (i = 0; i < s.length; i++) { - item = s[i]; - if (pred(item)) - return item; - } - return undefined; - }); - } - function chainFind(pred) { - return find(this, pred); - } - function includes(seq, o) { - return S(function find() { - var s = seq(); - for (var i = 0; i < s.length; i++) { - if (s[i] === o) - return true; - } - return false; - }); - } - function chainIncludes(o) { - return includes(this, o); - } - function sort(seq, fn) { - return S(function sort() { - var copy = seq().slice(0); - if (fn) - copy.sort(fn); - else - copy.sort(); - return copy; - }); - } - function chainSort(fn) { - return lift(sort(this, fn)); - } - function orderBy(seq, by) { - var key, fn; - if (typeof by !== 'function') { - key = by; - fn = function (o) { return o[key]; }; - } - else { - fn = by; - } - return S(function orderBy() { - var copy = seq().slice(0); - copy.sort(function (a, b) { - a = fn(a); - b = fn(b); - return a < b ? -1 : a > b ? 1 : 0; - }); - return copy; - }); - } - function chainOrderBy(by) { - return lift(orderBy(this, by)); - } - function filter(seq, predicate) { - return S(function filter() { - var s = seq(), result = [], i, v; - for (i = 0; i < s.length; i++) { - v = s[i]; - if (predicate(v)) - result.push(v); - } - return result; - }); - } - function chainFilter(predicate) { - return lift(filter(this, predicate)); - } - function concat(seq) { - var others = []; - for (var _a = 1; _a < arguments.length; _a++) { - others[_a - 1] = arguments[_a]; - } - return S(function concat() { - var s = seq(); - for (var i = 0; i < others.length; i++) { - s = s.concat(others[i]()); - } - return s; - }); - } - function chainConcat() { - var others = []; - for (var _a = 0; _a < arguments.length; _a++) { - others[_a] = arguments[_a]; - } - return lift(concat.apply(void 0, [this].concat(others))); - } - function reduce(seq, fn, seed) { - return S(function reduce() { - var s = seq(), result = seed instanceof Function ? seed() : seed; - for (var i = 0; i < s.length; i++) { - result = fn(result, s[i], i, s); - } - return result; - }); - } - function chainReduce(fn, seed) { - return reduce(this, fn, seed); - } - function reduceRight(seq, fn, seed) { - return S(function reduceRight() { - var s = seq(), result = seed instanceof Function ? seed() : seed; - for (var i = s.length - 1; i >= 0; i--) { - result = fn(result, s[i], i, s); - } - return result; - }); - } - function chainReduceRight(fn, seed) { - return reduceRight(this, fn, seed); - } - function every(seq, fn) { - return S(function every() { - var s = seq(); - for (var i = 0; i < s.length; i++) { - if (!fn(s[i])) - return false; - } - return true; - }); - } - function chainEvery(fn) { - return every(this, fn); - } - function some(seq, fn) { - return S(function some() { - var s = seq(); - if (fn === undefined) - return s.length !== 0; - for (var i = 0; i < s.length; i++) { - if (fn(s[i])) - return true; - } - return false; - }); - } - function chainSome(fn) { - return some(this, fn); - } - function reverse(seq) { - return S(function () { - var copy = seq().slice(0); - copy.reverse(); - return copy; - }); - } - function chainReverse() { - return lift(reverse(this)); - } - function slice(seq, s, e) { - return S(function () { - return seq().slice(s, e); - }); - } - function chainSlice(s, e) { - return lift(slice(this, s, e)); - } - - exports.default = SArray; - exports.lift = lift; - exports.mapS = mapS; - exports.mapSample = mapSample; - exports.mapSequentially = mapSequentially; - exports.forEach = forEach; - exports.combine = combine; - exports.map = map; - exports.find = find; - exports.includes = includes; - exports.sort = sort; - exports.orderBy = orderBy; - exports.filter = filter; - exports.concat = concat; - exports.reduce = reduce; - exports.reduceRight = reduceRight; - exports.every = every; - exports.some = some; - exports.reverse = reverse; - exports.slice = slice; - - Object.defineProperty(exports, '__esModule', { value: true }); - -}))); diff --git a/index.ts b/index.ts index c3f7e12..df5d03b 100644 --- a/index.ts +++ b/index.ts @@ -1,730 +1,840 @@ // synchronous array signals for S.js -import S from "s-js"; +import S from "@surplus/s"; export interface SArray { - () : T[]; - - concat(...others : (() => T | T[])[]) : SArray; - every(pred : (v : T) => boolean) : () => boolean; - filter(pred : (v : T) => boolean) : SArray; - find(pred : (v : T) => boolean) : () => T | undefined; - forEach(fn : (v : T) => void, exit? : (v : T, i : number) => void, move? : (from : number[], to : number[]) => void) : SArray; - includes(v : T) : () => boolean; - map(fn : (v : T, m : U | undefined, i : number) => U, exit? : (v : T, m : U, i : number) => void, move? : (items : T[], mapped : U[], from : number[], to : number[]) => void) : SArray; - sort(fn : (a : T, b : T) => number) : SArray; - reduce(fn : (cur : U, v : T, i? : number, l? : T[]) => U, seed : U | (() => U)) : () => U; - reduceRight(fn : (cur : U, v : T, i? : number, l? : T[]) => U, seed : U | (() => U)) : () => U; - reverse() : SArray; - slice(s : number, e : number) : SArray; - some(pred : (v : T) => boolean) : () => boolean; - - mapS(fn : (v : T, m : U | undefined, i : number) => U, exit? : (v : T, m : U, i : number) => void, move? : (items : T[], mapped : (() => U)[], from : number[], to : number[]) => void) : SSignalArray; - mapSample(fn : (v : T, m : U | undefined, i : number) => U, exit? : (v : T, m : U, i : number) => void, move? : (items : T[], mapped : U[], from : number[], to : number[]) => void) : SArray; - mapSequentially(fn : (v : T, m : U | undefined, i : number) => U) : SArray; - orderBy(key : (v : T) => U) : SArray; + (): T[]; + + concat(...others: (() => T | T[])[]): SArray; + every(pred: (v: T) => boolean): () => boolean; + filter(pred: (v: T) => boolean): SArray; + find(pred: (v: T) => boolean): () => T | undefined; + forEach( + fn: (v: T) => void, + exit?: (v: T, i: number) => void, + move?: (from: number[], to: number[]) => void, + ): SArray; + includes(v: T): () => boolean; + map( + fn: (v: T, m: U | undefined, i: number) => U, + exit?: (v: T, m: U, i: number) => void, + move?: (items: T[], mapped: U[], from: number[], to: number[]) => void, + ): SArray; + sort(fn: (a: T, b: T) => number): SArray; + reduce( + fn: (cur: U, v: T, i?: number, l?: T[]) => U, + seed: U | (() => U), + ): () => U; + reduceRight( + fn: (cur: U, v: T, i?: number, l?: T[]) => U, + seed: U | (() => U), + ): () => U; + reverse(): SArray; + slice(s: number, e: number): SArray; + some(pred: (v: T) => boolean): () => boolean; + + mapS( + fn: (v: T, m: U | undefined, i: number) => U, + exit?: (v: T, m: U, i: number) => void, + move?: ( + items: T[], + mapped: (() => U)[], + from: number[], + to: number[], + ) => void, + ): SSignalArray; + mapSample( + fn: (v: T, m: U | undefined, i: number) => U, + exit?: (v: T, m: U, i: number) => void, + move?: (items: T[], mapped: U[], from: number[], to: number[]) => void, + ): SArray; + mapSequentially(fn: (v: T, m: U | undefined, i: number) => U): SArray; + orderBy(key: (v: T) => U): SArray; } export interface SSignalArray extends SArray<() => T> { - combine() : SArray + combine(): SArray; } export interface SDataArray extends SArray { - (v : T[]) : T[]; + (v: T[]): T[]; - push(v : T) : SDataArray; - pop() : T | undefined; - unshift(v : T) : SDataArray; - shift() : T | undefined; - splice(i : number, len : number, ...items : T[]) : SDataArray; - remove(v : T) : SDataArray; - removeAll(v : T) : SDataArray; + push(v: T): SDataArray; + pop(): T | undefined; + unshift(v: T): SDataArray; + shift(): T | undefined; + splice(i: number, len: number, ...items: T[]): SDataArray; + remove(v: T): SDataArray; + removeAll(v: T): SDataArray; } // inline ES6 Map type definition, as we want Typescript to target ES5, but with Map interface Map { - clear(): void; - delete(key: K): boolean; - forEach(callbackfn: (value: V, key: K, map: Map) => void, thisArg?: any): void; - get(key: K): V | undefined; - has(key: K): boolean; - set(key: K, value: V): this; - readonly size: number; + clear(): void; + delete(key: K): boolean; + forEach( + callbackfn: (value: V, key: K, map: Map) => void, + thisArg?: any, + ): void; + get(key: K): V | undefined; + has(key: K): boolean; + set(key: K, value: V): this; + readonly size: number; } interface MapConstructor { - new (): Map; - new (entries?: [K, V][]): Map; - readonly prototype: Map; + new (): Map; + new (entries?: [K, V][]): Map; + readonly prototype: Map; } declare var Map: MapConstructor; -export default function SArray(values : T[]) : SDataArray { - if (!Array.isArray(values)) - throw new Error("SArray must be initialized with an array"); - - var dirty = S.data(false), - mutations = [] as ((() => void) | null)[], - mutcount = 0, - pops = 0, - shifts = 0, - data = S.root(function () { return S.on(dirty, update, values, true); }); - - // add mutators - var array = >function array(newvalues? : T[]) { - if (arguments.length > 0) { - mutation(function array() { values = newvalues!; }); - return newvalues!; - } else { - return data(); - } - }; +export default function SArray(values: T[]): SDataArray { + if (!Array.isArray(values)) + throw new Error("SArray must be initialized with an array"); + + var dirty = S.data(false), + mutations = [] as ((() => void) | null)[], + mutcount = 0, + pops = 0, + shifts = 0, + data = S.root(function () { + return S.on(dirty, update, values, true); + }); - array.push = push; - array.pop = pop; - array.unshift = unshift; - array.shift = shift; - array.splice = splice; + // add mutators + var array = >function array(newvalues?: T[]) { + if (arguments.length > 0) { + mutation(function array() { + values = newvalues!; + }); + return newvalues!; + } else { + return data(); + } + }; - // not ES5 - array.remove = remove; - array.removeAll = removeAll; + array.push = push; + array.pop = pop; + array.unshift = unshift; + array.shift = shift; + array.splice = splice; - lift(array); + // not ES5 + array.remove = remove; + array.removeAll = removeAll; - return array; - - function mutation(m : () => void) { - mutations[mutcount++] = m; - dirty(true); - } - - function update() { - if (pops) values.splice(values.length - pops, pops); - if (shifts) values.splice(0, shifts); - - pops = 0; - shifts = 0; - - for (var i = 0; i < mutcount; i++) { - mutations[i]!(); - mutations[i] = null; - } - - mutcount = 0; - - return values; - } - - // mutators - function push(item : T) { - mutation(function push() { values.push(item); }); - return array; - } + lift(array); - function pop() { - array(); - if ((pops + shifts) < values.length) { - var value = values[values.length - ++pops]; - dirty(true); - return value; - } - } + return array; - function unshift(item : T) { - mutation(function unshift() { values.unshift(item); }); - return array; - } + function mutation(m: () => void) { + mutations[mutcount++] = m; + dirty(true); + } - function shift() { - array(); - if ((pops + shifts) < values.length) { - var value = values[shifts++]; - dirty(true); - return value; - } - } + function update() { + if (pops) values.splice(values.length - pops, pops); + if (shifts) values.splice(0, shifts); - function splice(/* arguments */) { - var args = Array.prototype.slice.call(arguments); - mutation(function splice() { Array.prototype.splice.apply(values, args); }); - return array; + pops = 0; + shifts = 0; + + for (var i = 0; i < mutcount; i++) { + mutations[i]!(); + mutations[i] = null; } - function remove(item : T) { - mutation(function remove() { - for (var i = 0; i < values.length; i++) { - if (values[i] === item) { - values.splice(i, 1); - break; - } - } - }); - return array; + mutcount = 0; + + return values; + } + + // mutators + function push(item: T) { + mutation(function push() { + values.push(item); + }); + return array; + } + + function pop() { + array(); + if (pops + shifts < values.length) { + var value = values[values.length - ++pops]; + dirty(true); + return value; } + } - function removeAll(item : T) { - mutation(function removeAll() { - for (var i = 0; i < values.length; ) { - if (values[i] === item) { - values.splice(i, 1); - } else { - i++; - } - } - }); - return array; + function unshift(item: T) { + mutation(function unshift() { + values.unshift(item); + }); + return array; + } + + function shift() { + array(); + if (pops + shifts < values.length) { + var value = values[shifts++]; + dirty(true); + return value; } + } + + function splice(...args: Parameters) { + mutation(function splice() { + Array.prototype.splice.apply(values, args); + }); + return array; + } + + function remove(item: T) { + mutation(function remove() { + for (var i = 0; i < values.length; i++) { + if (values[i] === item) { + values.splice(i, 1); + break; + } + } + }); + return array; + } + + function removeAll(item: T) { + mutation(function removeAll() { + for (var i = 0; i < values.length; ) { + if (values[i] === item) { + values.splice(i, 1); + } else { + i++; + } + } + }); + return array; + } } // util to add transformer methods -export function lift(seq : () => T[]) { - var _seq = seq as SArray; - - _seq.concat = chainConcat; - _seq.every = chainEvery; - _seq.filter = chainFilter; - _seq.find = chainFind; - //s.findIndex = findIndex; - _seq.forEach = chainForEach; - _seq.includes = chainIncludes; - //s.indexOf = indexOf; - //s.join = join; - //s.lastIndexOf = lastIndexOf; - _seq.map = chainMap; - _seq.sort = chainSort; - _seq.reduce = chainReduce; - _seq.reduceRight = chainReduceRight; - _seq.reverse = chainReverse; - _seq.slice = chainSlice; - _seq.some = chainSome; - - // non-ES5 transformers - _seq.mapS = chainMapS; - _seq.mapSample = chainMapSample; - _seq.mapSequentially = chainMapSequentially; - _seq.orderBy = chainOrderBy; - - return _seq; +export function lift(seq: () => T[]) { + var _seq = seq as SArray; + + _seq.concat = chainConcat; + _seq.every = chainEvery; + _seq.filter = chainFilter; + _seq.find = chainFind; + //s.findIndex = findIndex; + _seq.forEach = chainForEach; + _seq.includes = chainIncludes; + //s.indexOf = indexOf; + //s.join = join; + //s.lastIndexOf = lastIndexOf; + _seq.map = chainMap; + _seq.sort = chainSort; + _seq.reduce = chainReduce; + _seq.reduceRight = chainReduceRight; + _seq.reverse = chainReverse; + _seq.slice = chainSlice; + _seq.some = chainSome; + + // non-ES5 transformers + _seq.mapS = chainMapS; + _seq.mapSample = chainMapSample; + _seq.mapSequentially = chainMapSequentially; + _seq.orderBy = chainOrderBy; + + return _seq; } export function mapS( - seq : () => T[], - enter : (v : T, m : U | undefined, i : number) => U, - exit? : (v : T, m : U, i : number) => void, - move? : (items : T[], mapped : (() => U)[], from : number[], to : number[]) => void + seq: () => T[], + enter: (v: T, m: U | undefined, i: number) => U, + exit?: (v: T, m: U, i: number) => void, + move?: ( + items: T[], + mapped: (() => U)[], + from: number[], + to: number[], + ) => void, ) { - var items = [] as T[], - mapped = [] as (() => U)[], - disposers = [] as (() => void)[], - len = 0; - - S(function () { S.cleanup(function () { disposers.forEach(function (d) { d(); }); }); }); - - return S.on(seq, function mapS() { - var new_items = seq(), - new_len = new_items.length, - temp = new Array(new_len) as (() => U)[], - tempdisposers = new Array(new_len) as (() => void)[], - from = null! as number[], - to = null! as number[], - i : number, - j : number, - k : number, - item : T; - - if (move) from = [], to = []; - - // 1) step through all old items and see if they can be found in the new set; if so, save them in a temp array and mark them moved; if not, exit them - NEXT: - for (i = 0, k = 0; i < len; i++) { - item = items[i]; - for (j = 0; j < new_len; j++, k = (k + 1) % new_len) { - if (item === new_items[k] && !temp.hasOwnProperty(k.toString())) { - temp[k] = mapped[i]; - tempdisposers[k] = disposers[i]; - if (move && i !== k) { from.push(i); to.push(k); } - k = (k + 1) % new_len; - continue NEXT; - } - } - if (exit) exit(item, mapped[i](), i); - disposers[i](); + var items = [] as T[], + mapped = [] as (() => U)[], + disposers = [] as (() => void)[], + len = 0; + + S(function () { + S.cleanup(function () { + disposers.forEach(function (d) { + d(); + }); + }); + }); + + return S.on(seq, function mapS() { + var new_items = seq(), + new_len = new_items.length, + temp = new Array(new_len) as (() => U)[], + tempdisposers = new Array(new_len) as (() => void)[], + from = null! as number[], + to = null! as number[], + i: number, + j: number, + k: number, + item: T; + + if (move) ((from = []), (to = [])); + + // 1) step through all old items and see if they can be found in the new set; if so, save them in a temp array and mark them moved; if not, exit them + NEXT: for (i = 0, k = 0; i < len; i++) { + item = items[i]; + for (j = 0; j < new_len; j++, k = (k + 1) % new_len) { + if (item === new_items[k] && !temp.hasOwnProperty(k.toString())) { + temp[k] = mapped[i]; + tempdisposers[k] = disposers[i]; + if (move && i !== k) { + from.push(i); + to.push(k); + } + k = (k + 1) % new_len; + continue NEXT; } + } + if (exit) exit(item, mapped[i](), i); + disposers[i](); + } - if (move && from.length) move(items, mapped, from, to); + if (move && from.length) move(items, mapped, from, to); - // 2) set all the new values, pulling from the temp array if copied, otherwise entering the new value - for (i = 0; i < new_len; i++) { - if (temp.hasOwnProperty(i.toString())) { - mapped[i] = temp[i]; - disposers[i] = tempdisposers[i]; - } else { - mapped[i] = S.root(mapper); - } - } + // 2) set all the new values, pulling from the temp array if copied, otherwise entering the new value + for (i = 0; i < new_len; i++) { + if (temp.hasOwnProperty(i.toString())) { + mapped[i] = temp[i]; + disposers[i] = tempdisposers[i]; + } else { + mapped[i] = S.root(mapper); + } + } - // 3) in case the new set is shorter than the old, set the length of the mapped array - len = mapped.length = new_len; + // 3) in case the new set is shorter than the old, set the length of the mapped array + len = mapped.length = new_len; - // 4) save a copy of the mapped items for the next update - items = new_items.slice(); + // 4) save a copy of the mapped items for the next update + items = new_items.slice(); - return mapped; - - function mapper(disposer : () => void) { - disposers[i] = disposer; - var _item = new_items[i], _i = i; - return S(function (value : U) { return enter(_item, value, _i); }, undefined!); - } - }); + return mapped; + + function mapper(disposer: () => void) { + disposers[i] = disposer; + var _item = new_items[i], + _i = i; + return S(function (value: U) { + return enter(_item, value, _i); + }, undefined!); + } + }); } function chainMapS( - this : () => T[], - enter : (v : T, m : U | undefined, i : number) => U, - exit? : (v : T, m : U, i : number) => void, - move? : (items : T[], mapped : (() => U)[], from : number[], to : number[]) => void + this: () => T[], + enter: (v: T, m: U | undefined, i: number) => U, + exit?: (v: T, m: U, i: number) => void, + move?: ( + items: T[], + mapped: (() => U)[], + from: number[], + to: number[], + ) => void, ) { - var r = lift(mapS(this, enter, exit, move)) as SSignalArray; - r.combine = chainCombine; - return r; + var r = lift(mapS(this, enter, exit, move)) as SSignalArray; + r.combine = chainCombine; + return r; } export function mapSample( - seq : () => T[], - enter : (v : T, m : U | undefined, i : number) => U, - exit? : (v : T, m : U, i : number) => void, - move? : (items : T[], mapped : U[], from : number[], to : number[]) => void + seq: () => T[], + enter: (v: T, m: U | undefined, i: number) => U, + exit?: (v: T, m: U, i: number) => void, + move?: (items: T[], mapped: U[], from: number[], to: number[]) => void, ) { - var items = [] as T[], - mapped = [] as U[], - disposers = [] as (() => void)[], + var items = [] as T[], + mapped = [] as U[], + disposers = [] as (() => void)[], + len = 0; + + S(function () { + S.cleanup(function () { + disposers.forEach(function (d) { + d(); + }); + }); + }); + + return S.on(seq, function mapSample() { + var new_items = seq(), + new_len = new_items.length, + new_indices: Map, + new_indices_next: number[], + temp: U[], + tempdisposers: (() => void)[], + from = null! as number[], + to = null! as number[], + i: number, + j: number, + start: number, + end: number, + new_end: number, + item: T; + + // fast path for empty arrays + if (new_len === 0) { + if (len !== 0) { + if (exit !== undefined) { + for (i = 0; i < len; i++) { + item = items[i]; + exit(item, mapped[i], i); + disposers[i](); + } + } else { + for (i = 0; i < len; i++) { + disposers[i](); + } + } + items = []; + mapped = []; + disposers = []; len = 0; - - S(function () { S.cleanup(function () { disposers.forEach(function (d) { d(); }); }); }); - - return S.on(seq, function mapSample() { - var new_items = seq(), - new_len = new_items.length, - new_indices : Map, - new_indices_next : number[], - temp : U[], - tempdisposers : (() => void)[], - from = null! as number[], - to = null! as number[], - i : number, - j : number, - start : number, - end : number, - new_end : number, - item : T; - - // fast path for empty arrays - if (new_len === 0) { - if (len !== 0) { - if (exit !== undefined) { - for (i = 0; i < len; i++) { - item = items[i]; - exit(item, mapped[i], i); - disposers[i](); - } - } else { - for (i = 0; i < len; i++) { - disposers[i](); - } - } - items = []; - mapped = []; - disposers = []; - len = 0; - } - } else if (len === 0) { - for (j = 0; j < new_len; j++) { - items[j] = new_items[j]; - mapped[j] = S.root(mapper); - } - len = new_len; + } + } else if (len === 0) { + for (j = 0; j < new_len; j++) { + items[j] = new_items[j]; + mapped[j] = S.root(mapper); + } + len = new_len; + } else { + new_indices = new Map(); + temp = new Array(new_len); + tempdisposers = new Array(new_len); + if (move) ((from = []), (to = [])); + + // skip common prefix and suffix + for ( + start = 0, end = Math.min(len, new_len); + start < end && items[start] === new_items[start]; + start++ + ); + for ( + end = len - 1, new_end = new_len - 1; + end >= 0 && new_end >= 0 && items[end] === new_items[new_end]; + end--, new_end-- + ) { + temp[new_end] = mapped[end]; + tempdisposers[new_end] = disposers[end]; + } + + // 0) prepare a map of all indices in new_items, scanning backwards so we encounter them in natural order + new_indices_next = new Array(new_end + 1); + for (j = new_end; j >= start; j--) { + item = new_items[j]; + i = new_indices.get(item)!; + new_indices_next[j] = i === undefined ? -1 : i; + new_indices.set(item, j); + } + + // 1) step through all old items and see if they can be found in the new set; if so, save them in a temp array and mark them moved; if not, exit them + for (i = start; i <= end; i++) { + item = items[i]; + j = new_indices.get(item)!; + if (j !== undefined && j !== -1) { + temp[j] = mapped[i]; + tempdisposers[j] = disposers[i]; + if (move && i !== j) { + from.push(i); + to.push(j); + } + j = new_indices_next[j]; + new_indices.set(item, j); } else { - new_indices = new Map(); - temp = new Array(new_len); - tempdisposers = new Array(new_len); - if (move) from = [], to = []; - - // skip common prefix and suffix - for (start = 0, end = Math.min(len, new_len); start < end && items[start] === new_items[start]; start++); - for (end = len - 1, new_end = new_len - 1; end >= 0 && new_end >= 0 && items[end] === new_items[new_end]; end--, new_end--) { - temp[new_end] = mapped[end]; - tempdisposers[new_end] = disposers[end]; - } - - // 0) prepare a map of all indices in new_items, scanning backwards so we encounter them in natural order - new_indices_next = new Array(new_end + 1); - for (j = new_end; j >= start; j--) { - item = new_items[j]; - i = new_indices.get(item)!; - new_indices_next[j] = i === undefined ? -1 : i; - new_indices.set(item, j); - } - - // 1) step through all old items and see if they can be found in the new set; if so, save them in a temp array and mark them moved; if not, exit them - for (i = start; i <= end; i++) { - item = items[i]; - j = new_indices.get(item)!; - if (j !== undefined && j !== -1) { - temp[j] = mapped[i]; - tempdisposers[j] = disposers[i]; - if (move && i !== j) { - from.push(i); - to.push(j); - } - j = new_indices_next[j]; - new_indices.set(item, j); - } else { - if (exit) exit(item, mapped[i], i); - disposers[i](); - } - } - - if (move && (from.length !== 0 || end !== len - 1)) { - end++, new_end++; - while (end < len) { - from.push(end++); - to.push(new_end++); - } - move(items, mapped, from, to); - } - - // 2) set all the new values, pulling from the temp array if copied, otherwise entering the new value - for (j = start; j < new_len; j++) { - if (temp.hasOwnProperty(j as any)) { - mapped[j] = temp[j]; - disposers[j] = tempdisposers[j]; - } else { - mapped[j] = S.root(mapper); - } - } - - // 3) in case the new set is shorter than the old, set the length of the mapped array - len = mapped.length = new_len; - - // 4) save a copy of the mapped items for the next update - items = new_items.slice(); + if (exit) exit(item, mapped[i], i); + disposers[i](); } + } - return mapped; - - function mapper(disposer : () => void) { - disposers[j] = disposer; - return enter(new_items[j], mapped[j], j); + if (move && (from.length !== 0 || end !== len - 1)) { + (end++, new_end++); + while (end < len) { + from.push(end++); + to.push(new_end++); } - }); + move(items, mapped, from, to); + } + + // 2) set all the new values, pulling from the temp array if copied, otherwise entering the new value + for (j = start; j < new_len; j++) { + if (temp.hasOwnProperty(j as any)) { + mapped[j] = temp[j]; + disposers[j] = tempdisposers[j]; + } else { + mapped[j] = S.root(mapper); + } + } + + // 3) in case the new set is shorter than the old, set the length of the mapped array + len = mapped.length = new_len; + + // 4) save a copy of the mapped items for the next update + items = new_items.slice(); + } + + return mapped; + + function mapper(disposer: () => void) { + disposers[j] = disposer; + return enter(new_items[j], mapped[j], j); + } + }); } function chainMapSample( - this : () => T[], - enter : (v : T, m : U | undefined, i : number) => U, - exit? : (v : T, m : U, i : number) => void, - move? : (items : T[], mapped : U[], from : number[], to : number[]) => void + this: () => T[], + enter: (v: T, m: U | undefined, i: number) => U, + exit?: (v: T, m: U, i: number) => void, + move?: (items: T[], mapped: U[], from: number[], to: number[]) => void, ) { - return lift(mapSample(this, enter, exit, move)); + return lift(mapSample(this, enter, exit, move)); } export function mapSequentially( - seq: () => T[], - update: (v: T, m: U | undefined, i: number) => U + seq: () => T[], + update: (v: T, m: U | undefined, i: number) => U, ) { - var mapped = [] as U[]; - return S(function mapSequentially() { - var s = seq(); - for (var i = 0; i < s.length; i++) { - mapped[i] = update(s[i], mapped[i], i); - } - if (mapped.length > s.length) mapped.length = s.length; - return mapped; - }); + var mapped = [] as U[]; + return S(function mapSequentially() { + var s = seq(); + for (var i = 0; i < s.length; i++) { + mapped[i] = update(s[i], mapped[i], i); + } + if (mapped.length > s.length) mapped.length = s.length; + return mapped; + }); } function chainMapSequentially( - this : () => T[], - enter : (v : T, m : U | undefined, i : number) => U + this: () => T[], + enter: (v: T, m: U | undefined, i: number) => U, ) { - return lift(mapSequentially(this, enter)); + return lift(mapSequentially(this, enter)); } export function forEach( - seq : () => T[], - enter : (v : T, i : number) => void, - exit? : (v : T, i : number) => void, - move? : (from : number[], to : number[]) => void + seq: () => T[], + enter: (v: T, i: number) => void, + exit?: (v: T, i: number) => void, + move?: (from: number[], to: number[]) => void, ) { - var items = [] as T[], - len = 0; - - return S.on(seq, function forEach() { - var new_items = seq(), - new_len = new_items.length, - found = new Array(new_len) as boolean[], - from = [] as number[], - to = [] as number[], - i : number, - j : number, - k : number, - item : T; - - // 1) step through all old items and see if they can be found in the new set; if so, save them in a temp array and mark them moved; if not, exit them - NEXT: - for (i = 0, k = 0; i < len; i++) { - item = items[i]; - for (j = 0; j < new_len; j++, k = (k + 1) % new_len) { - if (item === new_items[k] && !found[k]) { - found[k] = true; - if (i !== k) { from.push(i); to.push(k); } - k = (k + 1) % new_len; - continue NEXT; - } - } - if (exit) exit(item, i); + var items = [] as T[], + len = 0; + + return S.on(seq, function forEach() { + var new_items = seq(), + new_len = new_items.length, + found = new Array(new_len) as boolean[], + from = [] as number[], + to = [] as number[], + i: number, + j: number, + k: number, + item: T; + + // 1) step through all old items and see if they can be found in the new set; if so, save them in a temp array and mark them moved; if not, exit them + NEXT: for (i = 0, k = 0; i < len; i++) { + item = items[i]; + for (j = 0; j < new_len; j++, k = (k + 1) % new_len) { + if (item === new_items[k] && !found[k]) { + found[k] = true; + if (i !== k) { + from.push(i); + to.push(k); + } + k = (k + 1) % new_len; + continue NEXT; } + } + if (exit) exit(item, i); + } - if (move && from.length) move(from, to); + if (move && from.length) move(from, to); - // 2) set all the new values, pulling from the temp array if copied, otherwise entering the new value - for (var i = 0; i < new_len; i++) { - if (!found[i]) enter(new_items[i], i); - } + // 2) set all the new values, pulling from the temp array if copied, otherwise entering the new value + for (var i = 0; i < new_len; i++) { + if (!found[i]) enter(new_items[i], i); + } - // 3) in case the new set is shorter than the old, set the length of the mapped array - len = new_len; + // 3) in case the new set is shorter than the old, set the length of the mapped array + len = new_len; - // 4) save a copy of the mapped items for the next update - items = new_items.slice(); + // 4) save a copy of the mapped items for the next update + items = new_items.slice(); - return items; - }); + return items; + }); } function chainForEach( - this : () => T[], - enter : (v : T, i : number) => void, - exit? : (v : T, i : number) => void, - move? : (from : number[], to : number[]) => void + this: () => T[], + enter: (v: T, i: number) => void, + exit?: (v: T, i: number) => void, + move?: (from: number[], to: number[]) => void, ) { - return lift(forEach(this, enter, exit, move)); + return lift(forEach(this, enter, exit, move)); } -export function combine(seq : () => (() => T)[]) { - return S(function combine() { - var s = seq(), - result = new Array(s.length) as T[]; - for (var i = 0; i < s.length; i++) { - result[i] = s[i](); - } - return result; - }); +export function combine(seq: () => (() => T)[]) { + return S(function combine() { + var s = seq(), + result = new Array(s.length) as T[]; + for (var i = 0; i < s.length; i++) { + result[i] = s[i](); + } + return result; + }); } -function chainCombine(this : () => (() => T)[]) { - return lift(combine(this)); +function chainCombine(this: () => (() => T)[]) { + return lift(combine(this)); } export function map( - seq : () => T[], - enter : (v : T, m : U | undefined, i : number) => U, - exit? : (v : T, m : U, i : number) => void, - move? : (items : T[], mapped : U[], from : number[], to : number[]) => void + seq: () => T[], + enter: (v: T, m: U | undefined, i: number) => U, + exit?: (v: T, m: U, i: number) => void, + move?: (items: T[], mapped: U[], from: number[], to: number[]) => void, ) { - return combine(mapS(seq, enter, exit, move == undefined ? undefined : - function (items, mapped, from, to) { move(items, mapped.map(s => s()), from, to); })); + return combine( + mapS( + seq, + enter, + exit, + move == undefined + ? undefined + : function (items, mapped, from, to) { + move( + items, + mapped.map((s) => s()), + from, + to, + ); + }, + ), + ); } function chainMap( - this : () => T[], - enter : (v : T, m : U | undefined, i : number) => U, - exit? : (v : T, m : U, i : number) => void, - move? : (items : T[], mapped : U[], from : number[], to : number[]) => void + this: () => T[], + enter: (v: T, m: U | undefined, i: number) => U, + exit?: (v: T, m: U, i: number) => void, + move?: (items: T[], mapped: U[], from: number[], to: number[]) => void, ) { - return lift(map(this, enter, exit, move)); + return lift(map(this, enter, exit, move)); } -export function find(seq : () => T[], pred : (v : T) => boolean) { - return S(function find() { - var s = seq(), - i : number, item : T; - for (i = 0; i < s.length; i++) { - item = s[i]; - if (pred(item)) return item; - } - return undefined; - }); +export function find(seq: () => T[], pred: (v: T) => boolean) { + return S(function find() { + var s = seq(), + i: number, + item: T; + for (i = 0; i < s.length; i++) { + item = s[i]; + if (pred(item)) return item; + } + return undefined; + }); } -function chainFind(this : () => T[], pred : (v : T) => boolean) { - return find(this, pred); +function chainFind(this: () => T[], pred: (v: T) => boolean) { + return find(this, pred); } -export function includes(seq : () => T[], o : T) { - return S(function find() { - var s = seq(); - for (var i = 0; i < s.length; i++) { - if (s[i] === o) return true; - } - return false; - }); +export function includes(seq: () => T[], o: T) { + return S(function find() { + var s = seq(); + for (var i = 0; i < s.length; i++) { + if (s[i] === o) return true; + } + return false; + }); } -function chainIncludes(this : () => T[], o : T) { - return includes(this, o); +function chainIncludes(this: () => T[], o: T) { + return includes(this, o); } -export function sort(seq : () => T[], fn?: (a: T, b : T) => number) { - return S(function sort() { - var copy = seq().slice(0); - if (fn) copy.sort(fn); - else copy.sort(); - return copy; - }); +export function sort(seq: () => T[], fn?: (a: T, b: T) => number) { + return S(function sort() { + var copy = seq().slice(0); + if (fn) copy.sort(fn); + else copy.sort(); + return copy; + }); } -function chainSort(this : () => T[], fn?: (a: T, b : T) => number) { - return lift(sort(this, fn)); +function chainSort(this: () => T[], fn?: (a: T, b: T) => number) { + return lift(sort(this, fn)); } -export function orderBy(seq : () => T[], by : keyof T | ((v : T) => any)) { - var key : keyof T, - fn : (v : T) => any; +export function orderBy(seq: () => T[], by: keyof T | ((v: T) => any)) { + var key: keyof T, fn: (v: T) => any; - if (typeof by !== 'function') { - key = by; - fn = function (o : T) { return o[key]; }; - } else { - fn = by as (v : T) => any; - } - - return S(function orderBy() { - var copy = seq().slice(0); - copy.sort(function (a, b) { - a = fn(a); - b = fn(b); - return a < b ? -1 : a > b ? 1 : 0; - }); - return copy; + if (typeof by !== "function") { + key = by; + fn = function (o: T) { + return o[key]; + }; + } else { + fn = by as (v: T) => any; + } + + return S(function orderBy() { + var copy = seq().slice(0); + copy.sort(function (a, b) { + a = fn(a); + b = fn(b); + return a < b ? -1 : a > b ? 1 : 0; }); + return copy; + }); } -function chainOrderBy(this : () => T[], by : keyof T | ((v : T) => any)) { - return lift(orderBy(this, by)); +function chainOrderBy(this: () => T[], by: keyof T | ((v: T) => any)) { + return lift(orderBy(this, by)); } -export function filter(seq : () => T[], predicate : (v : T) => boolean) { - return S(function filter() { - var s = seq(), - result = [], - i, v; +export function filter(seq: () => T[], predicate: (v: T) => boolean) { + return S(function filter() { + var s = seq(), + result = [], + i, + v; - for (i = 0; i < s.length; i++) { - v = s[i]; - if (predicate(v)) result.push(v); - } + for (i = 0; i < s.length; i++) { + v = s[i]; + if (predicate(v)) result.push(v); + } - return result; - }); + return result; + }); } -function chainFilter(this : () => T[], predicate : (v : T) => boolean) { - return lift(filter(this, predicate)); +function chainFilter(this: () => T[], predicate: (v: T) => boolean) { + return lift(filter(this, predicate)); } -export function concat(seq : () => T[], ...others : (() => T | T[])[]) { - return S(function concat() { - var s = seq(); - for (var i = 0; i < others.length; i++) { - s = s.concat(others[i]()); - } - return s; - }); +export function concat(seq: () => T[], ...others: (() => T | T[])[]) { + return S(function concat() { + var s = seq(); + for (var i = 0; i < others.length; i++) { + s = s.concat(others[i]()); + } + return s; + }); } -function chainConcat(this : () => T[], ...others : (() => T | T[])[]) { - return lift(concat(this, ...others)); +function chainConcat(this: () => T[], ...others: (() => T | T[])[]) { + return lift(concat(this, ...others)); } -export function reduce(seq : () => T[], fn : (r : U, t : T, i : number, s : T[]) => U, seed : U | (() => U)) { - return S(function reduce() { - var s = seq(), - result = seed instanceof Function ? seed() : seed; - for (var i = 0; i < s.length; i++) { - result = fn(result, s[i], i, s); - } - return result; - }); +export function reduce( + seq: () => T[], + fn: (r: U, t: T, i: number, s: T[]) => U, + seed: U | (() => U), +) { + return S(function reduce() { + var s = seq(), + result = seed instanceof Function ? seed() : seed; + for (var i = 0; i < s.length; i++) { + result = fn(result, s[i], i, s); + } + return result; + }); } -function chainReduce(this : () => T[], fn : (r : U, t : T, i : number, s : T[]) => U, seed : U | (() => U)) { - return reduce(this, fn, seed); +function chainReduce( + this: () => T[], + fn: (r: U, t: T, i: number, s: T[]) => U, + seed: U | (() => U), +) { + return reduce(this, fn, seed); } -export function reduceRight(seq : () => T[], fn : (r : U, t : T, i : number, s : T[]) => U, seed : U | (() => U)) { - return S(function reduceRight() { - var s = seq(), - result = seed instanceof Function ? seed() : seed; - for (var i = s.length - 1; i >= 0; i--) { - result = fn(result, s[i], i, s); - } - return result; - }); +export function reduceRight( + seq: () => T[], + fn: (r: U, t: T, i: number, s: T[]) => U, + seed: U | (() => U), +) { + return S(function reduceRight() { + var s = seq(), + result = seed instanceof Function ? seed() : seed; + for (var i = s.length - 1; i >= 0; i--) { + result = fn(result, s[i], i, s); + } + return result; + }); } -function chainReduceRight(this : () => T[], fn : (r : U, t : T, i : number, s : T[]) => U, seed : U | (() => U)) { - return reduceRight(this, fn, seed); +function chainReduceRight( + this: () => T[], + fn: (r: U, t: T, i: number, s: T[]) => U, + seed: U | (() => U), +) { + return reduceRight(this, fn, seed); } -export function every(seq : () => T[], fn : (v : T) => boolean) { - return S(function every() { - var s = seq(); - for (var i = 0; i < s.length; i++) { - if (!fn(s[i])) return false; - } - return true; - }); +export function every(seq: () => T[], fn: (v: T) => boolean) { + return S(function every() { + var s = seq(); + for (var i = 0; i < s.length; i++) { + if (!fn(s[i])) return false; + } + return true; + }); } -function chainEvery(this : () => T[], fn : (v : T) => boolean) { - return every(this, fn); +function chainEvery(this: () => T[], fn: (v: T) => boolean) { + return every(this, fn); } -export function some(seq : () => T[], fn? : (v : T) => boolean) { - return S(function some() { - var s = seq(); - if (fn === undefined) return s.length !== 0; - for (var i = 0; i < s.length; i++) { - if (fn(s[i])) return true; - } - return false; - }); +export function some(seq: () => T[], fn?: (v: T) => boolean) { + return S(function some() { + var s = seq(); + if (fn === undefined) return s.length !== 0; + for (var i = 0; i < s.length; i++) { + if (fn(s[i])) return true; + } + return false; + }); } -function chainSome(this : () => T[], fn? : (v : T) => boolean) { - return some(this, fn); +function chainSome(this: () => T[], fn?: (v: T) => boolean) { + return some(this, fn); } -export function reverse(seq : () => T[]) { - return S(function () { - var copy = seq().slice(0); - copy.reverse(); - return copy; - }); +export function reverse(seq: () => T[]) { + return S(function () { + var copy = seq().slice(0); + copy.reverse(); + return copy; + }); } -function chainReverse(this : () => T[]) { - return lift(reverse(this)); +function chainReverse(this: () => T[]) { + return lift(reverse(this)); } -export function slice(seq: () => T[], s : number, e : number) { - return S(function () { - return seq().slice(s, e); - }); +export function slice(seq: () => T[], s: number, e: number) { + return S(function () { + return seq().slice(s, e); + }); } -function chainSlice(this: () => T[], s : number, e : number) { - return lift(slice(this, s, e)); +function chainSlice(this: () => T[], s: number, e: number) { + return lift(slice(this, s, e)); } diff --git a/karma.conf.js b/karma.conf.js deleted file mode 100644 index 669bbef..0000000 --- a/karma.conf.js +++ /dev/null @@ -1,67 +0,0 @@ -// Karma configuration -// Generated on Fri Mar 06 2015 21:39:28 GMT-0500 (EST) - -module.exports = function(config) { - config.set({ - - // base path that will be used to resolve all patterns (eg. files, exclude) - basePath: '', - - - // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['jasmine'], - - - // list of files / patterns to load in the browser - files: [ - 'node_modules/s-js/dist/S.js', - 'index.js', - 'spec/*.spec.js' - ], - - - // list of files to exclude - exclude: [ - ], - - - // preprocess matching files before serving them to the browser - // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor - preprocessors: { - }, - - - // test results reporter to use - // possible values: 'dots', 'progress' - // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['progress'], - - - // web server port - port: 9876, - - - // enable / disable colors in the output (reporters and logs) - colors: true, - - - // level of logging - // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG - logLevel: config.LOG_INFO, - - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: true, - - - // start these browsers - // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ['Chrome'], - - - // Continuous Integration mode - // if true, Karma captures browsers, runs the tests and exits - singleRun: false - }); -}; diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index b206b56..0000000 --- a/package-lock.json +++ /dev/null @@ -1,4493 +0,0 @@ -{ - "name": "s-array", - "version": "0.4.9", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "@types/node": { - "version": "10.5.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.4.tgz", - "integrity": "sha512-8TqvB0ReZWwtcd3LXq3YSrBoLyXFgBX/sBZfGye9+YS8zH7/g+i6QRIuiDmwBoTzcQ/pk89nZYTYU4c5akKkzw==", - "dev": true - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, - "requires": { - "mime-types": "2.1.19", - "negotiator": "0.6.1" - } - }, - "addressparser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", - "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=", - "dev": true, - "optional": true - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "dev": true, - "requires": { - "es6-promisify": "5.0.0" - } - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "amqplib": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.2.tgz", - "integrity": "sha512-l9mCs6LbydtHqRniRwYkKdqxVa6XMz3Vw1fh+2gJaaVgTM6Jk3o8RccAKWKtlhT1US5sWrFh+KKxsVUALURSIA==", - "dev": true, - "optional": true, - "requires": { - "bitsyntax": "0.0.4", - "bluebird": "3.5.1", - "buffer-more-ints": "0.0.2", - "readable-stream": "1.1.14", - "safe-buffer": "5.1.2" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true, - "optional": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true, - "optional": true - } - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "optional": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "ast-types": { - "version": "0.11.5", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.5.tgz", - "integrity": "sha512-oJjo+5e7/vEc2FBK8gUalV0pba4L3VdBIs2EKhOLHLcOd2FgQIVQN9xb0eZ9IjEWyAL7vq6fGJxOvVvdCHNyMw==", - "dev": true, - "optional": true - }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "optional": true, - "requires": { - "lodash": "4.17.10" - } - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true, - "optional": true - }, - "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", - "dev": true, - "optional": true - }, - "axios": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.15.3.tgz", - "integrity": "sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=", - "dev": true, - "optional": true, - "requires": { - "follow-redirects": "1.0.0" - }, - "dependencies": { - "follow-redirects": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz", - "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=", - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.9" - } - } - } - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "balanced-match": { - "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - } - } - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, - "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true - }, - "bitsyntax": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.0.4.tgz", - "integrity": "sha1-6xDMb4K4xJDj6FaY8H6D1G4MuoI=", - "dev": true, - "optional": true, - "requires": { - "buffer-more-ints": "0.0.2" - } - }, - "bl": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", - "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "2.0.6" - }, - "dependencies": { - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true, - "optional": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true, - "optional": true - } - } - }, - "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", - "dev": true - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "1.6.16" - } - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", - "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", - "dev": true, - "requires": { - "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "buffer-more-ints": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz", - "integrity": "sha1-JrOIXRD6E9t/wBquOquHAZngEkw=", - "dev": true - }, - "buildmail": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-4.0.1.tgz", - "integrity": "sha1-h393OLeHKYccmhBeO4N9K+EaenI=", - "dev": true, - "optional": true, - "requires": { - "addressparser": "1.0.1", - "libbase64": "0.1.0", - "libmime": "3.0.0", - "libqp": "1.1.0", - "nodemailer-fetch": "1.6.0", - "nodemailer-shared": "1.1.0", - "punycode": "1.4.1" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true, - "optional": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.4", - "glob-parent": "3.1.0", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "lodash.debounce": "4.0.8", - "normalize-path": "2.1.1", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "readdirp": "2.1.0", - "upath": "1.1.0" - } - }, - "circular-json": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.5.tgz", - "integrity": "sha512-13YaR6kiz0kBNmIVM87Io8Hp7bWOo4r61vkEANy8iH9R9bc6avud/1FT0SBpqR1RpIQADOh/Q+yHZDA1iL6ysA==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "optional": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" - } - }, - "colors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.1.tgz", - "integrity": "sha512-jg/vxRmv430jixZrC+La5kMbUWqIg32/JsYNZb94+JEmzceYbWKTsv1OuTp+7EaqiaWRR2tPcykibwCRgclIsw==", - "dev": true - }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true, - "requires": { - "lodash": "4.17.10" - } - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", - "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==", - "dev": true, - "optional": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "concat-map": { - "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "1.3.2", - "utils-merge": "1.0.1" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - } - }, - "data-uri-to-buffer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz", - "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==", - "dev": true, - "optional": true - }, - "date-format": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", - "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true, - "optional": true - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - } - } - }, - "degenerator": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", - "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", - "dev": true, - "optional": true, - "requires": { - "ast-types": "0.11.5", - "escodegen": "1.11.0", - "esprima": "3.1.3" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "requires": { - "custom-event": "1.0.1", - "ent": "2.2.0", - "extend": "3.0.2", - "void-elements": "2.0.1" - } - }, - "double-ended-queue": { - "version": "2.1.0-0", - "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=", - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "engine.io": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz", - "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==", - "dev": true, - "requires": { - "accepts": "1.3.5", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "3.1.0", - "engine.io-parser": "2.1.2", - "uws": "9.14.0", - "ws": "3.3.3" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "engine.io-client": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", - "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "3.1.0", - "engine.io-parser": "2.1.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "3.3.3", - "xmlhttprequest-ssl": "1.5.5", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "engine.io-parser": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", - "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary2": "1.0.3" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "es6-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "4.2.4" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "optional": true - }, - "escodegen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", - "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", - "dev": true, - "optional": true, - "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true, - "optional": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true, - "optional": true - }, - "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", - "dev": true - }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dev": true, - "requires": { - "array-slice": "0.2.3", - "array-unique": "0.2.1", - "braces": "0.1.5" - }, - "dependencies": { - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "0.1.1" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" - }, - "dependencies": { - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true, - "optional": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true, - "optional": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true, - "optional": true - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - } - } - }, - "follow-redirects": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.1.tgz", - "integrity": "sha512-v9GI1hpaqq1ZZR6pBD1+kI7O24PhDvNGNodjS3MdcEqyrahCp8zbtpv+2B/krUnSmUH80lbAS7MrdeK5IylgKg==", - "dev": true, - "requires": { - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.19" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "0.2.2" - } - }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "1.0.0" - } - }, - "fs.realpath": { - "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "dev": true, - "optional": true, - "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "2.2.4" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "2.1.2" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "2.2.4" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true, - "dev": true - } - } - }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "1.1.14", - "xregexp": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true, - "optional": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true, - "optional": true - } - } - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true, - "optional": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "optional": true, - "requires": { - "is-property": "1.0.2" - } - }, - "get-uri": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.2.tgz", - "integrity": "sha512-ZD325dMZOgerGqF/rF6vZXyFGTAay62svjQIT+X/oU2PtxYpFxvSkbsdi+oxIrsNxlZVd4y8wUDqkaExWTI/Cw==", - "dev": true, - "optional": true, - "requires": { - "data-uri-to-buffer": "1.2.0", - "debug": "2.6.9", - "extend": "3.0.2", - "file-uri-to-path": "1.0.0", - "ftp": "0.3.10", - "readable-stream": "2.3.6" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - } - }, - "glob": { - "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", - "dev": true, - "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "optional": true - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, - "optional": true, - "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hipchat-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz", - "integrity": "sha1-ttJJdVQ3wZEII2d5nTupoPI7Ix4=", - "dev": true, - "optional": true, - "requires": { - "lodash": "4.17.10", - "request": "2.87.0" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "1.1.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "setprototypeof": "1.1.0", - "statuses": "1.5.0" - } - }, - "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", - "dev": true, - "requires": { - "eventemitter3": "3.1.0", - "follow-redirects": "1.5.1", - "requires-port": "1.0.0" - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "dev": true, - "requires": { - "agent-base": "4.2.1", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.14.2" - } - }, - "httpntlm": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz", - "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", - "dev": true, - "requires": { - "httpreq": "0.4.24", - "underscore": "1.7.0" - } - }, - "httpreq": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", - "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=", - "dev": true - }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "dev": true, - "requires": { - "agent-base": "4.2.1", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": "2.1.2" - } - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflection": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", - "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", - "dev": true, - "optional": true - }, - "inflight": { - "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - } - }, - "inherits": { - "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "1.11.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true, - "optional": true - }, - "is-my-json-valid": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", - "dev": true, - "optional": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "3.0.1" - } - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true, - "optional": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true, - "optional": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true, - "optional": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isbinaryfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true, - "optional": true - }, - "jasmine": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.1.0.tgz", - "integrity": "sha1-K9Wf1+xuwOistk4J9Fpo7SrRlSo=", - "dev": true, - "requires": { - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "jasmine-core": "3.1.0" - } - }, - "jasmine-core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.1.0.tgz", - "integrity": "sha1-pHheE11d9lAk38kiSVPfWFvSdmw=", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true, - "optional": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true, - "optional": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "karma": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/karma/-/karma-2.0.5.tgz", - "integrity": "sha512-rECezBeY7mjzGUWhFlB7CvPHgkHJLXyUmWg+6vHCEsdWNUTnmiS6jRrIMcJEWgU2DUGZzGWG0bTRVky8fsDTOA==", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "body-parser": "1.18.3", - "chokidar": "2.0.4", - "colors": "1.3.1", - "combine-lists": "1.0.1", - "connect": "3.6.6", - "core-js": "2.5.7", - "di": "0.0.1", - "dom-serialize": "2.2.1", - "expand-braces": "0.1.2", - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "graceful-fs": "4.1.11", - "http-proxy": "1.17.0", - "isbinaryfile": "3.0.2", - "lodash": "4.17.10", - "log4js": "2.11.0", - "mime": "1.6.0", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "optimist": "0.6.1", - "qjobs": "1.2.0", - "range-parser": "1.2.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.2", - "socket.io": "2.0.4", - "source-map": "0.6.1", - "tmp": "0.0.33", - "useragent": "2.2.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", - "dev": true, - "requires": { - "fs-access": "1.0.1", - "which": "1.3.1" - } - }, - "karma-jasmine": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", - "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "optional": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "libbase64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz", - "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=", - "dev": true - }, - "libmime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/libmime/-/libmime-3.0.0.tgz", - "integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=", - "dev": true, - "requires": { - "iconv-lite": "0.4.15", - "libbase64": "0.1.0", - "libqp": "1.1.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", - "dev": true - } - } - }, - "libqp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz", - "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=", - "dev": true - }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "log4js": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.11.0.tgz", - "integrity": "sha512-z1XdwyGFg8/WGkOyF6DPJjivCWNLKrklGdViywdYnSKOvgtEBo2UyEMZS5sD2mZrQlU3TvO8wDWLc8mzE1ncBQ==", - "dev": true, - "requires": { - "amqplib": "0.5.2", - "axios": "0.15.3", - "circular-json": "0.5.5", - "date-format": "1.2.0", - "debug": "3.1.0", - "hipchat-notifier": "1.1.0", - "loggly": "1.1.1", - "mailgun-js": "0.18.1", - "nodemailer": "2.7.2", - "redis": "2.8.0", - "semver": "5.5.0", - "slack-node": "0.2.0", - "streamroller": "0.7.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "loggly": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/loggly/-/loggly-1.1.1.tgz", - "integrity": "sha1-Cg/B0/o6XsRP3HuJe+uipGlc6+4=", - "dev": true, - "optional": true, - "requires": { - "json-stringify-safe": "5.0.1", - "request": "2.75.0", - "timespan": "2.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true, - "optional": true - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz", - "integrity": "sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU=", - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.19" - } - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "optional": true, - "requires": { - "chalk": "1.1.3", - "commander": "2.16.0", - "is-my-json-valid": "2.17.2", - "pinkie-promise": "2.0.1" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.14.2" - } - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", - "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", - "dev": true, - "optional": true - }, - "request": { - "version": "2.75.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.75.0.tgz", - "integrity": "sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.7.0", - "bl": "1.1.2", - "caseless": "0.11.0", - "combined-stream": "1.0.6", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.0.0", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.19", - "node-uuid": "1.4.8", - "oauth-sign": "0.8.2", - "qs": "6.2.3", - "stringstream": "0.0.6", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.4.3" - } - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true, - "optional": true - } - } - }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, - "optional": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "mailcomposer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-4.0.1.tgz", - "integrity": "sha1-DhxEsqB890DuF9wUm6AJ8Zyt/rQ=", - "dev": true, - "optional": true, - "requires": { - "buildmail": "4.0.1", - "libmime": "3.0.0" - } - }, - "mailgun-js": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/mailgun-js/-/mailgun-js-0.18.1.tgz", - "integrity": "sha512-lvuMP14u24HS2uBsJEnzSyPMxzU2b99tQsIx1o6QNjqxjk8b3WvR+vq5oG1mjqz/IBYo+5gF+uSoDS0RkMVHmg==", - "dev": true, - "optional": true, - "requires": { - "async": "2.6.1", - "debug": "3.1.0", - "form-data": "2.3.2", - "inflection": "1.12.0", - "is-stream": "1.1.0", - "path-proxy": "1.0.0", - "promisify-call": "2.0.4", - "proxy-agent": "3.0.1", - "tsscmp": "1.0.5" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "1.0.1" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", - "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.19", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", - "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", - "dev": true, - "requires": { - "mime-db": "1.35.0" - } - }, - "minimatch": { - "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", - "dev": true, - "requires": { - "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "netmask": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", - "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=", - "dev": true, - "optional": true - }, - "nodemailer": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-2.7.2.tgz", - "integrity": "sha1-8kLmSa7q45tsftdA73sGHEBNMPk=", - "dev": true, - "optional": true, - "requires": { - "libmime": "3.0.0", - "mailcomposer": "4.0.1", - "nodemailer-direct-transport": "3.3.2", - "nodemailer-shared": "1.1.0", - "nodemailer-smtp-pool": "2.8.2", - "nodemailer-smtp-transport": "2.7.2", - "socks": "1.1.9" - }, - "dependencies": { - "socks": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.9.tgz", - "integrity": "sha1-Yo1+TQSRJDVEWsC25Fk3bLPm1pE=", - "dev": true, - "optional": true, - "requires": { - "ip": "1.1.5", - "smart-buffer": "1.1.15" - } - } - } - }, - "nodemailer-direct-transport": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz", - "integrity": "sha1-6W+vuQNYVglH5WkBfZfmBzilCoY=", - "dev": true, - "optional": true, - "requires": { - "nodemailer-shared": "1.1.0", - "smtp-connection": "2.12.0" - } - }, - "nodemailer-fetch": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz", - "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=", - "dev": true - }, - "nodemailer-shared": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz", - "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", - "dev": true, - "requires": { - "nodemailer-fetch": "1.6.0" - } - }, - "nodemailer-smtp-pool": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz", - "integrity": "sha1-LrlNbPhXgLG0clzoU7nL1ejajHI=", - "dev": true, - "optional": true, - "requires": { - "nodemailer-shared": "1.1.0", - "nodemailer-wellknown": "0.1.10", - "smtp-connection": "2.12.0" - } - }, - "nodemailer-smtp-transport": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz", - "integrity": "sha1-A9ccdjFPFKx9vHvwM6am0W1n+3c=", - "dev": true, - "optional": true, - "requires": { - "nodemailer-shared": "1.1.0", - "nodemailer-wellknown": "0.1.10", - "smtp-connection": "2.12.0" - } - }, - "nodemailer-wellknown": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", - "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=", - "dev": true - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true, - "optional": true - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "3.0.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "3.0.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "optional": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "pac-proxy-agent": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-2.0.2.tgz", - "integrity": "sha512-cDNAN1Ehjbf5EHkNY5qnRhGPUCp6SnpyVof5fRzN800QV1Y2OkzbH9rmjZkbBRa8igof903yOnjIl6z0SlAhxA==", - "dev": true, - "optional": true, - "requires": { - "agent-base": "4.2.1", - "debug": "3.1.0", - "get-uri": "2.0.2", - "http-proxy-agent": "2.1.0", - "https-proxy-agent": "2.2.1", - "pac-resolver": "3.0.0", - "raw-body": "2.3.3", - "socks-proxy-agent": "3.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "socks-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz", - "integrity": "sha512-ZwEDymm204mTzvdqyUqOdovVr2YRd2NYskrYrF2LXyZ9qDiMAoFESGK8CRphiO7rtbo2Y757k2Nia3x2hGtalA==", - "dev": true, - "optional": true, - "requires": { - "agent-base": "4.2.1", - "socks": "1.1.10" - } - } - } - }, - "pac-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz", - "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "degenerator": "1.0.4", - "ip": "1.1.5", - "netmask": "1.0.6", - "thunkify": "2.1.2" - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-is-absolute": { - "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-proxy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-proxy/-/path-proxy-1.0.0.tgz", - "integrity": "sha1-GOijaFn8nS8aU7SN7hOFQ8Ag3l4=", - "dev": true, - "optional": true, - "requires": { - "inflection": "1.3.8" - }, - "dependencies": { - "inflection": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.3.8.tgz", - "integrity": "sha1-y9Fg2p91sUw8xjV41POWeEvzAU4=", - "dev": true, - "optional": true - } - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true, - "optional": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "optional": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "optional": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "promisify-call": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/promisify-call/-/promisify-call-2.0.4.tgz", - "integrity": "sha1-1IwtRWUszM1SgB3ey9UzptS9X7o=", - "dev": true, - "optional": true, - "requires": { - "with-callback": "1.0.2" - } - }, - "proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.0.1.tgz", - "integrity": "sha512-mAZexaz9ZxQhYPWfAjzlrloEjW+JHiBFryE4AJXFDTnaXfmH/FKqC1swTRKuEPbHWz02flQNXFOyDUF7zfEG6A==", - "dev": true, - "optional": true, - "requires": { - "agent-base": "4.2.1", - "debug": "3.1.0", - "http-proxy-agent": "2.1.0", - "https-proxy-agent": "2.2.1", - "lru-cache": "4.1.3", - "pac-proxy-agent": "2.0.2", - "proxy-from-env": "1.0.0", - "socks-proxy-agent": "4.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", - "dev": true, - "optional": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true, - "optional": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true, - "optional": true - }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "readable-stream": "2.3.6", - "set-immediate-shim": "1.0.1" - } - }, - "redis": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", - "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==", - "dev": true, - "optional": true, - "requires": { - "double-ended-queue": "2.1.0-0", - "redis-commands": "1.3.5", - "redis-parser": "2.6.0" - } - }, - "redis-commands": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.5.tgz", - "integrity": "sha512-foGF8u6MXGFF++1TZVC6icGXuMYPftKXt1FBT2vrfU9ZATNtZJ8duRC5d1lEfE8hyVe3jhelHGB91oB7I6qLsA==", - "dev": true, - "optional": true - }, - "redis-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", - "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=", - "dev": true, - "optional": true - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.7.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.19", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" - } - }, - "requestretry": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.13.0.tgz", - "integrity": "sha512-Lmh9qMvnQXADGAQxsXHP4rbgO6pffCfuR8XUBdP9aitJcLQJxhp7YZK4xAVYXnPJ5E52mwrfiKQtKonPL8xsmg==", - "dev": true, - "optional": true, - "requires": { - "extend": "3.0.2", - "lodash": "4.17.10", - "request": "2.87.0", - "when": "3.7.8" - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz" - } - }, - "rollup": { - "version": "0.63.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.63.4.tgz", - "integrity": "sha512-IGTH7u0P6bmu7cXL0g11UDYTR9WKku70cYlqVyOYdqLoQopBGmCbGC3SMeheqHymnehHe/5yf6BJ6BEoxQBVTQ==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "@types/node": "10.5.4" - } - }, - "s-js": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/s-js/-/s-js-0.4.9.tgz", - "integrity": "sha512-RtpOm+cM6O0sHg6IA70wH+UC3FZcND+rccBZpBAHzlUgNO2Bm5BN+FnM8+OBxzXdwpKWFwX11JGF0MFRkhSoIQ==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "0.1.15" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "slack-node": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/slack-node/-/slack-node-0.2.0.tgz", - "integrity": "sha1-3kuN3aqLeT9h29KTgQT9q/N9+jA=", - "dev": true, - "optional": true, - "requires": { - "requestretry": "1.13.0" - } - }, - "smart-buffer": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", - "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=", - "dev": true, - "optional": true - }, - "smtp-connection": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz", - "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=", - "dev": true, - "requires": { - "httpntlm": "1.6.1", - "nodemailer-shared": "1.1.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "source-map-resolve": "0.5.2", - "use": "3.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "socket.io": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", - "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", - "dev": true, - "requires": { - "debug": "2.6.9", - "engine.io": "3.1.5", - "socket.io-adapter": "1.1.1", - "socket.io-client": "2.0.4", - "socket.io-parser": "3.1.3" - } - }, - "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", - "dev": true - }, - "socket.io-client": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", - "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "2.6.9", - "engine.io-client": "3.1.6", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "3.1.3", - "to-array": "0.1.4" - } - }, - "socket.io-parser": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", - "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "3.1.0", - "has-binary2": "1.0.3", - "isarray": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "socks": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz", - "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", - "dev": true, - "optional": true, - "requires": { - "ip": "1.1.5", - "smart-buffer": "1.1.15" - } - }, - "socks-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz", - "integrity": "sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw==", - "dev": true, - "optional": true, - "requires": { - "agent-base": "4.2.1", - "socks": "2.2.1" - }, - "dependencies": { - "smart-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.1.tgz", - "integrity": "sha512-RFqinRVJVcCAL9Uh1oVqE6FZkqsyLiVOYEZ20TqIOjuX7iFVJ+zsbs4RIghnw/pTs7mZvt8ZHhvm1ZUrR4fykg==", - "dev": true, - "optional": true - }, - "socks": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.2.1.tgz", - "integrity": "sha512-0GabKw7n9mI46vcNrVfs0o6XzWzjVa3h6GaSo2UPxtWAROXUWavfJWh1M4PR5tnE0dcnQXZIDFP4yrAysLze/w==", - "dev": true, - "optional": true, - "requires": { - "ip": "1.1.5", - "smart-buffer": "4.0.1" - } - } - } - }, - "source-map": { - "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "2.1.1", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "3.0.2" - } - }, - "sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.2", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "safer-buffer": "2.1.2", - "tweetnacl": "0.14.5" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "streamroller": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", - "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", - "dev": true, - "requires": { - "date-format": "1.2.0", - "debug": "3.1.0", - "mkdirp": "0.5.1", - "readable-stream": "2.3.6" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "optional": true - }, - "thunkify": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", - "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=", - "dev": true, - "optional": true - }, - "timespan": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", - "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=", - "dev": true, - "optional": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" - } - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tsscmp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz", - "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=", - "dev": true, - "optional": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.19" - } - }, - "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", - "dev": true - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", - "dev": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" - } - } - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "useragent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", - "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", - "dev": true, - "requires": { - "lru-cache": "2.2.4", - "tmp": "0.0.33" - }, - "dependencies": { - "lru-cache": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", - "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true, - "optional": true - }, - "uws": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz", - "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==", - "dev": true, - "optional": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - } - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "when": { - "version": "3.7.8", - "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", - "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=", - "dev": true, - "optional": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "with-callback": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/with-callback/-/with-callback-1.0.2.tgz", - "integrity": "sha1-oJYpuakgAo1yFAT7Q1vc/1yRvCE=", - "dev": true, - "optional": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true, - "optional": true - }, - "wrappy": { - "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.2", - "ultron": "1.1.1" - } - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true - }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", - "dev": true, - "optional": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true, - "optional": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true, - "optional": true - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - } - } -} diff --git a/package.json b/package.json index 10fe30a..460a2e8 100644 --- a/package.json +++ b/package.json @@ -1,42 +1,54 @@ { - "name": "s-array", - "version": "0.4.10", - "description": "Array library for S.js", + "name": "@surplus/array", + "version": "1.0.0", + "description": "Array utilities for S.js/Surplus applications", "main": "index.js", - "module": "es/index.js", - "types": "es/index.d.ts", + "types": "index.d.ts", + "type": "module", + "files": [ + "LICENSE", + "index.js", + "index.d.ts" + ], "peerDependencies": { - "s-js": "^0.4.9" + "@surplus/s": ">=1.1.1" }, "devDependencies": { - "jasmine": "^3.1.0", - "karma": "^2.0.5", - "karma-chrome-launcher": "^2.2.0", - "karma-jasmine": "^1.1.2", - "rollup": "^0.63.4", - "typescript": "^2.9.2" + "jasmine": "^3.4.0", + "prettier": "^3.6.2", + "typescript": "^5.9.2" }, "scripts": { - "build": "tsc && rollup -c", - "test": "karma start" + "build": "tsc", + "test": "jasmine", + "lint:types": "tsc --noEmit", + "lint:format": "prettier -c .", + "lint": "pnpm lint:types && pnpm lint:format", + "format": "prettier -w ." }, "keywords": [ "S.js", + "surplus", "reactive", "array", - "sequence" + "sequence", + "list", + "collection" ], "repository": { "type": "git", - "url": "https://github.com/adamhaile/S-array.git" + "url": "git+https://github.com/surplus/array.git" }, "bugs": { - "url": "https://github.com/adamhaile/S-array/issues" - }, - "author": { - "name": "Adam Haile", - "email": "adam.haile@gmail.com", - "url": "http://heig.ht/" + "url": "https://github.com/surplus/array/issues" }, - "license": "MIT" + "author": "Josh Junon (https://github.com/qix-)", + "contributors": [ + { + "name": "Adam Haile", + "email": "adam.haile@gmail.com" + } + ], + "license": "MIT", + "packageManager": "pnpm@10.14.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..b3e0ed1 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,135 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@surplus/s': + specifier: '>=1.1.1' + version: 1.1.1 + devDependencies: + jasmine: + specifier: ^3.4.0 + version: 3.99.0 + prettier: + specifier: ^3.6.2 + version: 3.6.2 + typescript: + specifier: ^5.9.2 + version: 5.9.2 + +packages: + + '@surplus/s@1.1.1': + resolution: {integrity: sha512-jp35N0vK+fJ5qkSF2WGQhbj1Vod3FWAROyie0hu1LsHNMlVvsLNe3S+MLtcQciV8zve/37kGyBYdmHCvDyM0QA==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + jasmine-core@3.99.1: + resolution: {integrity: sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg==} + + jasmine@3.99.0: + resolution: {integrity: sha512-YIThBuHzaIIcjxeuLmPD40SjxkEcc8i//sGMDKCgkRMVgIwRJf5qyExtlJpQeh7pkeoBSOe6lQEdg+/9uKg9mw==} + hasBin: true + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + engines: {node: '>=14.17'} + hasBin: true + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + +snapshots: + + '@surplus/s@1.1.1': {} + + balanced-match@1.0.2: {} + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + concat-map@0.0.1: {} + + fs.realpath@1.0.0: {} + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + jasmine-core@3.99.1: {} + + jasmine@3.99.0: + dependencies: + glob: 7.2.3 + jasmine-core: 3.99.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + path-is-absolute@1.0.1: {} + + prettier@3.6.2: {} + + typescript@5.9.2: {} + + wrappy@1.0.2: {} diff --git a/rollup.config.js b/rollup.config.js deleted file mode 100644 index 01006cd..0000000 --- a/rollup.config.js +++ /dev/null @@ -1,11 +0,0 @@ -export default { - input: 'es/index.js', - output: { - file: 'index.js', - format: 'umd', - exports: 'named' - }, - name: 'SArray', - external: ['s-js'], - globals: { 's-js': "S"} -} \ No newline at end of file diff --git a/spec/SArray.spec.js b/spec/SArray.spec.js index ccc6e7a..8b4c0de 100644 --- a/spec/SArray.spec.js +++ b/spec/SArray.spec.js @@ -1,737 +1,851 @@ -// by default SArray is loaded into 'default' symbol when module is bound to a global -SArray = SArray.default; - /* globals describe, expect, beforeEach, jasmine, it, S */ describe("SArray()", function () { - it("is created with an array", function () { - var a = SArray([1, 2, 3]); + it("is created with an array", function () { + var a = SArray([1, 2, 3]); - expect(a()).toEqual([1, 2, 3]); - }); + expect(a()).toEqual([1, 2, 3]); + }); - it("throws if not initialized with an array", function () { - expect(function () { - SArray(1, 2, 3); - }).toThrow(); - }); + it("throws if not initialized with an array", function () { + expect(function () { + SArray(1, 2, 3); + }).toThrow(); + }); }); describe("SArray mutator", function () { - var a, l; - - beforeEach(function () { - a = SArray([1, 2, 3]); - l = S.root(function () { return S(function () { return a().length; }); }); - }); - - it("push acts like Array.prototype.push", function () { - expect(a.push(4)).toBe(a); - expect(a()).toEqual([1, 2, 3, 4]); - expect(l()).toBe(4); - }); - - it("pop acts like Array.prototype.pop", function () { - expect(a.pop()).toBe(3); - expect(a()).toEqual([1, 2]); - expect(l()).toBe(2); - }); - - it("unshift acts like Array.prototype.unshift", function () { - expect(a.unshift(0)).toBe(a); - expect(a()).toEqual([0, 1, 2, 3]); - expect(l()).toBe(4); - }); - - it("shift acts like Array.prototype.shift", function () { - expect(a.shift()).toBe(1); - expect(a()).toEqual([2, 3]); - expect(l()).toBe(2); - }); - - it("splice acts like Array.prototype.splice", function () { - expect(a.splice(1, 1, 4, 5)).toBe(a); - expect(a()).toEqual([1, 4, 5, 3]); - expect(l()).toBe(4); - }); - - it("remove removes the first occurence of the item", function () { - a.push(1); - expect(a.remove(1)).toBe(a); - expect(a()).toEqual([2, 3, 1]); - expect(l()).toBe(3); - }); - - it("removeAll removes all occurence of the item", function () { - a.push(1); - expect(a.removeAll(1)).toBe(a); - expect(a()).toEqual([2, 3]); - expect(l()).toBe(2); - }); + var a, l; + + beforeEach(function () { + a = SArray([1, 2, 3]); + l = S.root(function () { + return S(function () { + return a().length; + }); + }); + }); + + it("push acts like Array.prototype.push", function () { + expect(a.push(4)).toBe(a); + expect(a()).toEqual([1, 2, 3, 4]); + expect(l()).toBe(4); + }); + + it("pop acts like Array.prototype.pop", function () { + expect(a.pop()).toBe(3); + expect(a()).toEqual([1, 2]); + expect(l()).toBe(2); + }); + + it("unshift acts like Array.prototype.unshift", function () { + expect(a.unshift(0)).toBe(a); + expect(a()).toEqual([0, 1, 2, 3]); + expect(l()).toBe(4); + }); + + it("shift acts like Array.prototype.shift", function () { + expect(a.shift()).toBe(1); + expect(a()).toEqual([2, 3]); + expect(l()).toBe(2); + }); + + it("splice acts like Array.prototype.splice", function () { + expect(a.splice(1, 1, 4, 5)).toBe(a); + expect(a()).toEqual([1, 4, 5, 3]); + expect(l()).toBe(4); + }); + + it("remove removes the first occurence of the item", function () { + a.push(1); + expect(a.remove(1)).toBe(a); + expect(a()).toEqual([2, 3, 1]); + expect(l()).toBe(3); + }); + + it("removeAll removes all occurence of the item", function () { + a.push(1); + expect(a.removeAll(1)).toBe(a); + expect(a()).toEqual([2, 3]); + expect(l()).toBe(2); + }); }); describe("(in event) SArray mutator", function () { - var a, l; - - beforeEach(function () { - a = SArray([1, 2, 3]); - l = S.root(function () { return S(function () { return a().length; }); }); - }); - - it("push acts like Array.prototype.push", function () { - S.freeze(function () { - expect(a.push(4)).toBe(a); - expect(a()).toEqual([1, 2, 3]); - expect(l()).toBe(3); - }); - expect(a()).toEqual([1, 2, 3, 4]); - expect(l()).toBe(4); - }); - - it("pop acts like Array.prototype.pop", function () { - S.freeze(function () { - expect(a.pop()).toBe(3); - expect(a.pop()).toBe(2); - expect(a.pop()).toBe(1); - expect(a.pop()).toBe(undefined); - expect(a.pop()).toBe(undefined); - expect(a()).toEqual([1, 2, 3]); - expect(l()).toBe(3); - }); - expect(a()).toEqual([]); - expect(l()).toBe(0); - }); - - it("unshift acts like Array.prototype.unshift", function () { - S.freeze(function () { - expect(a.unshift(0)).toBe(a); - expect(a()).toEqual([1, 2, 3]); - expect(l()).toBe(3); - }); - expect(a()).toEqual([0, 1, 2, 3]); - expect(l()).toBe(4); - }); - - it("shift acts like Array.prototype.shift", function () { - S.freeze(function () { - expect(a.shift()).toBe(1); - expect(a.shift()).toBe(2); - expect(a.shift()).toBe(3); - expect(a.shift()).toBe(undefined); - expect(a.shift()).toBe(undefined); - expect(a()).toEqual([1, 2, 3]); - expect(l()).toBe(3); - }); - expect(a()).toEqual([]); - expect(l()).toBe(0); - }); - - it("splice acts like Array.prototype.splice", function () { - S.freeze(function () { - expect(a.splice(1, 1, 4, 5)).toBe(a); - expect(a()).toEqual([1, 2, 3]); - expect(l()).toBe(3); - }); - expect(a()).toEqual([1, 4, 5, 3]); - expect(l()).toBe(4); - }); - - it("remove removes the first occurence of the item", function () { - S.freeze(function () { - a.push(1); - expect(a.remove(1)).toBe(a); - expect(a()).toEqual([1, 2, 3]); - expect(l()).toBe(3); - }); - expect(a()).toEqual([2, 3, 1]); - expect(l()).toBe(3); - }); - - it("removeAll removes all occurence of the item", function () { - S.freeze(function () { - a.push(1); - expect(a.removeAll(1)).toBe(a); - expect(a()).toEqual([1, 2, 3]); - expect(l()).toBe(3); - }); - expect(a()).toEqual([2, 3]); - expect(l()).toBe(2); - }); + var a, l; + + beforeEach(function () { + a = SArray([1, 2, 3]); + l = S.root(function () { + return S(function () { + return a().length; + }); + }); + }); + + it("push acts like Array.prototype.push", function () { + S.freeze(function () { + expect(a.push(4)).toBe(a); + expect(a()).toEqual([1, 2, 3]); + expect(l()).toBe(3); + }); + expect(a()).toEqual([1, 2, 3, 4]); + expect(l()).toBe(4); + }); + + it("pop acts like Array.prototype.pop", function () { + S.freeze(function () { + expect(a.pop()).toBe(3); + expect(a.pop()).toBe(2); + expect(a.pop()).toBe(1); + expect(a.pop()).toBe(undefined); + expect(a.pop()).toBe(undefined); + expect(a()).toEqual([1, 2, 3]); + expect(l()).toBe(3); + }); + expect(a()).toEqual([]); + expect(l()).toBe(0); + }); + + it("unshift acts like Array.prototype.unshift", function () { + S.freeze(function () { + expect(a.unshift(0)).toBe(a); + expect(a()).toEqual([1, 2, 3]); + expect(l()).toBe(3); + }); + expect(a()).toEqual([0, 1, 2, 3]); + expect(l()).toBe(4); + }); + + it("shift acts like Array.prototype.shift", function () { + S.freeze(function () { + expect(a.shift()).toBe(1); + expect(a.shift()).toBe(2); + expect(a.shift()).toBe(3); + expect(a.shift()).toBe(undefined); + expect(a.shift()).toBe(undefined); + expect(a()).toEqual([1, 2, 3]); + expect(l()).toBe(3); + }); + expect(a()).toEqual([]); + expect(l()).toBe(0); + }); + + it("splice acts like Array.prototype.splice", function () { + S.freeze(function () { + expect(a.splice(1, 1, 4, 5)).toBe(a); + expect(a()).toEqual([1, 2, 3]); + expect(l()).toBe(3); + }); + expect(a()).toEqual([1, 4, 5, 3]); + expect(l()).toBe(4); + }); + + it("remove removes the first occurence of the item", function () { + S.freeze(function () { + a.push(1); + expect(a.remove(1)).toBe(a); + expect(a()).toEqual([1, 2, 3]); + expect(l()).toBe(3); + }); + expect(a()).toEqual([2, 3, 1]); + expect(l()).toBe(3); + }); + + it("removeAll removes all occurence of the item", function () { + S.freeze(function () { + a.push(1); + expect(a.removeAll(1)).toBe(a); + expect(a()).toEqual([1, 2, 3]); + expect(l()).toBe(3); + }); + expect(a()).toEqual([2, 3]); + expect(l()).toBe(2); + }); }); describe("SArray.concat", function () { - var a1, a2, a3; + var a1, a2, a3; - beforeEach(function () { - a1 = SArray([1]); - a2 = SArray([2]); - a3 = SArray([3]); - }); + beforeEach(function () { + a1 = SArray([1]); + a2 = SArray([2]); + a3 = SArray([3]); + }); - it("combines all passed SArrays in order", function () { - S.root(function () { - var s = a1.concat(a2, a3); + it("combines all passed SArrays in order", function () { + S.root(function () { + var s = a1.concat(a2, a3); - expect(s()).toEqual([1, 2, 3]); - }); + expect(s()).toEqual([1, 2, 3]); }); + }); - it("responds to changes in all arrays", function () { - S.root(function () { - var s = a1.concat(a2, a3); + it("responds to changes in all arrays", function () { + S.root(function () { + var s = a1.concat(a2, a3); - expect(s()).toEqual([1, 2, 3]); - a1.push(4); - expect(s()).toEqual([1, 4, 2, 3]); - a2.pop(); - expect(s()).toEqual([1, 4, 3]); - a3([5, 6]); - expect(s()).toEqual([1, 4, 5, 6]); - }); + expect(s()).toEqual([1, 2, 3]); + a1.push(4); + expect(s()).toEqual([1, 4, 2, 3]); + a2.pop(); + expect(s()).toEqual([1, 4, 3]); + a3([5, 6]); + expect(s()).toEqual([1, 4, 5, 6]); }); + }); }); describe("SArray.every", function () { - it("behaves like Array.prototype.every", function () { - S.root(function () { - var a = SArray([1, 3, 2]); - expect(a.every(function (v) { return v > 0; })()).toBe(true); - expect(a.every(function (v) { return v > 1; })()).toBe(false); - }); - }); - - it("is true for an empty array", function () { - S.root(function () { - var s = SArray([]).every(function () { return false; }); - expect(s()).toBe(true); - }); - }); - - it("responds to changes in source", function () { - S.root(function () { - var a = SArray([2, 3, 1]), - s = a.every(function (v) { return v > 1; }); - - expect(s()).toBe(false); - a.pop(); - expect(s()).toBe(true); - a.push(0); - expect(s()).toBe(false); - }); - }); + it("behaves like Array.prototype.every", function () { + S.root(function () { + var a = SArray([1, 3, 2]); + expect( + a.every(function (v) { + return v > 0; + })(), + ).toBe(true); + expect( + a.every(function (v) { + return v > 1; + })(), + ).toBe(false); + }); + }); + + it("is true for an empty array", function () { + S.root(function () { + var s = SArray([]).every(function () { + return false; + }); + expect(s()).toBe(true); + }); + }); + + it("responds to changes in source", function () { + S.root(function () { + var a = SArray([2, 3, 1]), + s = a.every(function (v) { + return v > 1; + }); + + expect(s()).toBe(false); + a.pop(); + expect(s()).toBe(true); + a.push(0); + expect(s()).toBe(false); + }); + }); }); describe("SArray.filter", function () { - it("behaves like Array.prototype.filter", function () { - S.root(function () { - var a = SArray([1, 3, 2]); - expect(a.filter(function (v) { return v > 0; })()).toEqual([1, 3, 2]); - expect(a.filter(function (v) { return v > 1; })()).toEqual([3, 2]); - }); - }); - - it("responds to changes in source", function () { - S.root(function () { - var a = SArray([2, 3, 1]), - s = a.filter(function (v) { return v > 1; }); - - expect(s()).toEqual([2, 3]); - a.shift(); - expect(s()).toEqual([3]); - a.push(4); - expect(s()).toEqual([3, 4]); - }); - }); + it("behaves like Array.prototype.filter", function () { + S.root(function () { + var a = SArray([1, 3, 2]); + expect( + a.filter(function (v) { + return v > 0; + })(), + ).toEqual([1, 3, 2]); + expect( + a.filter(function (v) { + return v > 1; + })(), + ).toEqual([3, 2]); + }); + }); + + it("responds to changes in source", function () { + S.root(function () { + var a = SArray([2, 3, 1]), + s = a.filter(function (v) { + return v > 1; + }); + + expect(s()).toEqual([2, 3]); + a.shift(); + expect(s()).toEqual([3]); + a.push(4); + expect(s()).toEqual([3, 4]); + }); + }); }); describe("SArray.find", function () { - it("behaves like Array.prototype.find", function () { - S.root(function () { - var a = SArray([1, 3, 2]); - expect(a.find(function (v) { return v > 0; })()).toEqual(1); - expect(a.find(function (v) { return v > 1; })()).toEqual(3); - expect(a.find(function (v) { return v > 4; })()).toBeUndefined(); - }); - }); - - it("responds to changes in source", function () { - S.root(function () { - var a = SArray([2, 3]), - s = a.find(function (v) { return v > 2; }); - - expect(s()).toEqual(3); - a.shift(); - expect(s()).toEqual(3); - a.push(4); - expect(s()).toEqual(3); - }); - }); + it("behaves like Array.prototype.find", function () { + S.root(function () { + var a = SArray([1, 3, 2]); + expect( + a.find(function (v) { + return v > 0; + })(), + ).toEqual(1); + expect( + a.find(function (v) { + return v > 1; + })(), + ).toEqual(3); + expect( + a.find(function (v) { + return v > 4; + })(), + ).toBeUndefined(); + }); + }); + + it("responds to changes in source", function () { + S.root(function () { + var a = SArray([2, 3]), + s = a.find(function (v) { + return v > 2; + }); + + expect(s()).toEqual(3); + a.shift(); + expect(s()).toEqual(3); + a.push(4); + expect(s()).toEqual(3); + }); + }); }); describe("SArray.forEach", function () { - var a; - - beforeEach(function () { - a = SArray(["a", "b", "c"]); - }); - - it("behaves like Array.prototype.forEach", function () { - S.root(function () { - var r = ""; - a.forEach(function (v) { r += v; }); - expect(r).toEqual("abc"); - }); - }); - - it("tracks changes in source", function () { - S.root(function () { - var r = ""; - a.forEach(function (v) { r += v; }); - a.unshift("d"); - expect(r).toEqual("abcd"); - }); - }); - - it("ignores prior items", function () { - S.root(function () { - var enter = jasmine.createSpy(); - a.forEach(enter); - enter.calls.reset(); - a.unshift("d"); - expect(enter.calls.count()).toBe(1); - expect(enter).toHaveBeenCalledWith("d", 0); - }); - }); - - it("reports when a value exits the array", function () { - S.root(function () { - var exit = jasmine.createSpy(); - a.forEach(x => x, exit); - a.pop(); - expect(exit.calls.count()).toBe(1); - expect(exit).toHaveBeenCalledWith("c", 2); - }); - }); - - it("reports when a value moves in the array", function () { - S.root(function () { - var move = jasmine.createSpy(); - a.forEach(x => x, null, move); - a(["a", "c", "b"]); - expect(move.calls.count()).toBe(1); - expect(move).toHaveBeenCalledWith([1, 2], [2, 1]); - }); - }); - - it("ignores changes to other dependencies", function () { - S.root(function () { - var d = S.data(1), - enter = jasmine.createSpy(); - a.forEach(function (v) { d(); enter(); }); - enter.calls.reset(); - d(2); - expect(enter.calls.count()).toBe(0); - }); - }); + var a; + + beforeEach(function () { + a = SArray(["a", "b", "c"]); + }); + + it("behaves like Array.prototype.forEach", function () { + S.root(function () { + var r = ""; + a.forEach(function (v) { + r += v; + }); + expect(r).toEqual("abc"); + }); + }); + + it("tracks changes in source", function () { + S.root(function () { + var r = ""; + a.forEach(function (v) { + r += v; + }); + a.unshift("d"); + expect(r).toEqual("abcd"); + }); + }); + + it("ignores prior items", function () { + S.root(function () { + var enter = jasmine.createSpy(); + a.forEach(enter); + enter.calls.reset(); + a.unshift("d"); + expect(enter.calls.count()).toBe(1); + expect(enter).toHaveBeenCalledWith("d", 0); + }); + }); + + it("reports when a value exits the array", function () { + S.root(function () { + var exit = jasmine.createSpy(); + a.forEach((x) => x, exit); + a.pop(); + expect(exit.calls.count()).toBe(1); + expect(exit).toHaveBeenCalledWith("c", 2); + }); + }); + + it("reports when a value moves in the array", function () { + S.root(function () { + var move = jasmine.createSpy(); + a.forEach((x) => x, null, move); + a(["a", "c", "b"]); + expect(move.calls.count()).toBe(1); + expect(move).toHaveBeenCalledWith([1, 2], [2, 1]); + }); + }); + + it("ignores changes to other dependencies", function () { + S.root(function () { + var d = S.data(1), + enter = jasmine.createSpy(); + a.forEach(function (v) { + d(); + enter(); + }); + enter.calls.reset(); + d(2); + expect(enter.calls.count()).toBe(0); + }); + }); }); describe("SArray.includes", function () { - it("behaves like Array.prototype.includes", function () { - S.root(function () { - var a = SArray([1, 3, 2]); - expect(a.includes(3)()).toBe(true); - expect(a.includes(4)()).toBe(false); - }); - }); - - it("responds to changes in source", function () { - S.root(function () { - var a = SArray([2, 3, 1]), - s = a.includes(2); - - expect(s()).toBe(true); - a.shift(); - expect(s()).toBe(false); - a.push(2); - expect(s()).toBe(true); - }); - }); + it("behaves like Array.prototype.includes", function () { + S.root(function () { + var a = SArray([1, 3, 2]); + expect(a.includes(3)()).toBe(true); + expect(a.includes(4)()).toBe(false); + }); + }); + + it("responds to changes in source", function () { + S.root(function () { + var a = SArray([2, 3, 1]), + s = a.includes(2); + + expect(s()).toBe(true); + a.shift(); + expect(s()).toBe(false); + a.push(2); + expect(s()).toBe(true); + }); + }); }); describe("SArray.map", function () { - var a; - - beforeEach(function () { - a = SArray([1, 3, 2]); - }); - - it("behaves like Array.prototype.map", function () { - S.root(function () { - var s = a.map(function (x) { return x * 2; }); - expect(s()).toEqual([2, 6, 4]); - }); - }); - - it("tracks changes in source", function () { - S.root(function () { - var s = a.map(function (x) { return x * 2; }); - a.push(4); - expect(s()).toEqual([2, 6, 4, 8]); - }); - }); - - it("preserves prior computations", function () { - S.root(function () { - var s = a.map(function (x) { return Math.random(); }), - pre = s().slice(); - a.push(4); - expect(pre).toEqual(s().slice(0, -1)); - }); - }); - - it("reports when a value exits the array", function () { - S.root(function () { - var exit = jasmine.createSpy(); - a.map(x => x, exit); - a.pop(); - expect(exit).toHaveBeenCalledWith(2, 2, 2); - }); - }); - - it("reports when a value moves in the array", function () { - S.root(function () { - var move = jasmine.createSpy(); - a.map(x => x, null, move); - a([1, 2, 3]); - expect(move).toHaveBeenCalledWith([1, 3, 2], [1, 3, 2], [1, 2], [2, 1]); - }); - }); - - it("tracks changes to other dependencies", function () { - S.root(function () { - var d = S.data(1), - s = a.map(function (v) { return v + d(); }); - expect(s()).toEqual([2, 4, 3]); - d(2); - expect(s()).toEqual([3, 5, 4]); - a.push(4); - expect(s()).toEqual([3, 5, 4, 6]); - }); - }); + var a; + + beforeEach(function () { + a = SArray([1, 3, 2]); + }); + + it("behaves like Array.prototype.map", function () { + S.root(function () { + var s = a.map(function (x) { + return x * 2; + }); + expect(s()).toEqual([2, 6, 4]); + }); + }); + + it("tracks changes in source", function () { + S.root(function () { + var s = a.map(function (x) { + return x * 2; + }); + a.push(4); + expect(s()).toEqual([2, 6, 4, 8]); + }); + }); + + it("preserves prior computations", function () { + S.root(function () { + var s = a.map(function (x) { + return Math.random(); + }), + pre = s().slice(); + a.push(4); + expect(pre).toEqual(s().slice(0, -1)); + }); + }); + + it("reports when a value exits the array", function () { + S.root(function () { + var exit = jasmine.createSpy(); + a.map((x) => x, exit); + a.pop(); + expect(exit).toHaveBeenCalledWith(2, 2, 2); + }); + }); + + it("reports when a value moves in the array", function () { + S.root(function () { + var move = jasmine.createSpy(); + a.map((x) => x, null, move); + a([1, 2, 3]); + expect(move).toHaveBeenCalledWith([1, 3, 2], [1, 3, 2], [1, 2], [2, 1]); + }); + }); + + it("tracks changes to other dependencies", function () { + S.root(function () { + var d = S.data(1), + s = a.map(function (v) { + return v + d(); + }); + expect(s()).toEqual([2, 4, 3]); + d(2); + expect(s()).toEqual([3, 5, 4]); + a.push(4); + expect(s()).toEqual([3, 5, 4, 6]); + }); + }); }); describe("SArray.mapSample", function () { - var a; - - beforeEach(function () { - a = SArray([1, 3, 2]); - }); - - it("behaves like Array.prototype.map", function () { - S.root(function () { - var s = a.mapSample(function (x) { return x * 2; }); - expect(s()).toEqual([2, 6, 4]); - }); - }); - - it("tracks changes in source", function () { - S.root(function () { - var s = a.mapSample(function (x) { return x * 2; }); - a.push(4); - expect(s()).toEqual([2, 6, 4, 8]); - }); - }); - - it("preserves prior computations", function () { - S.root(function () { - var s = a.mapSample(function (x) { return Math.random(); }), - pre = s().slice(); - a.push(4); - expect(pre).toEqual(s().slice(0, -1)); - }); - }); - - it("reports when a value exits the array", function () { - S.root(function () { - var exit = jasmine.createSpy(); - a.mapSample(x => x, exit); - a.pop(); - expect(exit).toHaveBeenCalledWith(2, 2, 2); - }); - }); - - it("reports when a value moves in the array", function () { - S.root(function () { - var moveCalled = false, - move = (...args) => { - moveCalled = true; - expect(args).toEqual([[1, 3, 2], [1, 3, 2], [1, 2], [2, 1]]); - }; - a.mapSample(x => x, null, move); - expect(moveCalled).toBe(false); - a([1, 2, 3]); - expect(moveCalled).toBe(true); - }); - }); - - it("does not track changes to other dependencies", function () { - S.root(function () { - var d = S.data(1), - s = a.mapSample(function (v) { return v + d(); }); - expect(s()).toEqual([2, 4, 3]); - d(2); - expect(s()).toEqual([2, 4, 3]); - a.push(4); - expect(s()).toEqual([2, 4, 3, 6]); - }); - }); + var a; + + beforeEach(function () { + a = SArray([1, 3, 2]); + }); + + it("behaves like Array.prototype.map", function () { + S.root(function () { + var s = a.mapSample(function (x) { + return x * 2; + }); + expect(s()).toEqual([2, 6, 4]); + }); + }); + + it("tracks changes in source", function () { + S.root(function () { + var s = a.mapSample(function (x) { + return x * 2; + }); + a.push(4); + expect(s()).toEqual([2, 6, 4, 8]); + }); + }); + + it("preserves prior computations", function () { + S.root(function () { + var s = a.mapSample(function (x) { + return Math.random(); + }), + pre = s().slice(); + a.push(4); + expect(pre).toEqual(s().slice(0, -1)); + }); + }); + + it("reports when a value exits the array", function () { + S.root(function () { + var exit = jasmine.createSpy(); + a.mapSample((x) => x, exit); + a.pop(); + expect(exit).toHaveBeenCalledWith(2, 2, 2); + }); + }); + + it("reports when a value moves in the array", function () { + S.root(function () { + var moveCalled = false, + move = (...args) => { + moveCalled = true; + expect(args).toEqual([ + [1, 3, 2], + [1, 3, 2], + [1, 2], + [2, 1], + ]); + }; + a.mapSample((x) => x, null, move); + expect(moveCalled).toBe(false); + a([1, 2, 3]); + expect(moveCalled).toBe(true); + }); + }); + + it("does not track changes to other dependencies", function () { + S.root(function () { + var d = S.data(1), + s = a.mapSample(function (v) { + return v + d(); + }); + expect(s()).toEqual([2, 4, 3]); + d(2); + expect(s()).toEqual([2, 4, 3]); + a.push(4); + expect(s()).toEqual([2, 4, 3, 6]); + }); + }); }); describe("SArray.mapSequentially", function () { - var a; + var a; - beforeEach(function () { - a = SArray([1, 3, 2]); - }); + beforeEach(function () { + a = SArray([1, 3, 2]); + }); - it("behaves like Array.prototype.map", function () { - S.root(function () { - var s = a.mapSequentially(function (x) { return x * 2; }); - expect(s()).toEqual([2, 6, 4]); - }); + it("behaves like Array.prototype.map", function () { + S.root(function () { + var s = a.mapSequentially(function (x) { + return x * 2; + }); + expect(s()).toEqual([2, 6, 4]); }); + }); - it("tracks changes in source", function () { - S.root(function () { - var s = a.mapSequentially(function (x) { return x * 2; }); - a.push(4); - expect(s()).toEqual([2, 6, 4, 8]); - }); + it("tracks changes in source", function () { + S.root(function () { + var s = a.mapSequentially(function (x) { + return x * 2; + }); + a.push(4); + expect(s()).toEqual([2, 6, 4, 8]); }); + }); - it("does not preserve prior computations", function () { - S.root(function () { - var s = a.mapSequentially(function (x) { return Math.random(); }), - pre = s().slice(); - a.push(4); - var post = s().slice(); - expect(post.length).toBe(4); - expect(pre[0]).not.toEqual(post[0]); - expect(pre[1]).not.toEqual(post[1]); - expect(pre[2]).not.toEqual(post[2]); - }); + it("does not preserve prior computations", function () { + S.root(function () { + var s = a.mapSequentially(function (x) { + return Math.random(); + }), + pre = s().slice(); + a.push(4); + var post = s().slice(); + expect(post.length).toBe(4); + expect(pre[0]).not.toEqual(post[0]); + expect(pre[1]).not.toEqual(post[1]); + expect(pre[2]).not.toEqual(post[2]); }); - - it("passes the result of prior computations to updates", function () { - S.root(function () { - var s = a.mapSequentially(function (x, p) { return x + (p | 0); }); + }); - expect(s()).toEqual([1, 3, 2]); + it("passes the result of prior computations to updates", function () { + S.root(function () { + var s = a.mapSequentially(function (x, p) { + return x + (p | 0); + }); - a.push(4); + expect(s()).toEqual([1, 3, 2]); - expect(s()).toEqual([2, 6, 4, 4]); + a.push(4); - a.push(5); + expect(s()).toEqual([2, 6, 4, 4]); - expect(s()).toEqual([3, 9, 6, 8, 5]); - }); + a.push(5); + + expect(s()).toEqual([3, 9, 6, 8, 5]); }); + }); - it("tracks changes to other dependencies", function () { - S.root(function () { - var d = S.data(1), - s = a.mapSequentially(function (v) { return v + d(); }); - expect(s()).toEqual([2, 4, 3]); - d(2); - expect(s()).toEqual([3, 5, 4]); - a.push(4); - expect(s()).toEqual([3, 5, 4, 6]); + it("tracks changes to other dependencies", function () { + S.root(function () { + var d = S.data(1), + s = a.mapSequentially(function (v) { + return v + d(); }); + expect(s()).toEqual([2, 4, 3]); + d(2); + expect(s()).toEqual([3, 5, 4]); + a.push(4); + expect(s()).toEqual([3, 5, 4, 6]); }); + }); }); - describe("SArray.sort", function () { - var a; + var a; - beforeEach(function () { - a = SArray([1, 3, 2]); - }); + beforeEach(function () { + a = SArray([1, 3, 2]); + }); - it("behaves like Array.prototype.sort", function () { - S.root(function () { - var s = a.sort(); - expect(s()).toEqual([1, 2, 3]); - }); + it("behaves like Array.prototype.sort", function () { + S.root(function () { + var s = a.sort(); + expect(s()).toEqual([1, 2, 3]); }); + }); - it("tracks changes in source", function () { - S.root(function () { - var s = a.sort(); - a.push(0); - expect(s()).toEqual([0, 1, 2, 3]); - }); + it("tracks changes in source", function () { + S.root(function () { + var s = a.sort(); + a.push(0); + expect(s()).toEqual([0, 1, 2, 3]); }); + }); - it("can sort by a comparator function", function () { - S.root(function () { - var s = a.sort(function (a, b) { return b - a; }); - expect(s()).toEqual([3, 2, 1]); - }); + it("can sort by a comparator function", function () { + S.root(function () { + var s = a.sort(function (a, b) { + return b - a; + }); + expect(s()).toEqual([3, 2, 1]); }); + }); }); describe("SArray.reduce", function () { - it("behaves like Array.prototype.forEach", function () { - S.root(function () { - var a = SArray(["a", "b", "c"]), - s = a.reduce(function (a, v) { return a + v; }, ""); - expect(s()).toEqual("abc"); - }); - }); - - it("tracks changes in source", function () { - S.root(function () { - var a = SArray(["a", "b", "c"]), - s = a.reduce(function (a, v) { return a + v; }, function () { return ""; }); - a.push("d"); - expect(s()).toEqual("abcd"); - a.shift(); - expect(s()).toEqual("bcd"); - }); - }); + it("behaves like Array.prototype.forEach", function () { + S.root(function () { + var a = SArray(["a", "b", "c"]), + s = a.reduce(function (a, v) { + return a + v; + }, ""); + expect(s()).toEqual("abc"); + }); + }); + + it("tracks changes in source", function () { + S.root(function () { + var a = SArray(["a", "b", "c"]), + s = a.reduce( + function (a, v) { + return a + v; + }, + function () { + return ""; + }, + ); + a.push("d"); + expect(s()).toEqual("abcd"); + a.shift(); + expect(s()).toEqual("bcd"); + }); + }); }); describe("SArray.reduceRight", function () { - it("behaves like Array.prototype.forEach", function () { - S.root(function () { - var a = SArray(["a", "b", "c"]), - s = a.reduceRight(function (a, v) { return a + v; }, ""); - expect(s()).toEqual("cba"); - }); - }); - - it("tracks changes in source", function () { - S.root(function () { - var a = SArray(["a", "b", "c"]), - s = a.reduceRight(function (a, v) { return a + v; }, function () { return ""; }); - a.push("d"); - expect(s()).toEqual("dcba"); - a.shift(); - expect(s()).toEqual("dcb"); - }); - }); + it("behaves like Array.prototype.forEach", function () { + S.root(function () { + var a = SArray(["a", "b", "c"]), + s = a.reduceRight(function (a, v) { + return a + v; + }, ""); + expect(s()).toEqual("cba"); + }); + }); + + it("tracks changes in source", function () { + S.root(function () { + var a = SArray(["a", "b", "c"]), + s = a.reduceRight( + function (a, v) { + return a + v; + }, + function () { + return ""; + }, + ); + a.push("d"); + expect(s()).toEqual("dcba"); + a.shift(); + expect(s()).toEqual("dcb"); + }); + }); }); describe("SArray.reverse", function () { - it("behaves like Array.prototype.reverse", function () { - S.root(function () { - var a = SArray(["a", "b", "c"]), - s = a.reverse(); - expect(s()).toEqual(["c", "b", "a"]); - }); - }); - - it("tracks changes in source", function () { - S.root(function () { - var a = SArray(["a", "b", "c"]), - s = a.reverse(); - a.push("d"); - expect(s()).toEqual(["d", "c", "b", "a"]); - a.shift(); - expect(s()).toEqual(["d", "c", "b"]); - }); - }); + it("behaves like Array.prototype.reverse", function () { + S.root(function () { + var a = SArray(["a", "b", "c"]), + s = a.reverse(); + expect(s()).toEqual(["c", "b", "a"]); + }); + }); + + it("tracks changes in source", function () { + S.root(function () { + var a = SArray(["a", "b", "c"]), + s = a.reverse(); + a.push("d"); + expect(s()).toEqual(["d", "c", "b", "a"]); + a.shift(); + expect(s()).toEqual(["d", "c", "b"]); + }); + }); }); describe("SArray.slice", function () { - it("behaves like Array.prototype.slice", function () { - S.root(function () { - var a = SArray(["a", "b", "c", "d", "e", "f", "g", "h"]); - expect(a.slice(0, 4)()).toEqual(["a", "b", "c", "d"]); - expect(a.slice(3, 7)()).toEqual(["d", "e", "f", "g"]); - }); - }); - - it("tracks changes in source", function () { - S.root(function () { - var a = SArray(["a", "b", "c", "d", "e", "f", "g", "h"]), - s = a.slice(1, 4); - a.unshift("d"); - expect(s()).toEqual(["a", "b", "c"]); - a.shift(); - expect(s()).toEqual(["b", "c", "d"]); - }); - }); + it("behaves like Array.prototype.slice", function () { + S.root(function () { + var a = SArray(["a", "b", "c", "d", "e", "f", "g", "h"]); + expect(a.slice(0, 4)()).toEqual(["a", "b", "c", "d"]); + expect(a.slice(3, 7)()).toEqual(["d", "e", "f", "g"]); + }); + }); + + it("tracks changes in source", function () { + S.root(function () { + var a = SArray(["a", "b", "c", "d", "e", "f", "g", "h"]), + s = a.slice(1, 4); + a.unshift("d"); + expect(s()).toEqual(["a", "b", "c"]); + a.shift(); + expect(s()).toEqual(["b", "c", "d"]); + }); + }); }); describe("SArray.some", function () { - it("behaves like Array.prototype.some", function () { - S.root(function () { - var a = SArray([1, 3, 2]); - expect(a.some(function (v) { return v > 2; })()).toBe(true); - expect(a.some(function (v) { return v > 3; })()).toBe(false); - }); - }); - - it("is false for an empty array", function () { - S.root(function () { - var s = SArray([]).some(function () { return false; }); - expect(s()).toBe(false); - }); - }); - - it("responds to changes in source", function () { - S.root(function () { - var a = SArray([2, 3, 1]), - s = a.some(function (v) { return v > 2; }); - - expect(s()).toBe(true); - a.splice(1, 1); - expect(s()).toBe(false); - a.push(4); - expect(s()).toBe(true); - }); - }); + it("behaves like Array.prototype.some", function () { + S.root(function () { + var a = SArray([1, 3, 2]); + expect( + a.some(function (v) { + return v > 2; + })(), + ).toBe(true); + expect( + a.some(function (v) { + return v > 3; + })(), + ).toBe(false); + }); + }); + + it("is false for an empty array", function () { + S.root(function () { + var s = SArray([]).some(function () { + return false; + }); + expect(s()).toBe(false); + }); + }); + + it("responds to changes in source", function () { + S.root(function () { + var a = SArray([2, 3, 1]), + s = a.some(function (v) { + return v > 2; + }); + + expect(s()).toBe(true); + a.splice(1, 1); + expect(s()).toBe(false); + a.push(4); + expect(s()).toBe(true); + }); + }); }); describe("SArray.combine", function () { - it("combines an array signal of signals to an array signal of values", function () { - S.root(function () { - var a = SArray(["a", "b", "c"]).mapS(x => x), - s = a.combine(); - expect(s()).toEqual(["a", "b", "c"]); - }); - }) + it("combines an array signal of signals to an array signal of values", function () { + S.root(function () { + var a = SArray(["a", "b", "c"]).mapS((x) => x), + s = a.combine(); + expect(s()).toEqual(["a", "b", "c"]); + }); + }); }); describe("SArray.orderBy", function () { - var a, b; - - beforeEach(function () { - a = SArray([1, 3, 2]); - b = SArray(["cc", "a", "bbb"]); - }); - - it("can sort using a getter function", function () { - S.root(function () { - var s = a.orderBy(function (v) { return -v; }); - expect(s()).toEqual([3, 2, 1]); - }); - }); - - it("can sort using a property name", function () { - S.root(function () { - var s = b.orderBy('length'); - expect(s()).toEqual(["a", "cc", "bbb"]); - }); - }); - - it("tracks changes in source", function () { - S.root(function () { - var s = a.orderBy(function (v) { return -v; }); - a.push(0); - expect(s()).toEqual([3, 2, 1, 0]); - }); - }); + var a, b; + + beforeEach(function () { + a = SArray([1, 3, 2]); + b = SArray(["cc", "a", "bbb"]); + }); + + it("can sort using a getter function", function () { + S.root(function () { + var s = a.orderBy(function (v) { + return -v; + }); + expect(s()).toEqual([3, 2, 1]); + }); + }); + + it("can sort using a property name", function () { + S.root(function () { + var s = b.orderBy("length"); + expect(s()).toEqual(["a", "cc", "bbb"]); + }); + }); + + it("tracks changes in source", function () { + S.root(function () { + var s = a.orderBy(function (v) { + return -v; + }); + a.push(0); + expect(s()).toEqual([3, 2, 1, 0]); + }); + }); }); diff --git a/spec/support/jasmine.json b/spec/support/jasmine.json index 67ffd64..b4b2f15 100644 --- a/spec/support/jasmine.json +++ b/spec/support/jasmine.json @@ -1,11 +1,7 @@ { "spec_dir": "spec", - "spec_files": [ - "**/*[sS]pec.js" - ], - "helpers": [ - "support/loadSArray.js" - ], + "spec_files": ["**/*.spec.js"], + "helpers": ["support/loadSArray.js"], "stopSpecOnExpectationFailure": false, "random": false } diff --git a/spec/support/loadSArray.js b/spec/support/loadSArray.js index 89461a4..e50bbe8 100644 --- a/spec/support/loadSArray.js +++ b/spec/support/loadSArray.js @@ -1,3 +1,6 @@ // install S and SArray in global namespace -(eval || null)("this").S = require('../../node_modules/s-js'); -(eval || null)("this").SArray = require('../..'); \ No newline at end of file +import S from "@surplus/s"; +import SArray from "../../index.js"; + +(eval || null)("this").S = S; +(eval || null)("this").SArray = SArray; diff --git a/tsconfig.json b/tsconfig.json index 82acd2e..56d0709 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,11 @@ { - "include": [ - "index.ts" - ], - "compilerOptions": { - "strict": true, - "target": "es5", - "module": "es6", - "outDir": "es", - "declaration": true, - "moduleResolution": "node" - } -} \ No newline at end of file + "include": ["index.ts"], + "compilerOptions": { + "lib": ["esnext"], + "strict": true, + "target": "esnext", + "module": "nodenext", + "declaration": true, + "moduleResolution": "nodenext" + } +}