├── .gitignore
├── .dockerignore
├── Dockerfile
├── site
├── index.html
└── ui
│ └── ui.ts
├── src
├── tsconfig.json
├── tslint.json
├── hls
│ ├── level-key.ts
│ ├── level.ts
│ ├── codecs.ts
│ ├── attr-list.ts
│ ├── fragment.ts
│ └── m3u8-parser.ts
├── db.ts
├── index.ts
├── queue.ts
└── analyze.ts
├── docker-compose.yml
├── LICENSE
├── package.json
├── README.md
├── wait-for-it.sh
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | app/*
2 | node_modules/*
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | npm-debug.log
3 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:11.9.0
2 | WORKDIR /usr/src/app
3 |
4 | COPY package*.json ./
5 | COPY wait-for-it.sh /wait-for-it.sh
6 | RUN chmod +x /wait-for-it.sh
7 | RUN npm install
8 | COPY . .
9 | EXPOSE 3000
10 |
--------------------------------------------------------------------------------
/site/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Media Lighthouse
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "outDir": "../app",
4 | "sourceMap": true,
5 | "module": "commonjs",
6 | "target": "ESNext",
7 | "noImplicitAny": false,
8 | "removeComments": true,
9 | "moduleResolution": "node",
10 | "baseUrl": "../",
11 | "paths": {
12 | "src/*": ["src/*"]
13 | }
14 | }
15 | }
--------------------------------------------------------------------------------
/src/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": [
3 | "tslint:recommended"
4 | ],
5 | "rules": {
6 | "quotemark": {
7 | "options": ["single", "avoid-escape"]
8 | },
9 | "no-bitwise": false,
10 | "variable-name": [true, "allow-leading-underscore"],
11 | "no-console": false,
12 | "interface-name" : [true, "never-prefix"]
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/hls/level-key.ts:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 | import * as URLToolkit from 'url-toolkit';
3 |
4 | export default class LevelKey {
5 | public method: string = null;
6 | public key = null;
7 | public iv = null;
8 | public reluri: string = null;
9 | public baseuri: string = null;
10 |
11 | private _uri = null;
12 |
13 | get uri() {
14 | if (!this._uri && this.reluri) {
15 | this._uri = URLToolkit.buildAbsoluteURL(this.baseuri, this.reluri, { alwaysNormalize: true });
16 | }
17 |
18 | return this._uri;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3'
2 |
3 | services:
4 | media-lighthouse:
5 | build:
6 | context: .
7 | dockerfile: Dockerfile
8 | container_name: media-lighthouse
9 | ports:
10 | - '3000:3000'
11 | depends_on:
12 | - redis
13 | - mongo
14 | command: ["./wait-for-it.sh", "db:27017", "--", "npm", "start"]
15 | mongo:
16 | container_name: mongo
17 | image: mongo
18 | volumes:
19 | - ./data:/data/db
20 | ports:
21 | - "27017:27017"
22 | redis:
23 | container_name: redis
24 | image: redis:alpine
25 | ports:
26 | - "6379:6379"
27 |
28 |
--------------------------------------------------------------------------------
/src/hls/level.ts:
--------------------------------------------------------------------------------
1 | import Fragment from './fragment';
2 |
3 | export default class Level {
4 | public endSN: number = 0;
5 | public endCC: number = 0;
6 | public fragments: Fragment[] = [];
7 | public initSegment: Fragment;
8 | public live: boolean;
9 | public needSidxRanges: boolean;
10 | public startCC: number = 0;
11 | public startSN: number = 0;
12 | public startTimeOffset: number;
13 | public targetduration: number = 0;
14 | public totalduration: number = 0;
15 | public type: string;
16 | public url: string;
17 | public version: number;
18 | public averagetargetduration: number;
19 |
20 | constructor(baseUrl) {
21 | this.url = baseUrl;
22 | }
23 |
24 | get hasProgramDateTime() {
25 | return !!(this.fragments[0] && Number.isFinite(this.fragments[0].programDateTime));
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 video-dev
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "media-lighthouse",
3 | "version": "1.0.0",
4 | "main": "./app/index.js",
5 | "repository": "git@github.com:video-dev/media-lighthouse.git",
6 | "author": "John Bartos ",
7 | "license": "MIT",
8 | "private": false,
9 | "scripts": {
10 | "build": "tsc -p ./src",
11 | "lint": "tslint 'src/**/*.ts'",
12 | "watch": "tsc -w -p ./src",
13 | "serve": "node --max-old-space-size=4096 ./app/index.js",
14 | "start": "npm run build && npm run serve"
15 | },
16 | "dependencies": {
17 | "chart.js": "^2.7.3",
18 | "express": "^4.16.4",
19 | "mongodb": "^3.1.10",
20 | "request": "^2.88.0",
21 | "request-promise-native": "^1.0.5",
22 | "rsmq": "^0.9.3",
23 | "thumbcoil": "^1.2.3-hackweek2",
24 | "url-toolkit": "^2.1.6"
25 | },
26 | "devDependencies": {
27 | "@types/chart.js": "^2.7.41",
28 | "@types/express": "^4.16.0",
29 | "@types/mongodb": "^3.1.17",
30 | "@types/request-promise-native": "^1.0.15",
31 | "@types/rsmq": "^0.3.27",
32 | "nodemon": "^1.18.9",
33 | "ts-node": "^7.0.1",
34 | "tslint": "^5.11.0",
35 | "typescript": "^3.2.2"
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/hls/codecs.ts:
--------------------------------------------------------------------------------
1 | // from http://mp4ra.org/codecs.html
2 | const sampleEntryCodesISO = {
3 | audio: {
4 | 'a3ds': true,
5 | 'ac-3': true,
6 | 'ac-4': true,
7 | 'alac': true,
8 | 'alaw': true,
9 | 'dra1': true,
10 | 'dts+': true,
11 | 'dts-': true,
12 | 'dtsc': true,
13 | 'dtse': true,
14 | 'dtsh': true,
15 | 'ec-3': true,
16 | 'enca': true,
17 | 'g719': true,
18 | 'g726': true,
19 | 'm4ae': true,
20 | 'mha1': true,
21 | 'mha2': true,
22 | 'mhm1': true,
23 | 'mhm2': true,
24 | 'mlpa': true,
25 | 'mp4a': true,
26 | 'raw ': true,
27 | 'Opus': true,
28 | 'samr': true,
29 | 'sawb': true,
30 | 'sawp': true,
31 | 'sevc': true,
32 | 'sqcp': true,
33 | 'ssmv': true,
34 | 'twos': true,
35 | 'ulaw': true,
36 | },
37 | video: {
38 | 'avc1': true,
39 | 'avc2': true,
40 | 'avc3': true,
41 | 'avc4': true,
42 | 'avcp': true,
43 | 'drac': true,
44 | 'dvav': true,
45 | 'dvhe': true,
46 | 'encv': true,
47 | 'hev1': true,
48 | 'hvc1': true,
49 | 'mjp2': true,
50 | 'mp4v': true,
51 | 'mvc1': true,
52 | 'mvc2': true,
53 | 'mvc3': true,
54 | 'mvc4': true,
55 | 'resv': true,
56 | 'rv60': true,
57 | 's263': true,
58 | 'svc1': true,
59 | 'svc2': true,
60 | 'vc-1': true,
61 | 'vp08': true,
62 | 'vp09': true,
63 | },
64 | };
65 |
66 | function isCodecType(codec, type) {
67 | const typeCodes = sampleEntryCodesISO[type];
68 | return !!typeCodes && typeCodes[codec.slice(0, 4)] === true;
69 | }
70 |
71 | function isCodecSupportedInMp4(codec, type) {
72 | // @ts-ignore
73 | return window.MediaSource.isTypeSupported(`${type || 'video'}/mp4;codecs="${codec}"`);
74 | }
75 |
76 | export { isCodecType, isCodecSupportedInMp4 };
77 |
--------------------------------------------------------------------------------
/src/db.ts:
--------------------------------------------------------------------------------
1 | import { Collection, Db, MongoClient } from 'mongodb';
2 | import { Playlist } from './analyze';
3 | import Fragment from './hls/fragment';
4 |
5 | export enum ProcessingStatus {
6 | Unprocessed = 0,
7 | Partial,
8 | Done,
9 | }
10 |
11 | export default class Database {
12 | private url: string = 'mongodb://mongo:27017';
13 | private dbName: string = 'media-lighthouse';
14 | private collectionName: string = 'streams';
15 | private db: Db;
16 | private collection: Collection;
17 |
18 | public async connect() {
19 | const { collectionName, dbName, url } = this;
20 | const client = await MongoClient.connect(url, { useNewUrlParser: true });
21 | console.log(`Connected to Mongo instance an ${url}`);
22 | const db = this.db = client.db(dbName);
23 |
24 | const collections = await db.collections();
25 | const collection = this.collection = collections.find((c) => c.collectionName === collectionName);
26 | if (!collection) {
27 | this.collection = await db.createCollection(collectionName);
28 | console.log(`${collectionName} collection created`);
29 | } else {
30 | console.log(`collection ${collectionName} already exists`);
31 | }
32 | }
33 |
34 | public async createPlaylistEntry(playlist: Playlist) {
35 | const { collection } = this;
36 |
37 | if (await collection.findOne({ url: playlist.url})) {
38 | console.log(`${playlist.url} document already exists`);
39 | return;
40 | }
41 | await collection.insertOne(playlist);
42 | console.log('wrote playlist to collection');
43 | }
44 |
45 | public async insertFrag(playlist, frag: Fragment, fragData) {
46 | console.log(`levels.${frag.level}.fragments.${frag.sn}.data`);
47 | return this.collection.findOneAndUpdate(
48 | { url: playlist.url },
49 | { $set: {[`levels.${frag.level}.fragments.${frag.sn}.data`]: fragData }},
50 | { upsert: true },
51 | ((error, result) => {
52 | console.log(error, result);
53 | }),
54 | );
55 | }
56 |
57 | public async getPlaylist(url: string) {
58 | return this.collection.findOne({ url });
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # media-lighthouse
2 | 🗼See problems before debugging
3 |
4 |
5 | ### Problems
6 | * Experienced player developers spend a lot of time answering the question: is this bug caused by bad media, or our player? To answer the question they analyze the instrinsics (timing, etc.) of media to see if it's well-formed - we use ffprobe to do this, and it can be fairly time consuming to extract basic info. We also analyze the playlist itself to see if it corroborates the media.
7 | * Inexperienced player developers aren't skilled in analyzing streams. ffprobe is a complex tool, and the commands to extract the data you need are arcane. And furthermore, they may not know the significance of timing, and how it can cause unsolvable playback errors.
8 | * There are certain "must-haves" in media - for example, if you have a discontinuity during a live stream, you must use the DISCONTINUITY-SEQUENCE tag. A bot could take the extracted manifest/media information and run unit tests against them.
9 | * Debugging media is pretty difficult, even for an experienced developer. Neat visualizations would help expose problems that may be hard to see when scrolling through text.
10 |
11 | ### Solution
12 |
13 | The solution to these above problems is being called "Media Lighthouse". The project was proposed at FOMS 2018 with a breakout session of player developers, including Shaka, Hls.js, JW, VideoJS, and Kaltura.
14 |
15 | * Expose media information (both manifest and media intrinsics) via an API. Live streams require additonal work, and need to specify a capture window.
16 | * Program a git bot to use this API and to automatically run it against new issues, leaving a comment with the media information.
17 | * Write a unit testing framework with this API as the center, so that developers may write unit tests against media
18 | * Create visualizations using this API, and wire it into the git bot.
19 | * Wire this information into our player harness, so that we can correlate media playback with the underlying media ([~rob])
20 |
21 |
22 | ### Notes
23 | * Thumbcoil (https://github.com/videojs/thumbcoil) sounds like a great starting point for this effort.
24 | * There is significant interest from other video developers around this project. Check out the #media-lighthouse chat in the video-dev slack to get involved. The goal of this project is to create an open-source tool for use by the video-dev community.
25 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import * as express from 'express';
2 | import * as RedisSMQ from 'rsmq';
3 | import { analyze, parsePlaylist } from './analyze';
4 | import Database from './db';
5 | import MediaQueue from './queue';
6 |
7 | const port = 3000;
8 | const app = express();
9 | const rsmq = this.rsmq = new RedisSMQ( { host: 'redis', port: 6379, ns: 'rsmq' } );
10 | const db = new Database();
11 |
12 | async function processFrags(queue, playlist) {
13 | while (true) {
14 | const frag = await queue.getFragment();
15 | if (!frag) {
16 | break;
17 | }
18 | const fragData = await analyze(frag);
19 | db.insertFrag(playlist, frag, fragData);
20 | }
21 | }
22 |
23 | async function processMedia(url: string) {
24 | const queue = new MediaQueue(rsmq, url);
25 | queue.init();
26 |
27 | const playlist = await parsePlaylist(url);
28 | if (await queue.hasFragmentsEnqueued()) {
29 | await processFrags(queue, playlist);
30 | } else {
31 | await db.createPlaylistEntry(playlist);
32 | await Promise.all(playlist.levels.map(async (level) => {
33 | return await queue.pushFragments(level.fragments);
34 | }));
35 | await processFrags(queue, playlist);
36 | }
37 | }
38 |
39 | (async () => {
40 | await db.connect();
41 |
42 | app.get('/report', async (req, res) => {
43 | let url = req.query.stream;
44 | if (!url) {
45 | console.log('Stream param not provided');
46 | res.send(404);
47 | return;
48 | }
49 | url = decodeURIComponent(url);
50 | const playlist = await db.getPlaylist(url);
51 | res.header('Access-Control-Allow-Origin', '*');
52 | res.status(200);
53 | res.send(JSON.stringify(playlist));
54 | });
55 |
56 | app.post('/analyze', async (req, res) => {
57 | let url = req.query.stream;
58 | if (!url) {
59 | console.log('Stream param not provided');
60 | res.send(200);
61 | return;
62 | }
63 | url = decodeURIComponent(url);
64 | console.log(`Analyzing ${url}`);
65 | res.send(200);
66 | await processMedia(url);
67 | console.log('done');
68 | });
69 |
70 | app.listen(port, () => console.log(`Listening on port ${port}`));
71 | })();
72 |
73 | // (async (url) => {
74 | // })('https://playertest.longtailvideo.com/adaptive/bbbfull/bbbfull.m3u8');
75 |
--------------------------------------------------------------------------------
/src/hls/attr-list.ts:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 | const DECIMAL_RESOLUTION_REGEX = /^(\d+)x(\d+)$/; // eslint-disable-line no-useless-escape
3 | const ATTR_LIST_REGEX = /\s*(.+?)\s*=((?:\".*?\")|.*?)(?:,|$)/g; // eslint-disable-line no-useless-escape
4 |
5 | // adapted from https://github.com/kanongil/node-m3u8parse/blob/master/attrlist.js
6 | class AttrList {
7 | constructor(attrs) {
8 | if (typeof attrs === 'string') {
9 | attrs = AttrList.parseAttrList(attrs);
10 | }
11 |
12 | for (const attr in attrs) {
13 | if (attrs.hasOwnProperty(attr)) {
14 | this[attr] = attrs[attr];
15 | }
16 | }
17 | }
18 |
19 | public decimalInteger(attrName) {
20 | const intValue = parseInt(this[attrName], 10);
21 | if (intValue > Number.MAX_SAFE_INTEGER) {
22 | return Infinity;
23 | }
24 |
25 | return intValue;
26 | }
27 |
28 | public hexadecimalInteger(attrName) {
29 | if (this[attrName]) {
30 | let stringValue = (this[attrName] || '0x').slice(2);
31 | stringValue = ((stringValue.length & 1) ? '0' : '') + stringValue;
32 |
33 | const value = new Uint8Array(stringValue.length / 2);
34 | for (let i = 0; i < stringValue.length / 2; i++) {
35 | value[i] = parseInt(stringValue.slice(i * 2, i * 2 + 2), 16);
36 | }
37 |
38 | return value;
39 | } else {
40 | return null;
41 | }
42 | }
43 |
44 | public hexadecimalIntegerAsNumber(attrName) {
45 | const intValue = parseInt(this[attrName], 16);
46 | if (intValue > Number.MAX_SAFE_INTEGER) {
47 | return Infinity;
48 | }
49 |
50 | return intValue;
51 | }
52 |
53 | public decimalFloatingPoint(attrName) {
54 | return parseFloat(this[attrName]);
55 | }
56 |
57 | public enumeratedString(attrName) {
58 | return this[attrName];
59 | }
60 |
61 | public decimalResolution(attrName) {
62 | const res = DECIMAL_RESOLUTION_REGEX.exec(this[attrName]);
63 | if (res === null) {
64 | return undefined;
65 | }
66 |
67 | return {
68 | width: parseInt(res[1], 10),
69 | height: parseInt(res[2], 10),
70 | };
71 | }
72 |
73 | public static parseAttrList(input) {
74 | let match, attrs = {};
75 | ATTR_LIST_REGEX.lastIndex = 0;
76 | while ((match = ATTR_LIST_REGEX.exec(input)) !== null) {
77 | let value = match[2], quote = '"';
78 |
79 | if (value.indexOf(quote) === 0 &&
80 | value.lastIndexOf(quote) === (value.length - 1)) {
81 | value = value.slice(1, -1);
82 | }
83 |
84 | attrs[match[1]] = value;
85 | }
86 | return attrs;
87 | }
88 | }
89 |
90 | export default AttrList;
91 |
--------------------------------------------------------------------------------
/src/queue.ts:
--------------------------------------------------------------------------------
1 | import * as RedisSMQ from 'rsmq';
2 | import Fragment from './hls/fragment';
3 |
4 | function hash(s) {
5 | let h;
6 | for (let i = 0; i < s.length; i++) {
7 | h = Math.imul(31, h) + s.charCodeAt(i) | 0;
8 | }
9 |
10 | return h;
11 | }
12 |
13 | export default class MediaQueue {
14 | private rsmq: RedisSMQ;
15 | private qname: string;
16 |
17 | constructor(rsmq: RedisSMQ, playlistUrl: string) {
18 | this.rsmq = rsmq;
19 | this.qname = hash(playlistUrl);
20 | }
21 |
22 | public init() {
23 | const { rsmq, qname } = this;
24 | console.log(`creating queue for ${qname}`);
25 | rsmq.createQueue({ qname }, (err, resp) => {
26 | if (resp === 1) {
27 | console.log('mediaQueue created');
28 | } else if (err) {
29 | if (err.name === 'queueExists') {
30 | console.log('mediaQueue already exists');
31 | } else {
32 | console.log(err);
33 | }
34 | }
35 | });
36 | }
37 |
38 | public async hasFragmentsEnqueued(): Promise {
39 | const { rsmq, qname } = this;
40 | return new Promise((resolve, reject) => {
41 | rsmq.getQueueAttributes({ qname }, (err, resp) => {
42 | if (err) {
43 | reject(err);
44 | } else {
45 | resolve(!!resp.msgs);
46 | }
47 | });
48 | });
49 | }
50 |
51 | public async pushFragment(frag: Fragment) {
52 | const { rsmq, qname } = this;
53 | return new Promise((resolve, reject) => {
54 | rsmq.sendMessage({ qname, message: JSON.stringify(frag) }, (err, resp) => {
55 | if (resp) {
56 | console.log(`Successfully enqueued ${frag.url}`);
57 | resolve();
58 | } else {
59 | console.log(`Failed to enqueue ${frag.url}`, err);
60 | reject(err);
61 | }
62 | });
63 | });
64 | }
65 |
66 | public async pushFragments(fragments: Fragment[]) {
67 | return new Promise((resolve, reject) => {
68 | for (const frag of fragments) {
69 | try {
70 | this.pushFragment(frag);
71 | } catch (e) {
72 | reject(new Error(`Failed to enqueue frag ${e}`));
73 | }
74 | }
75 | resolve();
76 | });
77 | }
78 |
79 | public async getFragment(): Promise {
80 | const { rsmq, qname } = this;
81 | return new Promise((resolve, reject) => {
82 | rsmq.popMessage({ qname }, (err, resp) => {
83 | const msg = resp as any;
84 | if (msg.id) {
85 | resolve(Object.assign(new Fragment(), JSON.parse(msg.message)));
86 | } else {
87 | resolve(null);
88 | }
89 | });
90 | });
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/src/analyze.ts:
--------------------------------------------------------------------------------
1 | import { get } from 'request-promise-native';
2 | import * as Thumbcoil from 'thumbcoil';
3 | import Fragment from './hls/fragment';
4 | import Level from './hls/level';
5 | import M3U8Parser from './hls/m3u8-parser.js';
6 |
7 | export interface Playlist {
8 | levels: Level[];
9 | url: string;
10 | }
11 |
12 | function isLevelPlaylist(playlist: string) {
13 | return playlist.indexOf('#EXTINF:') > 0 || playlist.indexOf('#EXT-X-TARGETDURATION:') > 0;
14 | }
15 |
16 | const batchDownload = async (frags: Fragment[]) => {
17 | const maxBatchSize = 50;
18 | let i = 0;
19 | while (i < frags.length) {
20 | const batchSize = Math.min(maxBatchSize, frags.length - i);
21 | await Promise.all(frags.slice(i, i + batchSize).map(async (frag) => {
22 | const data = await get({ url: frag.url, encoding: null });
23 | frag.data = Thumbcoil.tsInspector.inspect(data);
24 | return Promise.resolve();
25 | }));
26 | i += batchSize;
27 | }
28 | return Promise.resolve;
29 | };
30 |
31 | const filterPackets = (esMap) => {
32 | const audio = { pts: [], dts: [] };
33 | const video = { pts: [], dts: [] };
34 | esMap.forEach((packet) => {
35 | if (packet.type === 'audio') {
36 | audio.pts.push(packet.pts);
37 | audio.dts.push(packet.dts);
38 | } else if (packet.type === 'video') {
39 | video.pts.push(packet.pts);
40 | video.dts.push(packet.dts);
41 | }
42 | });
43 |
44 | return { audio, video };
45 | };
46 |
47 | function collapseRanges(data) {
48 | const result = [];
49 | let i = 0;
50 | let j = 1;
51 | let equalSigns = false;
52 |
53 | while (i < data.length) {
54 | const sign = Math.sign(data[j] - data[i]);
55 | do {
56 | j++;
57 | equalSigns = !sign || Math.sign(data[j] - data[j - 1]) === sign;
58 | } while (j < data.length && equalSigns);
59 |
60 | if (j === data.length - 1) {
61 | if (equalSigns) {
62 | result.push([data[i], data[j]]);
63 | } else {
64 | result.push([data[i], data[j - 1]], [data[j]]);
65 | }
66 | break;
67 | } else {
68 | result.push([data[i], data[j - 1]]);
69 | i = j;
70 | j++;
71 | }
72 | }
73 |
74 | return result.flat();
75 | }
76 |
77 | export async function analyze(frag: Fragment) {
78 | const fragUrl = frag.url;
79 | console.log(`analyzing frag ${fragUrl}`);
80 | const tsData = await get({ url: fragUrl, encoding: null });
81 | const thumbFrag = Thumbcoil.tsInspector.inspect(tsData);
82 | return collapseLevelTiming(thumbFrag.esMap);
83 | }
84 |
85 | export function collapseLevelTiming(esMap) {
86 | const { audio, video } = filterPackets(esMap);
87 | return {
88 | audio: {
89 | dts: collapseRanges(audio.dts),
90 | pts: collapseRanges(audio.pts),
91 | },
92 | video: {
93 | dts: collapseRanges(video.dts),
94 | pts: collapseRanges(video.pts),
95 | },
96 | };
97 | }
98 |
99 | export async function parsePlaylist(url: string): Promise {
100 | const masterResponse = await get(url);
101 | let levels;
102 | if (isLevelPlaylist(masterResponse)) {
103 | levels = [M3U8Parser.parseLevelPlaylist(masterResponse, url, 0, 'main', 0)];
104 | } else {
105 | const parsedMaster = M3U8Parser.parseMasterPlaylist(masterResponse, url);
106 | levels = await Promise.all(parsedMaster.map(async (level, index) => {
107 | const levelString = await get(level.url);
108 | return M3U8Parser.parseLevelPlaylist(levelString, level.url, index, 'main', 0);
109 | }));
110 | }
111 |
112 | return {
113 | levels,
114 | url,
115 | };
116 | }
117 |
--------------------------------------------------------------------------------
/site/ui/ui.ts:
--------------------------------------------------------------------------------
1 | const canvas = document.querySelector('canvas');
2 | const context = canvas.getContext('2d');
3 | const width = canvas.width = window.innerWidth;
4 | const height = canvas.height = window.innerHeight;
5 |
6 | const randomHexColor = () => '#' + Math.floor(Math.random() * 16777215).toString(16);
7 |
8 | function create2DPtsPoint(pts) {
9 | return {
10 | x: pts / 90000,
11 | y: pts,
12 | };
13 | }
14 |
15 | function splitAV(fragments) {
16 | const audio = [];
17 | const video = [];
18 | fragments.forEach((frag) => {
19 | audio.push(frag.data.audio.pts);
20 | video.push(frag.data.video.pts);
21 | });
22 |
23 | return { audio, video };
24 | }
25 |
26 | function createLineSet(level) {
27 | const { audio, video } = splitAV(level.fragments);
28 | return [
29 | {
30 | borderColor: randomHexColor(),
31 | cubicInterpolationMode: 'monotone',
32 | data: audio.flat(),
33 | fill: false,
34 | label: 'Audio',
35 | type: 'line',
36 | },
37 | {
38 | borderColor: randomHexColor(),
39 | cubicInterpolationMode: 'monotone',
40 | data: video.flat(),
41 | fill: false,
42 | label: 'Video',
43 | type: 'line',
44 | },
45 | ];
46 | }
47 |
48 | function createScatterSet(level) {
49 | return createLineSet(level)
50 | .map((set) => {
51 | set.data = set.data.flat().map(create2DPtsPoint);
52 | set.type = 'scatter';
53 | return set;
54 | });
55 | }
56 |
57 | function createBarSet(level) {
58 | const { audio, video } = splitAV(level.fragments);
59 | barSet.map((set) => {
60 | const diff = [];
61 | set.data.forEach((val, index) => {
62 | if (set.data[index + 1]) {
63 | diff.push(set.data[index + 1] - val);
64 | }
65 | });
66 | set.data = diff;
67 | set.type = 'bar';
68 | });
69 | return barSet;
70 | }
71 |
72 | function createPerFragDataset(level) {
73 | const borderColor = randomHexColor();
74 | return level.fragments.map((frag, index) => {
75 | return [
76 | {
77 | backgroundColor: borderColor,
78 | borderColor,
79 | data: frag.data.audio.pts.flat(),
80 | fill: true,
81 | label: `Frag ${index} audio`,
82 | },
83 | {
84 | backgroundColor: borderColor,
85 | borderColor,
86 | data: frag.data.video.pts.flat(),
87 | fill: true,
88 | label: `Frag ${index} video`,
89 | },
90 | ];
91 | }).flat();
92 | }
93 |
94 | (async () => {
95 | let response;
96 | try {
97 | response = await fetch(
98 | 'http://localhost:3000/report?stream=https%3A%2F%2Fvideo-dev.github.io%2Fstreams%2Fpts_shift%2Fmaster.m3u8'
99 | );
100 | } catch (e) {
101 | console.error(e);
102 | return;
103 | }
104 | const report = await response.json();
105 | console.log(report);
106 |
107 | const lineDataSet = createLineSet(report.levels[0]);
108 | const scatterDataSet = createScatterSet(report.levels[0]);
109 | const barDataSet = createBarSet(report.levels[0]);
110 |
111 | const chart = new Chart(context, {
112 | data: {
113 | labels: report.levels[0].fragments.map((f, i) => `Frag ${i}`),
114 | datasets: [
115 | ...lineDataSet,
116 | ...scatterDataSet,
117 | ],
118 | },
119 | type: 'line',
120 | options: {
121 | scales: {
122 | yAxes: [{
123 | ticks: {
124 | // max: datasets[1].data[datasets[1].data.length - 1].y,
125 | },
126 | }],
127 | },
128 | },
129 | });
130 | })();
131 |
--------------------------------------------------------------------------------
/src/hls/fragment.ts:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 | import * as URLToolkit from 'url-toolkit';
3 |
4 | import LevelKey from './level-key';
5 |
6 | export default class Fragment {
7 | public tagList: string[][] = [];
8 | public programDateTime: number;
9 | public rawProgramDateTime: string;
10 | public relurl: string;
11 | public baseurl: string;
12 | public rawByteRange: string;
13 | public duration: number;
14 | public levelkey: LevelKey;
15 | public sn: number | string = 0;
16 | public data: any = null;
17 | public title: string;
18 | public start: number;
19 | public type: string;
20 | public cc: number;
21 | public level: number;
22 | public urlId: string;
23 | public lastByteRangeEndOffset: number = 0;
24 |
25 | private _url: string;
26 | private _byteRange: number[];
27 | private _decryptdata: {
28 | uri: string,
29 | key: string,
30 | };
31 | private _elementaryStreams: {};
32 |
33 | constructor() {
34 | // Holds the types of data this fragment supports
35 | this._elementaryStreams = {
36 | [Fragment.ElementaryStreamTypes.AUDIO]: false,
37 | [Fragment.ElementaryStreamTypes.VIDEO]: false,
38 | };
39 | }
40 |
41 | /**
42 | * `type` property for this._elementaryStreams
43 | *
44 | * @enum
45 | */
46 | static get ElementaryStreamTypes() {
47 | return {
48 | AUDIO: 'audio',
49 | VIDEO: 'video',
50 | };
51 | }
52 |
53 | get url() {
54 | if (!this._url && this.relurl) {
55 | this._url = URLToolkit.buildAbsoluteURL(this.baseurl, this.relurl, { alwaysNormalize: true });
56 | }
57 |
58 | return this._url;
59 | }
60 |
61 | set url(value) {
62 | this._url = value;
63 | }
64 |
65 | get byteRange() {
66 | if (!this._byteRange && !this.rawByteRange) {
67 | return [];
68 | }
69 |
70 | if (this._byteRange) {
71 | return this._byteRange;
72 | }
73 |
74 | const byteRange = [];
75 | if (this.rawByteRange) {
76 | const params = this.rawByteRange.split('@', 2);
77 | if (params.length === 1) {
78 | const lastByteRangeEndOffset = this.lastByteRangeEndOffset;
79 | byteRange[0] = lastByteRangeEndOffset || 0;
80 | } else {
81 | byteRange[0] = parseInt(params[1], 10);
82 | }
83 | byteRange[1] = parseInt(params[0], 10) + byteRange[0];
84 | this._byteRange = byteRange;
85 | }
86 | return byteRange;
87 | }
88 |
89 | get byteRangeStartOffset() {
90 | return this.byteRange[0];
91 | }
92 |
93 | get byteRangeEndOffset() {
94 | return this.byteRange[1];
95 | }
96 |
97 | get decryptdata() {
98 | if (!this._decryptdata) {
99 | this._decryptdata = this.fragmentDecryptdataFromLevelkey(this.levelkey, this.sn);
100 | }
101 |
102 | return this._decryptdata;
103 | }
104 |
105 | get endProgramDateTime() {
106 | if (!Number.isFinite(this.programDateTime)) {
107 | return null;
108 | }
109 |
110 | const duration = !Number.isFinite(this.duration) ? 0 : this.duration;
111 |
112 | return this.programDateTime + (duration * 1000);
113 | }
114 |
115 | get encrypted() {
116 | return !!((this.decryptdata && this.decryptdata.uri !== null) && (this.decryptdata.key === null));
117 | }
118 |
119 | public addElementaryStream(type) {
120 | this._elementaryStreams[type] = true;
121 | }
122 |
123 | public hasElementaryStream(type) {
124 | return this._elementaryStreams[type] === true;
125 | }
126 |
127 | /**
128 | * Utility method for parseLevelPlaylist to create an initialization vector for a given segment
129 | * @returns {Uint8Array}
130 | */
131 | public createInitializationVector(segmentNumber) {
132 | const uint8View = new Uint8Array(16);
133 |
134 | for (let i = 12; i < 16; i++) {
135 | uint8View[i] = (segmentNumber >> 8 * (15 - i)) & 0xff;
136 | }
137 |
138 | return uint8View;
139 | }
140 |
141 | /**
142 | * Utility method for parseLevelPlaylist to get a fragment's decryption data from the currently parsed encryption key
143 | * data.
144 | * @param levelkey - a playlist's encryption info
145 | * @param segmentNumber - the fragment's segment number
146 | * @returns {*} - an object to be applied as a fragment's decryptdata
147 | */
148 | public fragmentDecryptdataFromLevelkey(levelkey, segmentNumber) {
149 | let decryptdata = levelkey;
150 |
151 | if (levelkey && levelkey.method && levelkey.uri && !levelkey.iv) {
152 | decryptdata = new LevelKey();
153 | decryptdata.method = levelkey.method;
154 | decryptdata.baseuri = levelkey.baseuri;
155 | decryptdata.reluri = levelkey.reluri;
156 | decryptdata.iv = this.createInitializationVector(segmentNumber);
157 | }
158 |
159 | return decryptdata;
160 | }
161 | }
162 |
--------------------------------------------------------------------------------
/wait-for-it.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | # Use this script to test if a given TCP host/port are available
3 |
4 | WAITFORIT_cmdname=${0##*/}
5 |
6 | echoerr() { if [[ $WAITFORIT_QUIET -ne 1 ]]; then echo "$@" 1>&2; fi }
7 |
8 | usage()
9 | {
10 | cat << USAGE >&2
11 | Usage:
12 | $WAITFORIT_cmdname host:port [-s] [-t timeout] [-- command args]
13 | -h HOST | --host=HOST Host or IP under test
14 | -p PORT | --port=PORT TCP port under test
15 | Alternatively, you specify the host and port as host:port
16 | -s | --strict Only execute subcommand if the test succeeds
17 | -q | --quiet Don't output any status messages
18 | -t TIMEOUT | --timeout=TIMEOUT
19 | Timeout in seconds, zero for no timeout
20 | -- COMMAND ARGS Execute command with args after the test finishes
21 | USAGE
22 | exit 1
23 | }
24 |
25 | wait_for()
26 | {
27 | if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
28 | echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
29 | else
30 | echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout"
31 | fi
32 | WAITFORIT_start_ts=$(date +%s)
33 | while :
34 | do
35 | if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then
36 | nc -z $WAITFORIT_HOST $WAITFORIT_PORT
37 | WAITFORIT_result=$?
38 | else
39 | (echo > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1
40 | WAITFORIT_result=$?
41 | fi
42 | if [[ $WAITFORIT_result -eq 0 ]]; then
43 | WAITFORIT_end_ts=$(date +%s)
44 | echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds"
45 | break
46 | fi
47 | sleep 1
48 | done
49 | return $WAITFORIT_result
50 | }
51 |
52 | wait_for_wrapper()
53 | {
54 | # In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
55 | if [[ $WAITFORIT_QUIET -eq 1 ]]; then
56 | timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
57 | else
58 | timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
59 | fi
60 | WAITFORIT_PID=$!
61 | trap "kill -INT -$WAITFORIT_PID" INT
62 | wait $WAITFORIT_PID
63 | WAITFORIT_RESULT=$?
64 | if [[ $WAITFORIT_RESULT -ne 0 ]]; then
65 | echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
66 | fi
67 | return $WAITFORIT_RESULT
68 | }
69 |
70 | # process arguments
71 | while [[ $# -gt 0 ]]
72 | do
73 | case "$1" in
74 | *:* )
75 | WAITFORIT_hostport=(${1//:/ })
76 | WAITFORIT_HOST=${WAITFORIT_hostport[0]}
77 | WAITFORIT_PORT=${WAITFORIT_hostport[1]}
78 | shift 1
79 | ;;
80 | --child)
81 | WAITFORIT_CHILD=1
82 | shift 1
83 | ;;
84 | -q | --quiet)
85 | WAITFORIT_QUIET=1
86 | shift 1
87 | ;;
88 | -s | --strict)
89 | WAITFORIT_STRICT=1
90 | shift 1
91 | ;;
92 | -h)
93 | WAITFORIT_HOST="$2"
94 | if [[ $WAITFORIT_HOST == "" ]]; then break; fi
95 | shift 2
96 | ;;
97 | --host=*)
98 | WAITFORIT_HOST="${1#*=}"
99 | shift 1
100 | ;;
101 | -p)
102 | WAITFORIT_PORT="$2"
103 | if [[ $WAITFORIT_PORT == "" ]]; then break; fi
104 | shift 2
105 | ;;
106 | --port=*)
107 | WAITFORIT_PORT="${1#*=}"
108 | shift 1
109 | ;;
110 | -t)
111 | WAITFORIT_TIMEOUT="$2"
112 | if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi
113 | shift 2
114 | ;;
115 | --timeout=*)
116 | WAITFORIT_TIMEOUT="${1#*=}"
117 | shift 1
118 | ;;
119 | --)
120 | shift
121 | WAITFORIT_CLI=("$@")
122 | break
123 | ;;
124 | --help)
125 | usage
126 | ;;
127 | *)
128 | echoerr "Unknown argument: $1"
129 | usage
130 | ;;
131 | esac
132 | done
133 |
134 | if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then
135 | echoerr "Error: you need to provide a host and port to test."
136 | usage
137 | fi
138 |
139 | WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-15}
140 | WAITFORIT_STRICT=${WAITFORIT_STRICT:-0}
141 | WAITFORIT_CHILD=${WAITFORIT_CHILD:-0}
142 | WAITFORIT_QUIET=${WAITFORIT_QUIET:-0}
143 |
144 | # check to see if timeout is from busybox?
145 | WAITFORIT_TIMEOUT_PATH=$(type -p timeout)
146 | WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlink -f $WAITFORIT_TIMEOUT_PATH)
147 | if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then
148 | WAITFORIT_ISBUSY=1
149 | WAITFORIT_BUSYTIMEFLAG="-t"
150 |
151 | else
152 | WAITFORIT_ISBUSY=0
153 | WAITFORIT_BUSYTIMEFLAG=""
154 | fi
155 |
156 | if [[ $WAITFORIT_CHILD -gt 0 ]]; then
157 | wait_for
158 | WAITFORIT_RESULT=$?
159 | exit $WAITFORIT_RESULT
160 | else
161 | if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
162 | wait_for_wrapper
163 | WAITFORIT_RESULT=$?
164 | else
165 | wait_for
166 | WAITFORIT_RESULT=$?
167 | fi
168 | fi
169 |
170 | if [[ $WAITFORIT_CLI != "" ]]; then
171 | if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then
172 | echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess"
173 | exit $WAITFORIT_RESULT
174 | fi
175 | exec "${WAITFORIT_CLI[@]}"
176 | else
177 | exit $WAITFORIT_RESULT
178 | fi
179 |
--------------------------------------------------------------------------------
/src/hls/m3u8-parser.ts:
--------------------------------------------------------------------------------
1 | import * as URLToolkit from 'url-toolkit';
2 |
3 | import Fragment from './fragment';
4 | import Level from './level';
5 | import LevelKey from './level-key';
6 |
7 | import AttrList from './attr-list';
8 | // import { logger } from '../utils/logger';
9 | import { isCodecType } from './codecs';
10 |
11 | /**
12 | * M3U8 parser
13 | * @module
14 | */
15 |
16 | // https://regex101.com is your friend
17 | const MASTER_PLAYLIST_REGEX = /#EXT-X-STREAM-INF:([^\n\r]*)[\r\n]+([^\r\n]+)/g;
18 | const MASTER_PLAYLIST_MEDIA_REGEX = /#EXT-X-MEDIA:(.*)/g;
19 |
20 | const LEVEL_PLAYLIST_REGEX_FAST = new RegExp([
21 | /#EXTINF:\s*(\d*(?:\.\d+)?)(?:,(.*)\s+)?/.source, // duration (#EXTINF:,), group 1 => duration, group 2 => title
22 | /|(?!#)([\S+ ?]+)/.source, // segment URI, group 3 => the URI (note newline is not eaten)
23 | /|#EXT-X-BYTERANGE:*(.+)/.source, // next segment's byterange, group 4 => range spec (x@y)
24 | /|#EXT-X-PROGRAM-DATE-TIME:(.+)/.source, // next segment's program date/time group 5 => the datetime spec
25 | /|#.*/.source, // All other non-segment oriented tags will match with all groups empty
26 | ].join(''), 'g');
27 |
28 | const LEVEL_PLAYLIST_REGEX_SLOW = /(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\d+))|(?:#EXT-X-(TARGETDURATION): *(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\d+))|(?:#EXT-X-(MAP):(.+))|(?:(#)([^:]*):(.*))|(?:(#)(.*))(?:.*)\r?\n?/;
29 |
30 | const MP4_REGEX_SUFFIX = /\.(mp4|m4s|m4v|m4a)$/i;
31 |
32 | export default class M3U8Parser {
33 | public static findGroup(groups, mediaGroupId) {
34 | if (!groups) {
35 | return null;
36 | }
37 |
38 | let matchingGroup = null;
39 |
40 | for (let i = 0; i < groups.length; i++) {
41 | const group = groups[i];
42 | if (group.id === mediaGroupId) {
43 | matchingGroup = group;
44 | }
45 | }
46 |
47 | return matchingGroup;
48 | }
49 |
50 | public pulic; public static convertAVC1ToAVCOTI(codec) {
51 | let result, avcdata = codec.split('.');
52 | if (avcdata.length > 2) {
53 | result = avcdata.shift() + '.';
54 | result += parseInt(avcdata.shift(), 10).toString(16);
55 | result += ('000' + parseInt(avcdata.shift(), 10).toString(16)).substr(-4);
56 | } else {
57 | result = codec;
58 | }
59 | return result;
60 | }
61 |
62 | public static resolve(url, baseUrl) {
63 | return URLToolkit.buildAbsoluteURL(baseUrl, url, { alwaysNormalize: true });
64 | }
65 |
66 | public static parseMasterPlaylist(string, baseurl) {
67 | let levels = [], result;
68 | MASTER_PLAYLIST_REGEX.lastIndex = 0;
69 |
70 | function setCodecs(codecs, level) {
71 | ['video', 'audio'].forEach((type) => {
72 | const filtered = codecs.filter((codec) => isCodecType(codec, type));
73 | if (filtered.length) {
74 | const preferred = filtered.filter((codec) => {
75 | return codec.lastIndexOf('avc1', 0) === 0 || codec.lastIndexOf('mp4a', 0) === 0;
76 | });
77 | level[`${type}Codec`] = preferred.length > 0 ? preferred[0] : filtered[0];
78 |
79 | // remove from list
80 | codecs = codecs.filter((codec) => filtered.indexOf(codec) === -1);
81 | }
82 | });
83 |
84 | level.unknownCodecs = codecs;
85 | }
86 |
87 | while ((result = MASTER_PLAYLIST_REGEX.exec(string)) != null) {
88 | const level = {} as any;
89 |
90 | const attrs = level.attrs = new AttrList(result[1]) as any;
91 | level.url = M3U8Parser.resolve(result[2], baseurl);
92 |
93 | const resolution = attrs.decimalResolution('RESOLUTION');
94 | if (resolution) {
95 | level.width = resolution.width;
96 | level.height = resolution.height;
97 | }
98 | level.bitrate = attrs.decimalInteger('AVERAGE-BANDWIDTH') || attrs.decimalInteger('BANDWIDTH');
99 | level.name = attrs.NAME;
100 |
101 | setCodecs([].concat((attrs.CODECS || '').split(/[ ,]+/)), level);
102 |
103 | if (level.videoCodec && level.videoCodec.indexOf('avc1') !== -1) {
104 | level.videoCodec = M3U8Parser.convertAVC1ToAVCOTI(level.videoCodec);
105 | }
106 |
107 | levels.push(level);
108 | }
109 | return levels;
110 | }
111 |
112 | public static parseMasterPlaylistMedia(string, baseurl, type, audioGroups = []) {
113 | let result;
114 | const medias = [];
115 | let id = 0;
116 | MASTER_PLAYLIST_MEDIA_REGEX.lastIndex = 0;
117 | while ((result = MASTER_PLAYLIST_MEDIA_REGEX.exec(string)) !== null) {
118 | const media = {} as any;
119 | const attrs = new AttrList(result[1]) as any;
120 | if (attrs.TYPE === type) {
121 | media.groupId = attrs['GROUP-ID'];
122 | media.name = attrs.NAME;
123 | media.type = type;
124 | media.default = (attrs.DEFAULT === 'YES');
125 | media.autoselect = (attrs.AUTOSELECT === 'YES');
126 | media.forced = (attrs.FORCED === 'YES');
127 | if (attrs.URI) {
128 | media.url = M3U8Parser.resolve(attrs.URI, baseurl);
129 | }
130 |
131 | media.lang = attrs.LANGUAGE;
132 | if (!media.name) {
133 | media.name = media.lang;
134 | }
135 |
136 | if (audioGroups.length) {
137 | const groupCodec = M3U8Parser.findGroup(audioGroups, media.groupId);
138 | media.audioCodec = groupCodec ? groupCodec.codec : audioGroups[0].codec;
139 | }
140 | media.id = id++;
141 | medias.push(media);
142 | }
143 | }
144 | return medias;
145 | }
146 |
147 | public static parseLevelPlaylist(string, baseurl, id, type, levelUrlId) {
148 | let currentSN = 0;
149 | let totalduration = 0;
150 | const level = new Level(baseurl);
151 | let levelkey = new LevelKey();
152 | let cc = 0;
153 | let prevFrag = null;
154 | let frag = new Fragment();
155 | let result;
156 | let i;
157 |
158 | let firstPdtIndex = null;
159 |
160 | LEVEL_PLAYLIST_REGEX_FAST.lastIndex = 0;
161 |
162 | while ((result = LEVEL_PLAYLIST_REGEX_FAST.exec(string)) !== null) {
163 | const duration = result[1];
164 | if (duration) { // INF
165 | frag.duration = parseFloat(duration);
166 | // avoid sliced strings https://github.com/video-dev/hls.js/issues/939
167 | const title = (' ' + result[2]).slice(1);
168 | frag.title = title || null;
169 | frag.tagList.push(title ? [ 'INF', duration + '', title ] : [ 'INF', duration + '' ]);
170 | } else if (result[3]) { // url
171 | if (Number.isFinite(frag.duration)) {
172 | const sn = currentSN++;
173 | frag.type = type;
174 | frag.start = totalduration;
175 | frag.levelkey = levelkey;
176 | frag.sn = sn;
177 | frag.level = id;
178 | frag.cc = cc;
179 | frag.urlId = levelUrlId;
180 | frag.baseurl = baseurl;
181 | // avoid sliced strings https://github.com/video-dev/hls.js/issues/939
182 | frag.relurl = (' ' + result[3]).slice(1);
183 | assignProgramDateTime(frag, prevFrag);
184 |
185 | level.fragments.push(frag);
186 | prevFrag = frag;
187 | totalduration += frag.duration;
188 |
189 | frag = new Fragment();
190 | }
191 | } else if (result[4]) { // X-BYTERANGE
192 | frag.rawByteRange = (' ' + result[4]).slice(1);
193 | if (prevFrag) {
194 | const lastByteRangeEndOffset = prevFrag.byteRangeEndOffset;
195 | if (lastByteRangeEndOffset) {
196 | frag.lastByteRangeEndOffset = lastByteRangeEndOffset;
197 | }
198 | }
199 | } else if (result[5]) { // PROGRAM-DATE-TIME
200 | // avoid sliced strings https://github.com/video-dev/hls.js/issues/939
201 | frag.rawProgramDateTime = (' ' + result[5]).slice(1);
202 | frag.tagList.push(['PROGRAM-DATE-TIME', frag.rawProgramDateTime]);
203 | if (firstPdtIndex === null) {
204 | firstPdtIndex = level.fragments.length;
205 | }
206 | } else {
207 | result = result[0].match(LEVEL_PLAYLIST_REGEX_SLOW);
208 | for (i = 1; i < result.length; i++) {
209 | if (result[i] !== undefined) {
210 | break;
211 | }
212 | }
213 |
214 | // avoid sliced strings https://github.com/video-dev/hls.js/issues/939
215 | const value1 = (' ' + result[i + 1]).slice(1);
216 | const value2 = (' ' + result[i + 2]).slice(1);
217 |
218 | switch (result[i]) {
219 | case '#':
220 | frag.tagList.push(value2 ? [ value1, value2 ] : [ value1 ]);
221 | break;
222 | case 'PLAYLIST-TYPE':
223 | level.type = value1.toUpperCase();
224 | break;
225 | case 'MEDIA-SEQUENCE':
226 | currentSN = level.startSN = parseInt(value1, 10);
227 | break;
228 | case 'TARGETDURATION':
229 | level.targetduration = parseFloat(value1);
230 | break;
231 | case 'VERSION':
232 | level.version = parseInt(value1, 10);
233 | break;
234 | case 'EXTM3U':
235 | break;
236 | case 'ENDLIST':
237 | level.live = false;
238 | break;
239 | case 'DIS':
240 | cc++;
241 | frag.tagList.push(['DIS']);
242 | break;
243 | case 'DISCONTINUITY-SEQ':
244 | cc = parseInt(value1, 10);
245 | break;
246 | case 'KEY':
247 | // https://tools.ietf.org/html/draft-pantos-http-live-streaming-08#section-3.4.4
248 | const keyAttrs = new AttrList(value1) as any;
249 | const decryptmethod = keyAttrs.enumeratedString('METHOD');
250 | const decrypturi = keyAttrs.URI;
251 | const decryptiv = keyAttrs.hexadecimalInteger('IV');
252 | if (decryptmethod) {
253 | levelkey = new LevelKey();
254 | if ((decrypturi) && (['AES-128', 'SAMPLE-AES', 'SAMPLE-AES-CENC'].indexOf(decryptmethod) >= 0)) {
255 | levelkey.method = decryptmethod;
256 | // URI to get the key
257 | levelkey.baseuri = baseurl;
258 | levelkey.reluri = decrypturi;
259 | levelkey.key = null;
260 | // Initialization Vector (IV)
261 | levelkey.iv = decryptiv;
262 | }
263 | }
264 | break;
265 | case 'START':
266 | const startParams = value1;
267 | const startAttrs = new AttrList(startParams);
268 | const startTimeOffset = startAttrs.decimalFloatingPoint('TIME-OFFSET');
269 | // TIME-OFFSET can be 0
270 | if (Number.isFinite(startTimeOffset)) {
271 | level.startTimeOffset = startTimeOffset;
272 | }
273 |
274 | break;
275 | case 'MAP':
276 | const mapAttrs = new AttrList(value1) as any;
277 | frag.relurl = mapAttrs.URI;
278 | frag.rawByteRange = mapAttrs.BYTERANGE;
279 | frag.baseurl = baseurl;
280 | frag.level = id;
281 | frag.type = type;
282 | frag.sn = 'initSegment';
283 | level.initSegment = frag;
284 | frag = new Fragment();
285 | frag.rawProgramDateTime = level.initSegment.rawProgramDateTime;
286 | break;
287 | default:
288 | // logger.warn(`line parsed but not handled: ${result}`);
289 | break;
290 | }
291 | }
292 | }
293 | frag = prevFrag;
294 | // logger.log('found ' + level.fragments.length + ' fragments');
295 | if (frag && !frag.relurl) {
296 | level.fragments.pop();
297 | totalduration -= frag.duration;
298 | }
299 | level.totalduration = totalduration;
300 | level.averagetargetduration = totalduration / level.fragments.length;
301 | level.endSN = currentSN - 1;
302 | level.startCC = level.fragments[0] ? level.fragments[0].cc : 0;
303 | level.endCC = cc;
304 |
305 | if (!level.initSegment && level.fragments.length) {
306 | // this is a bit lurky but HLS really has no other way to tell us
307 | // if the fragments are TS or MP4, except if we download them :/
308 | // but this is to be able to handle SIDX.
309 | if (level.fragments.every((frag) => MP4_REGEX_SUFFIX.test(frag.relurl))) {
310 | // logger.warn('MP4 fragments found but no init segment (probably no MAP, incomplete M3U8), trying to fetch SIDX');
311 |
312 | frag = new Fragment();
313 | frag.relurl = level.fragments[0].relurl;
314 | frag.baseurl = baseurl;
315 | frag.level = id;
316 | frag.type = type;
317 | frag.sn = 'initSegment';
318 |
319 | level.initSegment = frag;
320 | level.needSidxRanges = true;
321 | }
322 | }
323 |
324 | /**
325 | * Backfill any missing PDT values
326 | "If the first EXT-X-PROGRAM-DATE-TIME tag in a Playlist appears after
327 | one or more Media Segment URIs, the client SHOULD extrapolate
328 | backward from that tag (using EXTINF durations and/or media
329 | timestamps) to associate dates with those segments."
330 | * We have already extrapolated forward, but all fragments up to the first instance of PDT do not have their PDTs
331 | * computed.
332 | */
333 | if (firstPdtIndex) {
334 | backfillProgramDateTimes(level.fragments, firstPdtIndex);
335 | }
336 |
337 | return level;
338 | }
339 | }
340 |
341 | function backfillProgramDateTimes(fragments, startIndex) {
342 | let fragPrev = fragments[startIndex];
343 | for (let i = startIndex - 1; i >= 0; i--) {
344 | const frag = fragments[i];
345 | frag.programDateTime = fragPrev.programDateTime - (frag.duration * 1000);
346 | fragPrev = frag;
347 | }
348 | }
349 |
350 | function assignProgramDateTime(frag, prevFrag) {
351 | if (frag.rawProgramDateTime) {
352 | frag.programDateTime = Date.parse(frag.rawProgramDateTime);
353 | } else if (prevFrag && prevFrag.programDateTime) {
354 | frag.programDateTime = prevFrag.endProgramDateTime;
355 | }
356 |
357 | if (!Number.isFinite(frag.programDateTime)) {
358 | frag.programDateTime = null;
359 | frag.rawProgramDateTime = null;
360 | }
361 | }
362 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@types/body-parser@*":
6 | version "1.17.0"
7 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c"
8 | integrity sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==
9 | dependencies:
10 | "@types/connect" "*"
11 | "@types/node" "*"
12 |
13 | "@types/bson@*":
14 | version "1.0.11"
15 | resolved "https://registry.yarnpkg.com/@types/bson/-/bson-1.0.11.tgz#c95ad69bb0b3f5c33b4bb6cc86d86cafb273335c"
16 | integrity sha512-j+UcCWI+FsbI5/FQP/Kj2CXyplWAz39ktHFkXk84h7dNblKRSoNJs95PZFRd96NQGqsPEPgeclqnznWZr14ZDA==
17 | dependencies:
18 | "@types/node" "*"
19 |
20 | "@types/caseless@*":
21 | version "0.12.1"
22 | resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.1.tgz#9794c69c8385d0192acc471a540d1f8e0d16218a"
23 | integrity sha512-FhlMa34NHp9K5MY1Uz8yb+ZvuX0pnvn3jScRSNAb75KHGB8d3rEU6hqMs3Z2vjuytcMfRg6c5CHMc3wtYyD2/A==
24 |
25 | "@types/chart.js@^2.7.41":
26 | version "2.7.41"
27 | resolved "https://registry.yarnpkg.com/@types/chart.js/-/chart.js-2.7.41.tgz#3e59d82fbfd536dfec8c092bfbf218cac567ab2e"
28 | integrity sha512-AkxGv6oqAfd93sv2B2uAOm6z/elj/O62p8WZCPr9EStr85ykcw7bETVMaK0+4XLuHhGui7Fdm+tfQk0EatRFKA==
29 |
30 | "@types/connect@*":
31 | version "3.4.32"
32 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28"
33 | integrity sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==
34 | dependencies:
35 | "@types/node" "*"
36 |
37 | "@types/events@*":
38 | version "1.2.0"
39 | resolved "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86"
40 | integrity sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==
41 |
42 | "@types/express-serve-static-core@*":
43 | version "4.16.0"
44 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz#fdfe777594ddc1fe8eb8eccce52e261b496e43e7"
45 | integrity sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==
46 | dependencies:
47 | "@types/events" "*"
48 | "@types/node" "*"
49 | "@types/range-parser" "*"
50 |
51 | "@types/express@^4.16.0":
52 | version "4.16.0"
53 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.0.tgz#6d8bc42ccaa6f35cf29a2b7c3333cb47b5a32a19"
54 | integrity sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==
55 | dependencies:
56 | "@types/body-parser" "*"
57 | "@types/express-serve-static-core" "*"
58 | "@types/serve-static" "*"
59 |
60 | "@types/form-data@*":
61 | version "2.2.1"
62 | resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-2.2.1.tgz#ee2b3b8eaa11c0938289953606b745b738c54b1e"
63 | integrity sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==
64 | dependencies:
65 | "@types/node" "*"
66 |
67 | "@types/mime@*":
68 | version "2.0.0"
69 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.0.tgz#5a7306e367c539b9f6543499de8dd519fac37a8b"
70 | integrity sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==
71 |
72 | "@types/mongodb@^3.1.17":
73 | version "3.1.17"
74 | resolved "https://registry.yarnpkg.com/@types/mongodb/-/mongodb-3.1.17.tgz#11351b147b68e7674cff9055ea82072521bc6fe3"
75 | integrity sha512-u6tSIpfdsgK74aE0TuyqZYhHscw+gHs6dQNSsFUTFXubhhxCqovmV3nJRS0YKSw0sfqbzUgGzbG5+yorUPRnFg==
76 | dependencies:
77 | "@types/bson" "*"
78 | "@types/node" "*"
79 |
80 | "@types/node@*":
81 | version "10.12.15"
82 | resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.15.tgz#20e85651b62fd86656e57c9c9bc771ab1570bc59"
83 | integrity sha512-9kROxduaN98QghwwHmxXO2Xz3MaWf+I1sLVAA6KJDF5xix+IyXVhds0MAfdNwtcpSrzhaTsNB0/jnL86fgUhqA==
84 |
85 | "@types/range-parser@*":
86 | version "1.2.3"
87 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c"
88 | integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==
89 |
90 | "@types/redis@*", "@types/redis@^2.8.0":
91 | version "2.8.9"
92 | resolved "https://registry.yarnpkg.com/@types/redis/-/redis-2.8.9.tgz#3addfdbd81cc773c2446e34225c0911c43b960fc"
93 | integrity sha512-pmKQsTy/g37+XOFrunNXGn9nDjcXpOkaL0Xm6T4eEfZOED09A9AQuJvLiSQwNeeQ7pPL42MBOrTy/4+6p9MqvA==
94 | dependencies:
95 | "@types/node" "*"
96 |
97 | "@types/request-promise-native@^1.0.15":
98 | version "1.0.15"
99 | resolved "https://registry.yarnpkg.com/@types/request-promise-native/-/request-promise-native-1.0.15.tgz#5b3369fc6aaf9e7fef7b6b688aef4c5759623e16"
100 | integrity sha512-uYPjTChD9TpjlvbBjNpZfNc64TBejBS52u7pbxhQLnlxw+5Em7wLb6DU2wdJVhJ2Mou7v50N0qgL4Gia5mmRYg==
101 | dependencies:
102 | "@types/request" "*"
103 |
104 | "@types/request@*":
105 | version "2.48.1"
106 | resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.1.tgz#e402d691aa6670fbbff1957b15f1270230ab42fa"
107 | integrity sha512-ZgEZ1TiD+KGA9LiAAPPJL68Id2UWfeSO62ijSXZjFJArVV+2pKcsVHmrcu+1oiE3q6eDGiFiSolRc4JHoerBBg==
108 | dependencies:
109 | "@types/caseless" "*"
110 | "@types/form-data" "*"
111 | "@types/node" "*"
112 | "@types/tough-cookie" "*"
113 |
114 | "@types/rsmq@^0.3.27":
115 | version "0.3.27"
116 | resolved "https://registry.yarnpkg.com/@types/rsmq/-/rsmq-0.3.27.tgz#a063c5663482ab015837013a0ed0057badb7b35c"
117 | integrity sha1-oGPFZjSCqwFYNwE6DtAFe623s1w=
118 | dependencies:
119 | "@types/redis" "*"
120 |
121 | "@types/serve-static@*":
122 | version "1.13.2"
123 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48"
124 | integrity sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==
125 | dependencies:
126 | "@types/express-serve-static-core" "*"
127 | "@types/mime" "*"
128 |
129 | "@types/tough-cookie@*":
130 | version "2.3.4"
131 | resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.4.tgz#821878b81bfab971b93a265a561d54ea61f9059f"
132 | integrity sha512-Set5ZdrAaKI/qHdFlVMgm/GsAv/wkXhSTuZFkJ+JI7HK+wIkIlOaUXSXieIvJ0+OvGIqtREFoE+NHJtEq0gtEw==
133 |
134 | abbrev@1:
135 | version "1.1.1"
136 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
137 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
138 |
139 | accepts@~1.3.5:
140 | version "1.3.5"
141 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
142 | integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I=
143 | dependencies:
144 | mime-types "~2.1.18"
145 | negotiator "0.6.1"
146 |
147 | ajv@^6.5.5:
148 | version "6.6.2"
149 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.2.tgz#caceccf474bf3fc3ce3b147443711a24063cc30d"
150 | integrity sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==
151 | dependencies:
152 | fast-deep-equal "^2.0.1"
153 | fast-json-stable-stringify "^2.0.0"
154 | json-schema-traverse "^0.4.1"
155 | uri-js "^4.2.2"
156 |
157 | ansi-align@^2.0.0:
158 | version "2.0.0"
159 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f"
160 | integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=
161 | dependencies:
162 | string-width "^2.0.0"
163 |
164 | ansi-regex@^2.0.0:
165 | version "2.1.1"
166 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
167 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
168 |
169 | ansi-regex@^3.0.0:
170 | version "3.0.0"
171 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
172 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
173 |
174 | ansi-styles@^2.2.1:
175 | version "2.2.1"
176 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
177 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
178 |
179 | ansi-styles@^3.2.1:
180 | version "3.2.1"
181 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
182 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
183 | dependencies:
184 | color-convert "^1.9.0"
185 |
186 | anymatch@^2.0.0:
187 | version "2.0.0"
188 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
189 | integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
190 | dependencies:
191 | micromatch "^3.1.4"
192 | normalize-path "^2.1.1"
193 |
194 | aproba@^1.0.3:
195 | version "1.2.0"
196 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
197 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
198 |
199 | are-we-there-yet@~1.1.2:
200 | version "1.1.5"
201 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
202 | integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
203 | dependencies:
204 | delegates "^1.0.0"
205 | readable-stream "^2.0.6"
206 |
207 | argparse@^1.0.7:
208 | version "1.0.10"
209 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
210 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
211 | dependencies:
212 | sprintf-js "~1.0.2"
213 |
214 | arr-diff@^4.0.0:
215 | version "4.0.0"
216 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
217 | integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
218 |
219 | arr-flatten@^1.1.0:
220 | version "1.1.0"
221 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
222 | integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
223 |
224 | arr-union@^3.1.0:
225 | version "3.1.0"
226 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
227 | integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
228 |
229 | array-flatten@1.1.1:
230 | version "1.1.1"
231 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
232 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
233 |
234 | array-unique@^0.3.2:
235 | version "0.3.2"
236 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
237 | integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
238 |
239 | arrify@^1.0.0:
240 | version "1.0.1"
241 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
242 | integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
243 |
244 | asn1@~0.2.3:
245 | version "0.2.4"
246 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
247 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
248 | dependencies:
249 | safer-buffer "~2.1.0"
250 |
251 | assert-plus@1.0.0, assert-plus@^1.0.0:
252 | version "1.0.0"
253 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
254 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
255 |
256 | assign-symbols@^1.0.0:
257 | version "1.0.0"
258 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
259 | integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
260 |
261 | async-each@^1.0.0:
262 | version "1.0.1"
263 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
264 | integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
265 |
266 | asynckit@^0.4.0:
267 | version "0.4.0"
268 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
269 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
270 |
271 | atob@^2.1.1:
272 | version "2.1.2"
273 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
274 | integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
275 |
276 | aws-sign2@~0.7.0:
277 | version "0.7.0"
278 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
279 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
280 |
281 | aws4@^1.8.0:
282 | version "1.8.0"
283 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
284 | integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
285 |
286 | babel-code-frame@^6.22.0:
287 | version "6.26.0"
288 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
289 | integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
290 | dependencies:
291 | chalk "^1.1.3"
292 | esutils "^2.0.2"
293 | js-tokens "^3.0.2"
294 |
295 | balanced-match@^1.0.0:
296 | version "1.0.0"
297 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
298 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
299 |
300 | base@^0.11.1:
301 | version "0.11.2"
302 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
303 | integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
304 | dependencies:
305 | cache-base "^1.0.1"
306 | class-utils "^0.3.5"
307 | component-emitter "^1.2.1"
308 | define-property "^1.0.0"
309 | isobject "^3.0.1"
310 | mixin-deep "^1.2.0"
311 | pascalcase "^0.1.1"
312 |
313 | bcrypt-pbkdf@^1.0.0:
314 | version "1.0.2"
315 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
316 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
317 | dependencies:
318 | tweetnacl "^0.14.3"
319 |
320 | binary-extensions@^1.0.0:
321 | version "1.12.0"
322 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14"
323 | integrity sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==
324 |
325 | body-parser@1.18.3:
326 | version "1.18.3"
327 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4"
328 | integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=
329 | dependencies:
330 | bytes "3.0.0"
331 | content-type "~1.0.4"
332 | debug "2.6.9"
333 | depd "~1.1.2"
334 | http-errors "~1.6.3"
335 | iconv-lite "0.4.23"
336 | on-finished "~2.3.0"
337 | qs "6.5.2"
338 | raw-body "2.3.3"
339 | type-is "~1.6.16"
340 |
341 | boxen@^1.2.1:
342 | version "1.3.0"
343 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b"
344 | integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==
345 | dependencies:
346 | ansi-align "^2.0.0"
347 | camelcase "^4.0.0"
348 | chalk "^2.0.1"
349 | cli-boxes "^1.0.0"
350 | string-width "^2.0.0"
351 | term-size "^1.2.0"
352 | widest-line "^2.0.0"
353 |
354 | brace-expansion@^1.1.7:
355 | version "1.1.11"
356 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
357 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
358 | dependencies:
359 | balanced-match "^1.0.0"
360 | concat-map "0.0.1"
361 |
362 | braces@^2.3.0, braces@^2.3.1:
363 | version "2.3.2"
364 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
365 | integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
366 | dependencies:
367 | arr-flatten "^1.1.0"
368 | array-unique "^0.3.2"
369 | extend-shallow "^2.0.1"
370 | fill-range "^4.0.0"
371 | isobject "^3.0.1"
372 | repeat-element "^1.1.2"
373 | snapdragon "^0.8.1"
374 | snapdragon-node "^2.0.1"
375 | split-string "^3.0.2"
376 | to-regex "^3.0.1"
377 |
378 | bson@^1.1.0:
379 | version "1.1.0"
380 | resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.0.tgz#bee57d1fb6a87713471af4e32bcae36de814b5b0"
381 | integrity sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA==
382 |
383 | buffer-from@^1.0.0, buffer-from@^1.1.0:
384 | version "1.1.1"
385 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
386 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
387 |
388 | builtin-modules@^1.1.1:
389 | version "1.1.1"
390 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
391 | integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
392 |
393 | bytes@3.0.0:
394 | version "3.0.0"
395 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
396 | integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
397 |
398 | cache-base@^1.0.1:
399 | version "1.0.1"
400 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
401 | integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
402 | dependencies:
403 | collection-visit "^1.0.0"
404 | component-emitter "^1.2.1"
405 | get-value "^2.0.6"
406 | has-value "^1.0.0"
407 | isobject "^3.0.1"
408 | set-value "^2.0.0"
409 | to-object-path "^0.3.0"
410 | union-value "^1.0.0"
411 | unset-value "^1.0.0"
412 |
413 | camelcase@^4.0.0:
414 | version "4.1.0"
415 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
416 | integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
417 |
418 | capture-stack-trace@^1.0.0:
419 | version "1.0.1"
420 | resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"
421 | integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==
422 |
423 | caseless@~0.12.0:
424 | version "0.12.0"
425 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
426 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
427 |
428 | chalk@^1.1.3:
429 | version "1.1.3"
430 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
431 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
432 | dependencies:
433 | ansi-styles "^2.2.1"
434 | escape-string-regexp "^1.0.2"
435 | has-ansi "^2.0.0"
436 | strip-ansi "^3.0.0"
437 | supports-color "^2.0.0"
438 |
439 | chalk@^2.0.1, chalk@^2.3.0:
440 | version "2.4.1"
441 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
442 | integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==
443 | dependencies:
444 | ansi-styles "^3.2.1"
445 | escape-string-regexp "^1.0.5"
446 | supports-color "^5.3.0"
447 |
448 | chart.js@^2.7.3:
449 | version "2.7.3"
450 | resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.7.3.tgz#cdb61618830bf216dc887e2f7b1b3c228b73c57e"
451 | integrity sha512-3+7k/DbR92m6BsMUYP6M0dMsMVZpMnwkUyNSAbqolHKsbIzH2Q4LWVEHHYq7v0fmEV8whXE0DrjANulw9j2K5g==
452 | dependencies:
453 | chartjs-color "^2.1.0"
454 | moment "^2.10.2"
455 |
456 | chartjs-color-string@^0.5.0:
457 | version "0.5.0"
458 | resolved "https://registry.yarnpkg.com/chartjs-color-string/-/chartjs-color-string-0.5.0.tgz#8d3752d8581d86687c35bfe2cb80ac5213ceb8c1"
459 | integrity sha512-amWNvCOXlOUYxZVDSa0YOab5K/lmEhbFNKI55PWc4mlv28BDzA7zaoQTGxSBgJMHIW+hGX8YUrvw/FH4LyhwSQ==
460 | dependencies:
461 | color-name "^1.0.0"
462 |
463 | chartjs-color@^2.1.0:
464 | version "2.2.0"
465 | resolved "https://registry.yarnpkg.com/chartjs-color/-/chartjs-color-2.2.0.tgz#84a2fb755787ed85c39dd6dd8c7b1d88429baeae"
466 | integrity sha1-hKL7dVeH7YXDndbdjHsdiEKbrq4=
467 | dependencies:
468 | chartjs-color-string "^0.5.0"
469 | color-convert "^0.5.3"
470 |
471 | chokidar@^2.0.4:
472 | version "2.0.4"
473 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26"
474 | integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==
475 | dependencies:
476 | anymatch "^2.0.0"
477 | async-each "^1.0.0"
478 | braces "^2.3.0"
479 | glob-parent "^3.1.0"
480 | inherits "^2.0.1"
481 | is-binary-path "^1.0.0"
482 | is-glob "^4.0.0"
483 | lodash.debounce "^4.0.8"
484 | normalize-path "^2.1.1"
485 | path-is-absolute "^1.0.0"
486 | readdirp "^2.0.0"
487 | upath "^1.0.5"
488 | optionalDependencies:
489 | fsevents "^1.2.2"
490 |
491 | chownr@^1.1.1:
492 | version "1.1.1"
493 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
494 | integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
495 |
496 | ci-info@^1.5.0:
497 | version "1.6.0"
498 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497"
499 | integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==
500 |
501 | class-utils@^0.3.5:
502 | version "0.3.6"
503 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
504 | integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
505 | dependencies:
506 | arr-union "^3.1.0"
507 | define-property "^0.2.5"
508 | isobject "^3.0.0"
509 | static-extend "^0.1.1"
510 |
511 | cli-boxes@^1.0.0:
512 | version "1.0.0"
513 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
514 | integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
515 |
516 | code-point-at@^1.0.0:
517 | version "1.1.0"
518 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
519 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
520 |
521 | collection-visit@^1.0.0:
522 | version "1.0.0"
523 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
524 | integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
525 | dependencies:
526 | map-visit "^1.0.0"
527 | object-visit "^1.0.0"
528 |
529 | color-convert@^0.5.3:
530 | version "0.5.3"
531 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd"
532 | integrity sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=
533 |
534 | color-convert@^1.9.0:
535 | version "1.9.3"
536 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
537 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
538 | dependencies:
539 | color-name "1.1.3"
540 |
541 | color-name@1.1.3:
542 | version "1.1.3"
543 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
544 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
545 |
546 | color-name@^1.0.0:
547 | version "1.1.4"
548 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
549 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
550 |
551 | combined-stream@^1.0.6, combined-stream@~1.0.6:
552 | version "1.0.7"
553 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
554 | integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==
555 | dependencies:
556 | delayed-stream "~1.0.0"
557 |
558 | commander@^2.12.1:
559 | version "2.19.0"
560 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
561 | integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
562 |
563 | component-emitter@^1.2.1:
564 | version "1.2.1"
565 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
566 | integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
567 |
568 | concat-map@0.0.1:
569 | version "0.0.1"
570 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
571 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
572 |
573 | configstore@^3.0.0:
574 | version "3.1.2"
575 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f"
576 | integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==
577 | dependencies:
578 | dot-prop "^4.1.0"
579 | graceful-fs "^4.1.2"
580 | make-dir "^1.0.0"
581 | unique-string "^1.0.0"
582 | write-file-atomic "^2.0.0"
583 | xdg-basedir "^3.0.0"
584 |
585 | console-control-strings@^1.0.0, console-control-strings@~1.1.0:
586 | version "1.1.0"
587 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
588 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
589 |
590 | content-disposition@0.5.2:
591 | version "0.5.2"
592 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
593 | integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ=
594 |
595 | content-type@~1.0.4:
596 | version "1.0.4"
597 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
598 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
599 |
600 | cookie-signature@1.0.6:
601 | version "1.0.6"
602 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
603 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
604 |
605 | cookie@0.3.1:
606 | version "0.3.1"
607 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
608 | integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
609 |
610 | copy-descriptor@^0.1.0:
611 | version "0.1.1"
612 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
613 | integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
614 |
615 | core-util-is@1.0.2, core-util-is@~1.0.0:
616 | version "1.0.2"
617 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
618 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
619 |
620 | create-error-class@^3.0.0:
621 | version "3.0.2"
622 | resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
623 | integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=
624 | dependencies:
625 | capture-stack-trace "^1.0.0"
626 |
627 | cross-spawn@^5.0.1:
628 | version "5.1.0"
629 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
630 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
631 | dependencies:
632 | lru-cache "^4.0.1"
633 | shebang-command "^1.2.0"
634 | which "^1.2.9"
635 |
636 | crypto-random-string@^1.0.0:
637 | version "1.0.0"
638 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
639 | integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
640 |
641 | dashdash@^1.12.0:
642 | version "1.14.1"
643 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
644 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
645 | dependencies:
646 | assert-plus "^1.0.0"
647 |
648 | debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3:
649 | version "2.6.9"
650 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
651 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
652 | dependencies:
653 | ms "2.0.0"
654 |
655 | debug@^3.1.0:
656 | version "3.2.6"
657 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
658 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
659 | dependencies:
660 | ms "^2.1.1"
661 |
662 | decode-uri-component@^0.2.0:
663 | version "0.2.0"
664 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
665 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
666 |
667 | deep-extend@^0.6.0:
668 | version "0.6.0"
669 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
670 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
671 |
672 | define-property@^0.2.5:
673 | version "0.2.5"
674 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
675 | integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
676 | dependencies:
677 | is-descriptor "^0.1.0"
678 |
679 | define-property@^1.0.0:
680 | version "1.0.0"
681 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
682 | integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
683 | dependencies:
684 | is-descriptor "^1.0.0"
685 |
686 | define-property@^2.0.2:
687 | version "2.0.2"
688 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
689 | integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
690 | dependencies:
691 | is-descriptor "^1.0.2"
692 | isobject "^3.0.1"
693 |
694 | delayed-stream@~1.0.0:
695 | version "1.0.0"
696 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
697 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
698 |
699 | delegates@^1.0.0:
700 | version "1.0.0"
701 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
702 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
703 |
704 | depd@~1.1.2:
705 | version "1.1.2"
706 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
707 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
708 |
709 | destroy@~1.0.4:
710 | version "1.0.4"
711 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
712 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
713 |
714 | detect-libc@^1.0.2:
715 | version "1.0.3"
716 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
717 | integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
718 |
719 | diff@^3.1.0, diff@^3.2.0:
720 | version "3.5.0"
721 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
722 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
723 |
724 | dot-prop@^4.1.0:
725 | version "4.2.0"
726 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
727 | integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==
728 | dependencies:
729 | is-obj "^1.0.0"
730 |
731 | double-ended-queue@^2.1.0-0:
732 | version "2.1.0-0"
733 | resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c"
734 | integrity sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=
735 |
736 | duplexer3@^0.1.4:
737 | version "0.1.4"
738 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
739 | integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
740 |
741 | ecc-jsbn@~0.1.1:
742 | version "0.1.2"
743 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
744 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
745 | dependencies:
746 | jsbn "~0.1.0"
747 | safer-buffer "^2.1.0"
748 |
749 | ee-first@1.1.1:
750 | version "1.1.1"
751 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
752 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
753 |
754 | encodeurl@~1.0.2:
755 | version "1.0.2"
756 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
757 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
758 |
759 | escape-html@~1.0.3:
760 | version "1.0.3"
761 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
762 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
763 |
764 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
765 | version "1.0.5"
766 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
767 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
768 |
769 | esprima@^4.0.0:
770 | version "4.0.1"
771 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
772 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
773 |
774 | esutils@^2.0.2:
775 | version "2.0.2"
776 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
777 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
778 |
779 | etag@~1.8.1:
780 | version "1.8.1"
781 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
782 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
783 |
784 | execa@^0.7.0:
785 | version "0.7.0"
786 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
787 | integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
788 | dependencies:
789 | cross-spawn "^5.0.1"
790 | get-stream "^3.0.0"
791 | is-stream "^1.1.0"
792 | npm-run-path "^2.0.0"
793 | p-finally "^1.0.0"
794 | signal-exit "^3.0.0"
795 | strip-eof "^1.0.0"
796 |
797 | expand-brackets@^2.1.4:
798 | version "2.1.4"
799 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
800 | integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
801 | dependencies:
802 | debug "^2.3.3"
803 | define-property "^0.2.5"
804 | extend-shallow "^2.0.1"
805 | posix-character-classes "^0.1.0"
806 | regex-not "^1.0.0"
807 | snapdragon "^0.8.1"
808 | to-regex "^3.0.1"
809 |
810 | express@^4.16.4:
811 | version "4.16.4"
812 | resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e"
813 | integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==
814 | dependencies:
815 | accepts "~1.3.5"
816 | array-flatten "1.1.1"
817 | body-parser "1.18.3"
818 | content-disposition "0.5.2"
819 | content-type "~1.0.4"
820 | cookie "0.3.1"
821 | cookie-signature "1.0.6"
822 | debug "2.6.9"
823 | depd "~1.1.2"
824 | encodeurl "~1.0.2"
825 | escape-html "~1.0.3"
826 | etag "~1.8.1"
827 | finalhandler "1.1.1"
828 | fresh "0.5.2"
829 | merge-descriptors "1.0.1"
830 | methods "~1.1.2"
831 | on-finished "~2.3.0"
832 | parseurl "~1.3.2"
833 | path-to-regexp "0.1.7"
834 | proxy-addr "~2.0.4"
835 | qs "6.5.2"
836 | range-parser "~1.2.0"
837 | safe-buffer "5.1.2"
838 | send "0.16.2"
839 | serve-static "1.13.2"
840 | setprototypeof "1.1.0"
841 | statuses "~1.4.0"
842 | type-is "~1.6.16"
843 | utils-merge "1.0.1"
844 | vary "~1.1.2"
845 |
846 | extend-shallow@^2.0.1:
847 | version "2.0.1"
848 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
849 | integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
850 | dependencies:
851 | is-extendable "^0.1.0"
852 |
853 | extend-shallow@^3.0.0, extend-shallow@^3.0.2:
854 | version "3.0.2"
855 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
856 | integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
857 | dependencies:
858 | assign-symbols "^1.0.0"
859 | is-extendable "^1.0.1"
860 |
861 | extend@~3.0.2:
862 | version "3.0.2"
863 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
864 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
865 |
866 | extglob@^2.0.4:
867 | version "2.0.4"
868 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
869 | integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
870 | dependencies:
871 | array-unique "^0.3.2"
872 | define-property "^1.0.0"
873 | expand-brackets "^2.1.4"
874 | extend-shallow "^2.0.1"
875 | fragment-cache "^0.2.1"
876 | regex-not "^1.0.0"
877 | snapdragon "^0.8.1"
878 | to-regex "^3.0.1"
879 |
880 | extsprintf@1.3.0:
881 | version "1.3.0"
882 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
883 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
884 |
885 | extsprintf@^1.2.0:
886 | version "1.4.0"
887 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
888 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
889 |
890 | fast-deep-equal@^2.0.1:
891 | version "2.0.1"
892 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
893 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
894 |
895 | fast-json-stable-stringify@^2.0.0:
896 | version "2.0.0"
897 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
898 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
899 |
900 | fill-range@^4.0.0:
901 | version "4.0.0"
902 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
903 | integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
904 | dependencies:
905 | extend-shallow "^2.0.1"
906 | is-number "^3.0.0"
907 | repeat-string "^1.6.1"
908 | to-regex-range "^2.1.0"
909 |
910 | finalhandler@1.1.1:
911 | version "1.1.1"
912 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105"
913 | integrity sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==
914 | dependencies:
915 | debug "2.6.9"
916 | encodeurl "~1.0.2"
917 | escape-html "~1.0.3"
918 | on-finished "~2.3.0"
919 | parseurl "~1.3.2"
920 | statuses "~1.4.0"
921 | unpipe "~1.0.0"
922 |
923 | for-in@^1.0.2:
924 | version "1.0.2"
925 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
926 | integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
927 |
928 | forever-agent@~0.6.1:
929 | version "0.6.1"
930 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
931 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
932 |
933 | form-data@~2.3.2:
934 | version "2.3.3"
935 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
936 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
937 | dependencies:
938 | asynckit "^0.4.0"
939 | combined-stream "^1.0.6"
940 | mime-types "^2.1.12"
941 |
942 | forwarded@~0.1.2:
943 | version "0.1.2"
944 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
945 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
946 |
947 | fragment-cache@^0.2.1:
948 | version "0.2.1"
949 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
950 | integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
951 | dependencies:
952 | map-cache "^0.2.2"
953 |
954 | fresh@0.5.2:
955 | version "0.5.2"
956 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
957 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
958 |
959 | fs-minipass@^1.2.5:
960 | version "1.2.5"
961 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
962 | integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==
963 | dependencies:
964 | minipass "^2.2.1"
965 |
966 | fs.realpath@^1.0.0:
967 | version "1.0.0"
968 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
969 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
970 |
971 | fsevents@^1.2.2:
972 | version "1.2.4"
973 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426"
974 | integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==
975 | dependencies:
976 | nan "^2.9.2"
977 | node-pre-gyp "^0.10.0"
978 |
979 | gauge@~2.7.3:
980 | version "2.7.4"
981 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
982 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
983 | dependencies:
984 | aproba "^1.0.3"
985 | console-control-strings "^1.0.0"
986 | has-unicode "^2.0.0"
987 | object-assign "^4.1.0"
988 | signal-exit "^3.0.0"
989 | string-width "^1.0.1"
990 | strip-ansi "^3.0.1"
991 | wide-align "^1.1.0"
992 |
993 | get-stream@^3.0.0:
994 | version "3.0.0"
995 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
996 | integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
997 |
998 | get-value@^2.0.3, get-value@^2.0.6:
999 | version "2.0.6"
1000 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
1001 | integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
1002 |
1003 | getpass@^0.1.1:
1004 | version "0.1.7"
1005 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
1006 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
1007 | dependencies:
1008 | assert-plus "^1.0.0"
1009 |
1010 | glob-parent@^3.1.0:
1011 | version "3.1.0"
1012 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
1013 | integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
1014 | dependencies:
1015 | is-glob "^3.1.0"
1016 | path-dirname "^1.0.0"
1017 |
1018 | glob@^7.0.5, glob@^7.1.1:
1019 | version "7.1.3"
1020 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
1021 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
1022 | dependencies:
1023 | fs.realpath "^1.0.0"
1024 | inflight "^1.0.4"
1025 | inherits "2"
1026 | minimatch "^3.0.4"
1027 | once "^1.3.0"
1028 | path-is-absolute "^1.0.0"
1029 |
1030 | global-dirs@^0.1.0:
1031 | version "0.1.1"
1032 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
1033 | integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
1034 | dependencies:
1035 | ini "^1.3.4"
1036 |
1037 | got@^6.7.1:
1038 | version "6.7.1"
1039 | resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
1040 | integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=
1041 | dependencies:
1042 | create-error-class "^3.0.0"
1043 | duplexer3 "^0.1.4"
1044 | get-stream "^3.0.0"
1045 | is-redirect "^1.0.0"
1046 | is-retry-allowed "^1.0.0"
1047 | is-stream "^1.0.0"
1048 | lowercase-keys "^1.0.0"
1049 | safe-buffer "^5.0.1"
1050 | timed-out "^4.0.0"
1051 | unzip-response "^2.0.1"
1052 | url-parse-lax "^1.0.0"
1053 |
1054 | graceful-fs@^4.1.11, graceful-fs@^4.1.2:
1055 | version "4.1.15"
1056 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
1057 | integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
1058 |
1059 | har-schema@^2.0.0:
1060 | version "2.0.0"
1061 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
1062 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
1063 |
1064 | har-validator@~5.1.0:
1065 | version "5.1.3"
1066 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
1067 | integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
1068 | dependencies:
1069 | ajv "^6.5.5"
1070 | har-schema "^2.0.0"
1071 |
1072 | has-ansi@^2.0.0:
1073 | version "2.0.0"
1074 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
1075 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
1076 | dependencies:
1077 | ansi-regex "^2.0.0"
1078 |
1079 | has-flag@^3.0.0:
1080 | version "3.0.0"
1081 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
1082 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
1083 |
1084 | has-unicode@^2.0.0:
1085 | version "2.0.1"
1086 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
1087 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
1088 |
1089 | has-value@^0.3.1:
1090 | version "0.3.1"
1091 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
1092 | integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
1093 | dependencies:
1094 | get-value "^2.0.3"
1095 | has-values "^0.1.4"
1096 | isobject "^2.0.0"
1097 |
1098 | has-value@^1.0.0:
1099 | version "1.0.0"
1100 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
1101 | integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
1102 | dependencies:
1103 | get-value "^2.0.6"
1104 | has-values "^1.0.0"
1105 | isobject "^3.0.0"
1106 |
1107 | has-values@^0.1.4:
1108 | version "0.1.4"
1109 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
1110 | integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
1111 |
1112 | has-values@^1.0.0:
1113 | version "1.0.0"
1114 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
1115 | integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
1116 | dependencies:
1117 | is-number "^3.0.0"
1118 | kind-of "^4.0.0"
1119 |
1120 | http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3:
1121 | version "1.6.3"
1122 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
1123 | integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
1124 | dependencies:
1125 | depd "~1.1.2"
1126 | inherits "2.0.3"
1127 | setprototypeof "1.1.0"
1128 | statuses ">= 1.4.0 < 2"
1129 |
1130 | http-signature@~1.2.0:
1131 | version "1.2.0"
1132 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
1133 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
1134 | dependencies:
1135 | assert-plus "^1.0.0"
1136 | jsprim "^1.2.2"
1137 | sshpk "^1.7.0"
1138 |
1139 | iconv-lite@0.4.23:
1140 | version "0.4.23"
1141 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
1142 | integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==
1143 | dependencies:
1144 | safer-buffer ">= 2.1.2 < 3"
1145 |
1146 | iconv-lite@^0.4.4:
1147 | version "0.4.24"
1148 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
1149 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
1150 | dependencies:
1151 | safer-buffer ">= 2.1.2 < 3"
1152 |
1153 | ignore-by-default@^1.0.1:
1154 | version "1.0.1"
1155 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
1156 | integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk=
1157 |
1158 | ignore-walk@^3.0.1:
1159 | version "3.0.1"
1160 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
1161 | integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==
1162 | dependencies:
1163 | minimatch "^3.0.4"
1164 |
1165 | import-lazy@^2.1.0:
1166 | version "2.1.0"
1167 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
1168 | integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
1169 |
1170 | imurmurhash@^0.1.4:
1171 | version "0.1.4"
1172 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1173 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
1174 |
1175 | inflight@^1.0.4:
1176 | version "1.0.6"
1177 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1178 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
1179 | dependencies:
1180 | once "^1.3.0"
1181 | wrappy "1"
1182 |
1183 | inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.3:
1184 | version "2.0.3"
1185 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
1186 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
1187 |
1188 | ini@^1.3.4, ini@~1.3.0:
1189 | version "1.3.5"
1190 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
1191 | integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
1192 |
1193 | ipaddr.js@1.8.0:
1194 | version "1.8.0"
1195 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e"
1196 | integrity sha1-6qM9bd16zo9/b+DJygRA5wZzix4=
1197 |
1198 | is-accessor-descriptor@^0.1.6:
1199 | version "0.1.6"
1200 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
1201 | integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
1202 | dependencies:
1203 | kind-of "^3.0.2"
1204 |
1205 | is-accessor-descriptor@^1.0.0:
1206 | version "1.0.0"
1207 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
1208 | integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
1209 | dependencies:
1210 | kind-of "^6.0.0"
1211 |
1212 | is-binary-path@^1.0.0:
1213 | version "1.0.1"
1214 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
1215 | integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
1216 | dependencies:
1217 | binary-extensions "^1.0.0"
1218 |
1219 | is-buffer@^1.1.5:
1220 | version "1.1.6"
1221 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
1222 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
1223 |
1224 | is-ci@^1.0.10:
1225 | version "1.2.1"
1226 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
1227 | integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==
1228 | dependencies:
1229 | ci-info "^1.5.0"
1230 |
1231 | is-data-descriptor@^0.1.4:
1232 | version "0.1.4"
1233 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
1234 | integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
1235 | dependencies:
1236 | kind-of "^3.0.2"
1237 |
1238 | is-data-descriptor@^1.0.0:
1239 | version "1.0.0"
1240 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
1241 | integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
1242 | dependencies:
1243 | kind-of "^6.0.0"
1244 |
1245 | is-descriptor@^0.1.0:
1246 | version "0.1.6"
1247 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
1248 | integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
1249 | dependencies:
1250 | is-accessor-descriptor "^0.1.6"
1251 | is-data-descriptor "^0.1.4"
1252 | kind-of "^5.0.0"
1253 |
1254 | is-descriptor@^1.0.0, is-descriptor@^1.0.2:
1255 | version "1.0.2"
1256 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
1257 | integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
1258 | dependencies:
1259 | is-accessor-descriptor "^1.0.0"
1260 | is-data-descriptor "^1.0.0"
1261 | kind-of "^6.0.2"
1262 |
1263 | is-extendable@^0.1.0, is-extendable@^0.1.1:
1264 | version "0.1.1"
1265 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
1266 | integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
1267 |
1268 | is-extendable@^1.0.1:
1269 | version "1.0.1"
1270 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
1271 | integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
1272 | dependencies:
1273 | is-plain-object "^2.0.4"
1274 |
1275 | is-extglob@^2.1.0, is-extglob@^2.1.1:
1276 | version "2.1.1"
1277 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1278 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
1279 |
1280 | is-fullwidth-code-point@^1.0.0:
1281 | version "1.0.0"
1282 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
1283 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
1284 | dependencies:
1285 | number-is-nan "^1.0.0"
1286 |
1287 | is-fullwidth-code-point@^2.0.0:
1288 | version "2.0.0"
1289 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
1290 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
1291 |
1292 | is-glob@^3.1.0:
1293 | version "3.1.0"
1294 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
1295 | integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
1296 | dependencies:
1297 | is-extglob "^2.1.0"
1298 |
1299 | is-glob@^4.0.0:
1300 | version "4.0.0"
1301 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
1302 | integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=
1303 | dependencies:
1304 | is-extglob "^2.1.1"
1305 |
1306 | is-installed-globally@^0.1.0:
1307 | version "0.1.0"
1308 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
1309 | integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=
1310 | dependencies:
1311 | global-dirs "^0.1.0"
1312 | is-path-inside "^1.0.0"
1313 |
1314 | is-npm@^1.0.0:
1315 | version "1.0.0"
1316 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
1317 | integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ=
1318 |
1319 | is-number@^3.0.0:
1320 | version "3.0.0"
1321 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
1322 | integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
1323 | dependencies:
1324 | kind-of "^3.0.2"
1325 |
1326 | is-obj@^1.0.0:
1327 | version "1.0.1"
1328 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
1329 | integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
1330 |
1331 | is-path-inside@^1.0.0:
1332 | version "1.0.1"
1333 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
1334 | integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
1335 | dependencies:
1336 | path-is-inside "^1.0.1"
1337 |
1338 | is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
1339 | version "2.0.4"
1340 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
1341 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
1342 | dependencies:
1343 | isobject "^3.0.1"
1344 |
1345 | is-redirect@^1.0.0:
1346 | version "1.0.0"
1347 | resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
1348 | integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=
1349 |
1350 | is-retry-allowed@^1.0.0:
1351 | version "1.1.0"
1352 | resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
1353 | integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=
1354 |
1355 | is-stream@^1.0.0, is-stream@^1.1.0:
1356 | version "1.1.0"
1357 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
1358 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
1359 |
1360 | is-typedarray@~1.0.0:
1361 | version "1.0.0"
1362 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
1363 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
1364 |
1365 | is-windows@^1.0.2:
1366 | version "1.0.2"
1367 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
1368 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
1369 |
1370 | isarray@1.0.0, isarray@~1.0.0:
1371 | version "1.0.0"
1372 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1373 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
1374 |
1375 | isexe@^2.0.0:
1376 | version "2.0.0"
1377 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1378 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
1379 |
1380 | isobject@^2.0.0:
1381 | version "2.1.0"
1382 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
1383 | integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
1384 | dependencies:
1385 | isarray "1.0.0"
1386 |
1387 | isobject@^3.0.0, isobject@^3.0.1:
1388 | version "3.0.1"
1389 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
1390 | integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
1391 |
1392 | isstream@~0.1.2:
1393 | version "0.1.2"
1394 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
1395 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
1396 |
1397 | js-tokens@^3.0.2:
1398 | version "3.0.2"
1399 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
1400 | integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
1401 |
1402 | js-yaml@^3.7.0:
1403 | version "3.12.0"
1404 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1"
1405 | integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==
1406 | dependencies:
1407 | argparse "^1.0.7"
1408 | esprima "^4.0.0"
1409 |
1410 | jsbn@~0.1.0:
1411 | version "0.1.1"
1412 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
1413 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
1414 |
1415 | json-schema-traverse@^0.4.1:
1416 | version "0.4.1"
1417 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1418 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1419 |
1420 | json-schema@0.2.3:
1421 | version "0.2.3"
1422 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
1423 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
1424 |
1425 | json-stringify-safe@~5.0.1:
1426 | version "5.0.1"
1427 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
1428 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
1429 |
1430 | jsprim@^1.2.2:
1431 | version "1.4.1"
1432 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
1433 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
1434 | dependencies:
1435 | assert-plus "1.0.0"
1436 | extsprintf "1.3.0"
1437 | json-schema "0.2.3"
1438 | verror "1.10.0"
1439 |
1440 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
1441 | version "3.2.2"
1442 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
1443 | integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
1444 | dependencies:
1445 | is-buffer "^1.1.5"
1446 |
1447 | kind-of@^4.0.0:
1448 | version "4.0.0"
1449 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
1450 | integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
1451 | dependencies:
1452 | is-buffer "^1.1.5"
1453 |
1454 | kind-of@^5.0.0:
1455 | version "5.1.0"
1456 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
1457 | integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
1458 |
1459 | kind-of@^6.0.0, kind-of@^6.0.2:
1460 | version "6.0.2"
1461 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
1462 | integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
1463 |
1464 | latest-version@^3.0.0:
1465 | version "3.1.0"
1466 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15"
1467 | integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=
1468 | dependencies:
1469 | package-json "^4.0.0"
1470 |
1471 | lodash.debounce@^4.0.8:
1472 | version "4.0.8"
1473 | resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
1474 | integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
1475 |
1476 | lodash@^4.13.1, lodash@^4.17.10:
1477 | version "4.17.11"
1478 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
1479 | integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
1480 |
1481 | lowercase-keys@^1.0.0:
1482 | version "1.0.1"
1483 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
1484 | integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
1485 |
1486 | lru-cache@^4.0.1:
1487 | version "4.1.5"
1488 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
1489 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
1490 | dependencies:
1491 | pseudomap "^1.0.2"
1492 | yallist "^2.1.2"
1493 |
1494 | make-dir@^1.0.0:
1495 | version "1.3.0"
1496 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
1497 | integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
1498 | dependencies:
1499 | pify "^3.0.0"
1500 |
1501 | make-error@^1.1.1:
1502 | version "1.3.5"
1503 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8"
1504 | integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==
1505 |
1506 | map-cache@^0.2.2:
1507 | version "0.2.2"
1508 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
1509 | integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
1510 |
1511 | map-visit@^1.0.0:
1512 | version "1.0.0"
1513 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
1514 | integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
1515 | dependencies:
1516 | object-visit "^1.0.0"
1517 |
1518 | media-typer@0.3.0:
1519 | version "0.3.0"
1520 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
1521 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
1522 |
1523 | memory-pager@^1.0.2:
1524 | version "1.4.0"
1525 | resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.4.0.tgz#8902c72ce2fa34319adc0dae586b7d83cec6d6ac"
1526 | integrity sha512-ycuyV5gKpZln7HB/A11wCpAxEY9VQ2EhYU1F56pUAxvmj6OyOHtB9tkLLjAyFsPdghSP2S3Ujk3aYJCusgiMZg==
1527 |
1528 | merge-descriptors@1.0.1:
1529 | version "1.0.1"
1530 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
1531 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
1532 |
1533 | methods@~1.1.2:
1534 | version "1.1.2"
1535 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
1536 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
1537 |
1538 | micromatch@^3.1.10, micromatch@^3.1.4:
1539 | version "3.1.10"
1540 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
1541 | integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
1542 | dependencies:
1543 | arr-diff "^4.0.0"
1544 | array-unique "^0.3.2"
1545 | braces "^2.3.1"
1546 | define-property "^2.0.2"
1547 | extend-shallow "^3.0.2"
1548 | extglob "^2.0.4"
1549 | fragment-cache "^0.2.1"
1550 | kind-of "^6.0.2"
1551 | nanomatch "^1.2.9"
1552 | object.pick "^1.3.0"
1553 | regex-not "^1.0.0"
1554 | snapdragon "^0.8.1"
1555 | to-regex "^3.0.2"
1556 |
1557 | mime-db@~1.37.0:
1558 | version "1.37.0"
1559 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8"
1560 | integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==
1561 |
1562 | mime-types@^2.1.12, mime-types@~2.1.18, mime-types@~2.1.19:
1563 | version "2.1.21"
1564 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96"
1565 | integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==
1566 | dependencies:
1567 | mime-db "~1.37.0"
1568 |
1569 | mime@1.4.1:
1570 | version "1.4.1"
1571 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
1572 | integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==
1573 |
1574 | minimatch@^3.0.4:
1575 | version "3.0.4"
1576 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1577 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
1578 | dependencies:
1579 | brace-expansion "^1.1.7"
1580 |
1581 | minimist@0.0.8:
1582 | version "0.0.8"
1583 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
1584 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
1585 |
1586 | minimist@^1.2.0:
1587 | version "1.2.0"
1588 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
1589 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
1590 |
1591 | minipass@^2.2.1, minipass@^2.3.4:
1592 | version "2.3.5"
1593 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
1594 | integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
1595 | dependencies:
1596 | safe-buffer "^5.1.2"
1597 | yallist "^3.0.0"
1598 |
1599 | minizlib@^1.1.1:
1600 | version "1.2.1"
1601 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
1602 | integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
1603 | dependencies:
1604 | minipass "^2.2.1"
1605 |
1606 | mixin-deep@^1.2.0:
1607 | version "1.3.1"
1608 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
1609 | integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
1610 | dependencies:
1611 | for-in "^1.0.2"
1612 | is-extendable "^1.0.1"
1613 |
1614 | mkdirp@^0.5.0, mkdirp@^0.5.1:
1615 | version "0.5.1"
1616 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
1617 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
1618 | dependencies:
1619 | minimist "0.0.8"
1620 |
1621 | moment@^2.10.2:
1622 | version "2.23.0"
1623 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.23.0.tgz#759ea491ac97d54bac5ad776996e2a58cc1bc225"
1624 | integrity sha512-3IE39bHVqFbWWaPOMHZF98Q9c3LDKGTmypMiTM2QygGXXElkFWIH7GxfmlwmY2vwa+wmNsoYZmG2iusf1ZjJoA==
1625 |
1626 | mongodb-core@3.1.9:
1627 | version "3.1.9"
1628 | resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-3.1.9.tgz#c31ee407bf932b0149eaed775c17ee09974e4ca3"
1629 | integrity sha512-MJpciDABXMchrZphh3vMcqu8hkNf/Mi+Gk6btOimVg1XMxLXh87j6FAvRm+KmwD1A9fpu3qRQYcbQe4egj23og==
1630 | dependencies:
1631 | bson "^1.1.0"
1632 | require_optional "^1.0.1"
1633 | safe-buffer "^5.1.2"
1634 | optionalDependencies:
1635 | saslprep "^1.0.0"
1636 |
1637 | mongodb@^3.1.10:
1638 | version "3.1.10"
1639 | resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.1.10.tgz#45ad9b74ea376f4122d0881b75e5489b9e504ed7"
1640 | integrity sha512-Uml42GeFxhTGQVml1XQ4cD0o/rp7J2ROy0fdYUcVitoE7vFqEhKH4TYVqRDpQr/bXtCJVxJdNQC1ntRxNREkPQ==
1641 | dependencies:
1642 | mongodb-core "3.1.9"
1643 | safe-buffer "^5.1.2"
1644 |
1645 | ms@2.0.0:
1646 | version "2.0.0"
1647 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1648 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
1649 |
1650 | ms@^2.1.1:
1651 | version "2.1.1"
1652 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
1653 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
1654 |
1655 | nan@^2.9.2:
1656 | version "2.12.1"
1657 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552"
1658 | integrity sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==
1659 |
1660 | nanomatch@^1.2.9:
1661 | version "1.2.13"
1662 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
1663 | integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
1664 | dependencies:
1665 | arr-diff "^4.0.0"
1666 | array-unique "^0.3.2"
1667 | define-property "^2.0.2"
1668 | extend-shallow "^3.0.2"
1669 | fragment-cache "^0.2.1"
1670 | is-windows "^1.0.2"
1671 | kind-of "^6.0.2"
1672 | object.pick "^1.3.0"
1673 | regex-not "^1.0.0"
1674 | snapdragon "^0.8.1"
1675 | to-regex "^3.0.1"
1676 |
1677 | needle@^2.2.1:
1678 | version "2.2.4"
1679 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e"
1680 | integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==
1681 | dependencies:
1682 | debug "^2.1.2"
1683 | iconv-lite "^0.4.4"
1684 | sax "^1.2.4"
1685 |
1686 | negotiator@0.6.1:
1687 | version "0.6.1"
1688 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
1689 | integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=
1690 |
1691 | node-pre-gyp@^0.10.0:
1692 | version "0.10.3"
1693 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc"
1694 | integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==
1695 | dependencies:
1696 | detect-libc "^1.0.2"
1697 | mkdirp "^0.5.1"
1698 | needle "^2.2.1"
1699 | nopt "^4.0.1"
1700 | npm-packlist "^1.1.6"
1701 | npmlog "^4.0.2"
1702 | rc "^1.2.7"
1703 | rimraf "^2.6.1"
1704 | semver "^5.3.0"
1705 | tar "^4"
1706 |
1707 | nodemon@^1.18.9:
1708 | version "1.18.9"
1709 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.18.9.tgz#90b467efd3b3c81b9453380aeb2a2cba535d0ead"
1710 | integrity sha512-oj/eEVTEI47pzYAjGkpcNw0xYwTl4XSTUQv2NPQI6PpN3b75PhpuYk3Vb3U80xHCyM2Jm+1j68ULHXl4OR3Afw==
1711 | dependencies:
1712 | chokidar "^2.0.4"
1713 | debug "^3.1.0"
1714 | ignore-by-default "^1.0.1"
1715 | minimatch "^3.0.4"
1716 | pstree.remy "^1.1.6"
1717 | semver "^5.5.0"
1718 | supports-color "^5.2.0"
1719 | touch "^3.1.0"
1720 | undefsafe "^2.0.2"
1721 | update-notifier "^2.5.0"
1722 |
1723 | nopt@^4.0.1:
1724 | version "4.0.1"
1725 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
1726 | integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
1727 | dependencies:
1728 | abbrev "1"
1729 | osenv "^0.1.4"
1730 |
1731 | nopt@~1.0.10:
1732 | version "1.0.10"
1733 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
1734 | integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=
1735 | dependencies:
1736 | abbrev "1"
1737 |
1738 | normalize-path@^2.1.1:
1739 | version "2.1.1"
1740 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
1741 | integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
1742 | dependencies:
1743 | remove-trailing-separator "^1.0.1"
1744 |
1745 | npm-bundled@^1.0.1:
1746 | version "1.0.5"
1747 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979"
1748 | integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==
1749 |
1750 | npm-packlist@^1.1.6:
1751 | version "1.1.12"
1752 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.12.tgz#22bde2ebc12e72ca482abd67afc51eb49377243a"
1753 | integrity sha512-WJKFOVMeAlsU/pjXuqVdzU0WfgtIBCupkEVwn+1Y0ERAbUfWw8R4GjgVbaKnUjRoD2FoQbHOCbOyT5Mbs9Lw4g==
1754 | dependencies:
1755 | ignore-walk "^3.0.1"
1756 | npm-bundled "^1.0.1"
1757 |
1758 | npm-run-path@^2.0.0:
1759 | version "2.0.2"
1760 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
1761 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
1762 | dependencies:
1763 | path-key "^2.0.0"
1764 |
1765 | npmlog@^4.0.2:
1766 | version "4.1.2"
1767 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
1768 | integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
1769 | dependencies:
1770 | are-we-there-yet "~1.1.2"
1771 | console-control-strings "~1.1.0"
1772 | gauge "~2.7.3"
1773 | set-blocking "~2.0.0"
1774 |
1775 | number-is-nan@^1.0.0:
1776 | version "1.0.1"
1777 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1778 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
1779 |
1780 | oauth-sign@~0.9.0:
1781 | version "0.9.0"
1782 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
1783 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
1784 |
1785 | object-assign@^4.1.0:
1786 | version "4.1.1"
1787 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1788 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
1789 |
1790 | object-copy@^0.1.0:
1791 | version "0.1.0"
1792 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
1793 | integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
1794 | dependencies:
1795 | copy-descriptor "^0.1.0"
1796 | define-property "^0.2.5"
1797 | kind-of "^3.0.3"
1798 |
1799 | object-visit@^1.0.0:
1800 | version "1.0.1"
1801 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
1802 | integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
1803 | dependencies:
1804 | isobject "^3.0.0"
1805 |
1806 | object.pick@^1.3.0:
1807 | version "1.3.0"
1808 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
1809 | integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
1810 | dependencies:
1811 | isobject "^3.0.1"
1812 |
1813 | on-finished@~2.3.0:
1814 | version "2.3.0"
1815 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
1816 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
1817 | dependencies:
1818 | ee-first "1.1.1"
1819 |
1820 | once@^1.3.0:
1821 | version "1.4.0"
1822 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1823 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1824 | dependencies:
1825 | wrappy "1"
1826 |
1827 | os-homedir@^1.0.0:
1828 | version "1.0.2"
1829 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1830 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
1831 |
1832 | os-tmpdir@^1.0.0:
1833 | version "1.0.2"
1834 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1835 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
1836 |
1837 | osenv@^0.1.4:
1838 | version "0.1.5"
1839 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
1840 | integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
1841 | dependencies:
1842 | os-homedir "^1.0.0"
1843 | os-tmpdir "^1.0.0"
1844 |
1845 | p-finally@^1.0.0:
1846 | version "1.0.0"
1847 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
1848 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
1849 |
1850 | package-json@^4.0.0:
1851 | version "4.0.1"
1852 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed"
1853 | integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=
1854 | dependencies:
1855 | got "^6.7.1"
1856 | registry-auth-token "^3.0.1"
1857 | registry-url "^3.0.3"
1858 | semver "^5.1.0"
1859 |
1860 | parseurl@~1.3.2:
1861 | version "1.3.2"
1862 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
1863 | integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=
1864 |
1865 | pascalcase@^0.1.1:
1866 | version "0.1.1"
1867 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
1868 | integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
1869 |
1870 | path-dirname@^1.0.0:
1871 | version "1.0.2"
1872 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
1873 | integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
1874 |
1875 | path-is-absolute@^1.0.0:
1876 | version "1.0.1"
1877 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1878 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1879 |
1880 | path-is-inside@^1.0.1:
1881 | version "1.0.2"
1882 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
1883 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
1884 |
1885 | path-key@^2.0.0:
1886 | version "2.0.1"
1887 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
1888 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
1889 |
1890 | path-parse@^1.0.6:
1891 | version "1.0.6"
1892 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
1893 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
1894 |
1895 | path-to-regexp@0.1.7:
1896 | version "0.1.7"
1897 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
1898 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
1899 |
1900 | performance-now@^2.1.0:
1901 | version "2.1.0"
1902 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
1903 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
1904 |
1905 | pify@^3.0.0:
1906 | version "3.0.0"
1907 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
1908 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
1909 |
1910 | posix-character-classes@^0.1.0:
1911 | version "0.1.1"
1912 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
1913 | integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
1914 |
1915 | prepend-http@^1.0.1:
1916 | version "1.0.4"
1917 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
1918 | integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
1919 |
1920 | process-nextick-args@~2.0.0:
1921 | version "2.0.0"
1922 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
1923 | integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
1924 |
1925 | proxy-addr@~2.0.4:
1926 | version "2.0.4"
1927 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93"
1928 | integrity sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==
1929 | dependencies:
1930 | forwarded "~0.1.2"
1931 | ipaddr.js "1.8.0"
1932 |
1933 | pseudomap@^1.0.2:
1934 | version "1.0.2"
1935 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
1936 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
1937 |
1938 | psl@^1.1.24, psl@^1.1.28:
1939 | version "1.1.31"
1940 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184"
1941 | integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==
1942 |
1943 | pstree.remy@^1.1.6:
1944 | version "1.1.6"
1945 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.6.tgz#73a55aad9e2d95814927131fbf4dc1b62d259f47"
1946 | integrity sha512-NdF35+QsqD7EgNEI5mkI/X+UwaxVEbQaz9f4IooEmMUv6ZPmlTQYGjBPJGgrlzNdjSvIy4MWMg6Q6vCgBO2K+w==
1947 |
1948 | punycode@^1.4.1:
1949 | version "1.4.1"
1950 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
1951 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
1952 |
1953 | punycode@^2.1.0, punycode@^2.1.1:
1954 | version "2.1.1"
1955 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1956 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
1957 |
1958 | qs@6.5.2, qs@~6.5.2:
1959 | version "6.5.2"
1960 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
1961 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
1962 |
1963 | range-parser@~1.2.0:
1964 | version "1.2.0"
1965 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
1966 | integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=
1967 |
1968 | raw-body@2.3.3:
1969 | version "2.3.3"
1970 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3"
1971 | integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==
1972 | dependencies:
1973 | bytes "3.0.0"
1974 | http-errors "1.6.3"
1975 | iconv-lite "0.4.23"
1976 | unpipe "1.0.0"
1977 |
1978 | rc@^1.0.1, rc@^1.1.6, rc@^1.2.7:
1979 | version "1.2.8"
1980 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
1981 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
1982 | dependencies:
1983 | deep-extend "^0.6.0"
1984 | ini "~1.3.0"
1985 | minimist "^1.2.0"
1986 | strip-json-comments "~2.0.1"
1987 |
1988 | readable-stream@^2.0.2, readable-stream@^2.0.6:
1989 | version "2.3.6"
1990 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
1991 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
1992 | dependencies:
1993 | core-util-is "~1.0.0"
1994 | inherits "~2.0.3"
1995 | isarray "~1.0.0"
1996 | process-nextick-args "~2.0.0"
1997 | safe-buffer "~5.1.1"
1998 | string_decoder "~1.1.1"
1999 | util-deprecate "~1.0.1"
2000 |
2001 | readdirp@^2.0.0:
2002 | version "2.2.1"
2003 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
2004 | integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
2005 | dependencies:
2006 | graceful-fs "^4.1.11"
2007 | micromatch "^3.1.10"
2008 | readable-stream "^2.0.2"
2009 |
2010 | redis-commands@^1.2.0:
2011 | version "1.4.0"
2012 | resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.4.0.tgz#52f9cf99153efcce56a8f86af986bd04e988602f"
2013 | integrity sha512-cu8EF+MtkwI4DLIT0x9P8qNTLFhQD4jLfxLR0cCNkeGzs87FN6879JOJwNQR/1zD7aSYNbU0hgsV9zGY71Itvw==
2014 |
2015 | redis-parser@^2.6.0:
2016 | version "2.6.0"
2017 | resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b"
2018 | integrity sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=
2019 |
2020 | redis@^2.8.0:
2021 | version "2.8.0"
2022 | resolved "https://registry.yarnpkg.com/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02"
2023 | integrity sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==
2024 | dependencies:
2025 | double-ended-queue "^2.1.0-0"
2026 | redis-commands "^1.2.0"
2027 | redis-parser "^2.6.0"
2028 |
2029 | regex-not@^1.0.0, regex-not@^1.0.2:
2030 | version "1.0.2"
2031 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
2032 | integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
2033 | dependencies:
2034 | extend-shallow "^3.0.2"
2035 | safe-regex "^1.1.0"
2036 |
2037 | registry-auth-token@^3.0.1:
2038 | version "3.3.2"
2039 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20"
2040 | integrity sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==
2041 | dependencies:
2042 | rc "^1.1.6"
2043 | safe-buffer "^5.0.1"
2044 |
2045 | registry-url@^3.0.3:
2046 | version "3.1.0"
2047 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
2048 | integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI=
2049 | dependencies:
2050 | rc "^1.0.1"
2051 |
2052 | remove-trailing-separator@^1.0.1:
2053 | version "1.1.0"
2054 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
2055 | integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
2056 |
2057 | repeat-element@^1.1.2:
2058 | version "1.1.3"
2059 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
2060 | integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
2061 |
2062 | repeat-string@^1.6.1:
2063 | version "1.6.1"
2064 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
2065 | integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
2066 |
2067 | request-promise-core@1.1.1:
2068 | version "1.1.1"
2069 | resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6"
2070 | integrity sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=
2071 | dependencies:
2072 | lodash "^4.13.1"
2073 |
2074 | request-promise-native@^1.0.5:
2075 | version "1.0.5"
2076 | resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5"
2077 | integrity sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=
2078 | dependencies:
2079 | request-promise-core "1.1.1"
2080 | stealthy-require "^1.1.0"
2081 | tough-cookie ">=2.3.3"
2082 |
2083 | request@^2.88.0:
2084 | version "2.88.0"
2085 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
2086 | integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
2087 | dependencies:
2088 | aws-sign2 "~0.7.0"
2089 | aws4 "^1.8.0"
2090 | caseless "~0.12.0"
2091 | combined-stream "~1.0.6"
2092 | extend "~3.0.2"
2093 | forever-agent "~0.6.1"
2094 | form-data "~2.3.2"
2095 | har-validator "~5.1.0"
2096 | http-signature "~1.2.0"
2097 | is-typedarray "~1.0.0"
2098 | isstream "~0.1.2"
2099 | json-stringify-safe "~5.0.1"
2100 | mime-types "~2.1.19"
2101 | oauth-sign "~0.9.0"
2102 | performance-now "^2.1.0"
2103 | qs "~6.5.2"
2104 | safe-buffer "^5.1.2"
2105 | tough-cookie "~2.4.3"
2106 | tunnel-agent "^0.6.0"
2107 | uuid "^3.3.2"
2108 |
2109 | require_optional@^1.0.1:
2110 | version "1.0.1"
2111 | resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e"
2112 | integrity sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==
2113 | dependencies:
2114 | resolve-from "^2.0.0"
2115 | semver "^5.1.0"
2116 |
2117 | resolve-from@^2.0.0:
2118 | version "2.0.0"
2119 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
2120 | integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=
2121 |
2122 | resolve-url@^0.2.1:
2123 | version "0.2.1"
2124 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
2125 | integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
2126 |
2127 | resolve@^1.3.2:
2128 | version "1.9.0"
2129 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06"
2130 | integrity sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==
2131 | dependencies:
2132 | path-parse "^1.0.6"
2133 |
2134 | ret@~0.1.10:
2135 | version "0.1.15"
2136 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
2137 | integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
2138 |
2139 | rimraf@^2.6.1:
2140 | version "2.6.2"
2141 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
2142 | integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==
2143 | dependencies:
2144 | glob "^7.0.5"
2145 |
2146 | rsmq@^0.9.3:
2147 | version "0.9.3"
2148 | resolved "https://registry.yarnpkg.com/rsmq/-/rsmq-0.9.3.tgz#de1b1f795bfd845869aa3528cd11d4e5985f73a1"
2149 | integrity sha512-Gf0dRJ+CkzGqrZ81TRok+YOtFOJdiX9bqvz28pT0ythA5gTkMxDrFWEuj937Ogd+fpWpnu+2Yc2ro/kr7tpPTg==
2150 | dependencies:
2151 | "@types/redis" "^2.8.0"
2152 | lodash "^4.17.10"
2153 | redis "^2.8.0"
2154 |
2155 | safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
2156 | version "5.1.2"
2157 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
2158 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
2159 |
2160 | safe-regex@^1.1.0:
2161 | version "1.1.0"
2162 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
2163 | integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
2164 | dependencies:
2165 | ret "~0.1.10"
2166 |
2167 | "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
2168 | version "2.1.2"
2169 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
2170 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
2171 |
2172 | saslprep@^1.0.0:
2173 | version "1.0.2"
2174 | resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.2.tgz#da5ab936e6ea0bbae911ffec77534be370c9f52d"
2175 | integrity sha512-4cDsYuAjXssUSjxHKRe4DTZC0agDwsCqcMqtJAQPzC74nJ7LfAJflAtC1Zed5hMzEQKj82d3tuzqdGNRsLJ4Gw==
2176 | dependencies:
2177 | sparse-bitfield "^3.0.3"
2178 |
2179 | sax@^1.2.4:
2180 | version "1.2.4"
2181 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
2182 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
2183 |
2184 | semver-diff@^2.0.0:
2185 | version "2.1.0"
2186 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
2187 | integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=
2188 | dependencies:
2189 | semver "^5.0.3"
2190 |
2191 | semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0:
2192 | version "5.6.0"
2193 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
2194 | integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
2195 |
2196 | send@0.16.2:
2197 | version "0.16.2"
2198 | resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
2199 | integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==
2200 | dependencies:
2201 | debug "2.6.9"
2202 | depd "~1.1.2"
2203 | destroy "~1.0.4"
2204 | encodeurl "~1.0.2"
2205 | escape-html "~1.0.3"
2206 | etag "~1.8.1"
2207 | fresh "0.5.2"
2208 | http-errors "~1.6.2"
2209 | mime "1.4.1"
2210 | ms "2.0.0"
2211 | on-finished "~2.3.0"
2212 | range-parser "~1.2.0"
2213 | statuses "~1.4.0"
2214 |
2215 | serve-static@1.13.2:
2216 | version "1.13.2"
2217 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1"
2218 | integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==
2219 | dependencies:
2220 | encodeurl "~1.0.2"
2221 | escape-html "~1.0.3"
2222 | parseurl "~1.3.2"
2223 | send "0.16.2"
2224 |
2225 | set-blocking@~2.0.0:
2226 | version "2.0.0"
2227 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
2228 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
2229 |
2230 | set-value@^0.4.3:
2231 | version "0.4.3"
2232 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
2233 | integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
2234 | dependencies:
2235 | extend-shallow "^2.0.1"
2236 | is-extendable "^0.1.1"
2237 | is-plain-object "^2.0.1"
2238 | to-object-path "^0.3.0"
2239 |
2240 | set-value@^2.0.0:
2241 | version "2.0.0"
2242 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
2243 | integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
2244 | dependencies:
2245 | extend-shallow "^2.0.1"
2246 | is-extendable "^0.1.1"
2247 | is-plain-object "^2.0.3"
2248 | split-string "^3.0.1"
2249 |
2250 | setprototypeof@1.1.0:
2251 | version "1.1.0"
2252 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
2253 | integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
2254 |
2255 | shebang-command@^1.2.0:
2256 | version "1.2.0"
2257 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
2258 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
2259 | dependencies:
2260 | shebang-regex "^1.0.0"
2261 |
2262 | shebang-regex@^1.0.0:
2263 | version "1.0.0"
2264 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
2265 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
2266 |
2267 | signal-exit@^3.0.0, signal-exit@^3.0.2:
2268 | version "3.0.2"
2269 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
2270 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
2271 |
2272 | snapdragon-node@^2.0.1:
2273 | version "2.1.1"
2274 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
2275 | integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
2276 | dependencies:
2277 | define-property "^1.0.0"
2278 | isobject "^3.0.0"
2279 | snapdragon-util "^3.0.1"
2280 |
2281 | snapdragon-util@^3.0.1:
2282 | version "3.0.1"
2283 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
2284 | integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
2285 | dependencies:
2286 | kind-of "^3.2.0"
2287 |
2288 | snapdragon@^0.8.1:
2289 | version "0.8.2"
2290 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
2291 | integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
2292 | dependencies:
2293 | base "^0.11.1"
2294 | debug "^2.2.0"
2295 | define-property "^0.2.5"
2296 | extend-shallow "^2.0.1"
2297 | map-cache "^0.2.2"
2298 | source-map "^0.5.6"
2299 | source-map-resolve "^0.5.0"
2300 | use "^3.1.0"
2301 |
2302 | source-map-resolve@^0.5.0:
2303 | version "0.5.2"
2304 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
2305 | integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
2306 | dependencies:
2307 | atob "^2.1.1"
2308 | decode-uri-component "^0.2.0"
2309 | resolve-url "^0.2.1"
2310 | source-map-url "^0.4.0"
2311 | urix "^0.1.0"
2312 |
2313 | source-map-support@^0.5.6:
2314 | version "0.5.9"
2315 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f"
2316 | integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==
2317 | dependencies:
2318 | buffer-from "^1.0.0"
2319 | source-map "^0.6.0"
2320 |
2321 | source-map-url@^0.4.0:
2322 | version "0.4.0"
2323 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
2324 | integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
2325 |
2326 | source-map@^0.5.6:
2327 | version "0.5.7"
2328 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
2329 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
2330 |
2331 | source-map@^0.6.0:
2332 | version "0.6.1"
2333 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
2334 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
2335 |
2336 | sparse-bitfield@^3.0.3:
2337 | version "3.0.3"
2338 | resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11"
2339 | integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE=
2340 | dependencies:
2341 | memory-pager "^1.0.2"
2342 |
2343 | split-string@^3.0.1, split-string@^3.0.2:
2344 | version "3.1.0"
2345 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
2346 | integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
2347 | dependencies:
2348 | extend-shallow "^3.0.0"
2349 |
2350 | sprintf-js@~1.0.2:
2351 | version "1.0.3"
2352 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
2353 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
2354 |
2355 | sshpk@^1.7.0:
2356 | version "1.15.2"
2357 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.15.2.tgz#c946d6bd9b1a39d0e8635763f5242d6ed6dcb629"
2358 | integrity sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==
2359 | dependencies:
2360 | asn1 "~0.2.3"
2361 | assert-plus "^1.0.0"
2362 | bcrypt-pbkdf "^1.0.0"
2363 | dashdash "^1.12.0"
2364 | ecc-jsbn "~0.1.1"
2365 | getpass "^0.1.1"
2366 | jsbn "~0.1.0"
2367 | safer-buffer "^2.0.2"
2368 | tweetnacl "~0.14.0"
2369 |
2370 | static-extend@^0.1.1:
2371 | version "0.1.2"
2372 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
2373 | integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
2374 | dependencies:
2375 | define-property "^0.2.5"
2376 | object-copy "^0.1.0"
2377 |
2378 | "statuses@>= 1.4.0 < 2":
2379 | version "1.5.0"
2380 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
2381 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
2382 |
2383 | statuses@~1.4.0:
2384 | version "1.4.0"
2385 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
2386 | integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==
2387 |
2388 | stealthy-require@^1.1.0:
2389 | version "1.1.1"
2390 | resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
2391 | integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
2392 |
2393 | string-width@^1.0.1:
2394 | version "1.0.2"
2395 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
2396 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
2397 | dependencies:
2398 | code-point-at "^1.0.0"
2399 | is-fullwidth-code-point "^1.0.0"
2400 | strip-ansi "^3.0.0"
2401 |
2402 | "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1:
2403 | version "2.1.1"
2404 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
2405 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
2406 | dependencies:
2407 | is-fullwidth-code-point "^2.0.0"
2408 | strip-ansi "^4.0.0"
2409 |
2410 | string_decoder@~1.1.1:
2411 | version "1.1.1"
2412 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
2413 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
2414 | dependencies:
2415 | safe-buffer "~5.1.0"
2416 |
2417 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
2418 | version "3.0.1"
2419 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
2420 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
2421 | dependencies:
2422 | ansi-regex "^2.0.0"
2423 |
2424 | strip-ansi@^4.0.0:
2425 | version "4.0.0"
2426 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
2427 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
2428 | dependencies:
2429 | ansi-regex "^3.0.0"
2430 |
2431 | strip-eof@^1.0.0:
2432 | version "1.0.0"
2433 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
2434 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
2435 |
2436 | strip-json-comments@~2.0.1:
2437 | version "2.0.1"
2438 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
2439 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
2440 |
2441 | supports-color@^2.0.0:
2442 | version "2.0.0"
2443 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
2444 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
2445 |
2446 | supports-color@^5.2.0, supports-color@^5.3.0:
2447 | version "5.5.0"
2448 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
2449 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
2450 | dependencies:
2451 | has-flag "^3.0.0"
2452 |
2453 | tar@^4:
2454 | version "4.4.8"
2455 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"
2456 | integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==
2457 | dependencies:
2458 | chownr "^1.1.1"
2459 | fs-minipass "^1.2.5"
2460 | minipass "^2.3.4"
2461 | minizlib "^1.1.1"
2462 | mkdirp "^0.5.0"
2463 | safe-buffer "^5.1.2"
2464 | yallist "^3.0.2"
2465 |
2466 | term-size@^1.2.0:
2467 | version "1.2.0"
2468 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
2469 | integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=
2470 | dependencies:
2471 | execa "^0.7.0"
2472 |
2473 | thumbcoil@^1.2.3-hackweek2:
2474 | version "1.2.3-hackweek2"
2475 | resolved "https://registry.yarnpkg.com/thumbcoil/-/thumbcoil-1.2.3-hackweek2.tgz#1e6413dbfa16333d20a19ee4db55fc94c7fc628b"
2476 | integrity sha1-HmQT2/oWMz0goZ7k21X8lMf8Yos=
2477 |
2478 | timed-out@^4.0.0:
2479 | version "4.0.1"
2480 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
2481 | integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
2482 |
2483 | to-object-path@^0.3.0:
2484 | version "0.3.0"
2485 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
2486 | integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
2487 | dependencies:
2488 | kind-of "^3.0.2"
2489 |
2490 | to-regex-range@^2.1.0:
2491 | version "2.1.1"
2492 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
2493 | integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
2494 | dependencies:
2495 | is-number "^3.0.0"
2496 | repeat-string "^1.6.1"
2497 |
2498 | to-regex@^3.0.1, to-regex@^3.0.2:
2499 | version "3.0.2"
2500 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
2501 | integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
2502 | dependencies:
2503 | define-property "^2.0.2"
2504 | extend-shallow "^3.0.2"
2505 | regex-not "^1.0.2"
2506 | safe-regex "^1.1.0"
2507 |
2508 | touch@^3.1.0:
2509 | version "3.1.0"
2510 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"
2511 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==
2512 | dependencies:
2513 | nopt "~1.0.10"
2514 |
2515 | tough-cookie@>=2.3.3:
2516 | version "2.5.0"
2517 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
2518 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
2519 | dependencies:
2520 | psl "^1.1.28"
2521 | punycode "^2.1.1"
2522 |
2523 | tough-cookie@~2.4.3:
2524 | version "2.4.3"
2525 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
2526 | integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
2527 | dependencies:
2528 | psl "^1.1.24"
2529 | punycode "^1.4.1"
2530 |
2531 | ts-node@^7.0.1:
2532 | version "7.0.1"
2533 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf"
2534 | integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==
2535 | dependencies:
2536 | arrify "^1.0.0"
2537 | buffer-from "^1.1.0"
2538 | diff "^3.1.0"
2539 | make-error "^1.1.1"
2540 | minimist "^1.2.0"
2541 | mkdirp "^0.5.1"
2542 | source-map-support "^0.5.6"
2543 | yn "^2.0.0"
2544 |
2545 | tslib@^1.8.0, tslib@^1.8.1:
2546 | version "1.9.3"
2547 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
2548 | integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
2549 |
2550 | tslint@^5.11.0:
2551 | version "5.11.0"
2552 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed"
2553 | integrity sha1-mPMMAurjzecAYgHkwzywi0hYHu0=
2554 | dependencies:
2555 | babel-code-frame "^6.22.0"
2556 | builtin-modules "^1.1.1"
2557 | chalk "^2.3.0"
2558 | commander "^2.12.1"
2559 | diff "^3.2.0"
2560 | glob "^7.1.1"
2561 | js-yaml "^3.7.0"
2562 | minimatch "^3.0.4"
2563 | resolve "^1.3.2"
2564 | semver "^5.3.0"
2565 | tslib "^1.8.0"
2566 | tsutils "^2.27.2"
2567 |
2568 | tsutils@^2.27.2:
2569 | version "2.29.0"
2570 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"
2571 | integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==
2572 | dependencies:
2573 | tslib "^1.8.1"
2574 |
2575 | tunnel-agent@^0.6.0:
2576 | version "0.6.0"
2577 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
2578 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
2579 | dependencies:
2580 | safe-buffer "^5.0.1"
2581 |
2582 | tweetnacl@^0.14.3, tweetnacl@~0.14.0:
2583 | version "0.14.5"
2584 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
2585 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
2586 |
2587 | type-is@~1.6.16:
2588 | version "1.6.16"
2589 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194"
2590 | integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==
2591 | dependencies:
2592 | media-typer "0.3.0"
2593 | mime-types "~2.1.18"
2594 |
2595 | typescript@^3.2.2:
2596 | version "3.2.2"
2597 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.2.tgz#fe8101c46aa123f8353523ebdcf5730c2ae493e5"
2598 | integrity sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg==
2599 |
2600 | undefsafe@^2.0.2:
2601 | version "2.0.2"
2602 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76"
2603 | integrity sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=
2604 | dependencies:
2605 | debug "^2.2.0"
2606 |
2607 | union-value@^1.0.0:
2608 | version "1.0.0"
2609 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
2610 | integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
2611 | dependencies:
2612 | arr-union "^3.1.0"
2613 | get-value "^2.0.6"
2614 | is-extendable "^0.1.1"
2615 | set-value "^0.4.3"
2616 |
2617 | unique-string@^1.0.0:
2618 | version "1.0.0"
2619 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
2620 | integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
2621 | dependencies:
2622 | crypto-random-string "^1.0.0"
2623 |
2624 | unpipe@1.0.0, unpipe@~1.0.0:
2625 | version "1.0.0"
2626 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
2627 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
2628 |
2629 | unset-value@^1.0.0:
2630 | version "1.0.0"
2631 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
2632 | integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
2633 | dependencies:
2634 | has-value "^0.3.1"
2635 | isobject "^3.0.0"
2636 |
2637 | unzip-response@^2.0.1:
2638 | version "2.0.1"
2639 | resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
2640 | integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=
2641 |
2642 | upath@^1.0.5:
2643 | version "1.1.0"
2644 | resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd"
2645 | integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==
2646 |
2647 | update-notifier@^2.5.0:
2648 | version "2.5.0"
2649 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6"
2650 | integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==
2651 | dependencies:
2652 | boxen "^1.2.1"
2653 | chalk "^2.0.1"
2654 | configstore "^3.0.0"
2655 | import-lazy "^2.1.0"
2656 | is-ci "^1.0.10"
2657 | is-installed-globally "^0.1.0"
2658 | is-npm "^1.0.0"
2659 | latest-version "^3.0.0"
2660 | semver-diff "^2.0.0"
2661 | xdg-basedir "^3.0.0"
2662 |
2663 | uri-js@^4.2.2:
2664 | version "4.2.2"
2665 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
2666 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
2667 | dependencies:
2668 | punycode "^2.1.0"
2669 |
2670 | urix@^0.1.0:
2671 | version "0.1.0"
2672 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
2673 | integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
2674 |
2675 | url-parse-lax@^1.0.0:
2676 | version "1.0.0"
2677 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
2678 | integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
2679 | dependencies:
2680 | prepend-http "^1.0.1"
2681 |
2682 | url-toolkit@^2.1.6:
2683 | version "2.1.6"
2684 | resolved "https://registry.yarnpkg.com/url-toolkit/-/url-toolkit-2.1.6.tgz#6d03246499e519aad224c44044a4ae20544154f2"
2685 | integrity sha512-UaZ2+50am4HwrV2crR/JAf63Q4VvPYphe63WGeoJxeu8gmOm0qxPt+KsukfakPNrX9aymGNEkkaoICwn+OuvBw==
2686 |
2687 | use@^3.1.0:
2688 | version "3.1.1"
2689 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
2690 | integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
2691 |
2692 | util-deprecate@~1.0.1:
2693 | version "1.0.2"
2694 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
2695 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
2696 |
2697 | utils-merge@1.0.1:
2698 | version "1.0.1"
2699 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
2700 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
2701 |
2702 | uuid@^3.3.2:
2703 | version "3.3.2"
2704 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
2705 | integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
2706 |
2707 | vary@~1.1.2:
2708 | version "1.1.2"
2709 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
2710 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
2711 |
2712 | verror@1.10.0:
2713 | version "1.10.0"
2714 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
2715 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
2716 | dependencies:
2717 | assert-plus "^1.0.0"
2718 | core-util-is "1.0.2"
2719 | extsprintf "^1.2.0"
2720 |
2721 | which@^1.2.9:
2722 | version "1.3.1"
2723 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
2724 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
2725 | dependencies:
2726 | isexe "^2.0.0"
2727 |
2728 | wide-align@^1.1.0:
2729 | version "1.1.3"
2730 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
2731 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
2732 | dependencies:
2733 | string-width "^1.0.2 || 2"
2734 |
2735 | widest-line@^2.0.0:
2736 | version "2.0.1"
2737 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc"
2738 | integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==
2739 | dependencies:
2740 | string-width "^2.1.1"
2741 |
2742 | wrappy@1:
2743 | version "1.0.2"
2744 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
2745 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
2746 |
2747 | write-file-atomic@^2.0.0:
2748 | version "2.3.0"
2749 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab"
2750 | integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==
2751 | dependencies:
2752 | graceful-fs "^4.1.11"
2753 | imurmurhash "^0.1.4"
2754 | signal-exit "^3.0.2"
2755 |
2756 | xdg-basedir@^3.0.0:
2757 | version "3.0.0"
2758 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
2759 | integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
2760 |
2761 | yallist@^2.1.2:
2762 | version "2.1.2"
2763 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
2764 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
2765 |
2766 | yallist@^3.0.0, yallist@^3.0.2:
2767 | version "3.0.3"
2768 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
2769 | integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
2770 |
2771 | yn@^2.0.0:
2772 | version "2.0.0"
2773 | resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a"
2774 | integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=
2775 |
--------------------------------------------------------------------------------