├── .esdoc.json ├── .gitignore ├── .prettierrc ├── .vscode ├── launch.json └── tasks.json ├── README.md ├── index.d.ts ├── index.js ├── package.json ├── src ├── lexer-state.ts ├── lexer.ts ├── token-types.ts └── token.ts ├── test └── index.ts ├── tsconfig.json └── yarn.lock /.esdoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "source": "lib/", 3 | "destination": "gh-pages/", 4 | "excludes": ["test\\.js"] 5 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | coverage/ 2 | node_modules/ 3 | lib/ 4 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | parser: typescript 2 | useTabs: true 3 | semi: false 4 | singleQuote: true 5 | trailingComma: es5 6 | bracketSpacing: false 7 | jsxBracketSameLine: true 8 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible Node.js debug attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "node", 9 | "request": "launch", 10 | "name": "lexer.js", 11 | "program": "${workspaceRoot}/lib/lexer.js", 12 | "outFiles": [], 13 | "protocol": "inspector" 14 | }, 15 | { 16 | "type": "node", 17 | "request": "attach", 18 | "name": "Attach to Process", 19 | "address": "localhost", 20 | "port": 5858, 21 | "outFiles": [] 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "0.1.0", 5 | "command": "yarn", 6 | "isShellCommand": true, 7 | "args": ["run", "tsc", "--", "-w", "-p", "."], 8 | "showOutput": "silent", 9 | "isBackground": true, 10 | "problemMatcher": "$tsc-watch" 11 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | perplex 2 | ======= 3 | 4 | A simple lexer written entirely in JavaScript, with no dependencies! 5 | 6 | ## Installation 7 | 8 | ```sh 9 | npm install --save perplex 10 | # or 11 | yarn add perplex 12 | ``` 13 | 14 | ## Use 15 | 16 | ```js 17 | import perplex from 'perplex' 18 | 19 | const lexer = perplex(' 4 5 6 ') 20 | .token('NUMBER', /\d+/) 21 | .token('WHITESPACE', /\s+/, true) // true means 'skip' 22 | 23 | lexer.next() // Token {type: 'NUMBER', match: '4', groups: ['4'], start: 2, end: 3} 24 | ``` 25 | 26 | [See the documentation for more information, and supported instance methods, etc.](https://jrop.github.io/perplex/): 27 | 28 | * [Lexer](https://jrop.github.io/perplex/class/lib/lexer.js~Lexer.html) 29 | * [Token](https://jrop.github.io/perplex/class/lib/token.js~Token.html) 30 | 31 | # License 32 | 33 | ISC License (ISC) 34 | Copyright (c) 2016, Jonathan Apodaca 35 | 36 | Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. 37 | 38 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 39 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | import __DEFAULT__ from './lib/lexer' 2 | export default __DEFAULT__ 3 | export * from './lib/lexer' 4 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./lib/lexer') 2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "perplex", 3 | "version": "0.11.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "doc": "tsc --target es2017 --module es2015 && esdoc lib/", 8 | "lint": "prettier -l 'src/**/*.ts'", 9 | "lint:fix": "prettier --write 'src/**/*.ts'", 10 | "precommit": "npm run lint && npm run test", 11 | "prepack": "tsc && npm test", 12 | "build": "tsc", 13 | "test": "tape -r 'ts-node/register' test/index.ts" 14 | }, 15 | "keywords": [], 16 | "author": "", 17 | "license": "ISC", 18 | "devDependencies": { 19 | "@types/node": "^7.0.10", 20 | "@types/tape": "^4.2.30", 21 | "esdoc": "^0.5.2", 22 | "except": "^0.1.3", 23 | "husky": "^0.14.3", 24 | "prettier": "^1.10.2", 25 | "tape": "^4.7.0", 26 | "ts-node": "^3.2.1", 27 | "tslint": "^4.5.1", 28 | "typescript": "^3.7.2" 29 | }, 30 | "repository": "https://github.com/jrop/perplex", 31 | "publishConfig": { 32 | "registry": "https://registry.npmjs.org/" 33 | }, 34 | "files": [ 35 | "lib/lexer-state.d.ts", 36 | "lib/lexer-state.js", 37 | "lib/lexer.js", 38 | "lib/lexer.d.ts", 39 | "lib/token-types.d.ts", 40 | "lib/token-types.js", 41 | "lib/token.d.ts", 42 | "lib/token.js", 43 | "index.js", 44 | "index.d.ts" 45 | ] 46 | } 47 | -------------------------------------------------------------------------------- /src/lexer-state.ts: -------------------------------------------------------------------------------- 1 | import TokenTypes from './token-types' 2 | 3 | /** 4 | * @private 5 | */ 6 | export default class LexerState { 7 | public source: string 8 | public position: number 9 | public tokenTypes: TokenTypes 10 | 11 | constructor(source: string, position: number = 0) { 12 | this.source = source 13 | this.position = position 14 | } 15 | 16 | copy() { 17 | return new LexerState(this.source, this.position) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/lexer.ts: -------------------------------------------------------------------------------- 1 | import LexerState from './lexer-state' 2 | import Token, {EOF} from './token' 3 | import TokenTypes from './token-types' 4 | 5 | /** 6 | * @typedef {{ 7 | * line: number, 8 | * column: number, 9 | * }} Position 10 | */ 11 | 12 | /** 13 | * Lexes a source-string into tokens. 14 | * 15 | * @example 16 | * const lex = perplex('...') 17 | * .token('ID', /my-id-regex/) 18 | * .token('(', /\(/) 19 | * .token(')', /\)/) 20 | * .token('WS', /\s+/, true) // true means 'skip' 21 | * 22 | * while ((let t = lex.next()).type != 'EOF') { 23 | * console.log(t) 24 | * } 25 | * // alternatively: 26 | * console.log(lex.toArray()) 27 | * // or: 28 | * console.log(...lex) 29 | */ 30 | class Lexer implements Iterable> { 31 | /* tslint:disable:variable-name */ 32 | private _state: LexerState 33 | private _tokenTypes: TokenTypes 34 | /* tslint:enable */ 35 | 36 | /** 37 | * Creates a new Lexer instance 38 | * @param {string} [source = ''] The source string to operate on. 39 | */ 40 | constructor(source: string = '') { 41 | this._state = new LexerState(source) 42 | this._tokenTypes = new TokenTypes() 43 | } 44 | 45 | // 46 | // Getters/Setters 47 | // 48 | 49 | /** 50 | * Gets the current lexer position 51 | * @return {number} Returns the position 52 | */ 53 | get position() { 54 | return this._state.position 55 | } 56 | 57 | /** 58 | * Sets the current lexer position 59 | * @param {number} i The position to move to 60 | */ 61 | set position(i: number) { 62 | this._state.position = i 63 | } 64 | 65 | /** 66 | * Gets the source the lexer is operating on 67 | * @return {string} Returns the source 68 | */ 69 | get source() { 70 | return this._state.source 71 | } 72 | 73 | /** 74 | * Sets the source the lexer is operating on 75 | * @param {string} s The source to set 76 | */ 77 | set source(s: string) { 78 | this._state = new LexerState(s) 79 | } 80 | 81 | // 82 | // METHODS 83 | // 84 | 85 | /** 86 | * Attaches this lexer to another lexer's state 87 | * @param {Lexer} other The other lexer to attach to 88 | */ 89 | attachTo(other: Lexer) { 90 | this._state = other._state 91 | } 92 | 93 | /** 94 | * Disables a token type 95 | * @param {T} type The token type to disable 96 | * @return {Lexer} 97 | */ 98 | disable(type: T) { 99 | this._tokenTypes.disable(type) 100 | return this 101 | } 102 | 103 | /** 104 | * Enables a token type 105 | * @param {T} type The token type to enalbe 106 | * @param {?boolean} [enabled=true] Whether to enable/disable the specified token type 107 | * @return {Lexer} 108 | */ 109 | enable(type: T, enabled?: boolean) { 110 | this._tokenTypes.enable(type, enabled) 111 | return this 112 | } 113 | 114 | /** 115 | * Like {@link next}, but throws an exception if the next token is 116 | * not of the required type. 117 | * @param {T} type The token type expected from {@link next} 118 | * @return {Token} Returns the {@link Token} on success 119 | */ 120 | expect(type: T): Token { 121 | const t = this.next() 122 | if (t.type != type) { 123 | const pos = t.strpos() 124 | throw new Error( 125 | 'Expected ' + 126 | type + 127 | (t ? ', got ' + t.type : '') + 128 | ' at ' + 129 | pos.start.line + 130 | ':' + 131 | pos.start.column 132 | ) 133 | } 134 | return t 135 | } 136 | 137 | /** 138 | * Looks up whether a token is enabled. 139 | * @param tokenType The token type to look up 140 | * @return {boolean} Returns whether the token is enabled 141 | */ 142 | isEnabled(tokenType: T) { 143 | return this._tokenTypes.isEnabled(tokenType) 144 | } 145 | 146 | /** 147 | * Consumes and returns the next {@link Token} in the source string. 148 | * If there are no more tokens, it returns a {@link Token} of type `$EOF` 149 | * @return {Token} 150 | */ 151 | next(): Token { 152 | try { 153 | const t = this.peek() 154 | this._state.position = t.end 155 | return t 156 | } catch (e) { 157 | this._state.position = e.end 158 | throw e 159 | } 160 | } 161 | 162 | /** 163 | * Returns the next {@link Token} in the source string, but does 164 | * not consume it. 165 | * If there are no more tokens, it returns a {@link Token} of type `$EOF` 166 | * @param {number} [position=`this.position`] The position at which to start reading 167 | * @return {Token} 168 | */ 169 | peek(position: number = this._state.position): Token { 170 | const read = (i: number = position) => { 171 | if (i >= this._state.source.length) return EOF(this) 172 | const n = this._tokenTypes.peek(this._state.source, i) 173 | return n 174 | ? n.item.skip 175 | ? read(i + n.result[0].length) 176 | : new Token( 177 | n.item.type, 178 | n.result[0], 179 | n.result.map(x => x), 180 | i, 181 | i + n.result[0].length, 182 | this 183 | ) 184 | : null 185 | } 186 | const t = read() 187 | if (t) return t 188 | 189 | // we did not find a match 190 | let unexpected = this._state.source.substring(position, position + 1) 191 | try { 192 | this.peek(position + 1) 193 | } catch (e) { 194 | unexpected += e.unexpected 195 | } 196 | const {line, column} = this.strpos(position) 197 | const e = new Error( 198 | `Unexpected input: ${unexpected} at (${line}:${column})` 199 | ) 200 | ;(e as any).unexpected = unexpected 201 | ;(e as any).end = position + unexpected.length 202 | throw e 203 | } 204 | 205 | /** 206 | * Converts a string-index (relative to the source string) to a line and a column. 207 | * @param {number} i The index to compute 208 | * @return {Position} 209 | */ 210 | strpos( 211 | i: number 212 | ): { 213 | line: number 214 | column: number 215 | } { 216 | let lines = this._state.source.substring(0, i).split(/\r?\n/) 217 | if (!Array.isArray(lines)) lines = [lines] 218 | 219 | const line = lines.length 220 | const column = lines[lines.length - 1].length + 1 221 | return {line, column} 222 | } 223 | 224 | /** 225 | * Converts the token stream to an array of Tokens 226 | * @return {Token[]} The array of tokens (not including (EOF)) 227 | */ 228 | toArray(): Token[] { 229 | return [...this] 230 | } 231 | 232 | /** 233 | * Implements the Iterable protocol 234 | * Iterates lazily over the entire token stream (not including (EOF)) 235 | * @return {Iterator>} Returns an iterator over all remaining tokens 236 | */ 237 | *[Symbol.iterator]() { 238 | const oldState = this._state.copy() 239 | this._state.position = 0 240 | 241 | let t 242 | while ( 243 | !(t = this.next()).isEof() // tslint:disable-line no-conditional-assignment 244 | ) 245 | yield t 246 | 247 | this._state = oldState 248 | } 249 | 250 | /** 251 | * Creates a new token type 252 | * @param {T} type The token type 253 | * @param {string|RegExp} pattern The pattern to match 254 | * @param {?boolean} skip Whether this type of token should be skipped 255 | * @return {Lexer} 256 | */ 257 | token(type: T, pattern: string | RegExp, skip?: boolean) { 258 | this._tokenTypes.token(type, pattern, skip) 259 | return this 260 | } 261 | 262 | /** 263 | * Creates a keyword 264 | * @param kwd The keyword to add as a token 265 | */ 266 | keyword(kwd: T) { 267 | return this.token(kwd, new RegExp(`${kwd}(?=\\W|$)`)) 268 | } 269 | 270 | /** 271 | * Creates an operator 272 | * @param op The operator to add as a token 273 | */ 274 | operator(op: T) { 275 | const sOp = new String(op).valueOf() 276 | return this.token(op, sOp) 277 | } 278 | } 279 | 280 | export default Lexer 281 | export {EOF, Token, TokenTypes, LexerState} 282 | -------------------------------------------------------------------------------- /src/token-types.ts: -------------------------------------------------------------------------------- 1 | // Thank you, http://stackoverflow.com/a/6969486 2 | function toRegExp(str: string): RegExp { 3 | return new RegExp(str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&')) 4 | } 5 | 6 | function normalize(regex: RegExp | string): RegExp { 7 | if (typeof regex === 'string') regex = toRegExp(regex) 8 | if (!regex.source.startsWith('^')) 9 | return new RegExp(`^${regex.source}`, regex.flags) 10 | else return regex 11 | } 12 | 13 | function first( 14 | arr: T[], 15 | predicate: (item: T, i: number) => U 16 | ): {item: T; result: U} { 17 | let i = 0 18 | for (const item of arr) { 19 | const result = predicate(item, i++) 20 | if (result) return {item, result} 21 | } 22 | } 23 | 24 | /** 25 | * @private 26 | */ 27 | export default class TokenTypes { 28 | public tokenTypes: { 29 | type: T 30 | regex: RegExp 31 | enabled: boolean 32 | skip: boolean 33 | }[] 34 | 35 | constructor() { 36 | this.tokenTypes = [] 37 | } 38 | 39 | disable(type: T): TokenTypes { 40 | return this.enable(type, false) 41 | } 42 | 43 | enable(type: T, enabled: boolean = true): TokenTypes { 44 | this.tokenTypes 45 | .filter(t => t.type == type) 46 | .forEach(t => (t.enabled = enabled)) 47 | return this 48 | } 49 | 50 | isEnabled(type: T) { 51 | const ttypes = this.tokenTypes.filter(tt => tt.type == type) 52 | if (ttypes.length == 0) 53 | throw new Error(`Token of type ${type} does not exists`) 54 | return ttypes[0].enabled 55 | } 56 | 57 | peek(source: string, position: number) { 58 | const s = source.substr(position) 59 | return first(this.tokenTypes.filter(tt => tt.enabled), tt => { 60 | tt.regex.lastIndex = 0 61 | return tt.regex.exec(s) 62 | }) 63 | } 64 | 65 | token( 66 | type: T, 67 | pattern: RegExp | string, 68 | skip: boolean = false 69 | ): TokenTypes { 70 | this.tokenTypes.push({ 71 | type, 72 | regex: normalize(pattern), 73 | enabled: true, 74 | skip, 75 | }) 76 | return this 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/token.ts: -------------------------------------------------------------------------------- 1 | import Lexer from './lexer' 2 | 3 | /** 4 | * @typedef {{ 5 | * start: Position, 6 | * end: Position, 7 | * }} TokenPosition 8 | */ 9 | 10 | /** 11 | * Represents a token instance 12 | */ 13 | class Token { 14 | type: T 15 | match: string 16 | groups: string[] 17 | start: number 18 | end: number 19 | lexer: Lexer 20 | 21 | /* tslint:disable:indent */ 22 | /** 23 | * Constructs a token 24 | * @param {T} type The token type 25 | * @param {string} match The string that the lexer consumed to create this token 26 | * @param {string[]} groups Any RegExp groups that accrued during the match 27 | * @param {number} start The string position where this match started 28 | * @param {number} end The string position where this match ends 29 | * @param {Lexer} lexer The parent {@link Lexer} 30 | */ 31 | constructor( 32 | type: T, 33 | match: string, 34 | groups: string[], 35 | start: number, 36 | end: number, 37 | lexer: Lexer 38 | ) { 39 | /* tslint:enable */ 40 | /** 41 | * The token type 42 | * @type {T} 43 | */ 44 | this.type = type 45 | 46 | /** 47 | * The string that the lexer consumed to create this token 48 | * @type {string} 49 | */ 50 | this.match = match 51 | 52 | /** 53 | * Any RegExp groups that accrued during the match 54 | * @type {string[]} 55 | */ 56 | this.groups = groups 57 | 58 | /** 59 | * The string position where this match started 60 | * @type {number} 61 | */ 62 | this.start = start 63 | 64 | /** 65 | * The string position where this match ends 66 | * @type {number} 67 | */ 68 | this.end = end 69 | 70 | /** 71 | * The parent {@link Lexer} 72 | * @type {Lexer} 73 | */ 74 | this.lexer = lexer 75 | } 76 | 77 | /** 78 | * Returns the bounds of this token, each in `{line, column}` format 79 | * @return {TokenPosition} 80 | */ 81 | strpos() { 82 | const start = this.lexer.strpos(this.start) 83 | const end = this.lexer.strpos(this.end) 84 | return {start, end} 85 | } 86 | 87 | // tslint:disable-next-line prefer-function-over-method 88 | isEof() { 89 | return false 90 | } 91 | } 92 | 93 | export default Token 94 | 95 | export class EOFToken extends Token { 96 | constructor(lexer: Lexer) { 97 | const end = lexer.source.length 98 | super(null, '(eof)', [], end, end, lexer) 99 | } 100 | 101 | // tslint:disable-next-line prefer-function-over-method 102 | isEof() { 103 | return true 104 | } 105 | } 106 | 107 | /** 108 | * @private 109 | */ 110 | export const EOF = (lexer: Lexer) => new EOFToken(lexer) 111 | -------------------------------------------------------------------------------- /test/index.ts: -------------------------------------------------------------------------------- 1 | import * as except from 'except' 2 | import Lexer from '../src/lexer' 3 | import Token from '../src/token' 4 | import _test = require('tape') 5 | 6 | function clean(t: Token) { 7 | return except(t, 'lexer', 'strpos', 'isEof', 'constructor') 8 | } 9 | 10 | const lex = new Lexer() 11 | .token('WS', /\s+/) 12 | .disable('WS') 13 | .token('NUMBER', /\d+/) 14 | .token('SINGLE_LINE_COMMENT', /\/\/[^\n]*/, true) 15 | .token('WHITESPACE', /^\s+/, true) 16 | 17 | const test = (s, cb: _test.TestCase) => 18 | _test(s, t => { 19 | lex.source = ' 4 5 6 ' 20 | return cb(t) 21 | }) 22 | 23 | const FOUR = { 24 | type: 'NUMBER', 25 | match: '4', 26 | groups: ['4'], 27 | start: 2, 28 | end: 3, 29 | } 30 | const FIVE = { 31 | type: 'NUMBER', 32 | match: '5', 33 | groups: ['5'], 34 | start: 4, 35 | end: 5, 36 | } 37 | const SIX = { 38 | type: 'NUMBER', 39 | match: '6', 40 | groups: ['6'], 41 | start: 6, 42 | end: 7, 43 | } 44 | 45 | test('.source (get)', function(t) { 46 | t.plan(1) 47 | lex.next() // 4 48 | t.looseEqual(lex.source.replace(/\s+/g, ''), '456') 49 | }) 50 | 51 | test('.position (get)', function(t) { 52 | t.plan(1) 53 | lex.next() // 4 54 | t.looseEqual(lex.position, 3) 55 | }) 56 | 57 | test('.position (set)', function(t) { 58 | t.plan(1) 59 | lex.next() // 4 60 | lex.position = 0 61 | t.looseEqual(lex.next().match.trim(), '4') 62 | }) 63 | 64 | test('.peek()', function(t) { 65 | t.plan(3) 66 | t.deepLooseEqual(clean(lex.peek()), FOUR) 67 | 68 | lex.next() 69 | t.deepLooseEqual(clean(lex.peek()), FIVE) 70 | t.deepLooseEqual(clean(lex.peek()), FIVE) 71 | }) 72 | 73 | test('.next()', function(t) { 74 | t.plan(6) 75 | t.assert(!lex.peek().isEof()) 76 | t.deepLooseEqual(clean(lex.next()), FOUR) 77 | t.deepLooseEqual(clean(lex.next()), FIVE) 78 | t.deepLooseEqual(clean(lex.next()), SIX) 79 | t.deepLooseEqual(clean(lex.next()), { 80 | type: null, 81 | match: '(eof)', 82 | groups: [], 83 | start: 9, 84 | end: 9, 85 | }) 86 | t.assert(lex.next().isEof()) 87 | }) 88 | 89 | test('.expect()', function(t) { 90 | t.plan(2) 91 | t.assert(lex.expect('NUMBER').match.trim(), '4') 92 | t.throws(() => lex.expect('NOPE')) 93 | }) 94 | 95 | test('.toArray()', function(t) { 96 | t.plan(2) 97 | lex.next() // make sure toArray starts from the beginning 98 | t.deepLooseEqual(lex.toArray().map(t => clean(t)), [FOUR, FIVE, SIX]) 99 | // make sure the original state is left intact: 100 | t.deepLooseEqual(clean(lex.peek()), FIVE) 101 | }) 102 | 103 | test('.attach()', function(t) { 104 | t.plan(1) 105 | const lex2 = new Lexer().token('ALL', /.*/) 106 | lex2.attachTo(lex) 107 | 108 | lex.next() // eat 4 109 | t.deepLooseEqual(clean(lex2.peek()), { 110 | type: 'ALL', 111 | match: ' 5 6 ', 112 | groups: [' 5 6 '], 113 | start: 3, 114 | end: 9, 115 | }) 116 | }) 117 | 118 | test('enable/disable token types', function(t) { 119 | t.plan(5) 120 | t.equal(lex.isEnabled('WS'), false) 121 | t.looseEqual(lex.enable('WS').next().match, ' ') 122 | t.equal(lex.isEnabled('WS'), true) 123 | t.looseEqual(lex.next().match, '4') 124 | lex.disable('WS') 125 | t.looseEqual(lex.next().match, '5') 126 | }) 127 | 128 | test('unexpected input', function(t) { 129 | t.plan(5) 130 | lex.source = '4 asdf' 131 | t.looseEqual(lex.next().match, '4') 132 | t.throws(function() { 133 | lex.next() 134 | }, /asdf/) 135 | 136 | // recover? 137 | lex.source = '4 asdf 5' 138 | t.looseEqual(lex.next().match, '4') 139 | t.throws(function() { 140 | lex.next() 141 | }, /asdf/) 142 | t.looseEqual(lex.next().match, '5') 143 | }) 144 | 145 | test('.strpos()', function(t) { 146 | t.plan(4) 147 | lex.source = `4 148 | 5 6 149 | 7` 150 | 151 | const _4 = lex.next() 152 | t.deepLooseEqual(_4.strpos(), { 153 | start: {line: 1, column: 1}, 154 | end: {line: 1, column: 2}, 155 | }) 156 | 157 | const _5 = lex.next() 158 | t.deepLooseEqual(_5.strpos(), { 159 | start: {line: 2, column: 1}, 160 | end: {line: 2, column: 2}, 161 | }) 162 | 163 | const _6 = lex.next() 164 | t.deepLooseEqual(_6.strpos(), { 165 | start: {line: 2, column: 3}, 166 | end: {line: 2, column: 4}, 167 | }) 168 | 169 | const _7 = lex.next() 170 | t.deepLooseEqual(_7.strpos(), { 171 | start: {line: 3, column: 1}, 172 | end: {line: 3, column: 2}, 173 | }) 174 | }) 175 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["es2017"], 4 | "downlevelIteration": true, 5 | "module": "commonjs", 6 | "moduleResolution": "node", 7 | "target": "es5", 8 | "noImplicitAny": false, 9 | "declaration": true, 10 | "sourceMap": true, 11 | "outDir": "lib/" 12 | }, 13 | "include": ["src/**/*"] 14 | } -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/node@*": 6 | version "9.3.0" 7 | resolved "https://registry.yarnpkg.com/@types/node/-/node-9.3.0.tgz#3a129cda7c4e5df2409702626892cb4b96546dd5" 8 | 9 | "@types/node@^7.0.10": 10 | version "7.0.10" 11 | resolved "https://registry.npmjs.org/@types/node/-/node-7.0.10.tgz#d860abb18c1b58b552c7c6cd8b2ba7adf6546fa3" 12 | 13 | "@types/tape@^4.2.30": 14 | version "4.2.31" 15 | resolved "https://registry.yarnpkg.com/@types/tape/-/tape-4.2.31.tgz#d2cd0f2e410d2c288a5eb54c01c04e6b8a301fd2" 16 | dependencies: 17 | "@types/node" "*" 18 | 19 | abab@^1.0.0: 20 | version "1.0.3" 21 | resolved "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" 22 | 23 | acorn-globals@^1.0.4: 24 | version "1.0.9" 25 | resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf" 26 | dependencies: 27 | acorn "^2.1.0" 28 | 29 | acorn@^2.1.0, acorn@^2.4.0: 30 | version "2.7.0" 31 | resolved "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" 32 | 33 | ajv@^4.9.1: 34 | version "4.11.5" 35 | resolved "https://registry.npmjs.org/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd" 36 | dependencies: 37 | co "^4.6.0" 38 | json-stable-stringify "^1.0.1" 39 | 40 | amdefine@>=0.0.4: 41 | version "1.0.1" 42 | resolved "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 43 | 44 | ansi-align@^1.1.0: 45 | version "1.1.0" 46 | resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" 47 | dependencies: 48 | string-width "^1.0.1" 49 | 50 | ansi-regex@^2.0.0: 51 | version "2.1.1" 52 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 53 | 54 | ansi-styles@^2.2.1: 55 | version "2.2.1" 56 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 57 | 58 | ansi-styles@^3.1.0: 59 | version "3.2.0" 60 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" 61 | dependencies: 62 | color-convert "^1.9.0" 63 | 64 | arrify@^1.0.0: 65 | version "1.0.1" 66 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 67 | 68 | asn1@~0.2.3: 69 | version "0.2.3" 70 | resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 71 | 72 | assert-plus@1.0.0, assert-plus@^1.0.0: 73 | version "1.0.0" 74 | resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 75 | 76 | assert-plus@^0.2.0: 77 | version "0.2.0" 78 | resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 79 | 80 | asynckit@^0.4.0: 81 | version "0.4.0" 82 | resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 83 | 84 | aws-sign2@~0.6.0: 85 | version "0.6.0" 86 | resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 87 | 88 | aws4@^1.2.1: 89 | version "1.6.0" 90 | resolved "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 91 | 92 | babel-code-frame@^6.20.0, babel-code-frame@^6.8.0: 93 | version "6.22.0" 94 | resolved "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" 95 | dependencies: 96 | chalk "^1.1.0" 97 | esutils "^2.0.2" 98 | js-tokens "^3.0.0" 99 | 100 | babel-generator@6.11.4: 101 | version "6.11.4" 102 | resolved "https://registry.npmjs.org/babel-generator/-/babel-generator-6.11.4.tgz#14f6933abb20c62666d27e3b7b9f5b9dc0712a9a" 103 | dependencies: 104 | babel-messages "^6.8.0" 105 | babel-runtime "^6.9.0" 106 | babel-types "^6.10.2" 107 | detect-indent "^3.0.1" 108 | lodash "^4.2.0" 109 | source-map "^0.5.0" 110 | 111 | babel-messages@^6.8.0: 112 | version "6.23.0" 113 | resolved "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 114 | dependencies: 115 | babel-runtime "^6.22.0" 116 | 117 | babel-runtime@^6.22.0, babel-runtime@^6.9.0: 118 | version "6.23.0" 119 | resolved "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" 120 | dependencies: 121 | core-js "^2.4.0" 122 | regenerator-runtime "^0.10.0" 123 | 124 | babel-traverse@6.12.0: 125 | version "6.12.0" 126 | resolved "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.12.0.tgz#f22f54fa0d6eeb7f63585246bab6e637858f5d94" 127 | dependencies: 128 | babel-code-frame "^6.8.0" 129 | babel-messages "^6.8.0" 130 | babel-runtime "^6.9.0" 131 | babel-types "^6.9.0" 132 | babylon "^6.7.0" 133 | debug "^2.2.0" 134 | globals "^8.3.0" 135 | invariant "^2.2.0" 136 | lodash "^4.2.0" 137 | 138 | babel-types@^6.10.2, babel-types@^6.9.0: 139 | version "6.23.0" 140 | resolved "https://registry.npmjs.org/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf" 141 | dependencies: 142 | babel-runtime "^6.22.0" 143 | esutils "^2.0.2" 144 | lodash "^4.2.0" 145 | to-fast-properties "^1.0.1" 146 | 147 | babylon@6.14.1, babylon@^6.7.0: 148 | version "6.14.1" 149 | resolved "https://registry.npmjs.org/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815" 150 | 151 | balanced-match@^0.4.1: 152 | version "0.4.2" 153 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 154 | 155 | balanced-match@^1.0.0: 156 | version "1.0.0" 157 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 158 | 159 | bcrypt-pbkdf@^1.0.0: 160 | version "1.0.1" 161 | resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 162 | dependencies: 163 | tweetnacl "^0.14.3" 164 | 165 | boolbase@~1.0.0: 166 | version "1.0.0" 167 | resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 168 | 169 | boom@2.x.x: 170 | version "2.10.1" 171 | resolved "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 172 | dependencies: 173 | hoek "2.x.x" 174 | 175 | boxen@^1.0.0: 176 | version "1.0.0" 177 | resolved "https://registry.npmjs.org/boxen/-/boxen-1.0.0.tgz#b2694baf1f605f708ff0177c12193b22f29aaaab" 178 | dependencies: 179 | ansi-align "^1.1.0" 180 | camelcase "^4.0.0" 181 | chalk "^1.1.1" 182 | cli-boxes "^1.0.0" 183 | string-width "^2.0.0" 184 | term-size "^0.1.0" 185 | widest-line "^1.0.0" 186 | 187 | brace-expansion@^1.0.0: 188 | version "1.1.6" 189 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" 190 | dependencies: 191 | balanced-match "^0.4.1" 192 | concat-map "0.0.1" 193 | 194 | brace-expansion@^1.1.7: 195 | version "1.1.8" 196 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" 197 | dependencies: 198 | balanced-match "^1.0.0" 199 | concat-map "0.0.1" 200 | 201 | buffer-shims@^1.0.0: 202 | version "1.0.0" 203 | resolved "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 204 | 205 | camelcase@^4.0.0: 206 | version "4.1.0" 207 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 208 | 209 | capture-stack-trace@^1.0.0: 210 | version "1.0.0" 211 | resolved "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" 212 | 213 | caseless@~0.12.0: 214 | version "0.12.0" 215 | resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 216 | 217 | chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1: 218 | version "1.1.3" 219 | resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 220 | dependencies: 221 | ansi-styles "^2.2.1" 222 | escape-string-regexp "^1.0.2" 223 | has-ansi "^2.0.0" 224 | strip-ansi "^3.0.0" 225 | supports-color "^2.0.0" 226 | 227 | chalk@^2.0.0: 228 | version "2.3.0" 229 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" 230 | dependencies: 231 | ansi-styles "^3.1.0" 232 | escape-string-regexp "^1.0.5" 233 | supports-color "^4.0.0" 234 | 235 | cheerio@0.20.0: 236 | version "0.20.0" 237 | resolved "https://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz#5c710f2bab95653272842ba01c6ea61b3545ec35" 238 | dependencies: 239 | css-select "~1.2.0" 240 | dom-serializer "~0.1.0" 241 | entities "~1.1.1" 242 | htmlparser2 "~3.8.1" 243 | lodash "^4.1.0" 244 | optionalDependencies: 245 | jsdom "^7.0.2" 246 | 247 | cheerio@0.22.0: 248 | version "0.22.0" 249 | resolved "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" 250 | dependencies: 251 | css-select "~1.2.0" 252 | dom-serializer "~0.1.0" 253 | entities "~1.1.1" 254 | htmlparser2 "^3.9.1" 255 | lodash.assignin "^4.0.9" 256 | lodash.bind "^4.1.4" 257 | lodash.defaults "^4.0.1" 258 | lodash.filter "^4.4.0" 259 | lodash.flatten "^4.2.0" 260 | lodash.foreach "^4.3.0" 261 | lodash.map "^4.4.0" 262 | lodash.merge "^4.4.0" 263 | lodash.pick "^4.2.1" 264 | lodash.reduce "^4.4.0" 265 | lodash.reject "^4.4.0" 266 | lodash.some "^4.4.0" 267 | 268 | ci-info@^1.0.0: 269 | version "1.0.0" 270 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" 271 | 272 | cli-boxes@^1.0.0: 273 | version "1.0.0" 274 | resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 275 | 276 | co@^4.6.0: 277 | version "4.6.0" 278 | resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 279 | 280 | code-point-at@^1.0.0: 281 | version "1.1.0" 282 | resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 283 | 284 | color-convert@^1.9.0: 285 | version "1.9.1" 286 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" 287 | dependencies: 288 | color-name "^1.1.1" 289 | 290 | color-logger@0.0.3: 291 | version "0.0.3" 292 | resolved "https://registry.npmjs.org/color-logger/-/color-logger-0.0.3.tgz#d9b22dd1d973e166b18bf313f9f481bba4df2018" 293 | 294 | color-name@^1.1.1: 295 | version "1.1.2" 296 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" 297 | 298 | colors@^1.1.2: 299 | version "1.1.2" 300 | resolved "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" 301 | 302 | combined-stream@^1.0.5, combined-stream@~1.0.5: 303 | version "1.0.5" 304 | resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 305 | dependencies: 306 | delayed-stream "~1.0.0" 307 | 308 | concat-map@0.0.1: 309 | version "0.0.1" 310 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 311 | 312 | configstore@^3.0.0: 313 | version "3.0.0" 314 | resolved "https://registry.npmjs.org/configstore/-/configstore-3.0.0.tgz#e1b8669c1803ccc50b545e92f8e6e79aa80e0196" 315 | dependencies: 316 | dot-prop "^4.1.0" 317 | graceful-fs "^4.1.2" 318 | mkdirp "^0.5.0" 319 | unique-string "^1.0.0" 320 | write-file-atomic "^1.1.2" 321 | xdg-basedir "^3.0.0" 322 | 323 | core-js@^2.4.0: 324 | version "2.4.1" 325 | resolved "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" 326 | 327 | core-util-is@~1.0.0: 328 | version "1.0.2" 329 | resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 330 | 331 | create-error-class@^3.0.0: 332 | version "3.0.2" 333 | resolved "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" 334 | dependencies: 335 | capture-stack-trace "^1.0.0" 336 | 337 | cross-spawn-async@^2.1.1: 338 | version "2.2.5" 339 | resolved "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" 340 | dependencies: 341 | lru-cache "^4.0.0" 342 | which "^1.2.8" 343 | 344 | cryptiles@2.x.x: 345 | version "2.0.5" 346 | resolved "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 347 | dependencies: 348 | boom "2.x.x" 349 | 350 | crypto-random-string@^1.0.0: 351 | version "1.0.0" 352 | resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" 353 | 354 | css-select@~1.2.0: 355 | version "1.2.0" 356 | resolved "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" 357 | dependencies: 358 | boolbase "~1.0.0" 359 | css-what "2.1" 360 | domutils "1.5.1" 361 | nth-check "~1.0.1" 362 | 363 | css-what@2.1: 364 | version "2.1.0" 365 | resolved "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" 366 | 367 | cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0": 368 | version "0.3.2" 369 | resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" 370 | 371 | "cssstyle@>= 0.2.29 < 0.3.0": 372 | version "0.2.37" 373 | resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" 374 | dependencies: 375 | cssom "0.3.x" 376 | 377 | dashdash@^1.12.0: 378 | version "1.14.1" 379 | resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 380 | dependencies: 381 | assert-plus "^1.0.0" 382 | 383 | debug@^2.2.0: 384 | version "2.2.0" 385 | resolved "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" 386 | dependencies: 387 | ms "0.7.1" 388 | 389 | deep-equal@~1.0.1: 390 | version "1.0.1" 391 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" 392 | 393 | deep-extend@~0.4.0: 394 | version "0.4.1" 395 | resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" 396 | 397 | deep-is@~0.1.3: 398 | version "0.1.3" 399 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 400 | 401 | define-properties@^1.1.2: 402 | version "1.1.2" 403 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" 404 | dependencies: 405 | foreach "^2.0.5" 406 | object-keys "^1.0.8" 407 | 408 | defined@~1.0.0: 409 | version "1.0.0" 410 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 411 | 412 | delayed-stream@~1.0.0: 413 | version "1.0.0" 414 | resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 415 | 416 | detect-indent@^3.0.1: 417 | version "3.0.1" 418 | resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz#9dc5e5ddbceef8325764b9451b02bc6d54084f75" 419 | dependencies: 420 | get-stdin "^4.0.1" 421 | minimist "^1.1.0" 422 | repeating "^1.1.0" 423 | 424 | diff@^3.0.1: 425 | version "3.2.0" 426 | resolved "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" 427 | 428 | diff@^3.1.0: 429 | version "3.4.0" 430 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" 431 | 432 | dom-serializer@0, dom-serializer@~0.1.0: 433 | version "0.1.0" 434 | resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" 435 | dependencies: 436 | domelementtype "~1.1.1" 437 | entities "~1.1.1" 438 | 439 | domelementtype@1, domelementtype@^1.3.0: 440 | version "1.3.0" 441 | resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" 442 | 443 | domelementtype@~1.1.1: 444 | version "1.1.3" 445 | resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" 446 | 447 | domhandler@2.3, domhandler@^2.3.0: 448 | version "2.3.0" 449 | resolved "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" 450 | dependencies: 451 | domelementtype "1" 452 | 453 | domutils@1.5, domutils@1.5.1, domutils@^1.5.1: 454 | version "1.5.1" 455 | resolved "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" 456 | dependencies: 457 | dom-serializer "0" 458 | domelementtype "1" 459 | 460 | dot-prop@^4.1.0: 461 | version "4.1.1" 462 | resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1" 463 | dependencies: 464 | is-obj "^1.0.0" 465 | 466 | duplexer3@^0.1.4: 467 | version "0.1.4" 468 | resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 469 | 470 | ecc-jsbn@~0.1.1: 471 | version "0.1.1" 472 | resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 473 | dependencies: 474 | jsbn "~0.1.0" 475 | 476 | entities@1.0: 477 | version "1.0.0" 478 | resolved "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" 479 | 480 | entities@^1.1.1, entities@~1.1.1: 481 | version "1.1.1" 482 | resolved "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" 483 | 484 | es-abstract@^1.5.0: 485 | version "1.10.0" 486 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" 487 | dependencies: 488 | es-to-primitive "^1.1.1" 489 | function-bind "^1.1.1" 490 | has "^1.0.1" 491 | is-callable "^1.1.3" 492 | is-regex "^1.0.4" 493 | 494 | es-to-primitive@^1.1.1: 495 | version "1.1.1" 496 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" 497 | dependencies: 498 | is-callable "^1.1.1" 499 | is-date-object "^1.0.1" 500 | is-symbol "^1.0.1" 501 | 502 | escape-html@1.0.3: 503 | version "1.0.3" 504 | resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 505 | 506 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 507 | version "1.0.5" 508 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 509 | 510 | escodegen@^1.6.1: 511 | version "1.8.1" 512 | resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" 513 | dependencies: 514 | esprima "^2.7.1" 515 | estraverse "^1.9.1" 516 | esutils "^2.0.2" 517 | optionator "^0.8.1" 518 | optionalDependencies: 519 | source-map "~0.2.0" 520 | 521 | esdoc@^0.5.2: 522 | version "0.5.2" 523 | resolved "https://registry.npmjs.org/esdoc/-/esdoc-0.5.2.tgz#cbfd0b20e3d1cacc23c93c328eed987e21ba0067" 524 | dependencies: 525 | babel-generator "6.11.4" 526 | babel-traverse "6.12.0" 527 | babylon "6.14.1" 528 | cheerio "0.22.0" 529 | color-logger "0.0.3" 530 | escape-html "1.0.3" 531 | fs-extra "1.0.0" 532 | ice-cap "0.0.4" 533 | marked "0.3.6" 534 | minimist "1.2.0" 535 | taffydb "2.7.2" 536 | 537 | esprima@^2.7.1: 538 | version "2.7.3" 539 | resolved "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 540 | 541 | estraverse@^1.9.1: 542 | version "1.9.3" 543 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" 544 | 545 | esutils@^2.0.2: 546 | version "2.0.2" 547 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 548 | 549 | except@^0.1.3: 550 | version "0.1.3" 551 | resolved "https://registry.npmjs.org/except/-/except-0.1.3.tgz#98261c91958551536b44482238e9783fb73d292a" 552 | dependencies: 553 | indexof "0.0.1" 554 | 555 | execa@^0.4.0: 556 | version "0.4.0" 557 | resolved "https://registry.npmjs.org/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" 558 | dependencies: 559 | cross-spawn-async "^2.1.1" 560 | is-stream "^1.1.0" 561 | npm-run-path "^1.0.0" 562 | object-assign "^4.0.1" 563 | path-key "^1.0.0" 564 | strip-eof "^1.0.0" 565 | 566 | extend@~3.0.0: 567 | version "3.0.0" 568 | resolved "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" 569 | 570 | extsprintf@1.0.2: 571 | version "1.0.2" 572 | resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" 573 | 574 | fast-levenshtein@~2.0.4: 575 | version "2.0.6" 576 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 577 | 578 | findup-sync@~0.3.0: 579 | version "0.3.0" 580 | resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" 581 | dependencies: 582 | glob "~5.0.0" 583 | 584 | for-each@~0.3.2: 585 | version "0.3.2" 586 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4" 587 | dependencies: 588 | is-function "~1.0.0" 589 | 590 | foreach@^2.0.5: 591 | version "2.0.5" 592 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" 593 | 594 | forever-agent@~0.6.1: 595 | version "0.6.1" 596 | resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 597 | 598 | form-data@~2.1.1: 599 | version "2.1.2" 600 | resolved "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" 601 | dependencies: 602 | asynckit "^0.4.0" 603 | combined-stream "^1.0.5" 604 | mime-types "^2.1.12" 605 | 606 | fs-extra@1.0.0: 607 | version "1.0.0" 608 | resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" 609 | dependencies: 610 | graceful-fs "^4.1.2" 611 | jsonfile "^2.1.0" 612 | klaw "^1.0.0" 613 | 614 | fs.realpath@^1.0.0: 615 | version "1.0.0" 616 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 617 | 618 | function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.0: 619 | version "1.1.1" 620 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 621 | 622 | get-stdin@^4.0.1: 623 | version "4.0.1" 624 | resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 625 | 626 | get-stream@^3.0.0: 627 | version "3.0.0" 628 | resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 629 | 630 | getpass@^0.1.1: 631 | version "0.1.6" 632 | resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" 633 | dependencies: 634 | assert-plus "^1.0.0" 635 | 636 | glob@^7.1.1: 637 | version "7.1.1" 638 | resolved "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 639 | dependencies: 640 | fs.realpath "^1.0.0" 641 | inflight "^1.0.4" 642 | inherits "2" 643 | minimatch "^3.0.2" 644 | once "^1.3.0" 645 | path-is-absolute "^1.0.0" 646 | 647 | glob@~5.0.0: 648 | version "5.0.15" 649 | resolved "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 650 | dependencies: 651 | inflight "^1.0.4" 652 | inherits "2" 653 | minimatch "2 || 3" 654 | once "^1.3.0" 655 | path-is-absolute "^1.0.0" 656 | 657 | glob@~7.1.2: 658 | version "7.1.2" 659 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 660 | dependencies: 661 | fs.realpath "^1.0.0" 662 | inflight "^1.0.4" 663 | inherits "2" 664 | minimatch "^3.0.4" 665 | once "^1.3.0" 666 | path-is-absolute "^1.0.0" 667 | 668 | globals@^8.3.0: 669 | version "8.18.0" 670 | resolved "https://registry.npmjs.org/globals/-/globals-8.18.0.tgz#93d4a62bdcac38cfafafc47d6b034768cb0ffcb4" 671 | 672 | got@^6.7.1: 673 | version "6.7.1" 674 | resolved "https://registry.npmjs.org/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" 675 | dependencies: 676 | create-error-class "^3.0.0" 677 | duplexer3 "^0.1.4" 678 | get-stream "^3.0.0" 679 | is-redirect "^1.0.0" 680 | is-retry-allowed "^1.0.0" 681 | is-stream "^1.0.0" 682 | lowercase-keys "^1.0.0" 683 | safe-buffer "^5.0.1" 684 | timed-out "^4.0.0" 685 | unzip-response "^2.0.1" 686 | url-parse-lax "^1.0.0" 687 | 688 | graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: 689 | version "4.1.11" 690 | resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 691 | 692 | har-schema@^1.0.5: 693 | version "1.0.5" 694 | resolved "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" 695 | 696 | har-validator@~4.2.1: 697 | version "4.2.1" 698 | resolved "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" 699 | dependencies: 700 | ajv "^4.9.1" 701 | har-schema "^1.0.5" 702 | 703 | has-ansi@^2.0.0: 704 | version "2.0.0" 705 | resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 706 | dependencies: 707 | ansi-regex "^2.0.0" 708 | 709 | has-flag@^2.0.0: 710 | version "2.0.0" 711 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" 712 | 713 | has@^1.0.1, has@~1.0.1: 714 | version "1.0.1" 715 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" 716 | dependencies: 717 | function-bind "^1.0.2" 718 | 719 | hawk@~3.1.3: 720 | version "3.1.3" 721 | resolved "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 722 | dependencies: 723 | boom "2.x.x" 724 | cryptiles "2.x.x" 725 | hoek "2.x.x" 726 | sntp "1.x.x" 727 | 728 | hoek@2.x.x: 729 | version "2.16.3" 730 | resolved "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 731 | 732 | homedir-polyfill@^1.0.1: 733 | version "1.0.1" 734 | resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" 735 | dependencies: 736 | parse-passwd "^1.0.0" 737 | 738 | htmlparser2@^3.9.1: 739 | version "3.9.2" 740 | resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" 741 | dependencies: 742 | domelementtype "^1.3.0" 743 | domhandler "^2.3.0" 744 | domutils "^1.5.1" 745 | entities "^1.1.1" 746 | inherits "^2.0.1" 747 | readable-stream "^2.0.2" 748 | 749 | htmlparser2@~3.8.1: 750 | version "3.8.3" 751 | resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" 752 | dependencies: 753 | domelementtype "1" 754 | domhandler "2.3" 755 | domutils "1.5" 756 | entities "1.0" 757 | readable-stream "1.1" 758 | 759 | http-signature@~1.1.0: 760 | version "1.1.1" 761 | resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 762 | dependencies: 763 | assert-plus "^0.2.0" 764 | jsprim "^1.2.2" 765 | sshpk "^1.7.0" 766 | 767 | husky@^0.14.3: 768 | version "0.14.3" 769 | resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" 770 | dependencies: 771 | is-ci "^1.0.10" 772 | normalize-path "^1.0.0" 773 | strip-indent "^2.0.0" 774 | 775 | ice-cap@0.0.4: 776 | version "0.0.4" 777 | resolved "https://registry.npmjs.org/ice-cap/-/ice-cap-0.0.4.tgz#8a6d31ab4cac8d4b56de4fa946df3352561b6e18" 778 | dependencies: 779 | cheerio "0.20.0" 780 | color-logger "0.0.3" 781 | 782 | imurmurhash@^0.1.4: 783 | version "0.1.4" 784 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 785 | 786 | indexof@0.0.1: 787 | version "0.0.1" 788 | resolved "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" 789 | 790 | inflight@^1.0.4: 791 | version "1.0.6" 792 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 793 | dependencies: 794 | once "^1.3.0" 795 | wrappy "1" 796 | 797 | inherits@2, inherits@^2.0.1, inherits@~2.0.1, inherits@~2.0.3: 798 | version "2.0.3" 799 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 800 | 801 | ini@~1.3.0: 802 | version "1.3.4" 803 | resolved "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 804 | 805 | invariant@^2.2.0: 806 | version "2.2.2" 807 | resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" 808 | dependencies: 809 | loose-envify "^1.0.0" 810 | 811 | is-callable@^1.1.1, is-callable@^1.1.3: 812 | version "1.1.3" 813 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" 814 | 815 | is-ci@^1.0.10: 816 | version "1.0.10" 817 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" 818 | dependencies: 819 | ci-info "^1.0.0" 820 | 821 | is-date-object@^1.0.1: 822 | version "1.0.1" 823 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 824 | 825 | is-finite@^1.0.0: 826 | version "1.0.2" 827 | resolved "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 828 | dependencies: 829 | number-is-nan "^1.0.0" 830 | 831 | is-fullwidth-code-point@^1.0.0: 832 | version "1.0.0" 833 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 834 | dependencies: 835 | number-is-nan "^1.0.0" 836 | 837 | is-fullwidth-code-point@^2.0.0: 838 | version "2.0.0" 839 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 840 | 841 | is-function@~1.0.0: 842 | version "1.0.1" 843 | resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" 844 | 845 | is-npm@^1.0.0: 846 | version "1.0.0" 847 | resolved "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" 848 | 849 | is-obj@^1.0.0: 850 | version "1.0.1" 851 | resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 852 | 853 | is-redirect@^1.0.0: 854 | version "1.0.0" 855 | resolved "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" 856 | 857 | is-regex@^1.0.4: 858 | version "1.0.4" 859 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 860 | dependencies: 861 | has "^1.0.1" 862 | 863 | is-retry-allowed@^1.0.0: 864 | version "1.1.0" 865 | resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" 866 | 867 | is-stream@^1.0.0, is-stream@^1.1.0: 868 | version "1.1.0" 869 | resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 870 | 871 | is-symbol@^1.0.1: 872 | version "1.0.1" 873 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" 874 | 875 | is-typedarray@~1.0.0: 876 | version "1.0.0" 877 | resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 878 | 879 | isarray@0.0.1: 880 | version "0.0.1" 881 | resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 882 | 883 | isarray@~1.0.0: 884 | version "1.0.0" 885 | resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 886 | 887 | isexe@^2.0.0: 888 | version "2.0.0" 889 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 890 | 891 | isstream@~0.1.2: 892 | version "0.1.2" 893 | resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 894 | 895 | jodid25519@^1.0.0: 896 | version "1.0.2" 897 | resolved "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" 898 | dependencies: 899 | jsbn "~0.1.0" 900 | 901 | js-tokens@^3.0.0: 902 | version "3.0.1" 903 | resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" 904 | 905 | jsbn@~0.1.0: 906 | version "0.1.1" 907 | resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 908 | 909 | jsdom@^7.0.2: 910 | version "7.2.2" 911 | resolved "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz#40b402770c2bda23469096bee91ab675e3b1fc6e" 912 | dependencies: 913 | abab "^1.0.0" 914 | acorn "^2.4.0" 915 | acorn-globals "^1.0.4" 916 | cssom ">= 0.3.0 < 0.4.0" 917 | cssstyle ">= 0.2.29 < 0.3.0" 918 | escodegen "^1.6.1" 919 | nwmatcher ">= 1.3.7 < 2.0.0" 920 | parse5 "^1.5.1" 921 | request "^2.55.0" 922 | sax "^1.1.4" 923 | symbol-tree ">= 3.1.0 < 4.0.0" 924 | tough-cookie "^2.2.0" 925 | webidl-conversions "^2.0.0" 926 | whatwg-url-compat "~0.6.5" 927 | xml-name-validator ">= 2.0.1 < 3.0.0" 928 | 929 | json-schema@0.2.3: 930 | version "0.2.3" 931 | resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 932 | 933 | json-stable-stringify@^1.0.1: 934 | version "1.0.1" 935 | resolved "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 936 | dependencies: 937 | jsonify "~0.0.0" 938 | 939 | json-stringify-safe@~5.0.1: 940 | version "5.0.1" 941 | resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 942 | 943 | jsonfile@^2.1.0: 944 | version "2.4.0" 945 | resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" 946 | optionalDependencies: 947 | graceful-fs "^4.1.6" 948 | 949 | jsonify@~0.0.0: 950 | version "0.0.0" 951 | resolved "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 952 | 953 | jsprim@^1.2.2: 954 | version "1.4.0" 955 | resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" 956 | dependencies: 957 | assert-plus "1.0.0" 958 | extsprintf "1.0.2" 959 | json-schema "0.2.3" 960 | verror "1.3.6" 961 | 962 | klaw@^1.0.0: 963 | version "1.3.1" 964 | resolved "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" 965 | optionalDependencies: 966 | graceful-fs "^4.1.9" 967 | 968 | latest-version@^3.0.0: 969 | version "3.0.0" 970 | resolved "https://registry.npmjs.org/latest-version/-/latest-version-3.0.0.tgz#3104f008c0c391084107f85a344bc61e38970649" 971 | dependencies: 972 | package-json "^3.0.0" 973 | 974 | lazy-req@^2.0.0: 975 | version "2.0.0" 976 | resolved "https://registry.npmjs.org/lazy-req/-/lazy-req-2.0.0.tgz#c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4" 977 | 978 | levn@~0.3.0: 979 | version "0.3.0" 980 | resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 981 | dependencies: 982 | prelude-ls "~1.1.2" 983 | type-check "~0.3.2" 984 | 985 | lodash.assignin@^4.0.9: 986 | version "4.2.0" 987 | resolved "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" 988 | 989 | lodash.bind@^4.1.4: 990 | version "4.2.1" 991 | resolved "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" 992 | 993 | lodash.defaults@^4.0.1: 994 | version "4.2.0" 995 | resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" 996 | 997 | lodash.filter@^4.4.0: 998 | version "4.6.0" 999 | resolved "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" 1000 | 1001 | lodash.flatten@^4.2.0: 1002 | version "4.4.0" 1003 | resolved "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" 1004 | 1005 | lodash.foreach@^4.3.0: 1006 | version "4.5.0" 1007 | resolved "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" 1008 | 1009 | lodash.map@^4.4.0: 1010 | version "4.6.0" 1011 | resolved "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" 1012 | 1013 | lodash.merge@^4.4.0: 1014 | version "4.6.0" 1015 | resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" 1016 | 1017 | lodash.pick@^4.2.1: 1018 | version "4.4.0" 1019 | resolved "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" 1020 | 1021 | lodash.reduce@^4.4.0: 1022 | version "4.6.0" 1023 | resolved "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" 1024 | 1025 | lodash.reject@^4.4.0: 1026 | version "4.6.0" 1027 | resolved "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" 1028 | 1029 | lodash.some@^4.4.0: 1030 | version "4.6.0" 1031 | resolved "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" 1032 | 1033 | lodash@^4.1.0, lodash@^4.2.0: 1034 | version "4.17.4" 1035 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 1036 | 1037 | loose-envify@^1.0.0: 1038 | version "1.3.1" 1039 | resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 1040 | dependencies: 1041 | js-tokens "^3.0.0" 1042 | 1043 | lowercase-keys@^1.0.0: 1044 | version "1.0.0" 1045 | resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" 1046 | 1047 | lru-cache@^4.0.0: 1048 | version "4.0.2" 1049 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" 1050 | dependencies: 1051 | pseudomap "^1.0.1" 1052 | yallist "^2.0.0" 1053 | 1054 | make-error@^1.1.1: 1055 | version "1.3.2" 1056 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.2.tgz#8762ffad2444dd8ff1f7c819629fa28e24fea1c4" 1057 | 1058 | marked@0.3.6: 1059 | version "0.3.6" 1060 | resolved "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" 1061 | 1062 | mime-db@~1.26.0: 1063 | version "1.26.0" 1064 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" 1065 | 1066 | mime-types@^2.1.12, mime-types@~2.1.7: 1067 | version "2.1.14" 1068 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" 1069 | dependencies: 1070 | mime-db "~1.26.0" 1071 | 1072 | "minimatch@2 || 3", minimatch@^3.0.2: 1073 | version "3.0.3" 1074 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 1075 | dependencies: 1076 | brace-expansion "^1.0.0" 1077 | 1078 | minimatch@^3.0.4: 1079 | version "3.0.4" 1080 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1081 | dependencies: 1082 | brace-expansion "^1.1.7" 1083 | 1084 | minimist@0.0.8, minimist@~0.0.1: 1085 | version "0.0.8" 1086 | resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1087 | 1088 | minimist@1.2.0, minimist@^1.1.0, minimist@^1.2.0, minimist@~1.2.0: 1089 | version "1.2.0" 1090 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1091 | 1092 | mkdirp@^0.5.0, mkdirp@^0.5.1: 1093 | version "0.5.1" 1094 | resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1095 | dependencies: 1096 | minimist "0.0.8" 1097 | 1098 | ms@0.7.1: 1099 | version "0.7.1" 1100 | resolved "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" 1101 | 1102 | normalize-path@^1.0.0: 1103 | version "1.0.0" 1104 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" 1105 | 1106 | npm-run-path@^1.0.0: 1107 | version "1.0.0" 1108 | resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" 1109 | dependencies: 1110 | path-key "^1.0.0" 1111 | 1112 | nth-check@~1.0.1: 1113 | version "1.0.1" 1114 | resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" 1115 | dependencies: 1116 | boolbase "~1.0.0" 1117 | 1118 | number-is-nan@^1.0.0: 1119 | version "1.0.1" 1120 | resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1121 | 1122 | "nwmatcher@>= 1.3.7 < 2.0.0": 1123 | version "1.3.9" 1124 | resolved "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" 1125 | 1126 | oauth-sign@~0.8.1: 1127 | version "0.8.2" 1128 | resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 1129 | 1130 | object-assign@^4.0.1: 1131 | version "4.1.1" 1132 | resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1133 | 1134 | object-inspect@~1.3.0: 1135 | version "1.3.0" 1136 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.3.0.tgz#5b1eb8e6742e2ee83342a637034d844928ba2f6d" 1137 | 1138 | object-keys@^1.0.8: 1139 | version "1.0.11" 1140 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" 1141 | 1142 | once@^1.3.0: 1143 | version "1.4.0" 1144 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1145 | dependencies: 1146 | wrappy "1" 1147 | 1148 | optimist@~0.6.0: 1149 | version "0.6.1" 1150 | resolved "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 1151 | dependencies: 1152 | minimist "~0.0.1" 1153 | wordwrap "~0.0.2" 1154 | 1155 | optionator@^0.8.1: 1156 | version "0.8.2" 1157 | resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 1158 | dependencies: 1159 | deep-is "~0.1.3" 1160 | fast-levenshtein "~2.0.4" 1161 | levn "~0.3.0" 1162 | prelude-ls "~1.1.2" 1163 | type-check "~0.3.2" 1164 | wordwrap "~1.0.0" 1165 | 1166 | package-json@^3.0.0: 1167 | version "3.1.0" 1168 | resolved "https://registry.npmjs.org/package-json/-/package-json-3.1.0.tgz#ce281900fe8052150cc6709c6c006c18fdb2f379" 1169 | dependencies: 1170 | got "^6.7.1" 1171 | registry-auth-token "^3.0.1" 1172 | registry-url "^3.0.3" 1173 | semver "^5.1.0" 1174 | 1175 | parse-passwd@^1.0.0: 1176 | version "1.0.0" 1177 | resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" 1178 | 1179 | parse5@^1.5.1: 1180 | version "1.5.1" 1181 | resolved "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" 1182 | 1183 | path-is-absolute@^1.0.0: 1184 | version "1.0.1" 1185 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1186 | 1187 | path-key@^1.0.0: 1188 | version "1.0.0" 1189 | resolved "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af" 1190 | 1191 | path-parse@^1.0.5: 1192 | version "1.0.5" 1193 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 1194 | 1195 | performance-now@^0.2.0: 1196 | version "0.2.0" 1197 | resolved "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" 1198 | 1199 | prelude-ls@~1.1.2: 1200 | version "1.1.2" 1201 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1202 | 1203 | prepend-http@^1.0.1: 1204 | version "1.0.4" 1205 | resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 1206 | 1207 | prettier@^1.10.2: 1208 | version "1.10.2" 1209 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.10.2.tgz#1af8356d1842276a99a5b5529c82dd9e9ad3cc93" 1210 | 1211 | process-nextick-args@~1.0.6: 1212 | version "1.0.7" 1213 | resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1214 | 1215 | pseudomap@^1.0.1: 1216 | version "1.0.2" 1217 | resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1218 | 1219 | punycode@^1.4.1: 1220 | version "1.4.1" 1221 | resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1222 | 1223 | qs@~6.4.0: 1224 | version "6.4.0" 1225 | resolved "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" 1226 | 1227 | rc@^1.0.1, rc@^1.1.6: 1228 | version "1.1.7" 1229 | resolved "https://registry.npmjs.org/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" 1230 | dependencies: 1231 | deep-extend "~0.4.0" 1232 | ini "~1.3.0" 1233 | minimist "^1.2.0" 1234 | strip-json-comments "~2.0.1" 1235 | 1236 | readable-stream@1.1: 1237 | version "1.1.13" 1238 | resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" 1239 | dependencies: 1240 | core-util-is "~1.0.0" 1241 | inherits "~2.0.1" 1242 | isarray "0.0.1" 1243 | string_decoder "~0.10.x" 1244 | 1245 | readable-stream@^2.0.2: 1246 | version "2.2.6" 1247 | resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816" 1248 | dependencies: 1249 | buffer-shims "^1.0.0" 1250 | core-util-is "~1.0.0" 1251 | inherits "~2.0.1" 1252 | isarray "~1.0.0" 1253 | process-nextick-args "~1.0.6" 1254 | string_decoder "~0.10.x" 1255 | util-deprecate "~1.0.1" 1256 | 1257 | regenerator-runtime@^0.10.0: 1258 | version "0.10.3" 1259 | resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" 1260 | 1261 | registry-auth-token@^3.0.1: 1262 | version "3.1.0" 1263 | resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b" 1264 | dependencies: 1265 | rc "^1.1.6" 1266 | 1267 | registry-url@^3.0.3: 1268 | version "3.1.0" 1269 | resolved "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" 1270 | dependencies: 1271 | rc "^1.0.1" 1272 | 1273 | repeating@^1.1.0: 1274 | version "1.1.3" 1275 | resolved "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" 1276 | dependencies: 1277 | is-finite "^1.0.0" 1278 | 1279 | request@^2.55.0: 1280 | version "2.81.0" 1281 | resolved "https://registry.npmjs.org/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" 1282 | dependencies: 1283 | aws-sign2 "~0.6.0" 1284 | aws4 "^1.2.1" 1285 | caseless "~0.12.0" 1286 | combined-stream "~1.0.5" 1287 | extend "~3.0.0" 1288 | forever-agent "~0.6.1" 1289 | form-data "~2.1.1" 1290 | har-validator "~4.2.1" 1291 | hawk "~3.1.3" 1292 | http-signature "~1.1.0" 1293 | is-typedarray "~1.0.0" 1294 | isstream "~0.1.2" 1295 | json-stringify-safe "~5.0.1" 1296 | mime-types "~2.1.7" 1297 | oauth-sign "~0.8.1" 1298 | performance-now "^0.2.0" 1299 | qs "~6.4.0" 1300 | safe-buffer "^5.0.1" 1301 | stringstream "~0.0.4" 1302 | tough-cookie "~2.3.0" 1303 | tunnel-agent "^0.6.0" 1304 | uuid "^3.0.0" 1305 | 1306 | resolve@^1.1.7: 1307 | version "1.1.7" 1308 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 1309 | 1310 | resolve@~1.4.0: 1311 | version "1.4.0" 1312 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" 1313 | dependencies: 1314 | path-parse "^1.0.5" 1315 | 1316 | resumer@~0.0.0: 1317 | version "0.0.0" 1318 | resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" 1319 | dependencies: 1320 | through "~2.3.4" 1321 | 1322 | safe-buffer@^5.0.1: 1323 | version "5.0.1" 1324 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" 1325 | 1326 | sax@^1.1.4: 1327 | version "1.2.2" 1328 | resolved "https://registry.npmjs.org/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" 1329 | 1330 | semver-diff@^2.0.0: 1331 | version "2.1.0" 1332 | resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" 1333 | dependencies: 1334 | semver "^5.0.3" 1335 | 1336 | semver@^5.0.3, semver@^5.1.0: 1337 | version "5.3.0" 1338 | resolved "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 1339 | 1340 | slide@^1.1.5: 1341 | version "1.1.6" 1342 | resolved "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" 1343 | 1344 | sntp@1.x.x: 1345 | version "1.0.9" 1346 | resolved "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 1347 | dependencies: 1348 | hoek "2.x.x" 1349 | 1350 | source-map-support@^0.4.0: 1351 | version "0.4.18" 1352 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" 1353 | dependencies: 1354 | source-map "^0.5.6" 1355 | 1356 | source-map@^0.5.0, source-map@^0.5.6: 1357 | version "0.5.6" 1358 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 1359 | 1360 | source-map@~0.2.0: 1361 | version "0.2.0" 1362 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" 1363 | dependencies: 1364 | amdefine ">=0.0.4" 1365 | 1366 | sshpk@^1.7.0: 1367 | version "1.11.0" 1368 | resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77" 1369 | dependencies: 1370 | asn1 "~0.2.3" 1371 | assert-plus "^1.0.0" 1372 | dashdash "^1.12.0" 1373 | getpass "^0.1.1" 1374 | optionalDependencies: 1375 | bcrypt-pbkdf "^1.0.0" 1376 | ecc-jsbn "~0.1.1" 1377 | jodid25519 "^1.0.0" 1378 | jsbn "~0.1.0" 1379 | tweetnacl "~0.14.0" 1380 | 1381 | string-width@^1.0.1: 1382 | version "1.0.2" 1383 | resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1384 | dependencies: 1385 | code-point-at "^1.0.0" 1386 | is-fullwidth-code-point "^1.0.0" 1387 | strip-ansi "^3.0.0" 1388 | 1389 | string-width@^2.0.0: 1390 | version "2.0.0" 1391 | resolved "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" 1392 | dependencies: 1393 | is-fullwidth-code-point "^2.0.0" 1394 | strip-ansi "^3.0.0" 1395 | 1396 | string.prototype.trim@~1.1.2: 1397 | version "1.1.2" 1398 | resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" 1399 | dependencies: 1400 | define-properties "^1.1.2" 1401 | es-abstract "^1.5.0" 1402 | function-bind "^1.0.2" 1403 | 1404 | string_decoder@~0.10.x: 1405 | version "0.10.31" 1406 | resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1407 | 1408 | stringstream@~0.0.4: 1409 | version "0.0.5" 1410 | resolved "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 1411 | 1412 | strip-ansi@^3.0.0: 1413 | version "3.0.1" 1414 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1415 | dependencies: 1416 | ansi-regex "^2.0.0" 1417 | 1418 | strip-bom@^3.0.0: 1419 | version "3.0.0" 1420 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1421 | 1422 | strip-eof@^1.0.0: 1423 | version "1.0.0" 1424 | resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 1425 | 1426 | strip-indent@^2.0.0: 1427 | version "2.0.0" 1428 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" 1429 | 1430 | strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: 1431 | version "2.0.1" 1432 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1433 | 1434 | supports-color@^2.0.0: 1435 | version "2.0.0" 1436 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1437 | 1438 | supports-color@^4.0.0: 1439 | version "4.5.0" 1440 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" 1441 | dependencies: 1442 | has-flag "^2.0.0" 1443 | 1444 | "symbol-tree@>= 3.1.0 < 4.0.0": 1445 | version "3.2.2" 1446 | resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" 1447 | 1448 | taffydb@2.7.2: 1449 | version "2.7.2" 1450 | resolved "https://registry.npmjs.org/taffydb/-/taffydb-2.7.2.tgz#7bf8106a5c1a48251b3e3bc0a0e1732489fd0dc8" 1451 | 1452 | tape@^4.7.0: 1453 | version "4.8.0" 1454 | resolved "https://registry.yarnpkg.com/tape/-/tape-4.8.0.tgz#f6a9fec41cc50a1de50fa33603ab580991f6068e" 1455 | dependencies: 1456 | deep-equal "~1.0.1" 1457 | defined "~1.0.0" 1458 | for-each "~0.3.2" 1459 | function-bind "~1.1.0" 1460 | glob "~7.1.2" 1461 | has "~1.0.1" 1462 | inherits "~2.0.3" 1463 | minimist "~1.2.0" 1464 | object-inspect "~1.3.0" 1465 | resolve "~1.4.0" 1466 | resumer "~0.0.0" 1467 | string.prototype.trim "~1.1.2" 1468 | through "~2.3.8" 1469 | 1470 | term-size@^0.1.0: 1471 | version "0.1.1" 1472 | resolved "https://registry.npmjs.org/term-size/-/term-size-0.1.1.tgz#87360b96396cab5760963714cda0d0cbeecad9ca" 1473 | dependencies: 1474 | execa "^0.4.0" 1475 | 1476 | through@~2.3.4, through@~2.3.8: 1477 | version "2.3.8" 1478 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1479 | 1480 | timed-out@^4.0.0: 1481 | version "4.0.1" 1482 | resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" 1483 | 1484 | to-fast-properties@^1.0.1: 1485 | version "1.0.2" 1486 | resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" 1487 | 1488 | tough-cookie@^2.2.0, tough-cookie@~2.3.0: 1489 | version "2.3.2" 1490 | resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" 1491 | dependencies: 1492 | punycode "^1.4.1" 1493 | 1494 | tr46@~0.0.1: 1495 | version "0.0.3" 1496 | resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 1497 | 1498 | ts-node@^3.2.1: 1499 | version "3.3.0" 1500 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-3.3.0.tgz#c13c6a3024e30be1180dd53038fc209289d4bf69" 1501 | dependencies: 1502 | arrify "^1.0.0" 1503 | chalk "^2.0.0" 1504 | diff "^3.1.0" 1505 | make-error "^1.1.1" 1506 | minimist "^1.2.0" 1507 | mkdirp "^0.5.1" 1508 | source-map-support "^0.4.0" 1509 | tsconfig "^6.0.0" 1510 | v8flags "^3.0.0" 1511 | yn "^2.0.0" 1512 | 1513 | tsconfig@^6.0.0: 1514 | version "6.0.0" 1515 | resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-6.0.0.tgz#6b0e8376003d7af1864f8df8f89dd0059ffcd032" 1516 | dependencies: 1517 | strip-bom "^3.0.0" 1518 | strip-json-comments "^2.0.0" 1519 | 1520 | tslint@^4.5.1: 1521 | version "4.5.1" 1522 | resolved "https://registry.npmjs.org/tslint/-/tslint-4.5.1.tgz#05356871bef23a434906734006fc188336ba824b" 1523 | dependencies: 1524 | babel-code-frame "^6.20.0" 1525 | colors "^1.1.2" 1526 | diff "^3.0.1" 1527 | findup-sync "~0.3.0" 1528 | glob "^7.1.1" 1529 | optimist "~0.6.0" 1530 | resolve "^1.1.7" 1531 | tsutils "^1.1.0" 1532 | update-notifier "^2.0.0" 1533 | 1534 | tsutils@^1.1.0: 1535 | version "1.4.0" 1536 | resolved "https://registry.npmjs.org/tsutils/-/tsutils-1.4.0.tgz#84f8a83df9967d35bf1ff3aa48c7339593d64e19" 1537 | 1538 | tunnel-agent@^0.6.0: 1539 | version "0.6.0" 1540 | resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1541 | dependencies: 1542 | safe-buffer "^5.0.1" 1543 | 1544 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1545 | version "0.14.5" 1546 | resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1547 | 1548 | type-check@~0.3.2: 1549 | version "0.3.2" 1550 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1551 | dependencies: 1552 | prelude-ls "~1.1.2" 1553 | 1554 | typescript@^3.7.2: 1555 | version "3.7.3" 1556 | resolved "https://registry.npmjs.org/typescript/-/typescript-3.7.3.tgz#b36840668a16458a7025b9eabfad11b66ab85c69" 1557 | integrity sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw== 1558 | 1559 | unique-string@^1.0.0: 1560 | version "1.0.0" 1561 | resolved "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" 1562 | dependencies: 1563 | crypto-random-string "^1.0.0" 1564 | 1565 | unzip-response@^2.0.1: 1566 | version "2.0.1" 1567 | resolved "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" 1568 | 1569 | update-notifier@^2.0.0: 1570 | version "2.1.0" 1571 | resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-2.1.0.tgz#ec0c1e53536b76647a24b77cb83966d9315123d9" 1572 | dependencies: 1573 | boxen "^1.0.0" 1574 | chalk "^1.0.0" 1575 | configstore "^3.0.0" 1576 | is-npm "^1.0.0" 1577 | latest-version "^3.0.0" 1578 | lazy-req "^2.0.0" 1579 | semver-diff "^2.0.0" 1580 | xdg-basedir "^3.0.0" 1581 | 1582 | url-parse-lax@^1.0.0: 1583 | version "1.0.0" 1584 | resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" 1585 | dependencies: 1586 | prepend-http "^1.0.1" 1587 | 1588 | util-deprecate@~1.0.1: 1589 | version "1.0.2" 1590 | resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1591 | 1592 | uuid@^3.0.0: 1593 | version "3.0.1" 1594 | resolved "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" 1595 | 1596 | v8flags@^3.0.0: 1597 | version "3.0.1" 1598 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.0.1.tgz#dce8fc379c17d9f2c9e9ed78d89ce00052b1b76b" 1599 | dependencies: 1600 | homedir-polyfill "^1.0.1" 1601 | 1602 | verror@1.3.6: 1603 | version "1.3.6" 1604 | resolved "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" 1605 | dependencies: 1606 | extsprintf "1.0.2" 1607 | 1608 | webidl-conversions@^2.0.0: 1609 | version "2.0.1" 1610 | resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-2.0.1.tgz#3bf8258f7d318c7443c36f2e169402a1a6703506" 1611 | 1612 | whatwg-url-compat@~0.6.5: 1613 | version "0.6.5" 1614 | resolved "https://registry.npmjs.org/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz#00898111af689bb097541cd5a45ca6c8798445bf" 1615 | dependencies: 1616 | tr46 "~0.0.1" 1617 | 1618 | which@^1.2.8: 1619 | version "1.2.14" 1620 | resolved "https://registry.npmjs.org/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" 1621 | dependencies: 1622 | isexe "^2.0.0" 1623 | 1624 | widest-line@^1.0.0: 1625 | version "1.0.0" 1626 | resolved "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" 1627 | dependencies: 1628 | string-width "^1.0.1" 1629 | 1630 | wordwrap@~0.0.2: 1631 | version "0.0.3" 1632 | resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 1633 | 1634 | wordwrap@~1.0.0: 1635 | version "1.0.0" 1636 | resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 1637 | 1638 | wrappy@1: 1639 | version "1.0.2" 1640 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1641 | 1642 | write-file-atomic@^1.1.2: 1643 | version "1.3.1" 1644 | resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a" 1645 | dependencies: 1646 | graceful-fs "^4.1.11" 1647 | imurmurhash "^0.1.4" 1648 | slide "^1.1.5" 1649 | 1650 | xdg-basedir@^3.0.0: 1651 | version "3.0.0" 1652 | resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" 1653 | 1654 | "xml-name-validator@>= 2.0.1 < 3.0.0": 1655 | version "2.0.1" 1656 | resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" 1657 | 1658 | yallist@^2.0.0: 1659 | version "2.1.2" 1660 | resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 1661 | 1662 | yn@^2.0.0: 1663 | version "2.0.0" 1664 | resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" 1665 | --------------------------------------------------------------------------------