├── .gitignore ├── src ├── index.ts ├── utils.ts ├── decompress.ts └── compress.ts ├── dist ├── index.js ├── index.js.map ├── decompress.d.ts.map ├── decompress.d.ts ├── compress.d.ts.map ├── compress.d.ts ├── utils.d.ts.map ├── utils.js ├── utils.js.map ├── utils.d.ts ├── decompress.js ├── decompress.js.map ├── compress.js └── compress.js.map ├── .eslintrc.js ├── package.json ├── README.md ├── json ├── small.json ├── node.ts └── cognitect.json ├── bench └── bench.ts ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | *.log 4 | .vscode 5 | .idea 6 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export {default as compress} from './compress' 2 | export {default as decompress} from './decompress' 3 | -------------------------------------------------------------------------------- /dist/index.js: -------------------------------------------------------------------------------- 1 | export { default as compress } from './compress'; 2 | export { default as decompress } from './decompress'; 3 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /dist/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAC,OAAO,IAAI,UAAU,EAAC,MAAM,cAAc,CAAA"} -------------------------------------------------------------------------------- /dist/decompress.d.ts.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"decompress.d.ts","sourceRoot":"","sources":["../src/decompress.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,SAAS,EAAC,MAAM,SAAS,CAAC;AAEhE,UAAU,OAAO;IACf,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;CACzB;;AAqCD,wBAYC"} -------------------------------------------------------------------------------- /dist/decompress.d.ts: -------------------------------------------------------------------------------- 1 | import {Transform} from './utils' 2 | interface Options { 3 | transforms?: Transform[] 4 | } 5 | declare const _default: (refTable: any[], options?: Options) => any 6 | export default _default 7 | //# sourceMappingURL=decompress.d.ts.map 8 | -------------------------------------------------------------------------------- /dist/compress.d.ts.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,SAAS,EAAC,MAAM,SAAS,CAAC;AAyBhE,UAAU,OAAO;IACf,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;IACxB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;;AAoHD,wBAgBC"} -------------------------------------------------------------------------------- /dist/compress.d.ts: -------------------------------------------------------------------------------- 1 | import {Transform} from './utils' 2 | interface Options { 3 | transforms?: Transform[] 4 | strings?: boolean 5 | numbers?: boolean 6 | } 7 | declare const _default: (json: any, options?: Options) => any 8 | export default _default 9 | //# sourceMappingURL=compress.d.ts.map 10 | -------------------------------------------------------------------------------- /dist/utils.d.ts.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,oBAAY,GAAG,GAAG,MAAM,GAAG,MAAM,CAAA;AACjC,oBAAY,UAAU,GAAG,GAAG,EAAE,CAAA;AAE9B,UAAU,gBAAgB;IACxB,MAAM,EAAE,GAAG,CAAC;IACZ,GAAG,EAAE,GAAG,GAAG,SAAS,CAAC;IACrB,UAAU,EAAE,UAAU,CAAA;CACvB;AAED,oBAAY,SAAS,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,KAAK,SAAS,GAAG;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAA;AAEnH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAEpE;AAED,eAAO,MAAM,aAAa;;;CAUzB,CAAA"} -------------------------------------------------------------------------------- /dist/utils.js: -------------------------------------------------------------------------------- 1 | export function isObject(value) { 2 | return typeof value === 'object' && value !== null; 3 | } 4 | export const runTransforms = (data, transforms, parent, key) => { 5 | let ignoreKeys = []; 6 | for (let i = 0; i < transforms.length; i++) { 7 | const res = transforms[i](data, { parent, key, ignoreKeys }); 8 | if (res) { 9 | data = res.data; 10 | ignoreKeys = res.ignoreKeys || []; 11 | } 12 | } 13 | return { transformedData: data, ignoreKeys }; 14 | }; 15 | //# sourceMappingURL=utils.js.map -------------------------------------------------------------------------------- /dist/utils.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,QAAQ,CAAC,KAAU;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAA;AACpD,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAS,EAAE,UAAuB,EAAE,MAA0B,EAAE,GAAoB,EAAE,EAAE;IACpH,IAAI,UAAU,GAAU,EAAE,CAAA;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAC,CAAC,CAAA;QAC1D,IAAI,GAAG,EAAE;YACP,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;YACf,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAA;SAClC;KACF;IACD,OAAO,EAAC,eAAe,EAAE,IAAI,EAAE,UAAU,EAAC,CAAA;AAC5C,CAAC,CAAA"} -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: '@typescript-eslint/parser', 3 | plugins: ['@typescript-eslint'], 4 | extends: [ 5 | 'plugin:@typescript-eslint/recommended', 6 | 'plugin:prettier/recommended', 7 | 'prettier/@typescript-eslint', 8 | ], 9 | parserOptions: { 10 | project: './tsconfig.json', 11 | ecmaVersion: 2018, 12 | sourceType: 'module', 13 | }, 14 | rules: { 15 | "@typescript-eslint/explicit-function-return-type": "off", 16 | "@typescript-eslint/no-explicit-any": "off", 17 | "@typescript-eslint/no-non-null-assertion": "off", 18 | "@typescript-eslint/no-object-literal-type-assertion": "off", 19 | "@typescript-eslint/no-use-before-define": "off", 20 | }, 21 | } 22 | -------------------------------------------------------------------------------- /dist/utils.d.ts: -------------------------------------------------------------------------------- 1 | export declare type Key = string | number 2 | export declare type IgnoreKeys = Key[] 3 | interface TransformContext { 4 | parent: any 5 | key: Key | undefined 6 | ignoreKeys: IgnoreKeys 7 | } 8 | export declare type Transform = ( 9 | data: any, 10 | context: TransformContext, 11 | ) => 12 | | undefined 13 | | { 14 | data: any 15 | ignoreKeys: IgnoreKeys 16 | } 17 | export declare function isObject( 18 | value: any, 19 | ): value is { 20 | [key: string]: any 21 | } 22 | export declare const runTransforms: ( 23 | data: any, 24 | transforms: Transform[], 25 | parent: object | undefined, 26 | key: string | number | undefined, 27 | ) => { 28 | transformedData: any 29 | ignoreKeys: (string | number)[] 30 | } 31 | export {} 32 | //# sourceMappingURL=utils.d.ts.map 33 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | export type Key = string | number 2 | export type IgnoreKeys = Key[] 3 | 4 | interface TransformContext { 5 | parent: any 6 | key: Key | undefined 7 | ignoreKeys: IgnoreKeys 8 | } 9 | 10 | export type Transform = ( 11 | data: any, 12 | context: TransformContext, 13 | ) => undefined | {data: any; ignoreKeys: IgnoreKeys} 14 | 15 | export function isObject(value: any): value is {[key: string]: any} { 16 | return typeof value === 'object' && value !== null 17 | } 18 | 19 | export const runTransforms = ( 20 | data: any, 21 | transforms: Transform[], 22 | parent: object | undefined, 23 | key: Key | undefined, 24 | ) => { 25 | let ignoreKeys: Key[] = [] 26 | for (let i = 0; i < transforms.length; i++) { 27 | const res = transforms[i](data, { 28 | parent, 29 | key, 30 | ignoreKeys, 31 | }) 32 | if (res) { 33 | data = res.data 34 | ignoreKeys = res.ignoreKeys || [] 35 | } 36 | } 37 | return { 38 | transformedData: data, 39 | ignoreKeys, 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@mattkrick/json-deduper", 3 | "description": "Compress JSON trees by deduplicating nested objects, strings, and numbers", 4 | "author": "Matt Krick ", 5 | "license": "MIT", 6 | "version": "0.0.1", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/mattkrick/json-deduper" 10 | }, 11 | "keywords": [ 12 | "json", 13 | "duplicate", 14 | "dedupe", 15 | "graphql" 16 | ], 17 | "homepage": "https://github.com/mattkrick/json-deduper", 18 | "bugs": { 19 | "url": "https://github.com/mattkrick/json-deduper/issues" 20 | }, 21 | "main": "./dist/index.js", 22 | "scripts": { 23 | "lint": "eslint --fix {src,bench}/**/*.{ts,tsx}", 24 | "precommit": "lint-staged && tsc" 25 | }, 26 | "devDependencies": { 27 | "@types/node": "^12.0.10", 28 | "@typescript-eslint/eslint-plugin": "^1.11.0", 29 | "@typescript-eslint/parser": "^1.11.0", 30 | "eslint": "^6.0.1", 31 | "eslint-config-prettier": "^6.0.0", 32 | "eslint-plugin-prettier": "^3.1.0", 33 | "graphql-crunch": "^2.1.0", 34 | "husky": "^3.0.0", 35 | "lint-staged": "^9.2.0", 36 | "msgpack-lite": "^0.1.26", 37 | "prettier": "^1.18.2", 38 | "ts-node": "^8.3.0", 39 | "typescript": "^3.5.2", 40 | "zlib": "^1.0.5" 41 | }, 42 | "peerDependencies": { 43 | "tslib": "^1.10.0" 44 | }, 45 | "lint-staged": { 46 | "*.{ts,tsx}": [ 47 | "eslint --fix", 48 | "git add" 49 | ] 50 | }, 51 | "prettier": { 52 | "arrowParens": "always", 53 | "bracketSpacing": false, 54 | "printWidth": 100, 55 | "singleQuote": true, 56 | "semi": false, 57 | "trailingComma": "all" 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /dist/decompress.js: -------------------------------------------------------------------------------- 1 | import { isObject, runTransforms } from "./utils"; 2 | const getValue = (val, parent, idx, context) => { 3 | const { refTable } = context; 4 | if (isObject(val)) { 5 | const { transformedData } = runTransforms(val, context.transforms, parent, idx); 6 | decompress(transformedData, context); 7 | return transformedData; 8 | } 9 | if (Number.isInteger(val) && val >= 0) { 10 | // numbers that are positive & even are refs, positive and odd are numbers normalized to be odd via 2k + 1 11 | return val % 2 === 0 ? refTable[val / 2] : (val - 1) / 2; 12 | } 13 | return val; 14 | }; 15 | const decompress = (fragment, context) => { 16 | if (Array.isArray(fragment)) { 17 | for (let i = 0; i < fragment.length; i++) { 18 | const val = fragment[i]; 19 | fragment[i] = getValue(val, fragment, i, context); 20 | } 21 | } 22 | else { 23 | const keys = Object.keys(fragment); 24 | for (let i = 0; i < keys.length; i++) { 25 | const key = keys[i]; 26 | const val = fragment[key]; 27 | fragment[key] = getValue(val, fragment, key, context); 28 | } 29 | } 30 | }; 31 | export default (refTable, options = {}) => { 32 | if (!Array.isArray(refTable)) 33 | return refTable; 34 | const context = { 35 | transforms: options.transforms || [], 36 | refTable 37 | }; 38 | for (let i = 0; i < refTable.length; i++) { 39 | const fragment = refTable[i]; 40 | if (!isObject(fragment)) 41 | break; 42 | decompress(fragment, context); 43 | } 44 | return refTable[0]; 45 | }; 46 | //# sourceMappingURL=decompress.js.map -------------------------------------------------------------------------------- /src/decompress.ts: -------------------------------------------------------------------------------- 1 | import {isObject, Key, runTransforms, Transform} from './utils' 2 | 3 | interface Options { 4 | transforms?: Transform[] 5 | } 6 | 7 | interface DecompressContext { 8 | transforms: Transform[] 9 | refTable: any[] 10 | } 11 | 12 | const getValue = (val: any, parent: any, idx: Key, context: DecompressContext) => { 13 | const {refTable} = context 14 | if (isObject(val)) { 15 | const {transformedData} = runTransforms(val, context.transforms, parent, idx) 16 | decompress(transformedData, context) 17 | return transformedData 18 | } 19 | if (Number.isInteger(val) && val >= 0) { 20 | // numbers that are positive & even are refs, positive and odd are numbers normalized to be odd via 2k + 1 21 | return val % 2 === 0 ? refTable[val / 2] : (val - 1) / 2 22 | } 23 | return val 24 | } 25 | 26 | const decompress = (fragment: any, context: DecompressContext) => { 27 | if (Array.isArray(fragment)) { 28 | for (let i = 0; i < fragment.length; i++) { 29 | const val = fragment[i] 30 | fragment[i] = getValue(val, fragment, i, context) 31 | } 32 | } else { 33 | const keys = Object.keys(fragment) 34 | for (let i = 0; i < keys.length; i++) { 35 | const key = keys[i] 36 | const val = fragment[key] 37 | fragment[key] = getValue(val, fragment, key, context) 38 | } 39 | } 40 | } 41 | 42 | export default (refTable: any[], options: Options = {}) => { 43 | if (!Array.isArray(refTable)) return refTable 44 | const context = { 45 | transforms: options.transforms || [], 46 | refTable, 47 | } 48 | for (let i = 0; i < refTable.length; i++) { 49 | const fragment = refTable[i] 50 | if (!isObject(fragment)) break 51 | decompress(fragment, context) 52 | } 53 | return refTable[0] 54 | } 55 | -------------------------------------------------------------------------------- /dist/decompress.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"decompress.js","sourceRoot":"","sources":["../src/decompress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAO,aAAa,EAAY,MAAM,SAAS,CAAC;AAWhE,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,MAAW,EAAE,GAAQ,EAAE,OAA0B,EAAE,EAAE;IAC/E,MAAM,EAAC,QAAQ,EAAC,GAAG,OAAO,CAAA;IAC1B,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;QACjB,MAAM,EAAC,eAAe,EAAC,GAAG,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;QAC7E,UAAU,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;QACpC,OAAO,eAAe,CAAA;KACvB;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE;QACrC,0GAA0G;QAC1G,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;KACzD;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,QAAa,EAAE,OAA0B,EAAE,EAAE;IAC/D,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;YACvB,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;SAClD;KACF;SAAM;QACL,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACnB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;YACzB,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;SACtD;KACF;AACH,CAAC,CAAA;AAED,eAAe,CAAC,QAAe,EAAE,UAAmB,EAAE,EAAE,EAAE;IACxD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAA;IAC7C,MAAM,OAAO,GAAG;QACd,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;QACpC,QAAQ;KACT,CAAA;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC5B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,MAAK;QAC9B,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;KAC9B;IACD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAA;AACpB,CAAC,CAAA"} -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # json-deduper 2 | 3 | Compress JSON trees by deduplicating nested objects, strings, and numbers 4 | ## Installation 5 | 6 | `yarn add @mattkrick/json-deduper` 7 | 8 | ## Why 9 | 10 | Smaller payloads mean faster websites 11 | 12 | ## High level architecture 13 | 14 | - Traverses JSON payload, extracting every object & replacing it with a reference 15 | - After traversal is complete, it re-inlines unique objects 16 | - Duplicate objects are replace with a positive even number that serves as a pointer 17 | - Any pre-existing positive even numbers are turned to odd numbers during compression, then back during decompression 18 | 19 | ## Gotchas 20 | 21 | - The compressed object must be pure JSON (ie no shared sub-objects). Serializing via sending over a network ensures this. 22 | - Decompression mutates the compressed object for performance reasons. The compressed object is useless anyways, but if that's bad, just clone the object first. 23 | 24 | ## Usage 25 | 26 | See bench/bench.ts for example and benchmarks. 27 | For best results, use this, then msgpack, then gzip or brotli. 28 | 29 | ## API 30 | 31 | ```js 32 | import compress from '@mattkrick/json-deduper/dist/compress' 33 | import decompress from '@mattkrick/json-deduper/dist/decompress' 34 | const compressedNode = compress({foo: {bar: 1}, baz: {bar: 1}}, options) 35 | const decompressedNode = decompress(JSON.parse(JSON.stringify(compressedNode)), options) 36 | ``` 37 | 38 | Options 39 | - strings: boolean, defaults to false. set to true to deduplicate strings (good for raw, not significantly better after gzip) 40 | - numbers: boolean, defaults to false. set to true to deduplicate numbers 41 | - transforms: Advanced! used for extra compression, given a schema. `Array<(object: any, {parent: any, key: string | number}) => any>` 42 | 43 | ## License 44 | 45 | MIT 46 | -------------------------------------------------------------------------------- /json/small.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "allPeople": { 4 | "people": [ 5 | { 6 | "name": "Luke Skywalker", 7 | "gender": "male", 8 | "filmConnection": { 9 | "films": [ 10 | { 11 | "title": "A New Hope", 12 | "characterConnection": { 13 | "characters": [ 14 | { 15 | "name": "Luke Skywalker", 16 | "gender": "male" 17 | }, 18 | { 19 | "name": "C-3PO", 20 | "gender": "n/a" 21 | } 22 | ] 23 | } 24 | }, 25 | { 26 | "title": "The Empire Strikes Back", 27 | "characterConnection": { 28 | "characters": [ 29 | { 30 | "name": "Luke Skywalker", 31 | "gender": "male" 32 | }, 33 | { 34 | "name": "C-3PO", 35 | "gender": "n/a" 36 | } 37 | ] 38 | } 39 | } 40 | ] 41 | } 42 | }, 43 | { 44 | "name": "C-3PO", 45 | "gender": "n/a", 46 | "filmConnection": { 47 | "films": [ 48 | { 49 | "title": "A New Hope", 50 | "characterConnection": { 51 | "characters": [ 52 | { 53 | "name": "Luke Skywalker", 54 | "gender": "male" 55 | }, 56 | { 57 | "name": "C-3PO", 58 | "gender": "n/a" 59 | } 60 | ] 61 | } 62 | }, 63 | { 64 | "title": "The Empire Strikes Back", 65 | "characterConnection": { 66 | "characters": [ 67 | { 68 | "name": "Luke Skywalker", 69 | "gender": "male" 70 | }, 71 | { 72 | "name": "C-3PO", 73 | "gender": "n/a" 74 | } 75 | ] 76 | } 77 | } 78 | ] 79 | } 80 | } 81 | ] 82 | } 83 | } 84 | } -------------------------------------------------------------------------------- /json/node.ts: -------------------------------------------------------------------------------- 1 | export default (function() { 2 | var v0 = [ 3 | { 4 | kind: 'ScalarField', 5 | alias: null, 6 | name: 'votesRemaining', 7 | args: null, 8 | storageKey: null, 9 | }, 10 | ] 11 | return { 12 | kind: 'Fragment', 13 | name: 'VoteForReflectionGroupMutation_team', 14 | type: 'VoteForReflectionGroupPayload', 15 | metadata: null, 16 | argumentDefinitions: [], 17 | selections: [ 18 | { 19 | kind: 'LinkedField', 20 | alias: null, 21 | name: 'error', 22 | storageKey: null, 23 | args: null, 24 | concreteType: 'StandardMutationError', 25 | plural: false, 26 | selections: [ 27 | { 28 | kind: 'ScalarField', 29 | alias: null, 30 | name: 'message', 31 | args: null, 32 | storageKey: null, 33 | }, 34 | { 35 | kind: 'ScalarField', 36 | alias: null, 37 | name: 'title', 38 | args: null, 39 | storageKey: null, 40 | }, 41 | ], 42 | }, 43 | { 44 | kind: 'LinkedField', 45 | alias: null, 46 | name: 'meeting', 47 | storageKey: null, 48 | args: null, 49 | concreteType: 'RetrospectiveMeeting', 50 | plural: false, 51 | selections: v0 /*: any*/, 52 | }, 53 | { 54 | kind: 'LinkedField', 55 | alias: null, 56 | name: 'meetingMember', 57 | storageKey: null, 58 | args: null, 59 | concreteType: 'RetrospectiveMeetingMember', 60 | plural: false, 61 | selections: v0 /*: any*/, 62 | }, 63 | { 64 | kind: 'LinkedField', 65 | alias: null, 66 | name: 'reflectionGroup', 67 | storageKey: null, 68 | args: null, 69 | concreteType: 'RetroReflectionGroup', 70 | plural: false, 71 | selections: [ 72 | { 73 | kind: 'ScalarField', 74 | alias: null, 75 | name: 'viewerVoteCount', 76 | args: null, 77 | storageKey: null, 78 | }, 79 | { 80 | kind: 'ScalarField', 81 | alias: null, 82 | name: 'voteCount', 83 | args: null, 84 | storageKey: null, 85 | }, 86 | ], 87 | }, 88 | { 89 | kind: 'LinkedField', 90 | alias: null, 91 | name: 'unlockedStages', 92 | storageKey: null, 93 | args: null, 94 | concreteType: null, 95 | plural: true, 96 | selections: [ 97 | { 98 | kind: 'ScalarField', 99 | alias: null, 100 | name: 'id', 101 | args: null, 102 | storageKey: null, 103 | }, 104 | { 105 | kind: 'ScalarField', 106 | alias: null, 107 | name: 'isNavigable', 108 | args: null, 109 | storageKey: null, 110 | }, 111 | { 112 | kind: 'ScalarField', 113 | alias: null, 114 | name: 'isNavigableByFacilitator', 115 | args: null, 116 | storageKey: null, 117 | }, 118 | ], 119 | }, 120 | ], 121 | } 122 | })() 123 | -------------------------------------------------------------------------------- /bench/bench.ts: -------------------------------------------------------------------------------- 1 | import {join} from 'path' 2 | import {gzipSync} from 'zlib' 3 | import {crunch, uncrunch} from 'graphql-crunch' 4 | import msgpack from 'msgpack-lite' 5 | import {performance, PerformanceObserver} from 'perf_hooks' 6 | import compress from '../src/compress' 7 | import decompress from '../src/decompress' 8 | 9 | const blobs = { 10 | // From https://gist.githubusercontent.com/stevekrenzel/8553b5cc5462164bc9ac5b2897978405/raw/f07292666eb621a2d29dc8cee0c78a4ddb3bbadd/swapi.json 11 | 'Large SWAPI': join(__dirname, '../json/large.json'), 12 | 13 | // From https://gist.githubusercontent.com/stevekrenzel/88c16d8655d25bed7c1b61f1750eb362/raw/4c4b7806ba51afa479224011f8138ef1346f08f6/swapi.json 14 | 'Small SWAPI': join(__dirname, '../json/small.json'), 15 | 16 | // From https://catalog.data.gov/dataset/2010-census-populations-by-zip-code/resource/74f7a51d-36ae-4a28-9345-d8e07321f2e4 17 | Census: join(__dirname, '../json/census.json'), 18 | 19 | // From https://data.oregon.gov/api/views/i8h7-mn6v/rows.json 20 | Businesses: join(__dirname, '../json/businesses.json'), 21 | 22 | //"Banter Feed": join(__dirname, './json/feed.json'), 23 | } 24 | 25 | const encoders = { 26 | 'Crunch 2.0': { 27 | encode: (data: any) => JSON.stringify(crunch(data, 2)), 28 | decode: (data: any) => uncrunch(JSON.parse(data)), 29 | }, 30 | // 31 | 'json-deduper': { 32 | encode: (data: any) => JSON.stringify(compress(data)), 33 | decode: (data: any) => decompress(JSON.parse(data)), 34 | }, 35 | 'json-deduper w/ strings + numbers + MSGPACK': { 36 | encode: (data: any) => msgpack.encode(compress(data, {strings: true, numbers: true})), 37 | decode: (data: any) => decompress(msgpack.decode(data)), 38 | }, 39 | 40 | 'json-deduper w/ strings + MSGPACK': { 41 | encode: (data: any) => msgpack.encode(compress(data, {strings: true})), 42 | decode: (data: any) => decompress(msgpack.decode(data)), 43 | }, 44 | 45 | 'json-deduper w/ numbers + MSGPACK': { 46 | encode: (data: any) => msgpack.encode(compress(data, {numbers: true})), 47 | decode: (data: any) => decompress(msgpack.decode(data)), 48 | }, 49 | } 50 | 51 | interface BlobResult { 52 | 'Raw (bytes)'?: number 53 | "GZip'd (bytes)"?: number 54 | 'Serialized (ms)'?: number 55 | 'Deserialized (ms)'?: number 56 | } 57 | 58 | interface EncoderResult { 59 | [encoderName: string]: BlobResult 60 | } 61 | 62 | interface Results { 63 | [blobName: string]: EncoderResult 64 | } 65 | 66 | const iterations = 20 67 | const total = Object.keys(blobs).length * Object.keys(encoders).length * 2 68 | let cur = 0 69 | console.log('Running... (this will take a minute)') 70 | const obs = new PerformanceObserver((list) => { 71 | cur++ 72 | const entries = list.getEntries() 73 | entries.forEach((entry) => { 74 | const [blobName, dataName, type] = entry.name.split('-') 75 | const typeLabel = type === 'encode' ? 'Serialized (ms)' : 'Deserialized (ms)' 76 | results[blobName][dataName][typeLabel] = entry.duration / iterations 77 | performance.clearMarks() 78 | }) 79 | if (cur === total) { 80 | for (let blob in blobs) { 81 | const result = results[blob] 82 | console.log(blob) 83 | console.table(result) 84 | } 85 | } 86 | }) 87 | obs.observe({entryTypes: ['measure']}) 88 | const results = {} as Results 89 | for (let blob in blobs) { 90 | const result = (results[blob] = {} as EncoderResult) 91 | // eslint-disable-next-line @typescript-eslint/no-var-requires 92 | const payload = require(blobs[blob as keyof typeof blobs]) 93 | for (let key in encoders) { 94 | const solution = encoders[key as keyof typeof encoders] 95 | const serialized = solution.encode(payload) 96 | const zipped = gzipSync(serialized) 97 | result[key as keyof typeof encoders] = { 98 | 'Raw (bytes)': serialized.length, 99 | "GZip'd (bytes)": zipped.length, 100 | } 101 | 102 | const fns = ['encode', 'decode'] as ['encode', 'decode'] 103 | for (let i = 0; i < fns.length; i++) { 104 | const data = i === 0 ? payload : serialized 105 | const type = fns[i] 106 | const fn = solution[type] 107 | performance.mark('start') 108 | for (let i = 0; i < iterations; i++) { 109 | fn(data) 110 | } 111 | performance.mark('stop') 112 | performance.measure(`${blob}-${key}-${type}`, 'start', 'stop') 113 | } 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /dist/compress.js: -------------------------------------------------------------------------------- 1 | import { isObject, runTransforms } from "./utils"; 2 | const SINGLE_BYTE = [null, undefined, true, false]; 3 | let nextID = 0; 4 | const upsertHash = (flatData, parent, idx, hash, cache) => { 5 | const entry = cache[hash]; 6 | if (entry) { 7 | const { refs, id } = entry; 8 | refs.push({ 9 | parent, idx 10 | }); 11 | return id; 12 | } 13 | const id = nextID += 2; 14 | cache[hash] = { 15 | refs: [{ 16 | parent, idx 17 | }], 18 | id, 19 | value: flatData, 20 | }; 21 | return id; 22 | }; 23 | const handleNumber = (flatData, parent, idx, context) => { 24 | const { dedupeNumbers, numberCache } = context; 25 | return dedupeNumbers ? upsertHash(flatData, parent, idx, String(flatData), numberCache) : Number.isInteger(flatData) && flatData >= 0 ? flatData * 2 + 1 : flatData; 26 | }; 27 | const handleString = (flatData, parent, idx, context) => { 28 | const { dedupeStrings, stringCache } = context; 29 | return dedupeStrings ? upsertHash(flatData, parent, idx, flatData, stringCache) : flatData; 30 | }; 31 | const handleObject = (flatData, parent, idx, context) => { 32 | const { objectCache, objectToHash } = context; 33 | const hash = JSON.stringify(flatData); 34 | objectToHash.set(flatData, hash); 35 | return upsertHash(flatData, parent, idx, hash, objectCache); 36 | }; 37 | const compress = (data, parent, idx, context) => { 38 | let flatData = data; 39 | if (isObject(data)) { 40 | const { transformedData, ignoreKeys } = runTransforms(data, context.transforms, parent, idx); 41 | flatData = transformedData; 42 | if (Array.isArray(transformedData)) { 43 | for (let i = 0; i < transformedData.length; i++) { 44 | const item = transformedData[i]; 45 | if (!ignoreKeys.includes(i)) { 46 | flatData[i] = compress(item, transformedData, i, context); 47 | } 48 | } 49 | } 50 | else { 51 | const keys = Object.keys(transformedData); 52 | for (let i = 0; i < keys.length; i++) { 53 | const key = keys[i]; 54 | if (!ignoreKeys.includes(key)) { 55 | flatData[key] = compress(transformedData[key], transformedData, key, context); 56 | } 57 | } 58 | } 59 | } 60 | if (!parent || SINGLE_BYTE.includes(flatData)) 61 | return flatData; 62 | switch (typeof flatData) { 63 | case 'number': 64 | return handleNumber(flatData, parent, idx, context); 65 | case 'string': 66 | return handleString(flatData, parent, idx, context); 67 | default: 68 | return handleObject(flatData, parent, idx, context); 69 | } 70 | }; 71 | const createRefTable = (json, context) => { 72 | const refTable = []; 73 | refTable.push(json); 74 | const { objectToHash, objectCache, stringCache } = context; 75 | const caches = [objectCache, stringCache]; 76 | caches.forEach((cache) => { 77 | const hashes = Object.keys(cache); 78 | for (let i = 0; i < hashes.length; i++) { 79 | const hash = hashes[i]; 80 | const val = cache[hash]; 81 | const { value, refs } = val; 82 | const parentHashes = refs.map((ref) => objectToHash.get(ref.parent)); 83 | const refCount = new Set(parentHashes).size; 84 | const commitValue = refCount > 1 ? (refTable.push(value) - 1) * 2 : value; 85 | for (let j = 0; j < refs.length; j++) { 86 | const ref = refs[j]; 87 | const { parent, idx } = ref; 88 | parent[idx] = commitValue; 89 | } 90 | } 91 | }); 92 | return refTable; 93 | }; 94 | export default (json, options = {}) => { 95 | if (!isObject(json)) 96 | return json; 97 | const dedupeStrings = options.strings === undefined ? false : options.strings; 98 | const dedupeNumbers = options.numbers === undefined ? false : options.numbers; 99 | const context = { 100 | objectCache: {}, 101 | stringCache: {}, 102 | numberCache: {}, 103 | dedupeStrings, 104 | dedupeNumbers, 105 | transforms: options.transforms || [], 106 | objectToHash: new WeakMap() 107 | }; 108 | compress(json, undefined, undefined, context); 109 | return createRefTable(json, context); 110 | }; 111 | //# sourceMappingURL=compress.js.map -------------------------------------------------------------------------------- /dist/compress.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"compress.js","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAO,aAAa,EAAY,MAAM,SAAS,CAAC;AA+BhE,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAClD,IAAI,MAAM,GAAG,CAAC,CAAA;AACd,MAAM,UAAU,GAAG,CAAC,QAAa,EAAE,MAAW,EAAE,GAAQ,EAAE,IAAY,EAAE,KAAa,EAAE,EAAE;IACvF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IACzB,IAAI,KAAK,EAAE;QACT,MAAM,EAAC,IAAI,EAAE,EAAE,EAAC,GAAG,KAAK,CAAA;QACxB,IAAI,CAAC,IAAI,CAAC;YACR,MAAM,EAAE,GAAG;SACZ,CAAC,CAAA;QACF,OAAO,EAAE,CAAA;KACV;IACD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,CAAA;IACtB,KAAK,CAAC,IAAI,CAAC,GAAG;QACZ,IAAI,EAAE,CAAC;gBACL,MAAM,EAAE,GAAG;aACZ,CAAC;QACF,EAAE;QACF,KAAK,EAAE,QAAQ;KAChB,CAAA;IACD,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAE,MAAW,EAAE,GAAQ,EAAE,OAAwB,EAAE,EAAE;IACzF,MAAM,EAAC,aAAa,EAAE,WAAW,EAAC,GAAG,OAAO,CAAA;IAC5C,OAAO,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;AACrK,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAE,MAAW,EAAE,GAAQ,EAAE,OAAwB,EAAE,EAAE;IACzF,MAAM,EAAC,aAAa,EAAE,WAAW,EAAC,GAAG,OAAO,CAAA;IAC5C,OAAO,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;AAC5F,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,QAAa,EAAE,MAAW,EAAE,GAAQ,EAAE,OAAwB,EAAE,EAAE;IACtF,MAAM,EAAC,WAAW,EAAE,YAAY,EAAC,GAAG,OAAO,CAAA;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACrC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAChC,OAAO,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;AAC7D,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,IAAS,EAAE,MAA0B,EAAE,GAAoB,EAAE,OAAwB,EAAE,EAAE;IACzG,IAAI,QAAQ,GAAG,IAAI,CAAA;IACnB,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;QAClB,MAAM,EAAC,eAAe,EAAE,UAAU,EAAC,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;QAC1F,QAAQ,GAAG,eAAe,CAAA;QAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC/C,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;oBAC3B,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;iBAC1D;aACF;SACF;aAAM;YACL,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBAC7B,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;iBAC9E;aACF;SACF;KACF;IAED,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAA;IAC9D,QAAQ,OAAO,QAAQ,EAAE;QACvB,KAAK,QAAQ;YACb,OAAO,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAI,EAAE,OAAO,CAAC,CAAA;QACpD,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAI,EAAE,OAAO,CAAC,CAAA;QACtD;YACE,OAAO,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAI,EAAE,OAAO,CAAC,CAAA;KACvD;AACH,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,IAAS,EAAE,OAAwB,EAAE,EAAE;IAC7D,MAAM,QAAQ,GAAG,EAAW,CAAA;IAC5B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnB,MAAM,EAAC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAC,GAAG,OAAO,CAAA;IACxD,MAAM,MAAM,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IACzC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YACtB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;YACvB,MAAM,EAAC,KAAK,EAAE,IAAI,EAAC,GAAG,GAAG,CAAA;YACzB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;YACpE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAA;YAC3C,MAAM,WAAW,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;YACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;gBACnB,MAAM,EAAC,MAAM,EAAE,GAAG,EAAC,GAAG,GAAG,CAAA;gBACzB,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAA;aAC1B;SACF;IACH,CAAC,CAAC,CAAA;IACF,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,eAAe,CAAC,IAAS,EAAE,UAAmB,EAAE,EAAE,EAAE;IAClD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAChC,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAA;IAC7E,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAA;IAC7E,MAAM,OAAO,GAAG;QACd,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE;QACf,aAAa;QACb,aAAa;QACb,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;QACpC,YAAY,EAAE,IAAI,OAAO,EAAE;KAC5B,CAAA;IAED,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IAC7C,OAAO,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AACtC,CAAC,CAAA"} -------------------------------------------------------------------------------- /src/compress.ts: -------------------------------------------------------------------------------- 1 | import {isObject, Key, runTransforms, Transform} from './utils' 2 | 3 | interface Entry { 4 | parent: {[key: string]: any} 5 | idx: string | number 6 | } 7 | 8 | interface OCache { 9 | [hash: string]: { 10 | id: number 11 | value: any 12 | refs: Entry[] 13 | } 14 | } 15 | 16 | interface CompressContext { 17 | transforms: Transform[] 18 | dedupeStrings: boolean 19 | dedupeNumbers: boolean 20 | objectCache: OCache 21 | numberCache: OCache 22 | stringCache: OCache 23 | objectToHash: WeakMap 24 | } 25 | 26 | interface Options { 27 | transforms?: Transform[] 28 | strings?: boolean 29 | numbers?: boolean 30 | } 31 | 32 | const SINGLE_BYTE = [null, undefined, true, false] 33 | let nextID = 0 34 | const upsertHash = (flatData: any, parent: any, idx: Key, hash: string, cache: OCache) => { 35 | const entry = cache[hash] 36 | if (entry) { 37 | const {refs, id} = entry 38 | refs.push({ 39 | parent, 40 | idx, 41 | }) 42 | return id 43 | } 44 | const id = (nextID += 2) 45 | cache[hash] = { 46 | refs: [ 47 | { 48 | parent, 49 | idx, 50 | }, 51 | ], 52 | id, 53 | value: flatData, 54 | } 55 | return id 56 | } 57 | 58 | const handleNumber = (flatData: number, parent: any, idx: Key, context: CompressContext) => { 59 | const {dedupeNumbers, numberCache} = context 60 | return dedupeNumbers 61 | ? upsertHash(flatData, parent, idx, String(flatData), numberCache) 62 | : Number.isInteger(flatData) && flatData >= 0 63 | ? flatData * 2 + 1 64 | : flatData 65 | } 66 | 67 | const handleString = (flatData: string, parent: any, idx: Key, context: CompressContext) => { 68 | const {dedupeStrings, stringCache} = context 69 | return dedupeStrings ? upsertHash(flatData, parent, idx, flatData, stringCache) : flatData 70 | } 71 | 72 | const handleObject = (flatData: any, parent: any, idx: Key, context: CompressContext) => { 73 | const {objectCache, objectToHash} = context 74 | const hash = JSON.stringify(flatData) 75 | objectToHash.set(flatData, hash) 76 | return upsertHash(flatData, parent, idx, hash, objectCache) 77 | } 78 | 79 | const compress = ( 80 | data: any, 81 | parent: object | undefined, 82 | idx: Key | undefined, 83 | context: CompressContext, 84 | ) => { 85 | let flatData = data 86 | if (isObject(data)) { 87 | const {transformedData, ignoreKeys} = runTransforms(data, context.transforms, parent, idx) 88 | flatData = transformedData 89 | if (Array.isArray(transformedData)) { 90 | for (let i = 0; i < transformedData.length; i++) { 91 | const item = transformedData[i] 92 | if (!ignoreKeys.includes(i)) { 93 | flatData[i] = compress(item, transformedData, i, context) 94 | } 95 | } 96 | } else { 97 | const keys = Object.keys(transformedData) 98 | for (let i = 0; i < keys.length; i++) { 99 | const key = keys[i] 100 | if (!ignoreKeys.includes(key)) { 101 | flatData[key] = compress(transformedData[key], transformedData, key, context) 102 | } 103 | } 104 | } 105 | } 106 | 107 | if (!parent || SINGLE_BYTE.includes(flatData)) return flatData 108 | switch (typeof flatData) { 109 | case 'number': 110 | return handleNumber(flatData, parent, idx!, context) 111 | case 'string': 112 | return handleString(flatData, parent, idx!, context) 113 | default: 114 | return handleObject(flatData, parent, idx!, context) 115 | } 116 | } 117 | 118 | const createRefTable = (json: any, context: CompressContext) => { 119 | const refTable = [] as any[] 120 | refTable.push(json) 121 | const {objectToHash, objectCache, stringCache} = context 122 | const caches = [objectCache, stringCache] 123 | caches.forEach((cache) => { 124 | const hashes = Object.keys(cache) 125 | for (let i = 0; i < hashes.length; i++) { 126 | const hash = hashes[i] 127 | const val = cache[hash] 128 | const {value, refs} = val 129 | const parentHashes = refs.map((ref) => objectToHash.get(ref.parent)) 130 | const refCount = new Set(parentHashes).size 131 | const commitValue = refCount > 1 ? (refTable.push(value) - 1) * 2 : value 132 | for (let j = 0; j < refs.length; j++) { 133 | const ref = refs[j] 134 | const {parent, idx} = ref 135 | parent[idx] = commitValue 136 | } 137 | } 138 | }) 139 | return refTable 140 | } 141 | 142 | export default (json: any, options: Options = {}) => { 143 | if (!isObject(json)) return json 144 | const dedupeStrings = options.strings === undefined ? false : options.strings 145 | const dedupeNumbers = options.numbers === undefined ? false : options.numbers 146 | const context = { 147 | objectCache: {}, 148 | stringCache: {}, 149 | numberCache: {}, 150 | dedupeStrings, 151 | dedupeNumbers, 152 | transforms: options.transforms || [], 153 | objectToHash: new WeakMap(), 154 | } 155 | 156 | compress(json, undefined, undefined, context) 157 | return createRefTable(json, context) 158 | } 159 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Basic Options */ 4 | "target": "esnext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ 5 | "module": "esnext", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 6 | "lib": ["esnext"], /* Specify library files to be included in the compilation. */ 7 | // "allowJs": true, /* Allow javascript files to be compiled. */ 8 | // "checkJs": true, /* Report errors in .js files. */ 9 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 10 | // "declaration": true, /* Generates corresponding '.d.ts' file. */ 11 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 12 | "sourceMap": true, /* Generates corresponding '.map' file. */ 13 | // "outFile": "./", /* Concatenate and emit output to single file. */ 14 | "outDir": "dist", /* Redirect output structure to the directory. */ 15 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 16 | // "composite": true, /* Enable project compilation */ 17 | // "removeComments": true, /* Do not emit comments to output. */ 18 | // "noEmit": true, /* Do not emit outputs. */ 19 | "importHelpers": true, /* Import emit helpers from 'tslib'. */ 20 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 21 | "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 22 | 23 | /* Strict Type-Checking Options */ 24 | "strict": true, /* Enable all strict type-checking options. */ 25 | "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 26 | "strictNullChecks": true, /* Enable strict null checks. */ 27 | "strictFunctionTypes": true, /* Enable strict checking of function types. */ 28 | "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 29 | "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 30 | "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 31 | 32 | /* Additional Checks */ 33 | "noUnusedLocals": true, /* Report errors on unused locals. */ 34 | "noUnusedParameters": true, /* Report errors on unused parameters. */ 35 | "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 36 | "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 37 | 38 | /* Module Resolution Options */ 39 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 40 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 41 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 42 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 43 | // "typeRoots": [], /* List of folders to include type definitions from. */ 44 | // "types": [], /* Type declaration files to be included in compilation. */ 45 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 46 | "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 47 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 48 | 49 | /* Source Map Options */ 50 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 51 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 52 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 53 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 54 | 55 | /* Experimental Options */ 56 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 57 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 58 | }, 59 | "include": [ 60 | "src/**/*" 61 | ] 62 | } 63 | -------------------------------------------------------------------------------- /json/cognitect.json: -------------------------------------------------------------------------------- 1 | [{"~:district/region":"~:region/e","~:db/id":{"~:idx":-1000001,"~:part":"~:db.part/user"},"~:district/name":"East"},{"~:db/id":{"~:idx":-1000002,"~:part":"~:db.part/user"},"~:neighborhood/name":"Capitol Hill","~:neighborhood/district":{"~:idx":-1000001,"~:part":"~:db.part/user"}},{"~:community/category":["15th avenue residents"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/email-list","~:db/id":{"~:idx":-1000003,"~:part":"~:db.part/user"},"~:community/name":"15th Ave Community","~:community/url":"http://groups.yahoo.com/group/15thAve_Community/","~:community/neighborhood":{"~:idx":-1000002,"~:part":"~:db.part/user"}},{"~:district/region":"~:region/sw","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000004},"~:district/name":"Southwest"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000005},"~:neighborhood/name":"Admiral (West Seattle)","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000004}},{"~:community/category":["neighborhood association"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/email-list","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000006},"~:community/name":"Admiral Neighborhood Association","~:community/url":"http://groups.yahoo.com/group/AdmiralNeighborhood/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000005}},{"~:db/id":{"~:idx":-1000007,"~:part":"~:db.part/user"},"~:district/name":"Southwest"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000008},"~:neighborhood/name":"Alki","~:neighborhood/district":{"~:idx":-1000007,"~:part":"~:db.part/user"}},{"~:community/category":["members of the Alki Community Council and residents of the Alki Beach neighborhood"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/email-list","~:db/id":{"~:idx":-1000009,"~:part":"~:db.part/user"},"~:community/name":"Alki News","~:community/url":"http://groups.yahoo.com/group/alkibeachcommunity/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000008}},{"~:db/id":{"~:idx":-1000010,"~:part":"~:db.part/user"},"~:district/name":"Southwest"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000011},"~:neighborhood/name":"Alki"},{"~:community/category":["news","council meetings"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000012,"~:part":"~:db.part/user"},"~:community/name":"Alki News/Alki Community Council","~:community/url":"http://alkinews.wordpress.com/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000011}},{"~:district/region":"~:region/w","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000013},"~:district/name":"Downtown"},{"~:db/id":{"~:idx":-1000014,"~:part":"~:db.part/user"},"~:neighborhood/name":"Belltown","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000013}},{"~:community/category":["community council"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000015,"~:part":"~:db.part/user"},"~:community/name":"All About Belltown","~:community/url":"http://www.belltown.org/","~:community/neighborhood":{"~:idx":-1000014,"~:part":"~:db.part/user"}},{"~:district/region":"~:region/s","~:db/id":{"~:idx":-1000016,"~:part":"~:db.part/user"},"~:district/name":"Greater Duwamish"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000017},"~:neighborhood/name":"South Park","~:neighborhood/district":{"~:idx":-1000016,"~:part":"~:db.part/user"}},{"~:community/category":["neighborhood info"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000018,"~:part":"~:db.part/user"},"~:community/name":"All About South Park","~:community/url":"http://www.allaboutsouthpark.com/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000017}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000019},"~:district/name":"Southwest"},{"~:db/id":{"~:idx":-1000020,"~:part":"~:db.part/user"},"~:neighborhood/name":"West Seattle","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000019}},{"~:community/category":["arts"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000021},"~:community/name":"ArtsWest","~:community/url":"http://www.artswest.org/?q=node/28","~:community/neighborhood":{"~:idx":-1000020,"~:part":"~:db.part/user"}},{"~:district/region":"~:region/nw","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000022},"~:district/name":"Ballard"},{"~:db/id":{"~:idx":-1000023,"~:part":"~:db.part/user"},"~:neighborhood/name":"Ballard","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000022}},{"~:community/category":["news","human interest"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000024,"~:part":"~:db.part/user"},"~:community/name":"At Large in Ballard","~:community/url":"http://blog.seattlepi.com/ballard/","~:community/neighborhood":{"~:idx":-1000023,"~:part":"~:db.part/user"}},{"~:district/region":"~:region/ne","~:db/id":{"~:idx":-1000025,"~:part":"~:db.part/user"},"~:district/name":"Northeast"},{"~:db/id":{"~:idx":-1000026,"~:part":"~:db.part/user"},"~:neighborhood/name":"Regional Sites","~:neighborhood/district":{"~:idx":-1000025,"~:part":"~:db.part/user"}},{"~:community/category":["news","traffic","planning"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000027},"~:community/name":"Aurora Seattle","~:community/url":"http://www.auroraseattle.com/","~:community/neighborhood":{"~:idx":-1000026,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000028,"~:part":"~:db.part/user"},"~:district/name":"Ballard"},{"~:db/id":{"~:idx":-1000029,"~:part":"~:db.part/user"},"~:neighborhood/name":"Ballard"},{"~:community/category":["personal ballard-centric blog"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000030,"~:part":"~:db.part/user"},"~:community/name":"Ballard Avenue","~:community/url":"http://www.ballardavenue.blogspot.com/","~:community/neighborhood":{"~:idx":-1000029,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000031,"~:part":"~:db.part/user"},"~:district/name":"Ballard"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000032},"~:neighborhood/name":"Ballard"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000033,"~:part":"~:db.part/user"},"~:community/name":"Ballard Blog","~:community/url":"http://ballardblog.com/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000032}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000034},"~:district/name":"Ballard"},{"~:db/id":{"~:idx":-1000035,"~:part":"~:db.part/user"},"~:neighborhood/name":"Ballard"},{"~:community/category":["chamber of commerce"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000036},"~:community/name":"Ballard Chamber of Commerce","~:community/url":"http://www.ballardchamber.com/","~:community/neighborhood":{"~:idx":-1000035,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000037,"~:part":"~:db.part/user"},"~:district/name":"Ballard"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000038},"~:neighborhood/name":"Ballard"},{"~:community/category":["district council"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000039,"~:part":"~:db.part/user"},"~:community/name":"Ballard District Council","~:community/url":"http://www.ballarddistrictcouncil.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000038}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000040},"~:district/name":"Ballard"},{"~:db/id":{"~:idx":-1000041,"~:part":"~:db.part/user"},"~:neighborhood/name":"Ballard"},{"~:community/category":["restaurants","nightlift","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000042,"~:part":"~:db.part/user"},"~:community/name":"Ballard Gossip Girl","~:community/url":"http://www.ballardgossipgirl.com/","~:community/neighborhood":{"~:idx":-1000041,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000043},"~:district/name":"Ballard"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000044},"~:neighborhood/name":"Ballard"},{"~:community/category":["historical society"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000045,"~:part":"~:db.part/user"},"~:community/name":"Ballard Historical Society","~:community/url":"http://www.ballardhistory.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000044}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000046},"~:district/name":"Ballard"},{"~:db/id":{"~:idx":-1000047,"~:part":"~:db.part/user"},"~:neighborhood/name":"Ballard"},{"~:community/category":["Ballard parents"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/email-list","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000048},"~:community/name":"Ballard Moms","~:community/url":"http://groups.yahoo.com/group/BallardMoms/","~:community/neighborhood":{"~:idx":-1000047,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000049},"~:district/name":"Ballard"},{"~:db/id":{"~:idx":-1000050,"~:part":"~:db.part/user"},"~:neighborhood/name":"Ballard"},{"~:community/category":["neighborhood residents"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/email-list","~:db/id":{"~:idx":-1000051,"~:part":"~:db.part/user"},"~:community/name":"Ballard Neighbor Connection","~:community/url":"http://groups.yahoo.com/group/BallardNeighborConnection/","~:community/neighborhood":{"~:idx":-1000050,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000052},"~:district/name":"Ballard"},{"~:db/id":{"~:idx":-1000053,"~:part":"~:db.part/user"},"~:neighborhood/name":"Ballard"},{"~:community/category":["news","personal"],"~:community/orgtype":"~:community.orgtype/personal","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000054},"~:community/name":"ballardite blog","~:community/url":"http://www.ballardite.blogspot.com/","~:community/neighborhood":{"~:idx":-1000053,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000055},"~:district/name":"Southwest"},{"~:db/id":{"~:idx":-1000056,"~:part":"~:db.part/user"},"~:neighborhood/name":"Alki"},{"~:community/category":["news","home sales","crime"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000057,"~:part":"~:db.part/user"},"~:community/name":"Beach Drive Blog","~:community/url":"http://www.mortgageporter.com/beach_drive/","~:community/neighborhood":{"~:idx":-1000056,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000058,"~:part":"~:db.part/user"},"~:district/name":"Greater Duwamish"},{"~:db/id":{"~:idx":-1000059,"~:part":"~:db.part/user"},"~:neighborhood/name":"Beacon Hill","~:neighborhood/district":{"~:idx":-1000058,"~:part":"~:db.part/user"}},{"~:community/category":["community","public safety"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000060,"~:part":"~:db.part/user"},"~:community/name":"Beacon Hill Alliance of Neighbors","~:community/url":"http://www.cityofseattle.net/ban/","~:community/neighborhood":{"~:idx":-1000059,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000061,"~:part":"~:db.part/user"},"~:district/name":"Greater Duwamish"},{"~:db/id":{"~:idx":-1000062,"~:part":"~:db.part/user"},"~:neighborhood/name":"Beacon Hill"},{"~:community/category":["news","events","food","nightlife","criminal activity"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000063,"~:part":"~:db.part/user"},"~:community/name":"Beacon Hill Blog","~:community/url":"http://beaconhill.seattle.wa.us/","~:community/neighborhood":{"~:idx":-1000062,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000064,"~:part":"~:db.part/user"},"~:district/name":"Greater Duwamish"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000065},"~:neighborhood/name":"Beacon Hill"},{"~:community/category":["criminal activity"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/email-list","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000066},"~:community/name":"Beacon Hill Burglaries","~:community/url":"http://maps.google.com/maps/ms?ie=UTF8&hl=en&msa=0&msid=107398592337461190820.000449fcf97ff8bfbe281&z=14or","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000065}},{"~:db/id":{"~:idx":-1000067,"~:part":"~:db.part/user"},"~:district/name":"Greater Duwamish"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000068},"~:neighborhood/name":"Beacon Hill"},{"~:community/category":["news","announcements","community concerns"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/wiki","~:db/id":{"~:idx":-1000069,"~:part":"~:db.part/user"},"~:community/name":"Beacon Hill Community Site","~:community/url":"http://beaconhillcommunity.wetpaint.com/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000068}},{"~:db/id":{"~:idx":-1000070,"~:part":"~:db.part/user"},"~:district/name":"Downtown"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000071},"~:neighborhood/name":"Belltown"},{"~:community/category":["news","events"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000072},"~:community/name":"belltown","~:community/url":"http://www.belltownpeople.com/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000071}},{"~:district/region":"~:region/se","~:db/id":{"~:idx":-1000073,"~:part":"~:db.part/user"},"~:district/name":"Southeast"},{"~:db/id":{"~:idx":-1000074,"~:part":"~:db.part/user"},"~:neighborhood/name":"Columbia City","~:neighborhood/district":{"~:idx":-1000073,"~:part":"~:db.part/user"}},{"~:community/category":["community group"],"~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000075},"~:community/name":"Bike Works!","~:community/url":"http://www.bikeworks.org/","~:community/neighborhood":{"~:idx":-1000074,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000076,"~:part":"~:db.part/user"},"~:district/name":"Greater Duwamish"},{"~:db/id":{"~:idx":-1000077,"~:part":"~:db.part/user"},"~:neighborhood/name":"Georgetown","~:neighborhood/district":{"~:idx":-1000076,"~:part":"~:db.part/user"}},{"~:community/category":["news","events","911 blotter"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000078},"~:community/name":"Blogging Georgetown","~:community/url":"http://www.blogginggeorgetown.com/","~:community/neighborhood":{"~:idx":-1000077,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000079,"~:part":"~:db.part/user"},"~:district/name":"Greater Duwamish"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000080},"~:neighborhood/name":"Georgetown"},{"~:community/category":["news","events","911 blotter"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/facebook-page","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000081},"~:community/name":"Blogging Georgetown","~:community/url":"http://www.facebook.com/blogginggeorgetown","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000080}},{"~:district/region":"~:region/sw","~:db/id":{"~:idx":-1000082,"~:part":"~:db.part/user"},"~:district/name":"Northwest"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000083},"~:neighborhood/name":"Broadview","~:neighborhood/district":{"~:idx":-1000082,"~:part":"~:db.part/user"}},{"~:community/category":["community council"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/email-list","~:db/id":{"~:idx":-1000084,"~:part":"~:db.part/user"},"~:community/name":"Broadview Community Council","~:community/url":"http://groups.google.com/group/broadview-community-council","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000083}},{"~:db/id":{"~:idx":-1000085,"~:part":"~:db.part/user"},"~:district/name":"Northwest"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000086},"~:neighborhood/name":"Broadview"},{"~:community/category":["community council"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000087},"~:community/name":"Broadview Community Council","~:community/url":"http://www.broadviewseattle.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000086}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000088},"~:district/name":"East"},{"~:db/id":{"~:idx":-1000089,"~:part":"~:db.part/user"},"~:neighborhood/name":"Capitol Hill"},{"~:community/category":["community council","news","events"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/wiki","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000090},"~:community/name":"Capitol Hill Community Council","~:community/url":"http://chcc.wikidot.com/","~:community/neighborhood":{"~:idx":-1000089,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000091},"~:district/name":"East"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000092},"~:neighborhood/name":"Capitol Hill"},{"~:community/category":["affordable housing"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000093},"~:community/name":"Capitol Hill Housing","~:community/url":"http://capitolhillhousing.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000092}},{"~:db/id":{"~:idx":-1000094,"~:part":"~:db.part/user"},"~:district/name":"East"},{"~:db/id":{"~:idx":-1000095,"~:part":"~:db.part/user"},"~:neighborhood/name":"Capitol Hill"},{"~:community/category":["local miscellany"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000096},"~:community/name":"Capitol Hill Triangle","~:community/url":"http://chtriangle.blogspot.com/","~:community/neighborhood":{"~:idx":-1000095,"~:part":"~:db.part/user"}},{"~:district/region":"~:region/e","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000097},"~:district/name":"Central"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000098},"~:neighborhood/name":"Central District","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000097}},{"~:community/category":["festival planning association"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000099,"~:part":"~:db.part/user"},"~:community/name":"Central Area Community Festival Association","~:community/url":"http://www.cacf.com/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000098}},{"~:db/id":{"~:idx":-1000100,"~:part":"~:db.part/user"},"~:district/name":"Ballard"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000101},"~:neighborhood/name":"Ballard"},{"~:community/category":["community council"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000102,"~:part":"~:db.part/user"},"~:community/name":"Central Ballard Community Council","~:community/url":"http://www.neighborhoodlink.com/seattle/cbcc/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000101}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000103},"~:district/name":"Central"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000104},"~:neighborhood/name":"Central District"},{"~:community/category":["news","events","food","drink","reviews"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000105,"~:part":"~:db.part/user"},"~:community/name":"Central District News","~:community/url":"http://www.centraldistrictnews.com/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000104}},{"~:db/id":{"~:idx":-1000106,"~:part":"~:db.part/user"},"~:district/name":"Downtown"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000107},"~:neighborhood/name":"International District","~:neighborhood/district":{"~:idx":-1000106,"~:part":"~:db.part/user"}},{"~:community/category":["business improvement association"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000108},"~:community/name":"Chinatown/International District","~:community/url":"http://www.cidbia.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000107}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000109},"~:district/name":"Downtown"},{"~:db/id":{"~:idx":-1000110,"~:part":"~:db.part/user"},"~:neighborhood/name":"International District"},{"~:community/category":["referral","advocacy","support services"],"~:community/orgtype":"~:community.orgtype/nonprofit","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000111,"~:part":"~:db.part/user"},"~:community/name":"Chinese Information and Service Center","~:community/url":"http://www.cisc-seattle.org/","~:community/neighborhood":{"~:idx":-1000110,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000112,"~:part":"~:db.part/user"},"~:district/name":"East"},{"~:db/id":{"~:idx":-1000113,"~:part":"~:db.part/user"},"~:neighborhood/name":"Capitol Hill"},{"~:community/category":["news","events","food","drink","criminal activity"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000114,"~:part":"~:db.part/user"},"~:community/name":"CHS Capitol Hill Seattle Blog","~:community/url":"http://www.capitolhillseattle.com/","~:community/neighborhood":{"~:idx":-1000113,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000115,"~:part":"~:db.part/user"},"~:district/name":"Southeast"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000116},"~:neighborhood/name":"Columbia City"},{"~:community/category":["neighborhood community site; buying/selling","restaurants","favorite places","etc."],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/wiki","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000117},"~:community/name":"Columbia Citizens","~:community/url":"http://columbiacitizens.net/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000116}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000118},"~:district/name":"Southeast"},{"~:db/id":{"~:idx":-1000119,"~:part":"~:db.part/user"},"~:neighborhood/name":"Columbia City"},{"~:community/category":["twitter for Columbia Citizens"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/twitter","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000120},"~:community/name":"Columbia Citizens","~:community/url":"http://twitter.com/CCitizens","~:community/neighborhood":{"~:idx":-1000119,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000121,"~:part":"~:db.part/user"},"~:district/name":"Southeast"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000122},"~:neighborhood/name":"Columbia City"},{"~:community/category":["neighborhood community site; buying/selling","restaurants","favorite places","etc."],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/facebook-page","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000123},"~:community/name":"Columbia Citizens","~:community/url":"http://www.facebook.com/pages/Columbia-Citizens/48558627705","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000122}},{"~:db/id":{"~:idx":-1000124,"~:part":"~:db.part/user"},"~:district/name":"Southeast"},{"~:db/id":{"~:idx":-1000125,"~:part":"~:db.part/user"},"~:neighborhood/name":"Columbia City"},{"~:community/category":["news","events","food","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000126},"~:community/name":"Columbia City Blog","~:community/url":"http://www.columbiacityblog.com/","~:community/neighborhood":{"~:idx":-1000125,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000127},"~:district/name":"Southeast"},{"~:db/id":{"~:idx":-1000128,"~:part":"~:db.part/user"},"~:neighborhood/name":"Columbia City"},{"~:community/category":["business association"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000129},"~:community/name":"Columbia City, Seattle","~:community/url":"http://www.columbiacityseattle.com/","~:community/neighborhood":{"~:idx":-1000128,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000130},"~:district/name":"Southeast"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000131},"~:neighborhood/name":"Rainier Valley","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000130}},{"~:community/category":["portal"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000132,"~:part":"~:db.part/user"},"~:community/name":"Columbia City: Rainier Valley","~:community/url":"http://www.rainiervalley.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000131}},{"~:district/region":"~:region/sw","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000133},"~:district/name":"Delridge"},{"~:db/id":{"~:idx":-1000134,"~:part":"~:db.part/user"},"~:neighborhood/name":"West Seattle"},{"~:community/category":["sustainable food"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000135},"~:community/name":"Community Harvest of Southwest Seattle","~:community/url":"http://gleanit.org","~:community/neighborhood":{"~:idx":-1000134,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000136,"~:part":"~:db.part/user"},"~:district/name":"Ballard"},{"~:db/id":{"~:idx":-1000137,"~:part":"~:db.part/user"},"~:neighborhood/name":"Crown Hill","~:neighborhood/district":{"~:idx":-1000136,"~:part":"~:db.part/user"}},{"~:community/category":["neighborhood-issues","neighborhood-planning","news"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000138},"~:community/name":"Crown Hill Neighbors","~:community/url":"http://www.crownhillneighbors.org","~:community/neighborhood":{"~:idx":-1000137,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000139,"~:part":"~:db.part/user"},"~:district/name":"Delridge"},{"~:db/id":{"~:idx":-1000140,"~:part":"~:db.part/user"},"~:neighborhood/name":"Delridge","~:neighborhood/district":{"~:idx":-1000139,"~:part":"~:db.part/user"}},{"~:community/category":["community organization"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000141,"~:part":"~:db.part/user"},"~:community/name":"Delridge Grassroots Leadership","~:community/url":"http://delridge.blogspot.com/","~:community/neighborhood":{"~:idx":-1000140,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000142},"~:district/name":"Delridge"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000143},"~:neighborhood/name":"Delridge"},{"~:community/category":["neighborhood association"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000144},"~:community/name":"Delridge Neighborhoods Development Association","~:community/url":"http://www.dnda.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000143}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000145},"~:district/name":"Delridge"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000146},"~:neighborhood/name":"Delridge"},{"~:community/category":["produce coop"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000147,"~:part":"~:db.part/user"},"~:community/name":"Delridge Produce Cooperative","~:community/url":"http://sites.google.com/site/delridgeproducecooperative/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000146}},{"~:district/region":"~:region/w","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000148},"~:district/name":"Lake Union"},{"~:db/id":{"~:idx":-1000149,"~:part":"~:db.part/user"},"~:neighborhood/name":"South Lake Union","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000148}},{"~:community/category":["news","events","shopping","dining"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000150,"~:part":"~:db.part/user"},"~:community/name":"Discover SLU","~:community/url":"http://www.discoverslu.com","~:community/neighborhood":{"~:idx":-1000149,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000151,"~:part":"~:db.part/user"},"~:district/name":"Lake Union"},{"~:db/id":{"~:idx":-1000152,"~:part":"~:db.part/user"},"~:neighborhood/name":"South Lake Union"},{"~:community/category":["news","events","shopping","dining"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/facebook-page","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000153},"~:community/name":"Discover SLU","~:community/url":"http://www.facebook.com/discoverslu","~:community/neighborhood":{"~:idx":-1000152,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000154,"~:part":"~:db.part/user"},"~:district/name":"Lake Union"},{"~:db/id":{"~:idx":-1000155,"~:part":"~:db.part/user"},"~:neighborhood/name":"South Lake Union"},{"~:community/category":["news","events","shopping","dining"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/twitter","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000156},"~:community/name":"Discover SLU","~:community/url":"http://www.twitter.com/southlakeunion","~:community/neighborhood":{"~:idx":-1000155,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000157},"~:district/name":"Downtown"},{"~:db/id":{"~:idx":-1000158,"~:part":"~:db.part/user"},"~:neighborhood/name":"Downtown","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000157}},{"~:community/category":["news and events"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000159,"~:part":"~:db.part/user"},"~:community/name":"Downtown Dispatch","~:community/url":"http://downtowndispatch.com/","~:community/neighborhood":{"~:idx":-1000158,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000160},"~:district/name":"Downtown"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000161},"~:neighborhood/name":"Downtown"},{"~:community/category":["business association"],"~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000162},"~:community/name":"Downtown Seattle Association","~:community/url":"http://www.downtownseattle.com/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000161}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000163},"~:district/name":"Ballard"},{"~:db/id":{"~:idx":-1000164,"~:part":"~:db.part/user"},"~:neighborhood/name":"Ballard"},{"~:community/category":["community association","news","events","meeting"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000165},"~:community/name":"East Ballard Community Association Blog","~:community/url":"http://eastballard.wordpress.com/","~:community/neighborhood":{"~:idx":-1000164,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000166},"~:district/name":"Lake Union"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000167},"~:neighborhood/name":"Eastlake","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000166}},{"~:community/category":["news","traffic","events","criminal activity"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000168,"~:part":"~:db.part/user"},"~:community/name":"Eastlake Ave. ","~:community/url":"http://eastlakeave.neighborlogs.com/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000167}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000169},"~:district/name":"Lake Union"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000170},"~:neighborhood/name":"Eastlake"},{"~:community/category":["updates on blog posts"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000171},"~:community/name":"Eastlake Ave. ","~:community/url":"http://twitter.com/eastlakeave","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000170}},{"~:db/id":{"~:idx":-1000172,"~:part":"~:db.part/user"},"~:district/name":"Lake Union"},{"~:db/id":{"~:idx":-1000173,"~:part":"~:db.part/user"},"~:neighborhood/name":"Eastlake"},{"~:community/category":["community council"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000174,"~:part":"~:db.part/user"},"~:community/name":"Eastlake Community Council","~:community/url":"http://www.eastlakeseattle.org/","~:community/neighborhood":{"~:idx":-1000173,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000175},"~:district/name":"Lake Union"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000176},"~:neighborhood/name":"Eastlake"},{"~:community/category":["community council"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/facebook-page","~:db/id":{"~:idx":-1000177,"~:part":"~:db.part/user"},"~:community/name":"Eastlake Community Council","~:community/url":"http://www.facebook.com/group.php?gid=7145111961","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000176}},{"~:db/id":{"~:idx":-1000178,"~:part":"~:db.part/user"},"~:district/name":"Southwest"},{"~:db/id":{"~:idx":-1000179,"~:part":"~:db.part/user"},"~:neighborhood/name":"Fauntleroy","~:neighborhood/district":{"~:idx":-1000178,"~:part":"~:db.part/user"}},{"~:community/category":["community association"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000180},"~:community/name":"Fauntleroy Community Association","~:community/url":"http://fauntleroy.net/","~:community/neighborhood":{"~:idx":-1000179,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000181},"~:district/name":"Southwest"},{"~:db/id":{"~:idx":-1000182,"~:part":"~:db.part/user"},"~:neighborhood/name":"Fauntleroy"},{"~:community/category":["community assocation"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/facebook-page","~:db/id":{"~:idx":-1000183,"~:part":"~:db.part/user"},"~:community/name":"Fauntleroy Community Association","~:community/url":"http://www.facebook.com/pages/Seattle-WA/Fauntleroy-Community-Association/63181596775?v=wall&viewas=1779772562&ref=ts","~:community/neighborhood":{"~:idx":-1000182,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000184,"~:part":"~:db.part/user"},"~:district/name":"East"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000185},"~:neighborhood/name":"First Hill","~:neighborhood/district":{"~:idx":-1000184,"~:part":"~:db.part/user"}},{"~:community/category":["neighborhood association"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000186,"~:part":"~:db.part/user"},"~:community/name":"First Hill Improvement Association","~:community/url":"http://www.firsthill.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000185}},{"~:db/id":{"~:idx":-1000187,"~:part":"~:db.part/user"},"~:district/name":"Lake Union"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000188},"~:neighborhood/name":"Fremont","~:neighborhood/district":{"~:idx":-1000187,"~:part":"~:db.part/user"}},{"~:community/category":["fremont arts council members"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/email-list","~:db/id":{"~:idx":-1000189,"~:part":"~:db.part/user"},"~:community/name":"Fremont Arts Council","~:community/url":"http://groups.yahoo.com/group/fremontartscouncil/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000188}},{"~:db/id":{"~:idx":-1000190,"~:part":"~:db.part/user"},"~:district/name":"Lake Union"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000191},"~:neighborhood/name":"Fremont"},{"~:community/category":["communtiy group"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000192,"~:part":"~:db.part/user"},"~:community/name":"Fremont Arts Council","~:community/url":"http://www.fremontartscouncil.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000191}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000193},"~:district/name":"Lake Union"},{"~:db/id":{"~:idx":-1000194,"~:part":"~:db.part/user"},"~:neighborhood/name":"Fremont"},{"~:community/category":["chamber of commerce"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000195,"~:part":"~:db.part/user"},"~:community/name":"Fremont Chamber of Commerce","~:community/url":"http://www.fremontseattle.com/","~:community/neighborhood":{"~:idx":-1000194,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000196,"~:part":"~:db.part/user"},"~:district/name":"Lake Union"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000197},"~:neighborhood/name":"Fremont"},{"~:community/category":["news","events","food","reviews"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/twitter","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000198},"~:community/name":"Fremont Universe","~:community/url":"http://twitter.com/fremontuniverse","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000197}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000199},"~:district/name":"Lake Union"},{"~:db/id":{"~:idx":-1000200,"~:part":"~:db.part/user"},"~:neighborhood/name":"Fremont"},{"~:community/category":["news","events","food","reviews"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/facebook-page","~:db/id":{"~:idx":-1000201,"~:part":"~:db.part/user"},"~:community/name":"Fremont Universe","~:community/url":"http://www.facebook.com/pages/Fremont-Universe-Seattle/88279594341?ref=s","~:community/neighborhood":{"~:idx":-1000200,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000202},"~:district/name":"Lake Union"},{"~:db/id":{"~:idx":-1000203,"~:part":"~:db.part/user"},"~:neighborhood/name":"Fremont"},{"~:community/category":["news","events","food","reviews"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000204,"~:part":"~:db.part/user"},"~:community/name":"Fremont Universe","~:community/url":"http://www.fremontuniverse.com/","~:community/neighborhood":{"~:idx":-1000203,"~:part":"~:db.part/user"}},{"~:district/region":"~:region/w","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000205},"~:district/name":"Magnolia/Queen Anne"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000206},"~:neighborhood/name":"Magnolia","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000205}},{"~:community/category":["park issues"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000207,"~:part":"~:db.part/user"},"~:community/name":"Friends of Discovery Park","~:community/url":"http://www.friendsdiscoverypark.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000206}},{"~:db/id":{"~:idx":-1000208,"~:part":"~:db.part/user"},"~:district/name":"Lake Union"},{"~:db/id":{"~:idx":-1000209,"~:part":"~:db.part/user"},"~:neighborhood/name":"Fremont"},{"~:community/category":["community organization"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000210,"~:part":"~:db.part/user"},"~:community/name":"Friends of Fremont Peak Park","~:community/url":"http://www.fremontpeakpark.org/","~:community/neighborhood":{"~:idx":-1000209,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000211},"~:district/name":"Central"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000212},"~:neighborhood/name":"Central District"},{"~:community/category":["park issues"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000213},"~:community/name":"Friends of Frink Park","~:community/url":"http://www.frinkpark.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000212}},{"~:db/id":{"~:idx":-1000214,"~:part":"~:db.part/user"},"~:district/name":"Northwest"},{"~:db/id":{"~:idx":-1000215,"~:part":"~:db.part/user"},"~:neighborhood/name":"Green Lake","~:neighborhood/district":{"~:idx":-1000214,"~:part":"~:db.part/user"}},{"~:community/category":["neighborhood group"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000216},"~:community/name":"Friends of Green Lake","~:community/url":"http://www.friendsofgreenlake.org/","~:community/neighborhood":{"~:idx":-1000215,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000217},"~:district/name":"Southeast"},{"~:db/id":{"~:idx":-1000218,"~:part":"~:db.part/user"},"~:neighborhood/name":"Seward Park","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000217}},{"~:community/category":["park issues"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000219,"~:part":"~:db.part/user"},"~:community/name":"Friends of Seward Park","~:community/url":"http://www.sewardpark.org/","~:community/neighborhood":{"~:idx":-1000218,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000220,"~:part":"~:db.part/user"},"~:district/name":"Southwest"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000221},"~:neighborhood/name":"Genesee-Schmitz","~:neighborhood/district":{"~:idx":-1000220,"~:part":"~:db.part/user"}},{"~:community/category":["neighborhood council"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000222},"~:community/name":"Genesee-Schmitz Neighborhood Council","~:community/url":"http://genesee-schmitz.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000221}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000223},"~:district/name":"Greater Duwamish"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000224},"~:neighborhood/name":"Georgetown"},{"~:community/category":["community arts"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000225},"~:community/name":"Georgetown Art Center","~:community/url":"http://georgetownartcenter.blogspot.com/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000224}},{"~:db/id":{"~:idx":-1000226,"~:part":"~:db.part/user"},"~:district/name":"Greater Duwamish"},{"~:db/id":{"~:idx":-1000227,"~:part":"~:db.part/user"},"~:neighborhood/name":"Georgetown"},{"~:community/category":["community council"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000228,"~:part":"~:db.part/user"},"~:community/name":"Georgetown Neighborhood","~:community/url":"http://www.georgetownneighborhood.com/","~:community/neighborhood":{"~:idx":-1000227,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000229,"~:part":"~:db.part/user"},"~:district/name":"Greater Duwamish"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000230},"~:neighborhood/name":"Georgetown"},{"~:community/category":["community members"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/email-list","~:db/id":{"~:idx":-1000231,"~:part":"~:db.part/user"},"~:community/name":"Georgetown Seattle","~:community/url":"http://groups.yahoo.com/group/Georgetown-Seattle/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000230}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000232},"~:district/name":"Northwest"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000233},"~:neighborhood/name":"Green Lake"},{"~:community/category":["community council"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000234},"~:community/name":"Greenlake Community Council","~:community/url":"http://www.greenlakecommunitycouncil.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000233}},{"~:db/id":{"~:idx":-1000235,"~:part":"~:db.part/user"},"~:district/name":"Northwest"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000236},"~:neighborhood/name":"Green Lake"},{"~:community/category":["events","for sale","services"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/wiki","~:db/id":{"~:idx":-1000237,"~:part":"~:db.part/user"},"~:community/name":"Greenlake Community Wiki","~:community/url":"http://greenlake.wetpaint.com/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000236}},{"~:db/id":{"~:idx":-1000238,"~:part":"~:db.part/user"},"~:district/name":"Northwest"},{"~:db/id":{"~:idx":-1000239,"~:part":"~:db.part/user"},"~:neighborhood/name":"Greenwood","~:neighborhood/district":{"~:idx":-1000238,"~:part":"~:db.part/user"}},{"~:community/category":["neighborhood association"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000240},"~:community/name":"Greenwood Aurora Involved Neighbors","~:community/url":"http://www.gainseattle.com/","~:community/neighborhood":{"~:idx":-1000239,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000241,"~:part":"~:db.part/user"},"~:district/name":"Northwest"},{"~:db/id":{"~:idx":-1000242,"~:part":"~:db.part/user"},"~:neighborhood/name":"Greenwood"},{"~:community/category":["news","events"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000243,"~:part":"~:db.part/user"},"~:community/name":"Greenwood Blog","~:community/url":"http://www.greenwoodblog.com/","~:community/neighborhood":{"~:idx":-1000242,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000244},"~:district/name":"Northwest"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000245},"~:neighborhood/name":"Greenwood"},{"~:community/category":["community council"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000246},"~:community/name":"Greenwood Community Council","~:community/url":"http://www.greenwoodcommunitycouncil.org/about/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000245}},{"~:db/id":{"~:idx":-1000247,"~:part":"~:db.part/user"},"~:district/name":"Northwest"},{"~:db/id":{"~:idx":-1000248,"~:part":"~:db.part/user"},"~:neighborhood/name":"Greenwood"},{"~:community/category":["community council"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/email-list","~:db/id":{"~:idx":-1000249,"~:part":"~:db.part/user"},"~:community/name":"Greenwood Community Council Announcements","~:community/url":"http://groups.yahoo.com/group/Greenwood_News/","~:community/neighborhood":{"~:idx":-1000248,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000250,"~:part":"~:db.part/user"},"~:district/name":"Northwest"},{"~:db/id":{"~:idx":-1000251,"~:part":"~:db.part/user"},"~:neighborhood/name":"Greenwood"},{"~:community/category":["community council"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/email-list","~:db/id":{"~:idx":-1000252,"~:part":"~:db.part/user"},"~:community/name":"Greenwood Community Council Discussion","~:community/url":"http://groups.yahoo.com/group/greenwood-discussion/","~:community/neighborhood":{"~:idx":-1000251,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000253},"~:district/name":"Northwest"},{"~:db/id":{"~:idx":-1000254,"~:part":"~:db.part/user"},"~:neighborhood/name":"Greenwood"},{"~:community/category":["chamber of commerce"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000255},"~:community/name":"Greenwood Phinney Chamber of Commerce","~:community/url":"http://www.greenwood-phinney.com/","~:community/neighborhood":{"~:idx":-1000254,"~:part":"~:db.part/user"}},{"~:district/region":"~:region/n","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000256},"~:district/name":"North"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000257},"~:neighborhood/name":"Haller Lake","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000256}},{"~:community/category":["community organization"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000258,"~:part":"~:db.part/user"},"~:community/name":"Haller Lake Community Club","~:community/url":"http://www.hallerlake.info/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000257}},{"~:db/id":{"~:idx":-1000259,"~:part":"~:db.part/user"},"~:district/name":"Northeast"},{"~:db/id":{"~:idx":-1000260,"~:part":"~:db.part/user"},"~:neighborhood/name":"Hawthorne Hills","~:neighborhood/district":{"~:idx":-1000259,"~:part":"~:db.part/user"}},{"~:community/category":["community council"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000261,"~:part":"~:db.part/user"},"~:community/name":"Hawthorne Hills Community Website","~:community/url":"http://www.seattle.gov/hawthornehills/","~:community/neighborhood":{"~:idx":-1000260,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000262,"~:part":"~:db.part/user"},"~:district/name":"Delridge"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000263},"~:neighborhood/name":"Highland Park","~:neighborhood/district":{"~:idx":-1000262,"~:part":"~:db.part/user"}},{"~:community/category":["community group"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000264,"~:part":"~:db.part/user"},"~:community/name":"Highland Park Action Committee","~:community/url":"http://www.highlandpk.net/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000263}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000265},"~:district/name":"Delridge"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000266},"~:neighborhood/name":"Highland Park"},{"~:community/category":["neighborhood group"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000267,"~:part":"~:db.part/user"},"~:community/name":"Highland Park Improvement Club","~:community/url":"http://www.hpic1919.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000266}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000268},"~:district/name":"Ballard"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000269},"~:neighborhood/name":"Ballard"},{"~:community/category":["food","nightlife","shopping","services"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000270,"~:part":"~:db.part/user"},"~:community/name":"InBallard","~:community/url":"http://inballard.com/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000269}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000271},"~:district/name":"Magnolia/Queen Anne"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000272},"~:neighborhood/name":"Interbay","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000271}},{"~:community/category":["news","sports"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000273},"~:community/name":"Interbay District Blog","~:community/url":"http://interbayneighborhood.neighborlogs.com/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000272}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000274},"~:district/name":"Magnolia/Queen Anne"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000275},"~:neighborhood/name":"Interbay"},{"~:community/category":["neighborhood association"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000276},"~:community/name":"Interbay Neighborhood Association","~:community/url":"http://www.our-interbay.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000275}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000277},"~:district/name":"Greater Duwamish"},{"~:db/id":{"~:idx":-1000278,"~:part":"~:db.part/user"},"~:neighborhood/name":"Beacon Hill"},{"~:community/category":["community"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000279},"~:community/name":"Jefferson Park Alliance","~:community/url":"http://www.cityofseattle.net/commnty/Beacon/groups/jpa/","~:community/neighborhood":{"~:idx":-1000278,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000280,"~:part":"~:db.part/user"},"~:district/name":"Southwest"},{"~:db/id":{"~:idx":-1000281,"~:part":"~:db.part/user"},"~:neighborhood/name":"Junction","~:neighborhood/district":{"~:idx":-1000280,"~:part":"~:db.part/user"}},{"~:community/category":["events","meetings"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000282},"~:community/name":"Junction Neighborhood Organization","~:community/url":"http://www.wsjuno.com/","~:community/neighborhood":{"~:idx":-1000281,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000283,"~:part":"~:db.part/user"},"~:district/name":"Northwest"},{"~:db/id":{"~:idx":-1000284,"~:part":"~:db.part/user"},"~:neighborhood/name":"Ballard"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000285},"~:community/name":"KOMO Communities - Ballard","~:community/url":"http://ballard.komonews.com/","~:community/neighborhood":{"~:idx":-1000284,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000286},"~:district/name":"Greater Duwamish"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000287},"~:neighborhood/name":"Beacon Hill"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000288},"~:community/name":"KOMO Communities - Beacon Hill","~:community/url":"http://beaconhill.komonews.com","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000287}},{"~:db/id":{"~:idx":-1000289,"~:part":"~:db.part/user"},"~:district/name":"East"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000290},"~:neighborhood/name":"Capitol Hill"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000291,"~:part":"~:db.part/user"},"~:community/name":"KOMO Communities - Captol Hill","~:community/url":"http://capitolhill.komonews.com","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000290}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000292},"~:district/name":"East"},{"~:db/id":{"~:idx":-1000293,"~:part":"~:db.part/user"},"~:neighborhood/name":"Central District"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000294,"~:part":"~:db.part/user"},"~:community/name":"KOMO Communities - Central District","~:community/url":"http://centraldistrict.komonews.com","~:community/neighborhood":{"~:idx":-1000293,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000295,"~:part":"~:db.part/user"},"~:district/name":"Southeast"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000296},"~:neighborhood/name":"Columbia City"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000297},"~:community/name":"KOMO Communities - Columbia City","~:community/url":"http://columbiacity.komonews.com","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000296}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000298},"~:district/name":"Downtown"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000299},"~:neighborhood/name":"Downtown"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000300,"~:part":"~:db.part/user"},"~:community/name":"KOMO Communities - Downtown","~:community/url":"http://downtown.komonews.com","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000299}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000301},"~:district/name":"Lake Union"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000302},"~:neighborhood/name":"Fremont"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000303,"~:part":"~:db.part/user"},"~:community/name":"KOMO Communities - Fremont","~:community/url":"http://fremont.komonews.com","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000302}},{"~:db/id":{"~:idx":-1000304,"~:part":"~:db.part/user"},"~:district/name":"Greater Duwamish"},{"~:db/id":{"~:idx":-1000305,"~:part":"~:db.part/user"},"~:neighborhood/name":"Georgetown"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000306},"~:community/name":"KOMO Communities - Georgetown","~:community/url":"http://georgetown.komonews.com","~:community/neighborhood":{"~:idx":-1000305,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000307,"~:part":"~:db.part/user"},"~:district/name":"Northwest"},{"~:db/id":{"~:idx":-1000308,"~:part":"~:db.part/user"},"~:neighborhood/name":"Green Lake"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000309},"~:community/name":"KOMO Communities - Green Lake","~:community/url":"http://greenlake.komonews.com","~:community/neighborhood":{"~:idx":-1000308,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000310},"~:district/name":"Northwest"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000311},"~:neighborhood/name":"Greenwood-Phinney","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000310}},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000312},"~:community/name":"KOMO Communities - Greenwood-Phinney","~:community/url":"http://greenwood-phinney.komonews.com","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000311}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000313},"~:district/name":"North"},{"~:db/id":{"~:idx":-1000314,"~:part":"~:db.part/user"},"~:neighborhood/name":"Lake City","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000313}},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000315,"~:part":"~:db.part/user"},"~:community/name":"KOMO Communities - Lake City","~:community/url":"http://lakecity.komonews.com","~:community/neighborhood":{"~:idx":-1000314,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000316,"~:part":"~:db.part/user"},"~:district/name":"East"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000317},"~:neighborhood/name":"Madison Park","~:neighborhood/district":{"~:idx":-1000316,"~:part":"~:db.part/user"}},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000318},"~:community/name":"KOMO Communities - Madison Park","~:community/url":"http://madisonpark.komonews.com","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000317}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000319},"~:district/name":"Magnolia/Queen Anne"},{"~:db/id":{"~:idx":-1000320,"~:part":"~:db.part/user"},"~:neighborhood/name":"Magnolia"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000321,"~:part":"~:db.part/user"},"~:community/name":"KOMO Communities - Magnolia","~:community/url":"http://magnolia.komonews.com","~:community/neighborhood":{"~:idx":-1000320,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000322,"~:part":"~:db.part/user"},"~:district/name":"North"},{"~:db/id":{"~:idx":-1000323,"~:part":"~:db.part/user"},"~:neighborhood/name":"North Seattle","~:neighborhood/district":{"~:idx":-1000322,"~:part":"~:db.part/user"}},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000324,"~:part":"~:db.part/user"},"~:community/name":"KOMO Communities - North Seattle","~:community/url":"http://northseattle.komonews.com","~:community/neighborhood":{"~:idx":-1000323,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000325,"~:part":"~:db.part/user"},"~:district/name":"Magnolia/Queen Anne"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000326},"~:neighborhood/name":"Queen Anne","~:neighborhood/district":{"~:idx":-1000325,"~:part":"~:db.part/user"}},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000327},"~:community/name":"KOMO Communities - Queen Anne","~:community/url":"http://queenanne.komonews.com","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000326}},{"~:db/id":{"~:idx":-1000328,"~:part":"~:db.part/user"},"~:district/name":"Southeast"},{"~:db/id":{"~:idx":-1000329,"~:part":"~:db.part/user"},"~:neighborhood/name":"Rainier Valley"},{"~:community/category":["news","events","human interest","criminal activity","food","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000330,"~:part":"~:db.part/user"},"~:community/name":"KOMO Communities - Rainier Valley","~:community/url":"http://rainiervalley.komonews.com","~:community/neighborhood":{"~:idx":-1000329,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000331},"~:district/name":"Lake Union"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000332},"~:neighborhood/name":"South Lake Union"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000333,"~:part":"~:db.part/user"},"~:community/name":"KOMO Communities - South Lake Union","~:community/url":"http://southlakeunion.komonews.com","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000332}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000334},"~:district/name":"Northeast"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000335},"~:neighborhood/name":"University District","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000334}},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000336,"~:part":"~:db.part/user"},"~:community/name":"KOMO Communities - U-District","~:community/url":"http://udistrict.komonews.com","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000335}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000337},"~:district/name":"Northeast"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000338},"~:neighborhood/name":"View Ridge","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000337}},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000339},"~:community/name":"KOMO Communities - View Ridge","~:community/url":"http://viewridge.komonews.com","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000338}},{"~:db/id":{"~:idx":-1000340,"~:part":"~:db.part/user"},"~:district/name":"Northwest"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000341},"~:neighborhood/name":"Wallingford","~:neighborhood/district":{"~:idx":-1000340,"~:part":"~:db.part/user"}},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000342,"~:part":"~:db.part/user"},"~:community/name":"KOMO Communities - Wallingford","~:community/url":"http://wallingford.komonews.com","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000341}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000343},"~:district/name":"Southwest"},{"~:db/id":{"~:idx":-1000344,"~:part":"~:db.part/user"},"~:neighborhood/name":"West Seattle"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000345},"~:community/name":"KOMO Communities - West Seattle","~:community/url":"http://westseattle.komonews.com","~:community/neighborhood":{"~:idx":-1000344,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000346,"~:part":"~:db.part/user"},"~:district/name":"North"},{"~:db/id":{"~:idx":-1000347,"~:part":"~:db.part/user"},"~:neighborhood/name":"Lake City"},{"~:community/category":["news","criminal activity","food","drink","reviews"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000348},"~:community/name":"Lake City Live","~:community/url":"http://www.lakecitylive.net/","~:community/neighborhood":{"~:idx":-1000347,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000349,"~:part":"~:db.part/user"},"~:district/name":"Northeast"},{"~:db/id":{"~:idx":-1000350,"~:part":"~:db.part/user"},"~:neighborhood/name":"Laurelhurst","~:neighborhood/district":{"~:idx":-1000349,"~:part":"~:db.part/user"}},{"~:community/category":["community club"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000351,"~:part":"~:db.part/user"},"~:community/name":"Laurelhurst Community Club","~:community/url":"http://www.laurelhurstcc.com/","~:community/neighborhood":{"~:idx":-1000350,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000352,"~:part":"~:db.part/user"},"~:district/name":"Central"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000353},"~:neighborhood/name":"Leschi","~:neighborhood/district":{"~:idx":-1000352,"~:part":"~:db.part/user"}},{"~:community/category":["planning","meeting times"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/email-list","~:db/id":{"~:idx":-1000354,"~:part":"~:db.part/user"},"~:community/name":"Leschi Community Council","~:community/url":"http://groups.google.com/group/LeschiCC?hl=en","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000353}},{"~:db/id":{"~:idx":-1000355,"~:part":"~:db.part/user"},"~:district/name":"Northwest"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000356},"~:neighborhood/name":"Licton Springs","~:neighborhood/district":{"~:idx":-1000355,"~:part":"~:db.part/user"}},{"~:community/category":["neighborhood council"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000357},"~:community/name":"Licton Springs Neighborhood ","~:community/url":"http://www.lictonsprings.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000356}},{"~:db/id":{"~:idx":-1000358,"~:part":"~:db.part/user"},"~:district/name":"Delridge"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000359},"~:neighborhood/name":"Delridge"},{"~:community/category":["watershed info"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000360},"~:community/name":"Longfellow Creek Community Website","~:community/url":"http://www.longfellowcreek.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000359}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000361},"~:district/name":"East"},{"~:db/id":{"~:idx":-1000362,"~:part":"~:db.part/user"},"~:neighborhood/name":"Madison Park"},{"~:community/category":["news","housing prices","events"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000363},"~:community/name":"Madison Park Blogger","~:community/url":"http://madisonparkblogger.blogspot.com/","~:community/neighborhood":{"~:idx":-1000362,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000364,"~:part":"~:db.part/user"},"~:district/name":"East"},{"~:db/id":{"~:idx":-1000365,"~:part":"~:db.part/user"},"~:neighborhood/name":"Madison Park"},{"~:community/category":["business association"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000366},"~:community/name":"Madison Park Business Association","~:community/url":"http://www.madisonparkseattle.com/","~:community/neighborhood":{"~:idx":-1000365,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000367},"~:district/name":"Central"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000368},"~:neighborhood/name":"Madrona","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000367}},{"~:community/category":["community group (moms)"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/email-list","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000369},"~:community/name":"Madrona Moms","~:community/url":"http://health.groups.yahoo.com/group/MadronaMoms/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000368}},{"~:db/id":{"~:idx":-1000370,"~:part":"~:db.part/user"},"~:district/name":"Central"},{"~:db/id":{"~:idx":-1000371,"~:part":"~:db.part/user"},"~:neighborhood/name":"Madrona"},{"~:community/category":["neighborhood community site: buying/selling","restaurants","favorite places","etc. Also community association meeting minutes"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/wiki","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000372},"~:community/name":"Madrona Neighborhood","~:community/url":"http://madrona.wetpaint.com/","~:community/neighborhood":{"~:idx":-1000371,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000373,"~:part":"~:db.part/user"},"~:district/name":"Magnolia/Queen Anne"},{"~:db/id":{"~:idx":-1000374,"~:part":"~:db.part/user"},"~:neighborhood/name":"Magnolia"},{"~:community/category":["planning issues"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000375},"~:community/name":"Magnolia Action Group","~:community/url":"http://www.orgsites.com/wa/mag/","~:community/neighborhood":{"~:idx":-1000374,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000376},"~:district/name":"Magnolia/Queen Anne"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000377},"~:neighborhood/name":"Magnolia"},{"~:community/category":["chamber of commerce"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000378},"~:community/name":"Magnolia Chamber of Commerce","~:community/url":"http://www.magnoliachamber.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000377}},{"~:db/id":{"~:idx":-1000379,"~:part":"~:db.part/user"},"~:district/name":"Magnolia/Queen Anne"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000380},"~:neighborhood/name":"Magnolia"},{"~:community/category":["historical society"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000381,"~:part":"~:db.part/user"},"~:community/name":"Magnolia Historical Society","~:community/url":"http://www.magnoliahistoricalsociety.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000380}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000382},"~:district/name":"Magnolia/Queen Anne"},{"~:db/id":{"~:idx":-1000383,"~:part":"~:db.part/user"},"~:neighborhood/name":"Magnolia"},{"~:community/category":["planning issues"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/wiki","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000384},"~:community/name":"Magnolia is Really Part of Seattle","~:community/url":"http://sleeplessinmagnolia.ning.com/","~:community/neighborhood":{"~:idx":-1000383,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000385,"~:part":"~:db.part/user"},"~:district/name":"Magnolia/Queen Anne"},{"~:db/id":{"~:idx":-1000386,"~:part":"~:db.part/user"},"~:neighborhood/name":"Magnolia"},{"~:community/category":["neighborhood association"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000387},"~:community/name":"Magnolia Neighborhood Planning Council","~:community/url":"http://magnolianpc.com/","~:community/neighborhood":{"~:idx":-1000386,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000388},"~:district/name":"Magnolia/Queen Anne"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000389},"~:neighborhood/name":"Magnolia"},{"~:community/category":["news","events","criminal activity","food"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/twitter","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000390},"~:community/name":"Magnolia Voice","~:community/url":"http://twitter.com/magnoliavoice","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000389}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000391},"~:district/name":"Magnolia/Queen Anne"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000392},"~:neighborhood/name":"Magnolia"},{"~:community/category":["news","events","criminal activity","food"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/facebook-page","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000393},"~:community/name":"Magnolia Voice","~:community/url":"http://www.facebook.com/pages/Magnolia-Voice-Seattle/116057104388","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000392}},{"~:db/id":{"~:idx":-1000394,"~:part":"~:db.part/user"},"~:district/name":"Magnolia/Queen Anne"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000395},"~:neighborhood/name":"Magnolia"},{"~:community/category":["news","events","criminal activity","food"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000396,"~:part":"~:db.part/user"},"~:community/name":"Magnolia Voice","~:community/url":"http://www.magnoliavoice.com/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000395}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000397},"~:district/name":"Northeast"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000398},"~:neighborhood/name":"Laurelhurst"},{"~:community/category":["garden"],"~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000399},"~:community/name":"Magnuson Community Garden","~:community/url":"http://cityofseattle.net/MAGNUSONGARDEN","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000398}},{"~:db/id":{"~:idx":-1000400,"~:part":"~:db.part/user"},"~:district/name":"Northeast"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000401},"~:neighborhood/name":"Laurelhurst"},{"~:community/category":["park issues"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000402},"~:community/name":"Magnuson Environmental Stewardship Alliance","~:community/url":"http://mesaseattle.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000401}},{"~:db/id":{"~:idx":-1000403,"~:part":"~:db.part/user"},"~:district/name":"Northeast"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000404},"~:neighborhood/name":"Maple Leaf","~:neighborhood/district":{"~:idx":-1000403,"~:part":"~:db.part/user"}},{"~:community/category":["community council","email list available"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000405,"~:part":"~:db.part/user"},"~:community/name":"Maple Leaf Community Council","~:community/url":"http://www.mapleleafcommunity.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000404}},{"~:db/id":{"~:idx":-1000406,"~:part":"~:db.part/user"},"~:district/name":"North"},{"~:db/id":{"~:idx":-1000407,"~:part":"~:db.part/user"},"~:neighborhood/name":"Maple Leaf"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/twitter","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000408},"~:community/name":"Maple Leaf Life","~:community/url":"http://twitter.com/mapleleaflife","~:community/neighborhood":{"~:idx":-1000407,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000409},"~:district/name":"North"},{"~:db/id":{"~:idx":-1000410,"~:part":"~:db.part/user"},"~:neighborhood/name":"Maple Leaf"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/facebook-page","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000411},"~:community/name":"Maple Leaf Life","~:community/url":"http://www.facebook.com/pages/Seattle-WA/Maple-Leaf-Life/298056021657","~:community/neighborhood":{"~:idx":-1000410,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000412,"~:part":"~:db.part/user"},"~:district/name":"North"},{"~:db/id":{"~:idx":-1000413,"~:part":"~:db.part/user"},"~:neighborhood/name":"Maple Leaf"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000414},"~:community/name":"Maple Leaf Life","~:community/url":"http://www.mapleleaflife.com/","~:community/neighborhood":{"~:idx":-1000413,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000415},"~:district/name":"Greater Duwamish"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000416},"~:neighborhood/name":"South Park"},{"~:community/category":["farmers' market"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000417,"~:part":"~:db.part/user"},"~:community/name":"Market On Wheels","~:community/url":"http://marketonwheels.wordpress.com/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000416}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000418},"~:district/name":"East"},{"~:db/id":{"~:idx":-1000419,"~:part":"~:db.part/user"},"~:neighborhood/name":"Miller Park","~:neighborhood/district":{"~:part":"~:db.part/user","~:idx":-1000418}},{"~:community/category":["neighborhood association; news","events"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000420},"~:community/name":"Miller Park Neighborhood Association","~:community/url":"http://millerparkseattle.blogspot.com/","~:community/neighborhood":{"~:idx":-1000419,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000421},"~:district/name":"Southeast"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000422},"~:neighborhood/name":"Rainier Valley"},{"~:community/category":["business association"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000423},"~:community/name":"MLK Business Association","~:community/url":"http://www.mlkba.org/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000422}},{"~:db/id":{"~:idx":-1000424,"~:part":"~:db.part/user"},"~:district/name":"Southwest"},{"~:db/id":{"~:idx":-1000425,"~:part":"~:db.part/user"},"~:neighborhood/name":"Morgan Junction","~:neighborhood/district":{"~:idx":-1000424,"~:part":"~:db.part/user"}},{"~:community/category":["community association"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:idx":-1000426,"~:part":"~:db.part/user"},"~:community/name":"Morgan Junction Community Association","~:community/url":"http://morganjunction.org/","~:community/neighborhood":{"~:idx":-1000425,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000427,"~:part":"~:db.part/user"},"~:district/name":"Southeast"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000428},"~:neighborhood/name":"Mount Baker","~:neighborhood/district":{"~:idx":-1000427,"~:part":"~:db.part/user"}},{"~:community/category":["community club"],"~:community/type":"~:community.type/email-list","~:db/id":{"~:idx":-1000429,"~:part":"~:db.part/user"},"~:community/name":"Mount Baker Community Club","~:community/url":"http://groups.yahoo.com/group/MBCCCommunityNotices/","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000428}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000430},"~:district/name":"Southeast"},{"~:db/id":{"~:idx":-1000431,"~:part":"~:db.part/user"},"~:neighborhood/name":"Mount Baker"},{"~:community/category":["community group"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000432},"~:community/name":"Mount Baker Neighborhood ","~:community/url":"http://www.mountbaker.org/index.php","~:community/neighborhood":{"~:idx":-1000431,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000433,"~:part":"~:db.part/user"},"~:district/name":"Northwest"},{"~:db/id":{"~:idx":-1000434,"~:part":"~:db.part/user"},"~:neighborhood/name":"Green Lake"},{"~:community/category":["news","events","food"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000435,"~:part":"~:db.part/user"},"~:community/name":"My Greenlake Blog","~:community/url":"http://www.mygreenlake.com/","~:community/neighborhood":{"~:idx":-1000434,"~:part":"~:db.part/user"}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000436},"~:district/name":"Ballard"},{"~:db/id":{"~:idx":-1000437,"~:part":"~:db.part/user"},"~:neighborhood/name":"Ballard"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000438},"~:community/name":"MyBallard","~:community/url":"http://www.myballard.com/","~:community/neighborhood":{"~:idx":-1000437,"~:part":"~:db.part/user"}},{"~:db/id":{"~:idx":-1000439,"~:part":"~:db.part/user"},"~:district/name":"Northwest"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000440},"~:neighborhood/name":"Wallingford"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/blog","~:db/id":{"~:idx":-1000441,"~:part":"~:db.part/user"},"~:community/name":"MyWallingford","~:community/url":"http://mywallingford.com","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000440}},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000442},"~:district/name":"Northwest"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000443},"~:neighborhood/name":"Wallingford"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/twitter","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000444},"~:community/name":"MyWallingford","~:community/url":"http://twitter.com/mywallingford","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000443}},{"~:db/id":{"~:idx":-1000445,"~:part":"~:db.part/user"},"~:district/name":"Northwest"},{"~:db/id":{"~:part":"~:db.part/user","~:idx":-1000446},"~:neighborhood/name":"Wallingford"},{"~:community/category":["news","events","human interest","criminal activity","shopping"],"~:community/orgtype":"~:community.orgtype/commercial","~:community/type":"~:community.type/facebook-page","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000447},"~:community/name":"MyWallingford","~:community/url":"http://www.facebook.com/MyWallingford?ref=ts","~:community/neighborhood":{"~:part":"~:db.part/user","~:idx":-1000446}},{"~:db/id":{"~:idx":-1000448,"~:part":"~:db.part/user"},"~:district/name":"Delridge"},{"~:db/id":{"~:idx":-1000449,"~:part":"~:db.part/user"},"~:neighborhood/name":"Delridge"},{"~:community/category":["environmental conservation"],"~:community/orgtype":"~:community.orgtype/community","~:community/type":"~:community.type/website","~:db/id":{"~:part":"~:db.part/user","~:idx":-1000450},"~:community/name":"Nature Consortium","~:community/url":"http://www.naturec.org","~:community/neighborhood":{"~:idx":-1000449,"~:part":"~:db.part/user"}}] -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.0.0" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" 8 | integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== 9 | dependencies: 10 | "@babel/highlight" "^7.0.0" 11 | 12 | "@babel/highlight@^7.0.0": 13 | version "7.5.0" 14 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" 15 | integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== 16 | dependencies: 17 | chalk "^2.0.0" 18 | esutils "^2.0.2" 19 | js-tokens "^4.0.0" 20 | 21 | "@samverschueren/stream-to-observable@^0.3.0": 22 | version "0.3.0" 23 | resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" 24 | integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== 25 | dependencies: 26 | any-observable "^0.3.0" 27 | 28 | "@types/eslint-visitor-keys@^1.0.0": 29 | version "1.0.0" 30 | resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" 31 | integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== 32 | 33 | "@types/events@*": 34 | version "3.0.0" 35 | resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" 36 | integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== 37 | 38 | "@types/glob@^7.1.1": 39 | version "7.1.1" 40 | resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" 41 | integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== 42 | dependencies: 43 | "@types/events" "*" 44 | "@types/minimatch" "*" 45 | "@types/node" "*" 46 | 47 | "@types/minimatch@*": 48 | version "3.0.3" 49 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" 50 | integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== 51 | 52 | "@types/node@*": 53 | version "12.6.2" 54 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.2.tgz#a5ccec6abb6060d5f20d256fb03ed743e9774999" 55 | integrity sha512-gojym4tX0FWeV2gsW4Xmzo5wxGjXGm550oVUII7f7G5o4BV6c7DBdiG1RRQd+y1bvqRyYtPfMK85UM95vsapqQ== 56 | 57 | "@types/node@^12.0.10": 58 | version "12.0.10" 59 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.10.tgz#51babf9c7deadd5343620055fc8aff7995c8b031" 60 | integrity sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ== 61 | 62 | "@types/normalize-package-data@^2.4.0": 63 | version "2.4.0" 64 | resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" 65 | integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== 66 | 67 | "@typescript-eslint/eslint-plugin@^1.11.0": 68 | version "1.11.0" 69 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.11.0.tgz#870f752c520db04db6d3668af7479026a6f2fb9a" 70 | integrity sha512-mXv9ccCou89C8/4avKHuPB2WkSZyY/XcTQUXd5LFZAcLw1I3mWYVjUu6eS9Ja0QkP/ClolbcW9tb3Ov/pMdcqw== 71 | dependencies: 72 | "@typescript-eslint/experimental-utils" "1.11.0" 73 | eslint-utils "^1.3.1" 74 | functional-red-black-tree "^1.0.1" 75 | regexpp "^2.0.1" 76 | tsutils "^3.7.0" 77 | 78 | "@typescript-eslint/experimental-utils@1.11.0": 79 | version "1.11.0" 80 | resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.11.0.tgz#594abe47091cbeabac1d6f9cfed06d0ad99eb7e3" 81 | integrity sha512-7LbfaqF6B8oa8cp/315zxKk8FFzosRzzhF8Kn/ZRsRsnpm7Qcu25cR/9RnAQo5utZ2KIWVgaALr+ZmcbG47ruw== 82 | dependencies: 83 | "@typescript-eslint/typescript-estree" "1.11.0" 84 | eslint-scope "^4.0.0" 85 | 86 | "@typescript-eslint/parser@^1.11.0": 87 | version "1.11.0" 88 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.11.0.tgz#2f6d4f7e64eeb1e7c25b422f8df14d0c9e508e36" 89 | integrity sha512-5xBExyXaxVyczrZvbRKEXvaTUFFq7gIM9BynXukXZE0zF3IQP/FxF4mPmmh3gJ9egafZFqByCpPTFm3dk4SY7Q== 90 | dependencies: 91 | "@types/eslint-visitor-keys" "^1.0.0" 92 | "@typescript-eslint/experimental-utils" "1.11.0" 93 | "@typescript-eslint/typescript-estree" "1.11.0" 94 | eslint-visitor-keys "^1.0.0" 95 | 96 | "@typescript-eslint/typescript-estree@1.11.0": 97 | version "1.11.0" 98 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.11.0.tgz#b7b5782aab22e4b3b6d84633652c9f41e62d37d5" 99 | integrity sha512-fquUHF5tAx1sM2OeRCC7wVxFd1iMELWMGCzOSmJ3pLzArj9+kRixdlC4d5MncuzXpjEqc6045p3KwM0o/3FuUA== 100 | dependencies: 101 | lodash.unescape "4.0.1" 102 | semver "5.5.0" 103 | 104 | acorn-jsx@^5.0.0: 105 | version "5.0.1" 106 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" 107 | integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== 108 | 109 | acorn@^6.0.7: 110 | version "6.2.0" 111 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3" 112 | integrity sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw== 113 | 114 | ajv@^6.10.0, ajv@^6.9.1: 115 | version "6.10.1" 116 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.1.tgz#ebf8d3af22552df9dd049bfbe50cc2390e823593" 117 | integrity sha512-w1YQaVGNC6t2UCPjEawK/vo/dG8OOrVtUmhBT1uJJYxbl5kU2Tj3v6LGqBcsysN1yhuCStJCCA3GqdvKY8sqXQ== 118 | dependencies: 119 | fast-deep-equal "^2.0.1" 120 | fast-json-stable-stringify "^2.0.0" 121 | json-schema-traverse "^0.4.1" 122 | uri-js "^4.2.2" 123 | 124 | ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: 125 | version "3.2.0" 126 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" 127 | integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== 128 | 129 | ansi-regex@^2.0.0: 130 | version "2.1.1" 131 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 132 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 133 | 134 | ansi-regex@^3.0.0: 135 | version "3.0.0" 136 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 137 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 138 | 139 | ansi-regex@^4.1.0: 140 | version "4.1.0" 141 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 142 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 143 | 144 | ansi-styles@^2.2.1: 145 | version "2.2.1" 146 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 147 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= 148 | 149 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 150 | version "3.2.1" 151 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 152 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 153 | dependencies: 154 | color-convert "^1.9.0" 155 | 156 | any-observable@^0.3.0: 157 | version "0.3.0" 158 | resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" 159 | integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== 160 | 161 | arg@^4.1.0: 162 | version "4.1.0" 163 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.0.tgz#583c518199419e0037abb74062c37f8519e575f0" 164 | integrity sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg== 165 | 166 | argparse@^1.0.7: 167 | version "1.0.10" 168 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 169 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 170 | dependencies: 171 | sprintf-js "~1.0.2" 172 | 173 | array-differ@^2.0.3: 174 | version "2.1.0" 175 | resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" 176 | integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== 177 | 178 | array-union@^1.0.1, array-union@^1.0.2: 179 | version "1.0.2" 180 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 181 | integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= 182 | dependencies: 183 | array-uniq "^1.0.1" 184 | 185 | array-uniq@^1.0.1: 186 | version "1.0.3" 187 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 188 | integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= 189 | 190 | arrify@^1.0.1: 191 | version "1.0.1" 192 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 193 | integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= 194 | 195 | astral-regex@^1.0.0: 196 | version "1.0.0" 197 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 198 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 199 | 200 | balanced-match@^1.0.0: 201 | version "1.0.0" 202 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 203 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 204 | 205 | brace-expansion@^1.1.7: 206 | version "1.1.11" 207 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 208 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 209 | dependencies: 210 | balanced-match "^1.0.0" 211 | concat-map "0.0.1" 212 | 213 | braces@^3.0.1: 214 | version "3.0.2" 215 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 216 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 217 | dependencies: 218 | fill-range "^7.0.1" 219 | 220 | buffer-from@^1.0.0: 221 | version "1.1.1" 222 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 223 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 224 | 225 | caller-callsite@^2.0.0: 226 | version "2.0.0" 227 | resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" 228 | integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= 229 | dependencies: 230 | callsites "^2.0.0" 231 | 232 | caller-path@^2.0.0: 233 | version "2.0.0" 234 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" 235 | integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= 236 | dependencies: 237 | caller-callsite "^2.0.0" 238 | 239 | callsites@^2.0.0: 240 | version "2.0.0" 241 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" 242 | integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= 243 | 244 | callsites@^3.0.0: 245 | version "3.1.0" 246 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 247 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 248 | 249 | chalk@^1.0.0, chalk@^1.1.3: 250 | version "1.1.3" 251 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 252 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= 253 | dependencies: 254 | ansi-styles "^2.2.1" 255 | escape-string-regexp "^1.0.2" 256 | has-ansi "^2.0.0" 257 | strip-ansi "^3.0.0" 258 | supports-color "^2.0.0" 259 | 260 | chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: 261 | version "2.4.2" 262 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 263 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 264 | dependencies: 265 | ansi-styles "^3.2.1" 266 | escape-string-regexp "^1.0.5" 267 | supports-color "^5.3.0" 268 | 269 | chardet@^0.7.0: 270 | version "0.7.0" 271 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 272 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== 273 | 274 | ci-info@^2.0.0: 275 | version "2.0.0" 276 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 277 | integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== 278 | 279 | cli-cursor@^2.0.0, cli-cursor@^2.1.0: 280 | version "2.1.0" 281 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 282 | integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= 283 | dependencies: 284 | restore-cursor "^2.0.0" 285 | 286 | cli-truncate@^0.2.1: 287 | version "0.2.1" 288 | resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" 289 | integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= 290 | dependencies: 291 | slice-ansi "0.0.4" 292 | string-width "^1.0.1" 293 | 294 | cli-width@^2.0.0: 295 | version "2.2.0" 296 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" 297 | integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= 298 | 299 | code-point-at@^1.0.0: 300 | version "1.1.0" 301 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 302 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 303 | 304 | color-convert@^1.9.0: 305 | version "1.9.3" 306 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 307 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 308 | dependencies: 309 | color-name "1.1.3" 310 | 311 | color-name@1.1.3: 312 | version "1.1.3" 313 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 314 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 315 | 316 | commander@^2.20.0: 317 | version "2.20.0" 318 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" 319 | integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== 320 | 321 | concat-map@0.0.1: 322 | version "0.0.1" 323 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 324 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 325 | 326 | cosmiconfig@^5.2.1: 327 | version "5.2.1" 328 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" 329 | integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== 330 | dependencies: 331 | import-fresh "^2.0.0" 332 | is-directory "^0.3.1" 333 | js-yaml "^3.13.1" 334 | parse-json "^4.0.0" 335 | 336 | cross-spawn@^5.0.1: 337 | version "5.1.0" 338 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 339 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= 340 | dependencies: 341 | lru-cache "^4.0.1" 342 | shebang-command "^1.2.0" 343 | which "^1.2.9" 344 | 345 | cross-spawn@^6.0.0, cross-spawn@^6.0.5: 346 | version "6.0.5" 347 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 348 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 349 | dependencies: 350 | nice-try "^1.0.4" 351 | path-key "^2.0.1" 352 | semver "^5.5.0" 353 | shebang-command "^1.2.0" 354 | which "^1.2.9" 355 | 356 | date-fns@^1.27.2: 357 | version "1.30.1" 358 | resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" 359 | integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== 360 | 361 | debug@^4.0.1, debug@^4.1.1: 362 | version "4.1.1" 363 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 364 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 365 | dependencies: 366 | ms "^2.1.1" 367 | 368 | dedent@^0.7.0: 369 | version "0.7.0" 370 | resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" 371 | integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= 372 | 373 | deep-is@~0.1.3: 374 | version "0.1.3" 375 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 376 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 377 | 378 | del@^4.1.1: 379 | version "4.1.1" 380 | resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" 381 | integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== 382 | dependencies: 383 | "@types/glob" "^7.1.1" 384 | globby "^6.1.0" 385 | is-path-cwd "^2.0.0" 386 | is-path-in-cwd "^2.0.0" 387 | p-map "^2.0.0" 388 | pify "^4.0.1" 389 | rimraf "^2.6.3" 390 | 391 | diff@^4.0.1: 392 | version "4.0.1" 393 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" 394 | integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== 395 | 396 | doctrine@^3.0.0: 397 | version "3.0.0" 398 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 399 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 400 | dependencies: 401 | esutils "^2.0.2" 402 | 403 | elegant-spinner@^1.0.1: 404 | version "1.0.1" 405 | resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" 406 | integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= 407 | 408 | emoji-regex@^7.0.1: 409 | version "7.0.3" 410 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 411 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 412 | 413 | end-of-stream@^1.1.0: 414 | version "1.4.1" 415 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" 416 | integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== 417 | dependencies: 418 | once "^1.4.0" 419 | 420 | error-ex@^1.3.1: 421 | version "1.3.2" 422 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 423 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 424 | dependencies: 425 | is-arrayish "^0.2.1" 426 | 427 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 428 | version "1.0.5" 429 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 430 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 431 | 432 | eslint-config-prettier@^6.0.0: 433 | version "6.0.0" 434 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz#f429a53bde9fc7660e6353910fd996d6284d3c25" 435 | integrity sha512-vDrcCFE3+2ixNT5H83g28bO/uYAwibJxerXPj+E7op4qzBCsAV36QfvdAyVOoNxKAH2Os/e01T/2x++V0LPukA== 436 | dependencies: 437 | get-stdin "^6.0.0" 438 | 439 | eslint-plugin-prettier@^3.1.0: 440 | version "3.1.0" 441 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz#8695188f95daa93b0dc54b249347ca3b79c4686d" 442 | integrity sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA== 443 | dependencies: 444 | prettier-linter-helpers "^1.0.0" 445 | 446 | eslint-scope@^4.0.0, eslint-scope@^4.0.3: 447 | version "4.0.3" 448 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" 449 | integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== 450 | dependencies: 451 | esrecurse "^4.1.0" 452 | estraverse "^4.1.1" 453 | 454 | eslint-utils@^1.3.1: 455 | version "1.3.1" 456 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" 457 | integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== 458 | 459 | eslint-visitor-keys@^1.0.0: 460 | version "1.0.0" 461 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" 462 | integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== 463 | 464 | eslint@^6.0.1: 465 | version "6.0.1" 466 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.0.1.tgz#4a32181d72cb999d6f54151df7d337131f81cda7" 467 | integrity sha512-DyQRaMmORQ+JsWShYsSg4OPTjY56u1nCjAmICrE8vLWqyLKxhFXOthwMj1SA8xwfrv0CofLNVnqbfyhwCkaO0w== 468 | dependencies: 469 | "@babel/code-frame" "^7.0.0" 470 | ajv "^6.10.0" 471 | chalk "^2.1.0" 472 | cross-spawn "^6.0.5" 473 | debug "^4.0.1" 474 | doctrine "^3.0.0" 475 | eslint-scope "^4.0.3" 476 | eslint-utils "^1.3.1" 477 | eslint-visitor-keys "^1.0.0" 478 | espree "^6.0.0" 479 | esquery "^1.0.1" 480 | esutils "^2.0.2" 481 | file-entry-cache "^5.0.1" 482 | functional-red-black-tree "^1.0.1" 483 | glob-parent "^3.1.0" 484 | globals "^11.7.0" 485 | ignore "^4.0.6" 486 | import-fresh "^3.0.0" 487 | imurmurhash "^0.1.4" 488 | inquirer "^6.2.2" 489 | is-glob "^4.0.0" 490 | js-yaml "^3.13.1" 491 | json-stable-stringify-without-jsonify "^1.0.1" 492 | levn "^0.3.0" 493 | lodash "^4.17.11" 494 | minimatch "^3.0.4" 495 | mkdirp "^0.5.1" 496 | natural-compare "^1.4.0" 497 | optionator "^0.8.2" 498 | progress "^2.0.0" 499 | regexpp "^2.0.1" 500 | semver "^5.5.1" 501 | strip-ansi "^4.0.0" 502 | strip-json-comments "^2.0.1" 503 | table "^5.2.3" 504 | text-table "^0.2.0" 505 | 506 | espree@^6.0.0: 507 | version "6.0.0" 508 | resolved "https://registry.yarnpkg.com/espree/-/espree-6.0.0.tgz#716fc1f5a245ef5b9a7fdb1d7b0d3f02322e75f6" 509 | integrity sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q== 510 | dependencies: 511 | acorn "^6.0.7" 512 | acorn-jsx "^5.0.0" 513 | eslint-visitor-keys "^1.0.0" 514 | 515 | esprima@^4.0.0: 516 | version "4.0.1" 517 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 518 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 519 | 520 | esquery@^1.0.1: 521 | version "1.0.1" 522 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" 523 | integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== 524 | dependencies: 525 | estraverse "^4.0.0" 526 | 527 | esrecurse@^4.1.0: 528 | version "4.2.1" 529 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" 530 | integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== 531 | dependencies: 532 | estraverse "^4.1.0" 533 | 534 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: 535 | version "4.2.0" 536 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 537 | integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= 538 | 539 | esutils@^2.0.2: 540 | version "2.0.2" 541 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 542 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= 543 | 544 | event-lite@^0.1.1: 545 | version "0.1.2" 546 | resolved "https://registry.yarnpkg.com/event-lite/-/event-lite-0.1.2.tgz#838a3e0fdddef8cc90f128006c8e55a4e4e4c11b" 547 | integrity sha512-HnSYx1BsJ87/p6swwzv+2v6B4X+uxUteoDfRxsAb1S1BePzQqOLevVmkdA15GHJVd9A9Ok6wygUR18Hu0YeV9g== 548 | 549 | execa@^0.8.0: 550 | version "0.8.0" 551 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" 552 | integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= 553 | dependencies: 554 | cross-spawn "^5.0.1" 555 | get-stream "^3.0.0" 556 | is-stream "^1.1.0" 557 | npm-run-path "^2.0.0" 558 | p-finally "^1.0.0" 559 | signal-exit "^3.0.0" 560 | strip-eof "^1.0.0" 561 | 562 | execa@^1.0.0: 563 | version "1.0.0" 564 | resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" 565 | integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== 566 | dependencies: 567 | cross-spawn "^6.0.0" 568 | get-stream "^4.0.0" 569 | is-stream "^1.1.0" 570 | npm-run-path "^2.0.0" 571 | p-finally "^1.0.0" 572 | signal-exit "^3.0.0" 573 | strip-eof "^1.0.0" 574 | 575 | execa@^2.0.1: 576 | version "2.0.3" 577 | resolved "https://registry.yarnpkg.com/execa/-/execa-2.0.3.tgz#4b84301b33042cfb622771e886ed0b10e5634642" 578 | integrity sha512-iM124nlyGSrXmuyZF1EMe83ESY2chIYVyDRZKgmcDynid2Q2v/+GuE7gNMl6Sy9Niwf4MC0DDxagOxeMPjuLsw== 579 | dependencies: 580 | cross-spawn "^6.0.5" 581 | get-stream "^5.0.0" 582 | is-stream "^2.0.0" 583 | merge-stream "^2.0.0" 584 | npm-run-path "^3.0.0" 585 | onetime "^5.1.0" 586 | p-finally "^2.0.0" 587 | signal-exit "^3.0.2" 588 | strip-final-newline "^2.0.0" 589 | 590 | external-editor@^3.0.3: 591 | version "3.1.0" 592 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" 593 | integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== 594 | dependencies: 595 | chardet "^0.7.0" 596 | iconv-lite "^0.4.24" 597 | tmp "^0.0.33" 598 | 599 | fast-deep-equal@^2.0.1: 600 | version "2.0.1" 601 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 602 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= 603 | 604 | fast-diff@^1.1.2: 605 | version "1.2.0" 606 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" 607 | integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== 608 | 609 | fast-json-stable-stringify@^2.0.0: 610 | version "2.0.0" 611 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 612 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= 613 | 614 | fast-levenshtein@~2.0.4: 615 | version "2.0.6" 616 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 617 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 618 | 619 | figures@^1.7.0: 620 | version "1.7.0" 621 | resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" 622 | integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= 623 | dependencies: 624 | escape-string-regexp "^1.0.5" 625 | object-assign "^4.1.0" 626 | 627 | figures@^2.0.0: 628 | version "2.0.0" 629 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 630 | integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= 631 | dependencies: 632 | escape-string-regexp "^1.0.5" 633 | 634 | file-entry-cache@^5.0.1: 635 | version "5.0.1" 636 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" 637 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== 638 | dependencies: 639 | flat-cache "^2.0.1" 640 | 641 | fill-range@^7.0.1: 642 | version "7.0.1" 643 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 644 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 645 | dependencies: 646 | to-regex-range "^5.0.1" 647 | 648 | find-up@^2.1.0: 649 | version "2.1.0" 650 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 651 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 652 | dependencies: 653 | locate-path "^2.0.0" 654 | 655 | find-up@^4.0.0: 656 | version "4.1.0" 657 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 658 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 659 | dependencies: 660 | locate-path "^5.0.0" 661 | path-exists "^4.0.0" 662 | 663 | flat-cache@^2.0.1: 664 | version "2.0.1" 665 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 666 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== 667 | dependencies: 668 | flatted "^2.0.0" 669 | rimraf "2.6.3" 670 | write "1.0.3" 671 | 672 | flatted@^2.0.0: 673 | version "2.0.1" 674 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" 675 | integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== 676 | 677 | fs.realpath@^1.0.0: 678 | version "1.0.0" 679 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 680 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 681 | 682 | functional-red-black-tree@^1.0.1: 683 | version "1.0.1" 684 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 685 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 686 | 687 | get-own-enumerable-property-symbols@^3.0.0: 688 | version "3.0.0" 689 | resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" 690 | integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== 691 | 692 | get-stdin@^6.0.0: 693 | version "6.0.0" 694 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" 695 | integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== 696 | 697 | get-stdin@^7.0.0: 698 | version "7.0.0" 699 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" 700 | integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== 701 | 702 | get-stream@^3.0.0: 703 | version "3.0.0" 704 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 705 | integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= 706 | 707 | get-stream@^4.0.0: 708 | version "4.1.0" 709 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 710 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 711 | dependencies: 712 | pump "^3.0.0" 713 | 714 | get-stream@^5.0.0: 715 | version "5.1.0" 716 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" 717 | integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== 718 | dependencies: 719 | pump "^3.0.0" 720 | 721 | glob-parent@^3.1.0: 722 | version "3.1.0" 723 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" 724 | integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= 725 | dependencies: 726 | is-glob "^3.1.0" 727 | path-dirname "^1.0.0" 728 | 729 | glob@^7.0.3, glob@^7.1.3: 730 | version "7.1.4" 731 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" 732 | integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== 733 | dependencies: 734 | fs.realpath "^1.0.0" 735 | inflight "^1.0.4" 736 | inherits "2" 737 | minimatch "^3.0.4" 738 | once "^1.3.0" 739 | path-is-absolute "^1.0.0" 740 | 741 | globals@^11.7.0: 742 | version "11.12.0" 743 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 744 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 745 | 746 | globby@^6.1.0: 747 | version "6.1.0" 748 | resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" 749 | integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= 750 | dependencies: 751 | array-union "^1.0.1" 752 | glob "^7.0.3" 753 | object-assign "^4.0.1" 754 | pify "^2.0.0" 755 | pinkie-promise "^2.0.0" 756 | 757 | graphql-crunch@^2.1.0: 758 | version "2.1.0" 759 | resolved "https://registry.yarnpkg.com/graphql-crunch/-/graphql-crunch-2.1.0.tgz#2ca7f3c0a48f88f8312450925d87a48fc8c9eaed" 760 | integrity sha512-oMnYlMGZ3YKT+uRFZN7Iu9rEAGb4tC6bXjg8BKAJoIb2ZQf4TnxTDTOm7JzbM8y74buw0sd6vehNX/Atw7/Uog== 761 | 762 | has-ansi@^2.0.0: 763 | version "2.0.0" 764 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 765 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= 766 | dependencies: 767 | ansi-regex "^2.0.0" 768 | 769 | has-flag@^3.0.0: 770 | version "3.0.0" 771 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 772 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 773 | 774 | hosted-git-info@^2.1.4: 775 | version "2.7.1" 776 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" 777 | integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== 778 | 779 | husky@^3.0.0: 780 | version "3.0.0" 781 | resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.0.tgz#de63821a7049dc412b1afd753c259e2f6e227562" 782 | integrity sha512-lKMEn7bRK+7f5eWPNGclDVciYNQt0GIkAQmhKl+uHP1qFzoN0h92kmH9HZ8PCwyVA2EQPD8KHf0FYWqnTxau+Q== 783 | dependencies: 784 | cosmiconfig "^5.2.1" 785 | execa "^1.0.0" 786 | get-stdin "^7.0.0" 787 | is-ci "^2.0.0" 788 | opencollective-postinstall "^2.0.2" 789 | pkg-dir "^4.2.0" 790 | please-upgrade-node "^3.1.1" 791 | read-pkg "^5.1.1" 792 | run-node "^1.0.0" 793 | slash "^3.0.0" 794 | 795 | iconv-lite@^0.4.24: 796 | version "0.4.24" 797 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 798 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 799 | dependencies: 800 | safer-buffer ">= 2.1.2 < 3" 801 | 802 | ieee754@^1.1.8: 803 | version "1.1.13" 804 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" 805 | integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== 806 | 807 | ignore@^3.3.7: 808 | version "3.3.10" 809 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" 810 | integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== 811 | 812 | ignore@^4.0.6: 813 | version "4.0.6" 814 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 815 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 816 | 817 | import-fresh@^2.0.0: 818 | version "2.0.0" 819 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" 820 | integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= 821 | dependencies: 822 | caller-path "^2.0.0" 823 | resolve-from "^3.0.0" 824 | 825 | import-fresh@^3.0.0: 826 | version "3.1.0" 827 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" 828 | integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== 829 | dependencies: 830 | parent-module "^1.0.0" 831 | resolve-from "^4.0.0" 832 | 833 | imurmurhash@^0.1.4: 834 | version "0.1.4" 835 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 836 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 837 | 838 | indent-string@^3.0.0: 839 | version "3.2.0" 840 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" 841 | integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= 842 | 843 | inflight@^1.0.4: 844 | version "1.0.6" 845 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 846 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 847 | dependencies: 848 | once "^1.3.0" 849 | wrappy "1" 850 | 851 | inherits@2: 852 | version "2.0.4" 853 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 854 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 855 | 856 | inquirer@^6.2.2: 857 | version "6.4.1" 858 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.4.1.tgz#7bd9e5ab0567cd23b41b0180b68e0cfa82fc3c0b" 859 | integrity sha512-/Jw+qPZx4EDYsaT6uz7F4GJRNFMRdKNeUZw3ZnKV8lyuUgz/YWRCSUAJMZSVhSq4Ec0R2oYnyi6b3d4JXcL5Nw== 860 | dependencies: 861 | ansi-escapes "^3.2.0" 862 | chalk "^2.4.2" 863 | cli-cursor "^2.1.0" 864 | cli-width "^2.0.0" 865 | external-editor "^3.0.3" 866 | figures "^2.0.0" 867 | lodash "^4.17.11" 868 | mute-stream "0.0.7" 869 | run-async "^2.2.0" 870 | rxjs "^6.4.0" 871 | string-width "^2.1.0" 872 | strip-ansi "^5.1.0" 873 | through "^2.3.6" 874 | 875 | int64-buffer@^0.1.9: 876 | version "0.1.10" 877 | resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-0.1.10.tgz#277b228a87d95ad777d07c13832022406a473423" 878 | integrity sha1-J3siiofZWtd30HwTgyAiQGpHNCM= 879 | 880 | is-arrayish@^0.2.1: 881 | version "0.2.1" 882 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 883 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 884 | 885 | is-ci@^2.0.0: 886 | version "2.0.0" 887 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" 888 | integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== 889 | dependencies: 890 | ci-info "^2.0.0" 891 | 892 | is-directory@^0.3.1: 893 | version "0.3.1" 894 | resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" 895 | integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= 896 | 897 | is-extglob@^2.1.0, is-extglob@^2.1.1: 898 | version "2.1.1" 899 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 900 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 901 | 902 | is-fullwidth-code-point@^1.0.0: 903 | version "1.0.0" 904 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 905 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 906 | dependencies: 907 | number-is-nan "^1.0.0" 908 | 909 | is-fullwidth-code-point@^2.0.0: 910 | version "2.0.0" 911 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 912 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 913 | 914 | is-glob@^3.1.0: 915 | version "3.1.0" 916 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" 917 | integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= 918 | dependencies: 919 | is-extglob "^2.1.0" 920 | 921 | is-glob@^4.0.0: 922 | version "4.0.1" 923 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 924 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 925 | dependencies: 926 | is-extglob "^2.1.1" 927 | 928 | is-number@^7.0.0: 929 | version "7.0.0" 930 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 931 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 932 | 933 | is-obj@^1.0.1: 934 | version "1.0.1" 935 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 936 | integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= 937 | 938 | is-observable@^1.1.0: 939 | version "1.1.0" 940 | resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" 941 | integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== 942 | dependencies: 943 | symbol-observable "^1.1.0" 944 | 945 | is-path-cwd@^2.0.0: 946 | version "2.2.0" 947 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" 948 | integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== 949 | 950 | is-path-in-cwd@^2.0.0: 951 | version "2.1.0" 952 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" 953 | integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== 954 | dependencies: 955 | is-path-inside "^2.1.0" 956 | 957 | is-path-inside@^2.1.0: 958 | version "2.1.0" 959 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" 960 | integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== 961 | dependencies: 962 | path-is-inside "^1.0.2" 963 | 964 | is-promise@^2.1.0: 965 | version "2.1.0" 966 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 967 | integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= 968 | 969 | is-regexp@^1.0.0: 970 | version "1.0.0" 971 | resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" 972 | integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= 973 | 974 | is-stream@^1.1.0: 975 | version "1.1.0" 976 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 977 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 978 | 979 | is-stream@^2.0.0: 980 | version "2.0.0" 981 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" 982 | integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== 983 | 984 | isarray@^1.0.0: 985 | version "1.0.0" 986 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 987 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 988 | 989 | isexe@^2.0.0: 990 | version "2.0.0" 991 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 992 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 993 | 994 | js-tokens@^4.0.0: 995 | version "4.0.0" 996 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 997 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 998 | 999 | js-yaml@^3.13.1: 1000 | version "3.13.1" 1001 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 1002 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 1003 | dependencies: 1004 | argparse "^1.0.7" 1005 | esprima "^4.0.0" 1006 | 1007 | json-parse-better-errors@^1.0.1: 1008 | version "1.0.2" 1009 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 1010 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 1011 | 1012 | json-schema-traverse@^0.4.1: 1013 | version "0.4.1" 1014 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1015 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1016 | 1017 | json-stable-stringify-without-jsonify@^1.0.1: 1018 | version "1.0.1" 1019 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1020 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1021 | 1022 | levn@^0.3.0, levn@~0.3.0: 1023 | version "0.3.0" 1024 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1025 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 1026 | dependencies: 1027 | prelude-ls "~1.1.2" 1028 | type-check "~0.3.2" 1029 | 1030 | lint-staged@^9.2.0: 1031 | version "9.2.0" 1032 | resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-9.2.0.tgz#155e5723dffdaa55d252c47bab05a2962c1e9781" 1033 | integrity sha512-K/CQWcxYunc8lGMNTFvtI4+ybJcHW3K4Ghudz2OrJhIWdW/i1WWu9rGiVj4yJ0+D/xh8a08kp5slt89VZC9Eqg== 1034 | dependencies: 1035 | chalk "^2.4.2" 1036 | commander "^2.20.0" 1037 | cosmiconfig "^5.2.1" 1038 | debug "^4.1.1" 1039 | dedent "^0.7.0" 1040 | del "^4.1.1" 1041 | execa "^2.0.1" 1042 | listr "^0.14.3" 1043 | log-symbols "^3.0.0" 1044 | micromatch "^4.0.2" 1045 | please-upgrade-node "^3.1.1" 1046 | string-argv "^0.3.0" 1047 | stringify-object "^3.3.0" 1048 | 1049 | listr-silent-renderer@^1.1.1: 1050 | version "1.1.1" 1051 | resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" 1052 | integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= 1053 | 1054 | listr-update-renderer@^0.5.0: 1055 | version "0.5.0" 1056 | resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" 1057 | integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== 1058 | dependencies: 1059 | chalk "^1.1.3" 1060 | cli-truncate "^0.2.1" 1061 | elegant-spinner "^1.0.1" 1062 | figures "^1.7.0" 1063 | indent-string "^3.0.0" 1064 | log-symbols "^1.0.2" 1065 | log-update "^2.3.0" 1066 | strip-ansi "^3.0.1" 1067 | 1068 | listr-verbose-renderer@^0.5.0: 1069 | version "0.5.0" 1070 | resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" 1071 | integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== 1072 | dependencies: 1073 | chalk "^2.4.1" 1074 | cli-cursor "^2.1.0" 1075 | date-fns "^1.27.2" 1076 | figures "^2.0.0" 1077 | 1078 | listr@^0.14.3: 1079 | version "0.14.3" 1080 | resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" 1081 | integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== 1082 | dependencies: 1083 | "@samverschueren/stream-to-observable" "^0.3.0" 1084 | is-observable "^1.1.0" 1085 | is-promise "^2.1.0" 1086 | is-stream "^1.1.0" 1087 | listr-silent-renderer "^1.1.1" 1088 | listr-update-renderer "^0.5.0" 1089 | listr-verbose-renderer "^0.5.0" 1090 | p-map "^2.0.0" 1091 | rxjs "^6.3.3" 1092 | 1093 | locate-path@^2.0.0: 1094 | version "2.0.0" 1095 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 1096 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 1097 | dependencies: 1098 | p-locate "^2.0.0" 1099 | path-exists "^3.0.0" 1100 | 1101 | locate-path@^5.0.0: 1102 | version "5.0.0" 1103 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1104 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1105 | dependencies: 1106 | p-locate "^4.1.0" 1107 | 1108 | lodash.unescape@4.0.1: 1109 | version "4.0.1" 1110 | resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" 1111 | integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= 1112 | 1113 | lodash@^4.17.11: 1114 | version "4.17.14" 1115 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" 1116 | integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== 1117 | 1118 | log-symbols@^1.0.2: 1119 | version "1.0.2" 1120 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" 1121 | integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= 1122 | dependencies: 1123 | chalk "^1.0.0" 1124 | 1125 | log-symbols@^3.0.0: 1126 | version "3.0.0" 1127 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" 1128 | integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== 1129 | dependencies: 1130 | chalk "^2.4.2" 1131 | 1132 | log-update@^2.3.0: 1133 | version "2.3.0" 1134 | resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" 1135 | integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= 1136 | dependencies: 1137 | ansi-escapes "^3.0.0" 1138 | cli-cursor "^2.0.0" 1139 | wrap-ansi "^3.0.1" 1140 | 1141 | lru-cache@^4.0.1: 1142 | version "4.1.5" 1143 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 1144 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 1145 | dependencies: 1146 | pseudomap "^1.0.2" 1147 | yallist "^2.1.2" 1148 | 1149 | make-error@^1.1.1: 1150 | version "1.3.5" 1151 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" 1152 | integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== 1153 | 1154 | merge-stream@^2.0.0: 1155 | version "2.0.0" 1156 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1157 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1158 | 1159 | micromatch@^4.0.2: 1160 | version "4.0.2" 1161 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" 1162 | integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== 1163 | dependencies: 1164 | braces "^3.0.1" 1165 | picomatch "^2.0.5" 1166 | 1167 | mimic-fn@^1.0.0: 1168 | version "1.2.0" 1169 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 1170 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== 1171 | 1172 | mimic-fn@^2.1.0: 1173 | version "2.1.0" 1174 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1175 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1176 | 1177 | minimatch@^3.0.4: 1178 | version "3.0.4" 1179 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1180 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1181 | dependencies: 1182 | brace-expansion "^1.1.7" 1183 | 1184 | minimist@0.0.8: 1185 | version "0.0.8" 1186 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1187 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 1188 | 1189 | mkdirp@^0.5.1: 1190 | version "0.5.1" 1191 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1192 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 1193 | dependencies: 1194 | minimist "0.0.8" 1195 | 1196 | mri@^1.1.0: 1197 | version "1.1.4" 1198 | resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" 1199 | integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== 1200 | 1201 | ms@^2.1.1: 1202 | version "2.1.2" 1203 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1204 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1205 | 1206 | msgpack-lite@^0.1.26: 1207 | version "0.1.26" 1208 | resolved "https://registry.yarnpkg.com/msgpack-lite/-/msgpack-lite-0.1.26.tgz#dd3c50b26f059f25e7edee3644418358e2a9ad89" 1209 | integrity sha1-3TxQsm8FnyXn7e42REGDWOKprYk= 1210 | dependencies: 1211 | event-lite "^0.1.1" 1212 | ieee754 "^1.1.8" 1213 | int64-buffer "^0.1.9" 1214 | isarray "^1.0.0" 1215 | 1216 | multimatch@^3.0.0: 1217 | version "3.0.0" 1218 | resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" 1219 | integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== 1220 | dependencies: 1221 | array-differ "^2.0.3" 1222 | array-union "^1.0.2" 1223 | arrify "^1.0.1" 1224 | minimatch "^3.0.4" 1225 | 1226 | mute-stream@0.0.7: 1227 | version "0.0.7" 1228 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 1229 | integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= 1230 | 1231 | natural-compare@^1.4.0: 1232 | version "1.4.0" 1233 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1234 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1235 | 1236 | nice-try@^1.0.4: 1237 | version "1.0.5" 1238 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 1239 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 1240 | 1241 | normalize-package-data@^2.5.0: 1242 | version "2.5.0" 1243 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 1244 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 1245 | dependencies: 1246 | hosted-git-info "^2.1.4" 1247 | resolve "^1.10.0" 1248 | semver "2 || 3 || 4 || 5" 1249 | validate-npm-package-license "^3.0.1" 1250 | 1251 | npm-run-path@^2.0.0: 1252 | version "2.0.2" 1253 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 1254 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 1255 | dependencies: 1256 | path-key "^2.0.0" 1257 | 1258 | npm-run-path@^3.0.0: 1259 | version "3.1.0" 1260 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5" 1261 | integrity sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg== 1262 | dependencies: 1263 | path-key "^3.0.0" 1264 | 1265 | number-is-nan@^1.0.0: 1266 | version "1.0.1" 1267 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1268 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 1269 | 1270 | object-assign@^4.0.1, object-assign@^4.1.0: 1271 | version "4.1.1" 1272 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1273 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1274 | 1275 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1276 | version "1.4.0" 1277 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1278 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1279 | dependencies: 1280 | wrappy "1" 1281 | 1282 | onetime@^2.0.0: 1283 | version "2.0.1" 1284 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 1285 | integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= 1286 | dependencies: 1287 | mimic-fn "^1.0.0" 1288 | 1289 | onetime@^5.1.0: 1290 | version "5.1.0" 1291 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" 1292 | integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== 1293 | dependencies: 1294 | mimic-fn "^2.1.0" 1295 | 1296 | opencollective-postinstall@^2.0.2: 1297 | version "2.0.2" 1298 | resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" 1299 | integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== 1300 | 1301 | optionator@^0.8.2: 1302 | version "0.8.2" 1303 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 1304 | integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= 1305 | dependencies: 1306 | deep-is "~0.1.3" 1307 | fast-levenshtein "~2.0.4" 1308 | levn "~0.3.0" 1309 | prelude-ls "~1.1.2" 1310 | type-check "~0.3.2" 1311 | wordwrap "~1.0.0" 1312 | 1313 | os-tmpdir@~1.0.2: 1314 | version "1.0.2" 1315 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1316 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1317 | 1318 | p-finally@^1.0.0: 1319 | version "1.0.0" 1320 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1321 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 1322 | 1323 | p-finally@^2.0.0: 1324 | version "2.0.1" 1325 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" 1326 | integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== 1327 | 1328 | p-limit@^1.1.0: 1329 | version "1.3.0" 1330 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 1331 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 1332 | dependencies: 1333 | p-try "^1.0.0" 1334 | 1335 | p-limit@^2.2.0: 1336 | version "2.2.0" 1337 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" 1338 | integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== 1339 | dependencies: 1340 | p-try "^2.0.0" 1341 | 1342 | p-locate@^2.0.0: 1343 | version "2.0.0" 1344 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 1345 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 1346 | dependencies: 1347 | p-limit "^1.1.0" 1348 | 1349 | p-locate@^4.1.0: 1350 | version "4.1.0" 1351 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1352 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1353 | dependencies: 1354 | p-limit "^2.2.0" 1355 | 1356 | p-map@^2.0.0: 1357 | version "2.1.0" 1358 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" 1359 | integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== 1360 | 1361 | p-try@^1.0.0: 1362 | version "1.0.0" 1363 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 1364 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 1365 | 1366 | p-try@^2.0.0: 1367 | version "2.2.0" 1368 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1369 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1370 | 1371 | parent-module@^1.0.0: 1372 | version "1.0.1" 1373 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1374 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1375 | dependencies: 1376 | callsites "^3.0.0" 1377 | 1378 | parse-json@^4.0.0: 1379 | version "4.0.0" 1380 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 1381 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 1382 | dependencies: 1383 | error-ex "^1.3.1" 1384 | json-parse-better-errors "^1.0.1" 1385 | 1386 | path-dirname@^1.0.0: 1387 | version "1.0.2" 1388 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" 1389 | integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= 1390 | 1391 | path-exists@^3.0.0: 1392 | version "3.0.0" 1393 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1394 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1395 | 1396 | path-exists@^4.0.0: 1397 | version "4.0.0" 1398 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1399 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1400 | 1401 | path-is-absolute@^1.0.0: 1402 | version "1.0.1" 1403 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1404 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1405 | 1406 | path-is-inside@^1.0.2: 1407 | version "1.0.2" 1408 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 1409 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= 1410 | 1411 | path-key@^2.0.0, path-key@^2.0.1: 1412 | version "2.0.1" 1413 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1414 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 1415 | 1416 | path-key@^3.0.0: 1417 | version "3.1.0" 1418 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3" 1419 | integrity sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg== 1420 | 1421 | path-parse@^1.0.6: 1422 | version "1.0.6" 1423 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1424 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1425 | 1426 | picomatch@^2.0.5: 1427 | version "2.0.7" 1428 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" 1429 | integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== 1430 | 1431 | pify@^2.0.0: 1432 | version "2.3.0" 1433 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1434 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 1435 | 1436 | pify@^4.0.1: 1437 | version "4.0.1" 1438 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" 1439 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== 1440 | 1441 | pinkie-promise@^2.0.0: 1442 | version "2.0.1" 1443 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1444 | integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= 1445 | dependencies: 1446 | pinkie "^2.0.0" 1447 | 1448 | pinkie@^2.0.0: 1449 | version "2.0.4" 1450 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1451 | integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= 1452 | 1453 | pkg-dir@^4.2.0: 1454 | version "4.2.0" 1455 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 1456 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 1457 | dependencies: 1458 | find-up "^4.0.0" 1459 | 1460 | please-upgrade-node@^3.1.1: 1461 | version "3.1.1" 1462 | resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" 1463 | integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ== 1464 | dependencies: 1465 | semver-compare "^1.0.0" 1466 | 1467 | prelude-ls@~1.1.2: 1468 | version "1.1.2" 1469 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1470 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 1471 | 1472 | prettier-linter-helpers@^1.0.0: 1473 | version "1.0.0" 1474 | resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" 1475 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== 1476 | dependencies: 1477 | fast-diff "^1.1.2" 1478 | 1479 | prettier@^1.18.2: 1480 | version "1.18.2" 1481 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" 1482 | integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== 1483 | 1484 | pretty-quick@^1.11.1: 1485 | version "1.11.1" 1486 | resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-1.11.1.tgz#462ffa2b93d24c05b7a0c3a001e08601a0c55ee4" 1487 | integrity sha512-kSXCkcETfak7EQXz6WOkCeCqpbC4GIzrN/vaneTGMP/fAtD8NerA9bPhCUqHAks1geo7biZNl5uEMPceeneLuA== 1488 | dependencies: 1489 | chalk "^2.3.0" 1490 | execa "^0.8.0" 1491 | find-up "^2.1.0" 1492 | ignore "^3.3.7" 1493 | mri "^1.1.0" 1494 | multimatch "^3.0.0" 1495 | 1496 | progress@^2.0.0: 1497 | version "2.0.3" 1498 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1499 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1500 | 1501 | pseudomap@^1.0.2: 1502 | version "1.0.2" 1503 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1504 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 1505 | 1506 | pump@^3.0.0: 1507 | version "3.0.0" 1508 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1509 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1510 | dependencies: 1511 | end-of-stream "^1.1.0" 1512 | once "^1.3.1" 1513 | 1514 | punycode@^2.1.0: 1515 | version "2.1.1" 1516 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1517 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1518 | 1519 | read-pkg@^5.1.1: 1520 | version "5.1.1" 1521 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.1.1.tgz#5cf234dde7a405c90c88a519ab73c467e9cb83f5" 1522 | integrity sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w== 1523 | dependencies: 1524 | "@types/normalize-package-data" "^2.4.0" 1525 | normalize-package-data "^2.5.0" 1526 | parse-json "^4.0.0" 1527 | type-fest "^0.4.1" 1528 | 1529 | regexpp@^2.0.1: 1530 | version "2.0.1" 1531 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" 1532 | integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== 1533 | 1534 | resolve-from@^3.0.0: 1535 | version "3.0.0" 1536 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" 1537 | integrity sha1-six699nWiBvItuZTM17rywoYh0g= 1538 | 1539 | resolve-from@^4.0.0: 1540 | version "4.0.0" 1541 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1542 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1543 | 1544 | resolve@^1.10.0: 1545 | version "1.11.1" 1546 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" 1547 | integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== 1548 | dependencies: 1549 | path-parse "^1.0.6" 1550 | 1551 | restore-cursor@^2.0.0: 1552 | version "2.0.0" 1553 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 1554 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= 1555 | dependencies: 1556 | onetime "^2.0.0" 1557 | signal-exit "^3.0.2" 1558 | 1559 | rimraf@2.6.3, rimraf@^2.6.3: 1560 | version "2.6.3" 1561 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 1562 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 1563 | dependencies: 1564 | glob "^7.1.3" 1565 | 1566 | run-async@^2.2.0: 1567 | version "2.3.0" 1568 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" 1569 | integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= 1570 | dependencies: 1571 | is-promise "^2.1.0" 1572 | 1573 | run-node@^1.0.0: 1574 | version "1.0.0" 1575 | resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" 1576 | integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== 1577 | 1578 | rxjs@^6.3.3, rxjs@^6.4.0: 1579 | version "6.5.2" 1580 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" 1581 | integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== 1582 | dependencies: 1583 | tslib "^1.9.0" 1584 | 1585 | "safer-buffer@>= 2.1.2 < 3": 1586 | version "2.1.2" 1587 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1588 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1589 | 1590 | semver-compare@^1.0.0: 1591 | version "1.0.0" 1592 | resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" 1593 | integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= 1594 | 1595 | "semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.5.1: 1596 | version "5.7.0" 1597 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" 1598 | integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== 1599 | 1600 | semver@5.5.0: 1601 | version "5.5.0" 1602 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" 1603 | integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== 1604 | 1605 | shebang-command@^1.2.0: 1606 | version "1.2.0" 1607 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1608 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 1609 | dependencies: 1610 | shebang-regex "^1.0.0" 1611 | 1612 | shebang-regex@^1.0.0: 1613 | version "1.0.0" 1614 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1615 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 1616 | 1617 | signal-exit@^3.0.0, signal-exit@^3.0.2: 1618 | version "3.0.2" 1619 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1620 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 1621 | 1622 | slash@^3.0.0: 1623 | version "3.0.0" 1624 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1625 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1626 | 1627 | slice-ansi@0.0.4: 1628 | version "0.0.4" 1629 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" 1630 | integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= 1631 | 1632 | slice-ansi@^2.1.0: 1633 | version "2.1.0" 1634 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" 1635 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== 1636 | dependencies: 1637 | ansi-styles "^3.2.0" 1638 | astral-regex "^1.0.0" 1639 | is-fullwidth-code-point "^2.0.0" 1640 | 1641 | source-map-support@^0.5.6: 1642 | version "0.5.12" 1643 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" 1644 | integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== 1645 | dependencies: 1646 | buffer-from "^1.0.0" 1647 | source-map "^0.6.0" 1648 | 1649 | source-map@^0.6.0: 1650 | version "0.6.1" 1651 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1652 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1653 | 1654 | spdx-correct@^3.0.0: 1655 | version "3.1.0" 1656 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" 1657 | integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== 1658 | dependencies: 1659 | spdx-expression-parse "^3.0.0" 1660 | spdx-license-ids "^3.0.0" 1661 | 1662 | spdx-exceptions@^2.1.0: 1663 | version "2.2.0" 1664 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" 1665 | integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== 1666 | 1667 | spdx-expression-parse@^3.0.0: 1668 | version "3.0.0" 1669 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" 1670 | integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== 1671 | dependencies: 1672 | spdx-exceptions "^2.1.0" 1673 | spdx-license-ids "^3.0.0" 1674 | 1675 | spdx-license-ids@^3.0.0: 1676 | version "3.0.4" 1677 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" 1678 | integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== 1679 | 1680 | sprintf-js@~1.0.2: 1681 | version "1.0.3" 1682 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1683 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1684 | 1685 | string-argv@^0.3.0: 1686 | version "0.3.0" 1687 | resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.0.tgz#0ea99e7257fea5e97a1bfcdfc19cf12d68e6ec6a" 1688 | integrity sha512-NGZHq3nkSXVtGZXTBjFru3MNfoZyIzN25T7BmvdgnSC0LCJczAGLLMQLyjywSIaAoqSemgLzBRHOsnrHbt60+Q== 1689 | 1690 | string-width@^1.0.1: 1691 | version "1.0.2" 1692 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1693 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 1694 | dependencies: 1695 | code-point-at "^1.0.0" 1696 | is-fullwidth-code-point "^1.0.0" 1697 | strip-ansi "^3.0.0" 1698 | 1699 | string-width@^2.1.0, string-width@^2.1.1: 1700 | version "2.1.1" 1701 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1702 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1703 | dependencies: 1704 | is-fullwidth-code-point "^2.0.0" 1705 | strip-ansi "^4.0.0" 1706 | 1707 | string-width@^3.0.0: 1708 | version "3.1.0" 1709 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1710 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1711 | dependencies: 1712 | emoji-regex "^7.0.1" 1713 | is-fullwidth-code-point "^2.0.0" 1714 | strip-ansi "^5.1.0" 1715 | 1716 | stringify-object@^3.3.0: 1717 | version "3.3.0" 1718 | resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" 1719 | integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== 1720 | dependencies: 1721 | get-own-enumerable-property-symbols "^3.0.0" 1722 | is-obj "^1.0.1" 1723 | is-regexp "^1.0.0" 1724 | 1725 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1726 | version "3.0.1" 1727 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1728 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 1729 | dependencies: 1730 | ansi-regex "^2.0.0" 1731 | 1732 | strip-ansi@^4.0.0: 1733 | version "4.0.0" 1734 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1735 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1736 | dependencies: 1737 | ansi-regex "^3.0.0" 1738 | 1739 | strip-ansi@^5.1.0: 1740 | version "5.2.0" 1741 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1742 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1743 | dependencies: 1744 | ansi-regex "^4.1.0" 1745 | 1746 | strip-eof@^1.0.0: 1747 | version "1.0.0" 1748 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 1749 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 1750 | 1751 | strip-final-newline@^2.0.0: 1752 | version "2.0.0" 1753 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 1754 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 1755 | 1756 | strip-json-comments@^2.0.1: 1757 | version "2.0.1" 1758 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1759 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1760 | 1761 | supports-color@^2.0.0: 1762 | version "2.0.0" 1763 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1764 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= 1765 | 1766 | supports-color@^5.3.0: 1767 | version "5.5.0" 1768 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1769 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1770 | dependencies: 1771 | has-flag "^3.0.0" 1772 | 1773 | symbol-observable@^1.1.0: 1774 | version "1.2.0" 1775 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" 1776 | integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== 1777 | 1778 | table@^5.2.3: 1779 | version "5.4.1" 1780 | resolved "https://registry.yarnpkg.com/table/-/table-5.4.1.tgz#0691ae2ebe8259858efb63e550b6d5f9300171e8" 1781 | integrity sha512-E6CK1/pZe2N75rGZQotFOdmzWQ1AILtgYbMAbAjvms0S1l5IDB47zG3nCnFGB/w+7nB3vKofbLXCH7HPBo864w== 1782 | dependencies: 1783 | ajv "^6.9.1" 1784 | lodash "^4.17.11" 1785 | slice-ansi "^2.1.0" 1786 | string-width "^3.0.0" 1787 | 1788 | text-table@^0.2.0: 1789 | version "0.2.0" 1790 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1791 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1792 | 1793 | through@^2.3.6: 1794 | version "2.3.8" 1795 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1796 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 1797 | 1798 | tmp@^0.0.33: 1799 | version "0.0.33" 1800 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 1801 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 1802 | dependencies: 1803 | os-tmpdir "~1.0.2" 1804 | 1805 | to-regex-range@^5.0.1: 1806 | version "5.0.1" 1807 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1808 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1809 | dependencies: 1810 | is-number "^7.0.0" 1811 | 1812 | ts-node@^8.3.0: 1813 | version "8.3.0" 1814 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" 1815 | integrity sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ== 1816 | dependencies: 1817 | arg "^4.1.0" 1818 | diff "^4.0.1" 1819 | make-error "^1.1.1" 1820 | source-map-support "^0.5.6" 1821 | yn "^3.0.0" 1822 | 1823 | tslib@^1.8.1, tslib@^1.9.0: 1824 | version "1.10.0" 1825 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" 1826 | integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== 1827 | 1828 | tsutils@^3.7.0: 1829 | version "3.14.0" 1830 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.14.0.tgz#bf8d5a7bae5369331fa0f2b0a5a10bd7f7396c77" 1831 | integrity sha512-SmzGbB0l+8I0QwsPgjooFRaRvHLBLNYM8SeQ0k6rtNDru5sCGeLJcZdwilNndN+GysuFjF5EIYgN8GfFG6UeUw== 1832 | dependencies: 1833 | tslib "^1.8.1" 1834 | 1835 | type-check@~0.3.2: 1836 | version "0.3.2" 1837 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1838 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 1839 | dependencies: 1840 | prelude-ls "~1.1.2" 1841 | 1842 | type-fest@^0.4.1: 1843 | version "0.4.1" 1844 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" 1845 | integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== 1846 | 1847 | typescript@^3.5.2: 1848 | version "3.5.2" 1849 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.2.tgz#a09e1dc69bc9551cadf17dba10ee42cf55e5d56c" 1850 | integrity sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA== 1851 | 1852 | uri-js@^4.2.2: 1853 | version "4.2.2" 1854 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 1855 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 1856 | dependencies: 1857 | punycode "^2.1.0" 1858 | 1859 | validate-npm-package-license@^3.0.1: 1860 | version "3.0.4" 1861 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 1862 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 1863 | dependencies: 1864 | spdx-correct "^3.0.0" 1865 | spdx-expression-parse "^3.0.0" 1866 | 1867 | which@^1.2.9: 1868 | version "1.3.1" 1869 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1870 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1871 | dependencies: 1872 | isexe "^2.0.0" 1873 | 1874 | wordwrap@~1.0.0: 1875 | version "1.0.0" 1876 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 1877 | integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= 1878 | 1879 | wrap-ansi@^3.0.1: 1880 | version "3.0.1" 1881 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" 1882 | integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= 1883 | dependencies: 1884 | string-width "^2.1.1" 1885 | strip-ansi "^4.0.0" 1886 | 1887 | wrappy@1: 1888 | version "1.0.2" 1889 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1890 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1891 | 1892 | write@1.0.3: 1893 | version "1.0.3" 1894 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" 1895 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== 1896 | dependencies: 1897 | mkdirp "^0.5.1" 1898 | 1899 | yallist@^2.1.2: 1900 | version "2.1.2" 1901 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 1902 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 1903 | 1904 | yn@^3.0.0: 1905 | version "3.1.0" 1906 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.0.tgz#fcbe2db63610361afcc5eb9e0ac91e976d046114" 1907 | integrity sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg== 1908 | 1909 | zlib@^1.0.5: 1910 | version "1.0.5" 1911 | resolved "https://registry.yarnpkg.com/zlib/-/zlib-1.0.5.tgz#6e7c972fc371c645a6afb03ab14769def114fcc0" 1912 | integrity sha1-bnyXL8NxxkWmr7A6sUdp3vEU/MA= 1913 | --------------------------------------------------------------------------------