From f77d0a6f1f69166f87749ff92a7b91e6fcad200e Mon Sep 17 00:00:00 2001 From: jessop Date: Mon, 14 Jan 2019 01:27:23 -0500 Subject: [PATCH 01/16] minor changes --- .../components/ChannelInfoDisplay/index.jsx | 4 +--- client/src/containers/AssetBlocked/view.jsx | 11 ++++------- client/src/containers/AssetDisplay/view.jsx | 4 ++-- client/src/containers/AssetInfo/view.jsx | 4 ++-- client/src/containers/Dropzone/index.js | 2 +- .../src/containers/NavigationLinks/view.jsx | 2 +- client/src/containers/SEO/view.jsx | 2 +- client/src/utils/createAssetMetaTags.js | 2 +- client/src/utils/createChannelMetaTags.js | 2 +- server/controllers/api/claim/publish/index.js | 6 +++--- server/controllers/api/claim/update/index.js | 4 ++-- server/index.js | 19 +++++++++---------- server/render/handleShowRender.jsx | 17 +++++++---------- server/utils/getMediaDimensions.js | 2 +- 14 files changed, 36 insertions(+), 45 deletions(-) diff --git a/client/src/components/ChannelInfoDisplay/index.jsx b/client/src/components/ChannelInfoDisplay/index.jsx index 051ad1c4..033f96c3 100644 --- a/client/src/components/ChannelInfoDisplay/index.jsx +++ b/client/src/components/ChannelInfoDisplay/index.jsx @@ -3,9 +3,7 @@ import React from 'react'; const ChannelInfoDisplay = ({name, longId, shortId}) => { return (
-

channel name: {name}

-

full channel id: {longId}

-

short channel id: {shortId}

+

{name}:{shortId}

); }; diff --git a/client/src/containers/AssetBlocked/view.jsx b/client/src/containers/AssetBlocked/view.jsx index de79a14a..aa69d5d3 100644 --- a/client/src/containers/AssetBlocked/view.jsx +++ b/client/src/containers/AssetBlocked/view.jsx @@ -1,10 +1,7 @@ import React from 'react'; -import createCanonicalLink from '../../../../utils/createCanonicalLink'; +import createCanonicalLink from '@globalutils/createCanonicalLink'; import HorizontalSplit from '@components/HorizontalSplit'; -/* -This component shouldn't be necessary after pagination is reworked, -though it might be useful for channel_mine situations. -*/ + class BlockedLeft extends React.PureComponent { render () { return ( @@ -19,7 +16,7 @@ class BlockedRight extends React.PureComponent { render () { return ( -

In response to a complaint we received under the US Digital Millennium Copyright Act, we have blocked access to this content from our applications.

+

In response to a complaint we received under the US Digital Millennium Copyright Act, we have blocked access to this content.

Click here for more information.

); @@ -53,6 +50,6 @@ class AssetBlocked extends React.Component { ); } -}; +} export default AssetBlocked; diff --git a/client/src/containers/AssetDisplay/view.jsx b/client/src/containers/AssetDisplay/view.jsx index 2102f12b..19309351 100644 --- a/client/src/containers/AssetDisplay/view.jsx +++ b/client/src/containers/AssetDisplay/view.jsx @@ -2,7 +2,7 @@ import React from 'react'; import Row from '@components/Row'; import ProgressBar from '@components/ProgressBar'; import { LOCAL_CHECK, UNAVAILABLE, ERROR, AVAILABLE } from '../../constants/asset_display_states'; -import createCanonicalLink from '../../../../utils/createCanonicalLink'; +import createCanonicalLink from '@globalutils/createCanonicalLink'; class AvailableContent extends React.Component { render () { @@ -95,6 +95,6 @@ class AssetDisplay extends React.Component { ); } -}; +} export default AssetDisplay; diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index b11e8da9..7adaf446 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -7,7 +7,7 @@ import AssetShareButtons from '@components/AssetShareButtons'; import ClickToCopy from '@components/ClickToCopy'; import HorizontalSplit from '@components/HorizontalSplit'; import siteConfig from '@config/siteConfig.json'; -import createCanonicalLink from '../../../../utils/createCanonicalLink'; +import createCanonicalLink from '@globalutils/createCanonicalLink'; import AssetInfoFooter from '../../components/AssetInfoFooter/index'; import { createPermanentURI } from '@clientutils/createPermanentURI'; @@ -109,7 +109,7 @@ class AssetInfo extends React.Component { ) : ( `} + value={`${name}`} /> )} diff --git a/client/src/containers/Dropzone/index.js b/client/src/containers/Dropzone/index.js index dfd0f8cd..6bb2a66b 100644 --- a/client/src/containers/Dropzone/index.js +++ b/client/src/containers/Dropzone/index.js @@ -3,7 +3,7 @@ import { selectFile, updateError, clearFile } from '../../actions/publish'; import { selectAsset } from '../../selectors/show'; import View from './view'; import siteConfig from '@config/siteConfig.json'; -import createCanonicalLink from '../../../../utils/createCanonicalLink'; +import createCanonicalLink from '@globalutils/createCanonicalLink'; const { assetDefaults: { thumbnail: defaultThumbnail } } = siteConfig; diff --git a/client/src/containers/NavigationLinks/view.jsx b/client/src/containers/NavigationLinks/view.jsx index f6e4e087..7a9268d5 100644 --- a/client/src/containers/NavigationLinks/view.jsx +++ b/client/src/containers/NavigationLinks/view.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { NavLink, withRouter } from 'react-router-dom'; import NavBarChannelOptionsDropdown from '@components/NavBarChannelOptionsDropdown'; -import createCanonicalLink from '../../../../utils/createCanonicalLink'; +import createCanonicalLink from '@globalutils/createCanonicalLink'; const VIEW = 'VIEW'; const LOGOUT = 'LOGOUT'; diff --git a/client/src/containers/SEO/view.jsx b/client/src/containers/SEO/view.jsx index bc6ab3dc..e8ecdefb 100644 --- a/client/src/containers/SEO/view.jsx +++ b/client/src/containers/SEO/view.jsx @@ -5,7 +5,7 @@ import PropTypes from 'prop-types'; import createPageTitle from '../../utils/createPageTitle'; import createMetaTags from '../../utils/createMetaTags'; import oEmbed from '../../utils/oEmbed.js'; -import createCanonicalLink from '../../../../utils/createCanonicalLink'; +import createCanonicalLink from '@globalutils/createCanonicalLink'; import siteConfig from '@config/siteConfig.json'; const { details: { host } } = siteConfig; diff --git a/client/src/utils/createAssetMetaTags.js b/client/src/utils/createAssetMetaTags.js index 980a0df4..6b03f353 100644 --- a/client/src/utils/createAssetMetaTags.js +++ b/client/src/utils/createAssetMetaTags.js @@ -1,7 +1,7 @@ import siteConfig from '@config/siteConfig.json'; import determineContentTypeFromExtension from './determineContentTypeFromExtension'; import createMetaTagsArray from './createMetaTagsArray'; -import createCanonicalLink from '../../../utils/createCanonicalLink'; +import createCanonicalLink from '@globalutils/createCanonicalLink'; const { details: { diff --git a/client/src/utils/createChannelMetaTags.js b/client/src/utils/createChannelMetaTags.js index b5f530d6..7f259d88 100644 --- a/client/src/utils/createChannelMetaTags.js +++ b/client/src/utils/createChannelMetaTags.js @@ -1,7 +1,7 @@ import siteConfig from '@config/siteConfig.json'; import determineContentTypeFromExtension from './determineContentTypeFromExtension'; import createMetaTagsArray from './createMetaTagsArray'; -import createCanonicalLink from '../../../utils/createCanonicalLink'; +import createCanonicalLink from '@globalutils/createCanonicalLink'; const { details: { diff --git a/server/controllers/api/claim/publish/index.js b/server/controllers/api/claim/publish/index.js index 71418afa..b795bde0 100644 --- a/server/controllers/api/claim/publish/index.js +++ b/server/controllers/api/claim/publish/index.js @@ -3,7 +3,7 @@ const logger = require('winston'); const { details: { host }, publishing: { disabled, disabledMessage } } = require('@config/siteConfig'); const { sendGATimingEvent } = require('../../../../utils/googleAnalytics.js'); -const isApprovedChannel = require('../../../../../utils/isApprovedChannel'); +const isApprovedChannel = require('@globalutils/isApprovedChannel'); const { publishing: { publishOnlyApproved, approvedChannels } } = require('@config/siteConfig'); const { handleErrorResponse } = require('../../../utils/errorHandlers.js'); @@ -18,7 +18,7 @@ const parsePublishApiRequestFiles = require('./parsePublishApiRequestFiles.js'); const authenticateUser = require('./authentication.js'); const chainquery = require('chainquery').default; -const createCanonicalLink = require('../../../../../utils/createCanonicalLink'); +const createCanonicalLink = require('@globalutils/createCanonicalLink'); const CLAIM_TAKEN = 'CLAIM_TAKEN'; const UNAPPROVED_CHANNEL = 'UNAPPROVED_CHANNEL'; @@ -115,7 +115,7 @@ const claimPublish = ({ body, files, headers, ip, originalUrl, user, tor }, res) if (channelName) { return chainquery.claim.queries.getShortClaimIdFromLongClaimId(claimData.certificateId, channelName); } else { - return chainquery.claim.queries.getShortClaimIdFromLongClaimId(claimId, name, claimData).catch(error => { + return chainquery.claim.queries.getShortClaimIdFromLongClaimId(claimId, name, claimData).catch(() => { return claimId.slice(0, 1); }); } diff --git a/server/controllers/api/claim/update/index.js b/server/controllers/api/claim/update/index.js index 17f998b4..4a2524c5 100644 --- a/server/controllers/api/claim/update/index.js +++ b/server/controllers/api/claim/update/index.js @@ -10,7 +10,7 @@ const parsePublishApiRequestFiles = require('../publish/parsePublishApiRequestFi const authenticateUser = require('../publish/authentication.js'); const createThumbnailPublishParams = require('../publish/createThumbnailPublishParams.js'); const chainquery = require('chainquery').default; -const createCanonicalLink = require('../../../../../utils/createCanonicalLink'); +const createCanonicalLink = require('@globalutils/createCanonicalLink'); /* route to update a claim through the daemon @@ -153,7 +153,7 @@ const claimUpdate = ({ body, files, headers, ip, originalUrl, user, tor }, res) if (channelName) { return chainquery.claim.queries.getShortClaimIdFromLongClaimId(result.certificateId, channelName); } else { - return chainquery.claim.queries.getShortClaimIdFromLongClaimId(result.claimId, name, result).catch(error => { + return chainquery.claim.queries.getShortClaimIdFromLongClaimId(result.claimId, name, result).catch(() => { return result.claimId.slice(0, 1); }); } diff --git a/server/index.js b/server/index.js index 0ec835cf..be209d33 100644 --- a/server/index.js +++ b/server/index.js @@ -36,7 +36,7 @@ const { const { sessionKey } = require('@private/authConfig.json'); // configure.js doesn't handle new keys in config.json files yet. Make sure it doens't break. -let bLE; +let finalBlockListEndpoint; function Server () { this.initialize = () => { @@ -176,30 +176,29 @@ function Server () { return; } if (blockListEndpoint) { - bLE = blockListEndpoint; + finalBlockListEndpoint = blockListEndpoint; } else if (!blockListEndpoint) { if (typeof (blockListEndpoint) !== 'string') { logger.warn('blockListEndpoint is null due to outdated siteConfig file. \n' + 'Continuing with default LBRY blocklist api endpoint. \n ' + - '(Specify /"blockListEndpoint" : ""/ to disable.') - bLE = 'https://api.lbry.io/file/list_blocked'; + '(Specify /"blockListEndpoint" : ""/ to disable.'); + finalBlockListEndpoint = 'https://api.lbry.io/file/list_blocked'; } } logger.info(`Peforming updates...`); - if (!bLE) { - logger.info('Configured for no Block List') - db.Tor.refreshTable().then( (updatedTorList) => { + if (!finalBlockListEndpoint) { + logger.info('Configured for no Block List'); + db.Tor.refreshTable().then((updatedTorList) => { logger.info('Tor list updated, length:', updatedTorList.length); }); } else { - return Promise.all([ - db.Blocked.refreshTable(bLE), + db.Blocked.refreshTable(finalBlockListEndpoint), db.Tor.refreshTable()]) .then(([updatedBlockedList, updatedTorList]) => { logger.info('Blocked list updated, length:', updatedBlockedList.length); logger.info('Tor list updated, length:', updatedTorList.length); - }) + }); } }; this.start = () => { diff --git a/server/render/handleShowRender.jsx b/server/render/handleShowRender.jsx index ca0082f1..f304222f 100644 --- a/server/render/handleShowRender.jsx +++ b/server/render/handleShowRender.jsx @@ -12,10 +12,8 @@ import * as httpContext from 'express-http-context'; import Reducers from '@reducers'; import GAListener from '@components/GAListener'; import App from '@app'; -import Sagas from '@sagas'; -import Actions from '@actions'; -const createCanonicalLink = require('../../utils/createCanonicalLink'); +const createCanonicalLink = require('@globalutils/createCanonicalLink'); const getCanonicalUrlFromShow = show => { const requestId = show.requestList[show.request.id]; @@ -49,19 +47,18 @@ export default (req, res) => { action = false, saga = false, } = httpContext.get('routeData'); - + if (action === 'fallback') { res.status(404); } const runSaga = (action !== false && saga !== false); const renderPage = (store) => { - // Workaround, remove when a solution for async httpContext exists const showState = store.getState().show; const assetKeys = Object.keys(showState.assetList); - if(assetKeys.length !== 0) { + if (assetKeys.length !== 0) { res.claimId = showState.assetList[assetKeys[0]].claimId; } else { const channelKeys = Object.keys(showState.channelList); @@ -118,17 +115,17 @@ export default (req, res) => { .then(() => { // redirect if request does not use canonical url const canonicalUrl = getCanonicalUrlFromShow(store.getState().show); - + if (!canonicalUrl) { res.status(404); } - + if (canonicalUrl && canonicalUrl !== req.originalUrl) { console.log(`redirecting ${req.originalUrl} to ${canonicalUrl}`); res.redirect(canonicalUrl); } - - return renderPage(store) + + return renderPage(store); }); } else { const store = createStore(Reducers); diff --git a/server/utils/getMediaDimensions.js b/server/utils/getMediaDimensions.js index fc5e79a1..d130fd40 100644 --- a/server/utils/getMediaDimensions.js +++ b/server/utils/getMediaDimensions.js @@ -18,7 +18,7 @@ async function getMediaDimensions (fileType, filePath) { [ height, width ] = await getVideoHeightAndWidth(filePath); break; default: - logger.error('unable to create File data for unspported file type:', fileType); + logger.error('unable to create File dimension data for unspported file type:', fileType); break; } return { -- 2.45.3 From 7cd43cd0bb145a99a450a931480da8d6ea18f471 Mon Sep 17 00:00:00 2001 From: Shawn Date: Mon, 14 Jan 2019 22:32:56 -0600 Subject: [PATCH 02/16] Update linters, add prettier --- .prettierrc.json | 5 + lintstagedrc.json | 6 + package-lock.json | 667 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 17 +- 4 files changed, 670 insertions(+), 25 deletions(-) create mode 100644 .prettierrc.json create mode 100644 lintstagedrc.json diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 00000000..17b070eb --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,5 @@ +{ + "trailingComma": "es5", + "printWidth": 100, + "singleQuote": true +} diff --git a/lintstagedrc.json b/lintstagedrc.json new file mode 100644 index 00000000..2325bdbf --- /dev/null +++ b/lintstagedrc.json @@ -0,0 +1,6 @@ +{ + "linters": { + "src/**/*.{js,jsx,scss,json}": ["prettier --write", "git add"], + "src/**/*.{js,jsx}": ["eslint --fix", "flow focus-check --color always", "git add"] + } +} diff --git a/package-lock.json b/package-lock.json index ed8f2cd2..c207f527 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1127,6 +1127,98 @@ "prop-types": "^15.5.10" } }, + "@iamstarkov/listr-update-renderer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@iamstarkov/listr-update-renderer/-/listr-update-renderer-0.4.1.tgz", + "integrity": "sha512-IJyxQWsYDEkf8C8QthBn5N8tIUR9V9je6j3sMIpAkonaadjbvxmRC6RAhpa3RKxndhNnU2M6iNbtJwd7usQYIA==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^2.3.0", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "^1.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "@samverschueren/stream-to-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", + "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", + "dev": true, + "requires": { + "any-observable": "^0.3.0" + } + }, "@types/chai": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.4.tgz", @@ -1484,6 +1576,12 @@ "color-convert": "^1.9.0" } }, + "any-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", + "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", + "dev": true + }, "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -1589,6 +1687,12 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -3128,6 +3232,59 @@ "restore-cursor": "^2.0.0" } }, + "cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dev": true, + "requires": { + "slice-ansi": "0.0.4", + "string-width": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", @@ -3751,6 +3908,12 @@ "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" }, + "date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", + "dev": true + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -3887,6 +4050,12 @@ } } }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -4134,6 +4303,12 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true + }, "elliptic": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", @@ -5258,6 +5433,12 @@ "pkg-dir": "^2.0.0" } }, + "find-parent-dir": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", + "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", + "dev": true + }, "find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", @@ -5969,6 +6150,17 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "g-status": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz", + "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "matcher": "^1.0.0", + "simple-git": "^1.85.0" + } + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -6060,6 +6252,12 @@ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, + "get-own-enumerable-property-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", + "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==", + "dev": true + }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", @@ -6546,16 +6744,16 @@ "integrity": "sha1-3QLqYIG9BWjcXQcxhEY5V7qe+ao=" }, "husky": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-1.1.3.tgz", - "integrity": "sha512-6uc48B/A2Mqi65yeg37d/TPcTb0bZ1GTkMYOM0nXLOPuPaTRhXCeee80/noOrbavWd12x72Tusja7GJ5rzvV6g==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz", + "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==", "dev": true, "requires": { - "cosmiconfig": "^5.0.6", - "execa": "^0.9.0", + "cosmiconfig": "^5.0.7", + "execa": "^1.0.0", "find-up": "^3.0.0", "get-stdin": "^6.0.0", - "is-ci": "^1.2.1", + "is-ci": "^2.0.0", "pkg-dir": "^3.0.0", "please-upgrade-node": "^3.1.1", "read-pkg": "^4.0.1", @@ -6564,19 +6762,32 @@ }, "dependencies": { "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, - "execa": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.9.0.tgz", - "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==", + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", @@ -6599,13 +6810,22 @@ "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", "dev": true }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { - "ci-info": "^1.5.0" + "pump": "^3.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" } }, "locate-path": { @@ -6619,9 +6839,9 @@ } }, "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -7108,6 +7328,23 @@ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, + "is-observable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", + "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", + "dev": true, + "requires": { + "symbol-observable": "^1.1.0" + }, + "dependencies": { + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "dev": true + } + } + }, "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", @@ -7172,6 +7409,12 @@ "has": "^1.0.1" } }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", @@ -7265,6 +7508,24 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, + "jest-get-type": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", + "dev": true + }, + "jest-validate": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", + "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^23.6.0" + } + }, "joi": { "version": "13.7.0", "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", @@ -7422,6 +7683,12 @@ "invert-kv": "^1.0.0" } }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -7432,6 +7699,234 @@ "type-check": "~0.3.2" } }, + "lint-staged": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.0.tgz", + "integrity": "sha512-yfSkyJy7EuVsaoxtUSEhrD81spdJOe/gMTGea3XaV7HyoRhTb9Gdlp6/JppRZERvKSEYXP9bjcmq6CA5oL2lYQ==", + "dev": true, + "requires": { + "@iamstarkov/listr-update-renderer": "0.4.1", + "chalk": "^2.3.1", + "commander": "^2.14.1", + "cosmiconfig": "5.0.6", + "debug": "^3.1.0", + "dedent": "^0.7.0", + "del": "^3.0.0", + "execa": "^1.0.0", + "find-parent-dir": "^0.3.0", + "g-status": "^2.0.2", + "is-glob": "^4.0.0", + "is-windows": "^1.0.2", + "jest-validate": "^23.5.0", + "listr": "^0.14.2", + "lodash": "^4.17.5", + "log-symbols": "^2.2.0", + "micromatch": "^3.1.8", + "npm-which": "^3.0.1", + "p-map": "^1.1.1", + "path-is-inside": "^1.0.2", + "pify": "^3.0.0", + "please-upgrade-node": "^3.0.2", + "staged-git-files": "1.1.2", + "string-argv": "^0.0.2", + "stringify-object": "^3.2.2" + }, + "dependencies": { + "cosmiconfig": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.6.tgz", + "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "listr": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", + "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", + "dev": true, + "requires": { + "@samverschueren/stream-to-observable": "^0.3.0", + "is-observable": "^1.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.5.0", + "listr-verbose-renderer": "^0.5.0", + "p-map": "^2.0.0", + "rxjs": "^6.3.3" + }, + "dependencies": { + "p-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz", + "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==", + "dev": true + }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "dev": true + }, + "listr-update-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", + "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^2.3.0", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "^1.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "listr-verbose-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", + "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "cli-cursor": "^2.1.0", + "date-fns": "^1.27.2", + "figures": "^2.0.0" + } + }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -7517,6 +8012,38 @@ "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", "dev": true }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "dependencies": { + "wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + } + } + } + }, "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", @@ -7606,6 +8133,15 @@ "object-visit": "^1.0.0" } }, + "matcher": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", + "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.4" + } + }, "material-colors": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", @@ -11613,6 +12149,15 @@ } } }, + "npm-path": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", + "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", + "dev": true, + "requires": { + "which": "^1.2.10" + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -11621,6 +12166,17 @@ "path-key": "^2.0.0" } }, + "npm-which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", + "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", + "dev": true, + "requires": { + "commander": "^2.9.0", + "npm-path": "^2.0.2", + "which": "^1.2.10" + } + }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -12199,6 +12755,22 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, + "prettier": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.3.tgz", + "integrity": "sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg==", + "dev": true + }, + "pretty-format": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", + "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" + } + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -13759,6 +14331,32 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, + "simple-git": { + "version": "1.107.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.107.0.tgz", + "integrity": "sha512-t4OK1JRlp4ayKRfcW6owrWcRVLyHRUlhGd0uN6ZZTqfDq8a5XpcUdOKiGRNobHEuMtNqzp0vcJNvhYWwh5PsQA==", + "dev": true, + "requires": { + "debug": "^4.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", @@ -14033,6 +14631,12 @@ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, + "staged-git-files": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz", + "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==", + "dev": true + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -14113,6 +14717,12 @@ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", "dev": true }, + "string-argv": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", + "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -14131,6 +14741,17 @@ "safe-buffer": "~5.1.0" } }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", diff --git a/package.json b/package.json index 31fa92a0..84e7124b 100644 --- a/package.json +++ b/package.json @@ -103,13 +103,15 @@ "extract-css-chunks-webpack-plugin": "^3.2.1", "file-loader": "^2.0.0", "har-validator": "^5.1.3", - "husky": "^1.1.3", + "husky": "^1.3.1", + "lint-staged": "^8.1.0", "md5-file": "^4.0.0", "mini-css-extract-plugin": "^0.5.0", "mocha": "^5.2.0", "ndb": "^1.0.26", "node-sass": "^4.11.0", "nodemon": "^1.18.6", + "prettier": "1.15.3", "react-color": "^2.14.1", "react-hot-loader": "^4.6.0", "redux-devtools": "^3.4.1", @@ -128,7 +130,18 @@ }, "husky": { "hooks": { - "pre-commit": "eslint ." + "pre-commit": "lint-staged" } + }, + "lint-staged": { + "*.js": [ + "eslint --fix", + "prettier --write", + "git add" + ], + "*.{json,css,md}": [ + "prettier --write", + "git add" + ] } } -- 2.45.3 From d65453c51d0a78a2ec670bdb8c16a15bf525ec72 Mon Sep 17 00:00:00 2001 From: Shawn Date: Mon, 14 Jan 2019 22:36:33 -0600 Subject: [PATCH 03/16] Fix low-sev package old package warning --- package-lock.json | 210 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 106 insertions(+), 106 deletions(-) diff --git a/package-lock.json b/package-lock.json index c207f527..f80a46cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1603,12 +1603,6 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, - "arch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", - "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", - "dev": true - }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", @@ -2611,7 +2605,7 @@ }, "bl": { "version": "1.2.2", - "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { @@ -3047,6 +3041,33 @@ "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", "dev": true }, + "carlo": { + "version": "0.9.43", + "resolved": "https://registry.npmjs.org/carlo/-/carlo-0.9.43.tgz", + "integrity": "sha512-m3kCI4ZxYKCGmOoBNnu/Bq+FMZpfYV2P8qWuOcVa2HuxBgS5afG5Efw9D8v7IUhCc+4ox2Eag1BN9ERtGPr7Vg==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "puppeteer-core": "^1.9.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -3290,33 +3311,6 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, - "clipboardy": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz", - "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==", - "dev": true, - "requires": { - "arch": "^2.1.0", - "execa": "^0.8.0" - }, - "dependencies": { - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - } - } - }, "cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", @@ -3958,7 +3952,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true, "optional": true @@ -4025,14 +4019,14 @@ "dependencies": { "file-type": { "version": "3.9.0", - "resolved": "http://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", "dev": true, "optional": true }, "get-stream": { "version": "2.3.1", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", "dev": true, "optional": true, @@ -4043,10 +4037,21 @@ }, "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true, "optional": true + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "optional": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } } } }, @@ -4441,7 +4446,7 @@ }, "es6-promisify": { "version": "5.0.0", - "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { @@ -5216,24 +5221,6 @@ "requires": { "ms": "2.0.0" } - }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "dev": true, - "requires": { - "fd-slicer": "~1.0.1" - } } } }, @@ -5558,12 +5545,6 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, - "fs-copy-file-sync": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fs-copy-file-sync/-/fs-copy-file-sync-1.1.1.tgz", - "integrity": "sha512-2QY5eeqVv4m2PfyMiEuy9adxNP+ajf+8AR05cEi+OAzPcOj90hvFImeZhTmKLBgSd9EvG33jsD7ZRxsx9dThkQ==", - "dev": true - }, "fs-extra": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", @@ -8723,29 +8704,27 @@ "dev": true }, "ndb": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/ndb/-/ndb-1.0.26.tgz", - "integrity": "sha512-W3pXOa/TAwHkapwkUN7JZ0B3qAKWcUkhpeTcYRtreqyGhzEqwsIR1ju8adrnN0lq62SKep3+y1XiNOf4F+xC1g==", + "version": "1.0.42", + "resolved": "https://registry.npmjs.org/ndb/-/ndb-1.0.42.tgz", + "integrity": "sha512-iQaDByVqgKMTpIUb/75Oi1G1vH6fhekAOVYqI1lr2vPeAzv1n+nSkVF0fy7qeeLLZYktZHXCFclZi2npLT2oBg==", "dev": true, "requires": { + "carlo": "^0.9.41", "chokidar": "^2.0.4", - "clipboardy": "^1.2.3", - "fs-copy-file-sync": "^1.1.1", "isbinaryfile": "^3.0.3", "mime": "^2.3.1", "ndb-node-pty-prebuilt": "^0.8.0", "opn": "^5.3.0", - "puppeteer": "1.7.0", - "rimraf": "^2.6.2", "update-notifier": "^2.5.0", + "which": "^1.3.1", "ws": "^6.0.0", "xterm": "^3.7.0" }, "dependencies": { "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", "dev": true } } @@ -12912,36 +12891,48 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, - "puppeteer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.7.0.tgz", - "integrity": "sha512-f+1DxKHPqce6CXUBz2eVO2WcATeVeQSOPG9GYaGObEZDCiCEUwG+gogjMsrvn7he2wHTqNVb5p6RUrwmr8XFBA==", + "puppeteer-core": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-1.11.0.tgz", + "integrity": "sha512-JTsJKCQdrk1RqEGZN3l2TyW7Rhy7GWRRzd3PftYyA3B35l0t0lLU+gdF7czemnpSVVMiAgHpM1Uk/iO6jLreMA==", "dev": true, "requires": { - "debug": "^3.1.0", + "debug": "^4.1.0", "extract-zip": "^1.6.6", "https-proxy-agent": "^2.2.1", "mime": "^2.0.3", - "progress": "^2.0.0", + "progress": "^2.0.1", "proxy-from-env": "^1.0.0", "rimraf": "^2.6.1", - "ws": "^5.1.1" + "ws": "^6.1.0" }, "dependencies": { - "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", - "dev": true - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "async-limiter": "~1.0.0" + "ms": "^2.1.1" } + }, + "mime": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true } } }, @@ -14028,7 +14019,7 @@ "dependencies": { "commander": { "version": "2.8.1", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", "dev": true, "optional": true, @@ -15457,7 +15448,7 @@ }, "buffer": { "version": "3.6.0", - "resolved": "http://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", "dev": true, "optional": true, @@ -16493,9 +16484,9 @@ } }, "ws": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.0.tgz", - "integrity": "sha512-H3dGVdGvW2H8bnYpIDc3u3LH8Wue3Qh+Zto6aXXFzvESkTVT6rAfKR6tR/+coaUvxs8yHtmNV0uioBF62ZGSTg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", + "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", "dev": true, "requires": { "async-limiter": "~1.0.0" @@ -16519,9 +16510,9 @@ "dev": true }, "xterm": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/xterm/-/xterm-3.8.0.tgz", - "integrity": "sha512-rS3HLryuMWbLsv98+jVVSUXCxmoyXPwqwJNC0ad0VSMdXgl65LefPztQVwfurkaF7kM7ZSgM8eJjnJ9kkdoR1w==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/xterm/-/xterm-3.10.1.tgz", + "integrity": "sha512-RHaUwJ8zwLiICu1QsXoxUHP+R2Pp8Rc8yVoNali/nKw3CVXwmXxT/4mgbk7U22psuNgOqLyI4Sg9nlQfYeTRQw==", "dev": true }, "y18n": { @@ -16562,14 +16553,23 @@ } }, "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", "dev": true, - "optional": true, "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "fd-slicer": "~1.0.1" + }, + "dependencies": { + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + } } } } diff --git a/package.json b/package.json index 84e7124b..41dbbbee 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,7 @@ "md5-file": "^4.0.0", "mini-css-extract-plugin": "^0.5.0", "mocha": "^5.2.0", - "ndb": "^1.0.26", + "ndb": "^1.0.42", "node-sass": "^4.11.0", "nodemon": "^1.18.6", "prettier": "1.15.3", -- 2.45.3 From 2d16594927a5997583e9940b67f2852b4406705d Mon Sep 17 00:00:00 2001 From: jessop Date: Tue, 15 Jan 2019 18:19:19 -0500 Subject: [PATCH 04/16] Rudimentary dropdown file errors --- client/src/containers/Dropzone/index.js | 18 +++++++++----- client/src/utils/file.js | 16 ++++++------- .../publish/parsePublishApiRequestFiles.js | 24 +++++++++---------- 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/client/src/containers/Dropzone/index.js b/client/src/containers/Dropzone/index.js index 6bb2a66b..5252dce3 100644 --- a/client/src/containers/Dropzone/index.js +++ b/client/src/containers/Dropzone/index.js @@ -5,9 +5,12 @@ import View from './view'; import siteConfig from '@config/siteConfig.json'; import createCanonicalLink from '@globalutils/createCanonicalLink'; -const { assetDefaults: { thumbnail: defaultThumbnail } } = siteConfig; +const { + assetDefaults: { thumbnail: defaultThumbnail }, +} = siteConfig; -const mapStateToProps = ({ show, publish: { file, thumbnail, fileError, isUpdate } }) => { +const mapStateToProps = ({ show, publish: { file, thumbnail, error, isUpdate } }) => { + const fileError = error.file; const obj = { file, thumbnail, fileError, isUpdate }; let asset, name, claimId, fileExt, outpoint, sourceUrl; if (isUpdate) { @@ -18,7 +21,7 @@ const mapStateToProps = ({ show, publish: { file, thumbnail, fileError, isUpdate if (obj.fileExt === 'mp4') { obj.sourceUrl = claimData.thumbnail ? claimData.thumbnail : defaultThumbnail; } else { - ({fileExt, outpoint} = claimData); + ({ fileExt, outpoint } = claimData); obj.sourceUrl = `${createCanonicalLink({ asset: claimData })}.${fileExt}?${outpoint}`; } } @@ -28,14 +31,17 @@ const mapStateToProps = ({ show, publish: { file, thumbnail, fileError, isUpdate const mapDispatchToProps = dispatch => { return { - selectFile: (file) => { + selectFile: file => { dispatch(selectFile(file)); }, - setFileError: (value) => { + setFileError: value => { dispatch(clearFile()); dispatch(updateError('file', value)); }, }; }; -export default connect(mapStateToProps, mapDispatchToProps)(View); +export default connect( + mapStateToProps, + mapDispatchToProps +)(View); diff --git a/client/src/utils/file.js b/client/src/utils/file.js index 0589fd37..4652eb32 100644 --- a/client/src/utils/file.js +++ b/client/src/utils/file.js @@ -1,15 +1,12 @@ import siteConfig from '@config/siteConfig.json'; const { - publishing: { - maxSizeImage = 10000000, - maxSizeGif = 50000000, - maxSizeVideo = 50000000, - } + publishing: { maxSizeImage = 10000000, maxSizeGif = 50000000, maxSizeVideo = 50000000 }, } = siteConfig; +// TODO: central constants location +const SIZE_MB = 1000000; - -export function validateFile (file) { +export function validateFile(file) { if (!file) { throw new Error('no file provided'); } @@ -36,6 +33,9 @@ export function validateFile (file) { } break; default: - throw new Error(file.type + ' is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.'); + throw new Error( + file.type + + ' is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.' + ); } } diff --git a/server/controllers/api/claim/publish/parsePublishApiRequestFiles.js b/server/controllers/api/claim/publish/parsePublishApiRequestFiles.js index 6e1f3409..3fdcdfc3 100644 --- a/server/controllers/api/claim/publish/parsePublishApiRequestFiles.js +++ b/server/controllers/api/claim/publish/parsePublishApiRequestFiles.js @@ -1,7 +1,7 @@ const path = require('path'); const validateFileTypeAndSize = require('./validateFileTypeAndSize.js'); -const parsePublishApiRequestFiles = ({file, thumbnail}, isUpdate) => { +const parsePublishApiRequestFiles = ({ file, thumbnail }, isUpdate) => { // make sure a file was provided if (!file) { if (isUpdate) { @@ -14,39 +14,39 @@ const parsePublishApiRequestFiles = ({file, thumbnail}, isUpdate) => { } return {}; } - throw new Error('no file with key of [file] found in request'); + throw new Error('No file with key of [file] found in request'); } if (!file.path) { - throw new Error('no file path found'); + throw new Error('No file path found'); } if (!file.type) { - throw new Error('no file type found'); + throw new Error('No file type found'); } if (!file.size) { - throw new Error('no file size found'); + throw new Error('No file size found'); } // validate the file name if (!file.name) { - throw new Error('no file name found'); + throw new Error('No file name found'); } if (file.name.indexOf('.') < 0) { - throw new Error('no file extension found in file name'); + throw new Error('No file extension found in file name'); } if (file.name.indexOf('.') === 0) { - throw new Error('file name cannot start with "."'); + throw new Error('File name cannot start with "."'); } if (/'/.test(file.name)) { - throw new Error('apostrophes are not allowed in the file name'); + throw new Error('Apostrophes are not allowed in the file name'); } // validate the file if (file) validateFileTypeAndSize(file); // return results const obj = { - fileName : file.name, - filePath : file.path, + fileName: file.name, + filePath: file.path, fileExtension: path.extname(file.path), - fileType : file.type, + fileType: file.type, }; if (thumbnail) { -- 2.45.3 From 85e98cc0cd640cc5e14c9439cf97eea4885b3062 Mon Sep 17 00:00:00 2001 From: Thomas Zarebczan Date: Fri, 18 Jan 2019 01:32:45 -0500 Subject: [PATCH 05/16] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 64d44cb6..f99aa65f 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,8 @@ $ npm run configure #### Build & start the app ``` +$ npm run build + $ npm run start ``` -- 2.45.3 From fd30678b2de3171a7168ceb80d9ea3f89362f421 Mon Sep 17 00:00:00 2001 From: Shawn K Date: Tue, 22 Jan 2019 17:26:47 -0600 Subject: [PATCH 06/16] New repo owner --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f99aa65f..8a184765 100644 --- a/README.md +++ b/README.md @@ -264,4 +264,4 @@ We take security seriously. Please contact security@lbry.io regarding any securi ## Contact -The primary contact for this project is [@skhameneh](mailto:shawn@lbry.io). +The primary contact for this project is [@jessopb](mailto:jessop@lbry.io). -- 2.45.3 From a91c7a300c467c868d3883c83c5fc6713a0a8980 Mon Sep 17 00:00:00 2001 From: jessop Date: Wed, 23 Jan 2019 19:22:32 -0500 Subject: [PATCH 07/16] fixes bug in edit page due to inconsistent url --- .../api/channel/claims/getChannelClaims.js | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/server/controllers/api/channel/claims/getChannelClaims.js b/server/controllers/api/channel/claims/getChannelClaims.js index 773c2ba8..5b9475ae 100644 --- a/server/controllers/api/channel/claims/getChannelClaims.js +++ b/server/controllers/api/channel/claims/getChannelClaims.js @@ -3,30 +3,37 @@ const chainquery = require('chainquery').default; const getClaimData = require('server/utils/getClaimData'); const { returnPaginatedChannelClaims } = require('./channelPagination.js'); -const getChannelClaims = async (channelName, channelShortId, page) => { - const channelId = await chainquery.claim.queries.getLongClaimId(channelName, channelShortId); - const params = { content_type: [ - 'image/jpeg', - 'image/jpg', - 'image/png', - 'image/gif', - 'video/mp4', - ] }; - let channelClaims; - if (channelId) { - channelClaims = await chainquery.claim.queries.getAllChannelClaims(channelId, params); - } +const getChannelClaims = async (channelName, channelLongId, page) => { + const params = { + content_type: ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'video/mp4'], + }; + let channelShortId = await chainquery.claim.queries.getShortClaimIdFromLongClaimId( + channelLongId, + channelName + ); + let channelClaims; + if (channelLongId) { + channelClaims = await chainquery.claim.queries.getAllChannelClaims(channelLongId, params); + } + /* + Put mempool unconfirmed claims at the beginning + */ const split = channelClaims.reduce( - (acc, val) => val.dataValues.height === 0 ? { ...acc, zero: acc.zero.concat(val) } : { ...acc, nonzero: acc.nonzero.concat(val) }, + (acc, val) => + val.dataValues.height === 0 + ? { ...acc, zero: acc.zero.concat(val) } + : { ...acc, nonzero: acc.nonzero.concat(val) }, { zero: [], nonzero: [] } ); channelClaims = split.zero.concat(split.nonzero); - const processingChannelClaims = channelClaims ? channelClaims.map((claim) => getClaimData(claim, channelName, channelShortId)) : []; + const processingChannelClaims = channelClaims + ? channelClaims.map(claim => getClaimData(claim, channelName, channelShortId)) + : []; const processedChannelClaims = await Promise.all(processingChannelClaims); - return returnPaginatedChannelClaims(channelName, channelId, processedChannelClaims, page); + return returnPaginatedChannelClaims(channelName, channelShortId, processedChannelClaims, page); }; module.exports = getChannelClaims; -- 2.45.3 From fd61e5cb512eb2db4ecdd4df5dde804d06ab7a96 Mon Sep 17 00:00:00 2001 From: jessop Date: Fri, 25 Jan 2019 19:37:07 -0500 Subject: [PATCH 08/16] styling and file support overhaul --- client/scss/_asset-blocked.scss | 7 + client/scss/_asset-display.scss | 34 +- client/scss/_asset-preview.scss | 76 +- client/scss/_channel-claims-display.scss | 25 +- client/scss/_click-to-copy.scss | 4 +- client/scss/_dropzone.scss | 9 +- client/scss/_horizontal-split.scss | 38 +- client/scss/_markdown.scss | 115 ++ client/scss/_nav-bar.scss | 9 +- client/scss/_page-layout.scss | 30 +- client/scss/_select.scss | 2 + client/scss/_text.scss | 6 +- client/scss/_variables.scss | 44 +- client/scss/all.scss | 2 + client/src/components/AssetPreview/index.jsx | 72 +- .../components/ChannelInfoDisplay/index.jsx | 2 +- client/src/components/FileViewer/index.jsx | 52 + client/src/containers/AssetBlocked/view.jsx | 12 +- client/src/containers/AssetDisplay/view.jsx | 13 +- client/src/containers/AssetInfo/view.jsx | 241 ++-- client/src/containers/AssetTitle/view.jsx | 2 +- client/src/pages/FaqPage/index.jsx | 58 +- client/src/pages/ShowAssetDetails/view.jsx | 11 +- client/src/pages/TosPage/index.jsx | 98 +- client/src/utils/createAssetMetaTags.js | 38 +- .../determineContentTypeFromExtension.js | 7 +- client/src/utils/file.js | 1 + package-lock.json | 1152 +++++++++++------ package.json | 1 + public/assets/img/451sign.svg | 24 + server/chainquery/models/ClaimModel.js | 273 ++-- server/chainquery/queries/claimQueries.js | 311 ++--- .../api/channel/claims/getChannelClaims.js | 7 +- .../claim/publish/validateFileTypeAndSize.js | 15 +- server/models/claim.js | 204 +-- 35 files changed, 1794 insertions(+), 1201 deletions(-) create mode 100644 client/scss/_asset-blocked.scss create mode 100644 client/scss/_markdown.scss create mode 100644 client/src/components/FileViewer/index.jsx create mode 100644 public/assets/img/451sign.svg diff --git a/client/scss/_asset-blocked.scss b/client/scss/_asset-blocked.scss new file mode 100644 index 00000000..29b4c9cf --- /dev/null +++ b/client/scss/_asset-blocked.scss @@ -0,0 +1,7 @@ +.asset-blocked__image { +width: 100%; +} + +.asset-blocked__text { +width: 100%; +} diff --git a/client/scss/_asset-display.scss b/client/scss/_asset-display.scss index 55983340..cc338237 100644 --- a/client/scss/_asset-display.scss +++ b/client/scss/_asset-display.scss @@ -1,29 +1,37 @@ .asset-main { - height: 75vh; display: flex; flex-direction: column; align-items: center; } +.asset-document { + $asset-info-width: 1000px; + max-width: $asset-info-width; + width: 100%; + padding: $thin-padding; + height: fit-content; + + @media (max-width: $break-point-tablet) { + margin: $primary-padding $secondary-padding; + } + + @media (max-width: $break-point-mobile) { + margin: $primary-padding 0; + } +} .asset-display { - display: flex; - min-height: 50vh + height: fit-content; + width: fit-content; } .asset-title { padding-bottom: $thin-padding; text-align: center; - - @media (min-width: $break-point-mobile) { - padding-top: $secondary-padding; - } } .asset-image, .asset-video { - max-height: 100%; - max-width: 100%; - margin-left: auto; - margin-right: auto; + max-height: 95vh; + max-width: 95vw; object-fit: contain; object-position: center; } @@ -110,7 +118,7 @@ $asset-info-width: 1000px; max-width: $asset-info-width; margin: $primary-padding; - max-width: 100%; + width: 100%; @media (max-width: $break-point-tablet) { margin: $primary-padding $secondary-padding; @@ -122,7 +130,7 @@ } .asset-footer { - border-top: 1px solid $grey-border; + border-top: $subtle-border; padding-top: $primary-padding; margin-top: $primary-padding; color: $grey; diff --git a/client/scss/_asset-preview.scss b/client/scss/_asset-preview.scss index 02a02ae5..0c5742b2 100644 --- a/client/scss/_asset-preview.scss +++ b/client/scss/_asset-preview.scss @@ -1,28 +1,48 @@ .asset-preview { position: relative; + background: $card-color; + padding: $thin-padding; + color: $text-color; + width: 240px; + border: $subtle-border; + height: 280px; + &:hover { + border: 1px solid $highlight-border-color; + color: #000000; + } +} + +.asset-preview__label { + display: flex; + flex-direction: column; + justify-content: space-between; + height: 7.3em; +} + +.asset-preview__label-text { + height: 4.5em; + overflow: hidden; + text-overflow: ellipsis; + box-sizing: border-box; } .asset-preview__blocked { box-sizing: border-box; background: black; color: white; - height: 80%; - padding: 5px; - //remove margin-bottom after mystery 5px on wrapper is gone. - margin-bottom: 5px; + height: 64%; + padding: $thin-padding; + margin-bottom: $thin-padding; } .asset-preview__image { - width : 100%; + width : 240px; + height : 180px; + overflow: hidden; + object-fit: cover; padding: 0; margin : 0; -} - -.asset-preview__video { - cursor: pointer; - background-color: #ffffff; - width: 100%; - position: relative; + box-sizing: border-box; } h3.asset-preview__title { @@ -30,34 +50,6 @@ h3.asset-preview__title { text-overflow: ellipsis; word-wrap: break-word; overflow: hidden; - line-height: 1em; - max-height: 2em; -} - -.asset-preview__play-wrapper { - border: 0px; - padding: 0px; - margin: auto; - position: relative; -} - -.asset-preview__play-overlay { - padding: 0; - border: 0; - position: absolute; - opacity: 0.80; - height: 25%; - top: 37.5%; - left: 0; - right: 0; - bottom: 0; - z-index: 1000; - margin: 0 auto; - background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E %3Cg stroke='black' stroke-width='2' fill='black' fill-rule='evenodd' stroke-linejoin='round'%3E %3Ccircle cx='30' cy='30' r='28'/%3E%3C/g%3E %3Cg stroke='white' stroke-width='1' fill='white' fill-rule='evenodd' stroke-linejoin='round'%3E %3Cpolygon points='25 19 42 30 25 41'/%3E %3C/g%3E %3C/svg%3E"); - background-repeat: no-repeat; - background-position: center; -} - -.asset-preview__play-wrapper:hover .asset-preview__play-overlay { - opacity: 0.2; + max-height: 4em; + font-size: $text-large; } diff --git a/client/scss/_channel-claims-display.scss b/client/scss/_channel-claims-display.scss index e605dde8..3ca6baba 100644 --- a/client/scss/_channel-claims-display.scss +++ b/client/scss/_channel-claims-display.scss @@ -1,23 +1,24 @@ .channel-claims-display { width: 100%; display: grid; - grid-gap: 16px; -} - -@media (min-width: 1040px) { - .channel-claims-display { - grid-template-columns: 1fr 1fr 1fr 1fr; + grid-gap: $thin-padding; + align-content: space-around; + @media (min-width: $break-point-x-large) { + grid-template-columns: 1fr 1fr 1fr 1fr 1fr; + } + @media (min-width: $break-point-large) and (max-width: $break-point-x-large){ + grid-template-columns: 1fr 1fr 1fr 1fr; } -} -@media (min-width: 768px) and (max-width: 1039px) { - .channel-claims-display { + @media (min-width: $break-point-tablet) and (max-width: $break-point-large) { + grid-template-columns: 1fr 1fr 1fr; + } + + @media (min-width: $break-point-mobile) and (max-width: $break-point-tablet) { grid-template-columns: 1fr 1fr; } -} -@media (max-width: 767px) { - .channel-claims-display { + @media (max-width: $break-point-mobile) { grid-template-columns: 1fr; } } diff --git a/client/scss/_click-to-copy.scss b/client/scss/_click-to-copy.scss index e279677a..c46b84a4 100644 --- a/client/scss/_click-to-copy.scss +++ b/client/scss/_click-to-copy.scss @@ -4,7 +4,7 @@ justify-content: space-between; align-items: center; cursor: pointer; - border: 1px solid $grey-border; + border: 1px solid $subtle-border-color; border-radius: 6px; .click-to-copy { border: none; @@ -17,7 +17,7 @@ line-height: 20px; letter-spacing: 0; font-family: monospace; - border-right: 1px solid $grey-border; + border-right: 1px solid $subtle-border-color; } .icon-wrap { width: 30px; diff --git a/client/scss/_dropzone.scss b/client/scss/_dropzone.scss index a3934edd..2ca5cb48 100644 --- a/client/scss/_dropzone.scss +++ b/client/scss/_dropzone.scss @@ -5,15 +5,18 @@ display: flex; flex-direction: column; position: relative; + width: 100%; + box-sizing: border-box; + padding: 0px; } .dropzone { - border: 2px dashed #9b9b9b; + border: 2px dashed $drop-zone-border-color; // fill the parent flex container flex: 1 0 auto; // be a flex container for children display: flex; - padding: 1em; + padding: $thin-padding; -webkit-flex-direction: column; flex-direction: column; justify-content: center; @@ -22,7 +25,7 @@ } .dropzone:hover, .dropzone--active { - border: 2px dashed #4156C5; + border: 2px dashed $drop-zone-border-hover; cursor: pointer; } diff --git a/client/scss/_horizontal-split.scss b/client/scss/_horizontal-split.scss index 0cf4fc87..27e2c915 100644 --- a/client/scss/_horizontal-split.scss +++ b/client/scss/_horizontal-split.scss @@ -1,55 +1,55 @@ .horizontal-split { max-width: $width-content-constrained; width: 100%; - margin-left: auto; - margin-right: auto; display : flex; flex-direction : row; - justify-content: space-between; + justify-content: center; + box-sizing: border-box; &.horizontal-split--mobile-collapse { - @media (max-width: $break-point-mobile) { + @media (max-width: $break-point-tablet) { flex-direction: column; - .horizontal-split__column { - width: 100%; } - + .horizontal-split__column--left { + padding-top: $thin-padding; + } .horizontal-split__column--right { - padding-left: 0; - padding-top: $secondary-padding; + padding-top: $thin-padding; } } } }; .horizontal-split__column { - width: 50%; - flex: 1 0 auto; + display : flex; + flex: 1 1 auto; box-sizing: border-box; + width: 100%; } .horizontal-split__column--left { - padding-right: $primary-padding; + padding: $tertiary-padding; - @media (max-width: $break-point-mobile) { - padding-right: $thin-padding; + @media (max-width: $break-point-tablet) { + padding-left: 0px; + padding-right: 0px; } } .horizontal-split__column--right { - padding-left: $primary-padding; - @media (max-width: $break-point-mobile) { - padding-left: $thin-padding; + padding: $tertiary-padding; + + @media (max-width: $break-point-tablet) { + padding-left: 0px; + padding-right: 0px; } } @media (max-width: $break-point-tablet) { .horizontal-split__column { - display : flex; - flex-direction : column; justify-content: space-between; }; diff --git a/client/scss/_markdown.scss b/client/scss/_markdown.scss new file mode 100644 index 00000000..05b10c3c --- /dev/null +++ b/client/scss/_markdown.scss @@ -0,0 +1,115 @@ +.markdown-preview { + // Headers + h1, + h2, + h3, + h4, + h5, + h6 { + font-size: inherit; + font-weight: 600; + margin-bottom: var(--spacing-vertical-medium); + padding-top: var(--spacing-vertical-medium); + } + + // Paragraphs + p { + font-size: 1.15rem; + margin-bottom: var(--spacing-vertical-medium); + white-space: pre-line; + + svg { + width: 1rem; + height: 1rem; + + margin-left: 0.2rem; + position: relative; + top: 1px; + } + } + + // Strikethrough text + del { + } + + // Tables + table { + margin-bottom: 1.2rem; + padding: var(--spacing-vertical-medium); + background-color: $base-color; + + tr { + td, + th, + td:first-of-type, + th:first-of-type, + td:last-of-type, + th:last-of-type { + padding: var(--spacing-vertical-medium); + } + } + } + + // Image + img { + margin-bottom: var(--spacing-vertical-medium); + padding-top: var(--spacing-vertical-medium); + } + + // Horizontal Rule + hr { + width: 100%; + height: 1px; + + background-color: $base-color; + margin-bottom: 2rem; + position: relative; + top: 1rem; + + html[data-theme='dark'] & { + background-color: rgba($base-color, 0.2); + } + } + + // Code + pre { + white-space: normal; + } + + code { + margin-bottom: var(--spacing-vertical-medium); + padding: var(--spacing-vertical-medium); + + background-color: $subtle-border-color; + color: $text-color; + display: block; + font-family: Consolas, 'Lucida Console', 'Source Sans', monospace; + } + + a { + color: $primary-color; + display: inline-block; + } + + // Lists + ul, + ol { + margin-bottom: var(--spacing-vertical-medium); + + > li { + list-style-position: outside; + } + } + + ul { + list-style: initial; + } + + li { + margin-left: var(--spacing-vertical-large); + + p { + display: inline-block; + } + } +} diff --git a/client/scss/_nav-bar.scss b/client/scss/_nav-bar.scss index 038ebf57..18e2adbf 100644 --- a/client/scss/_nav-bar.scss +++ b/client/scss/_nav-bar.scss @@ -1,7 +1,10 @@ .nav-bar { - margin-top: $thin-padding; - margin-left: $primary-padding; - margin-right: $primary-padding; + box-sizing: border-box; + padding: $thin-padding $primary-padding; + background: $base-color; + flex: 0 1 auto; + width: 100%; + border-bottom: $subtle-border; @media (max-width: $break-point-mobile) { margin-left: 15px; diff --git a/client/scss/_page-layout.scss b/client/scss/_page-layout.scss index e3092a65..3db5c5bc 100644 --- a/client/scss/_page-layout.scss +++ b/client/scss/_page-layout.scss @@ -2,26 +2,24 @@ flex: 1 0 auto; display: flex; flex-direction: column; + align-items: center; + max-width: 100%; .content { flex: 1 0 auto; display: flex; -webkit-flex-direction: column; flex-direction: column; - margin: $secondary-padding; + width: 100%; + align-items: center; + box-sizing: border-box; + background: $base-color; + + @media (min-width: $break-point-tablet) { + padding: $primary-padding; + } + + @media (max-width: $break-point-tablet) { + padding: $tertiary-padding; + } } } - -@media (max-width: $break-point-tablet) { - .page-layout .content { margin: $tertiary-padding; } -} - -@media (max-width: $break-point-mobile) { - max-width: calc(100% - 30px); -} - -//below should take some styles from _text.scss and probably elsewhere and become "markdown" or "rich" styles -.page-layout { - p { - margin-bottom: $tertiary-padding; - } -} \ No newline at end of file diff --git a/client/scss/_select.scss b/client/scss/_select.scss index e9642528..382adf4c 100644 --- a/client/scss/_select.scss +++ b/client/scss/_select.scss @@ -1,4 +1,6 @@ select { margin: 0; display: inline-block; + background: $base-color; + border: 0; } diff --git a/client/scss/_text.scss b/client/scss/_text.scss index 357099f2..02ce93ac 100644 --- a/client/scss/_text.scss +++ b/client/scss/_text.scss @@ -7,7 +7,11 @@ h1, h2, h3, h4, p { body { color: $text-color; font-family: 'Circular', serif; - font-size: 16px; + font-size: 14px; +} + +body a { + color: $primary-color; } h1 { diff --git a/client/scss/_variables.scss b/client/scss/_variables.scss index a9835c98..603e01b1 100644 --- a/client/scss/_variables.scss +++ b/client/scss/_variables.scss @@ -1,40 +1,60 @@ -$base-color: white; -$primary-color: #005da0; +//backgrounds +$base-color: white; //default white +$card-color: white; //default white +$chrome-color: lightgray; //default white (navbar) +$background-color: $base-color; + +//text colors +$primary-color: #005da0; //link default light blue #005da0 $secondary-color: $primary-color; +$text-color: #333; $success-color: green; $failure-color: red; $grey: #9095A5; -$help-color: $grey; -$grey-border: #DDDFE4; -$shadow-color: rgba(169, 173, 186, 0.2); + +//borders and highlights +$grey: #9095A5; +$help-color: $grey; +$subtle-border-color: #DDD; +$highlight-border-color: #333; +$shadow-color: rgba(169, 173, 186, 0.2); +$subtle-border: 1px dashed $subtle-border-color; +$grey-border: $subtle-border-color; //factor this out for all customers +$drop-zone-border-color: #9b9b9b; //default #9b9b9b +$drop-zone-border-hover: #4156C5; //default #4156C5 + +//padding $primary-padding: 3em; $secondary-padding: 2em; $tertiary-padding: 1em; $thin-padding: 0.3em; $full-width-thin-padding: calc(100% - 0.6em); +$input-padding: 0.3em; $width-content-constrained: 1000px; -$background-color: $base-color; -$text-color: #333; - $button-border-width: 1px; $button-border-strength: solid; $button-full-width: calc(100% - 2px); -$input-padding: 0.3em; $input-full-width: calc(100% - 0.6em); +//text sizes +$base-font-size: 14px; + $text-xx-large: 2.5em; $text-x-large: 2.0em; $text-large: 1.5em; -$text-medium: 1.0em; +$text-medium: 1.2em; $text-small: 0.9em; $text-x-small: 0.8em; +//@media sizes $break-point-xx-large: 1400px; $break-point-x-large: 1290px; -$break-point-large: 1000px; +$break-point-large: 1024px; $break-point-tablet: 800px; -$break-point-mobile: 500px; \ No newline at end of file +$break-point-mobile: 500px; +$break-point-phone: 300px; +$break-point-phone: 300px; diff --git a/client/scss/all.scss b/client/scss/all.scss index 8414492e..63bc8a60 100644 --- a/client/scss/all.scss +++ b/client/scss/all.scss @@ -5,6 +5,7 @@ @import '~scss/_body'; @import '~scss/_react-app'; @import '~scss/_text'; +@import '~scss/_markdown'; @import '~scss/_link'; @import '~scss/_input'; @@ -15,6 +16,7 @@ @import '~scss/_asset-display'; @import '~scss/_asset-preview'; +@import '~scss/_asset-blocked'; @import '~scss/_button'; @import '~scss/_button-primary'; @import '~scss/_button-secondary'; diff --git a/client/src/components/AssetPreview/index.jsx b/client/src/components/AssetPreview/index.jsx index 2d452b36..79060417 100644 --- a/client/src/components/AssetPreview/index.jsx +++ b/client/src/components/AssetPreview/index.jsx @@ -1,12 +1,20 @@ import React from 'react'; import { Link } from 'react-router-dom'; -import createCanonicalLink from '../../../../utils/createCanonicalLink'; +import createCanonicalLink from '@globalutils/createCanonicalLink'; +import * as Icon from 'react-feather'; const AssetPreview = ({ defaultThumbnail, claimData }) => { const {name, fileExt, contentType, thumbnail, title, blocked} = claimData; const showUrl = createCanonicalLink({asset: {...claimData}}); const embedUrl = `${showUrl}.${fileExt}`; - + /* + we'll be assigning media icon based on supported type / mime types + */ + const media = contentType.split('/')[0]; + /* + make sure thumb has the right url + */ + const thumb = media === 'image' ? embedUrl : thumbnail; /* This blocked section shouldn't be necessary after pagination is reworked, though it might be useful for channel_mine situations. @@ -16,45 +24,39 @@ const AssetPreview = ({ defaultThumbnail, claimData }) => { return (
-

Error 451

+

Error 451

This content is blocked for legal reasons.

-

Blocked Content

+
+
+

Blocked Content

+
+
); } else { - switch (contentType) { - case 'image/jpeg': - case 'image/jpg': - case 'image/png': - case 'image/gif': - return ( - - {name} -

{title}

- - ); - case 'video/mp4': - return ( - -
- {name} -
+ return ( + + {name} +
+
+

{title}

+
+
+
+ { media === 'image' && } + { media === 'text' && } + { media === 'video' && contentType === 'video/mp4' && } + { media !== 'image' && media !== 'text' && contentType !== 'video/mp4' && }
-

{title}

- - ); - default: - return null; - } +
+
+ + ); } }; diff --git a/client/src/components/ChannelInfoDisplay/index.jsx b/client/src/components/ChannelInfoDisplay/index.jsx index 033f96c3..7f39c4cc 100644 --- a/client/src/components/ChannelInfoDisplay/index.jsx +++ b/client/src/components/ChannelInfoDisplay/index.jsx @@ -1,5 +1,5 @@ import React from 'react'; - +// TODO: factor out longId OR implement tooltip display const ChannelInfoDisplay = ({name, longId, shortId}) => { return (
diff --git a/client/src/components/FileViewer/index.jsx b/client/src/components/FileViewer/index.jsx new file mode 100644 index 00000000..56f05453 --- /dev/null +++ b/client/src/components/FileViewer/index.jsx @@ -0,0 +1,52 @@ +import React from 'react'; +import ReactMarkdown from 'react-markdown'; + +class FileViewer extends React.Component { + + constructor (props) { + super(props); + /* + Prevent memory leak by closing fetch before unmount + */ + this.abortController = new AbortController(); + this.abortSignal = this.abortController.signal; + this.state = { + fileLoaded: false, + fileText : '', + }; + } + + componentDidMount () { + const {sourceUrl} = this.props; + const signal = this.abortSignal; + fetch(sourceUrl, { signal }) + .then(response => response.text()) + .then((text) => { + this.setState({fileText: text}); + this.setState({fileLoaded: true}); + return true; + }) + .catch(e => { console.log('fetch aborted on unmount ', e) }); + } + + componentWillUnmount () { + this.abortController.abort(); + } + + render () { + return ( +
+ { + this.state.fileLoaded && + + } + { + !this.state.fileLoaded && +

Loading your file...

+ } +
+ ); + } +} + +export default FileViewer; diff --git a/client/src/containers/AssetBlocked/view.jsx b/client/src/containers/AssetBlocked/view.jsx index aa69d5d3..d2f2b14e 100644 --- a/client/src/containers/AssetBlocked/view.jsx +++ b/client/src/containers/AssetBlocked/view.jsx @@ -5,9 +5,9 @@ import HorizontalSplit from '@components/HorizontalSplit'; class BlockedLeft extends React.PureComponent { render () { return ( - - {'451 - +
+ {'451 +
); } } @@ -15,10 +15,10 @@ class BlockedLeft extends React.PureComponent { class BlockedRight extends React.PureComponent { render () { return ( - -

In response to a complaint we received under the US Digital Millennium Copyright Act, we have blocked access to this content.

+
+

In response to a complaint we received under the US Digital Millennium Copyright Act, we have blocked access to this content from our applications.

Click here for more information.

- +
); } } diff --git a/client/src/containers/AssetDisplay/view.jsx b/client/src/containers/AssetDisplay/view.jsx index 19309351..29c320ee 100644 --- a/client/src/containers/AssetDisplay/view.jsx +++ b/client/src/containers/AssetDisplay/view.jsx @@ -3,6 +3,7 @@ import Row from '@components/Row'; import ProgressBar from '@components/ProgressBar'; import { LOCAL_CHECK, UNAVAILABLE, ERROR, AVAILABLE } from '../../constants/asset_display_states'; import createCanonicalLink from '@globalutils/createCanonicalLink'; +import FileViewer from '@components/FileViewer'; class AvailableContent extends React.Component { render () { @@ -12,6 +13,7 @@ class AvailableContent extends React.Component { case 'image/jpg': case 'image/png': case 'image/gif': + case 'image/svg+xml': return ( Your browser does not support the video element.

); + case 'text/markdown': + + return ( +
+ ); default: return ( -

Unsupported content type

+ {name} ); } } diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index 7adaf446..0f3a6187 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -5,11 +5,11 @@ import RowLabeled from '@components/RowLabeled'; import SpaceBetween from '@components/SpaceBetween'; import AssetShareButtons from '@components/AssetShareButtons'; import ClickToCopy from '@components/ClickToCopy'; -import HorizontalSplit from '@components/HorizontalSplit'; import siteConfig from '@config/siteConfig.json'; import createCanonicalLink from '@globalutils/createCanonicalLink'; import AssetInfoFooter from '../../components/AssetInfoFooter/index'; import { createPermanentURI } from '@clientutils/createPermanentURI'; +import ReactMarkdown from 'react-markdown'; const { details: { host } } = siteConfig; @@ -21,6 +21,8 @@ class AssetInfo extends React.Component { const canonicalUrl = createCanonicalLink({ asset: { ...claimData, shortId: asset.shortId }}); const assetCanonicalUrl = `${host}${canonicalUrl}`; + // Todo Issue #882 centralize all this media type detection + const embedable = contentType.split('/')[0] === 'image' || contentType === 'video/mp4'; let channelCanonicalUrl; if (channelName) { @@ -32,133 +34,130 @@ class AssetInfo extends React.Component { } return (
- {description}

- ) + { description && ( + } + content={
} + /> + )} + {editable && ( + } + content={{name}} + /> + )} + {channelName && ( + + + } + content={ + + {channelName} + + } + /> + )} + {claimViews ? ( + + } + content={ + + {claimViews} + + } + /> + ) : null} + + } - rightSide={ -
- {editable && ( - } - content={{name}} - /> - )} - {channelName && ( - - } - content={ - - {channelName} - - } - /> - )} - {claimViews ? ( - - } - content={ - - {claimViews} - - } - /> - ) : null} + content={ + + } + /> - - } - content={ - - } - /> - - - } - content={ + + } + content={ + + } + /> + {embedable && ( + + } + content={ +
+ {(contentType === 'video/mp4') ? ( `} /> - } - /> - - - } - content={ -
- {(contentType === 'video/mp4') ? ( - `} - /> - ) : ( - `} - /> - )} -
- } - /> - - - } - content={ + ) : ( `} /> - } - /> + )} +
+ } + /> + )} + + } + content={ + + } + /> - - - Direct Link - - - Download - - - LBRY URL - - - Report - - -
- } /> + + + Direct Link + + + Download + + + LBRY URL + + + Report + +
); diff --git a/client/src/containers/AssetTitle/view.jsx b/client/src/containers/AssetTitle/view.jsx index eaf3d6d4..7b05b388 100644 --- a/client/src/containers/AssetTitle/view.jsx +++ b/client/src/containers/AssetTitle/view.jsx @@ -2,7 +2,7 @@ import React from 'react'; const AssetTitle = ({ title }) => { return ( -

{title}

+

{title}

); }; diff --git a/client/src/pages/FaqPage/index.jsx b/client/src/pages/FaqPage/index.jsx index df60306e..a5360257 100644 --- a/client/src/pages/FaqPage/index.jsx +++ b/client/src/pages/FaqPage/index.jsx @@ -10,34 +10,36 @@ class FaqPage extends React.Component { pageUri={'tos'} > -

Frequently Asked Questions

-
- -

What is spee.ch?

-

Spee.ch is a media-hosting site that reads from and publishes content to the LBRY blockchain.

-
- -

OK But Why Should I Care?

-

Spee.ch is a fast and easy way to host your images, videos, and other content. What makes this different from other similar sites is that Spee.ch is hosted on the LBRY blockchain. That means it is impossible for your content to be censored via digital means. Even if we took down Spee.ch today, all content would remain immutably stored on the LBRY blockchain.

-

Blockchain technology doesn’t solve the 5 dollar wrench attack, but it solves just about every other problem in media hosting and distribution.

-

Even better - you can host your own clone of Spee.ch to get even more control over your content. CLICK HERE FOR INFO.

-

Spee.ch is just the beginning of what will soon be a vibrant ecosystem of LBRY-powered apps. Use LBRY and you’re one step closer to true freedom.

-
- -

How to Use spee.ch

-

It’s easy. Drag the image or video file of your choice into the center of the spee.ch homepage.

-

Spee.ch is currently best suited for web optimized MP4 video and standard image filetypes (JPEG, PNG, GIF).

-

If you want to refer to a piece of content repeatedly, or to build a collection of related content, you could create a channel. Channels work both for private collections and for public repositories. There’s more info about how to do this on the channel page.

-

Published files will be wiewable and embeddable with any web browser and accesible in the LBRY app. You can also use spee.ch to view free and non-NSFW content published on LBRY network from LBRY app. You just need to replace "lbry://" with "http://spee.ch/" in the URL.

-
- -

How Long Does Content Stay on Spee.ch?

-

All content uploaded on spee.ch is guaranteed to stay up for at least 10 years with no maintenance. Future updates will likely extend that time horizon further as blockchain technology improves.

-
- -

Contribute

-

If you have an idea for your own spee.ch-like site on top of LBRY, fork our github repo and go to town!

-

If you want to improve spee.ch, join our discord channel or solve one of our github issues.

+ +

Frequently Asked Questions

+
+ +

What is spee.ch?

+

Spee.ch is a media-hosting site that reads from and publishes content to the LBRY blockchain.

+
+ +

OK But Why Should I Care?

+

Spee.ch is a fast and easy way to host your images, videos, and other content. What makes this different from other similar sites is that Spee.ch is hosted on the LBRY blockchain. That means it is impossible for your content to be censored via digital means. Even if we took down Spee.ch today, all content would remain immutably stored on the LBRY blockchain.

+

Blockchain technology doesn’t solve the 5 dollar wrench attack, but it solves just about every other problem in media hosting and distribution.

+

Even better - you can host your own clone of Spee.ch to get even more control over your content. CLICK HERE FOR INFO.

+

Spee.ch is just the beginning of what will soon be a vibrant ecosystem of LBRY-powered apps. Use LBRY and you’re one step closer to true freedom.

+
+ +

How to Use spee.ch

+

It’s easy. Drag the image or video file of your choice into the center of the spee.ch homepage.

+

Spee.ch is currently best suited for web optimized MP4 video and standard image filetypes (JPEG, PNG, GIF).

+

If you want to refer to a piece of content repeatedly, or to build a collection of related content, you could create a channel. Channels work both for private collections and for public repositories. There’s more info about how to do this on the channel page.

+

Published files will be wiewable and embeddable with any web browser and accesible in the LBRY app. You can also use spee.ch to view free and non-NSFW content published on LBRY network from LBRY app. You just need to replace "lbry://" with "http://spee.ch/" in the URL.

+
+ +

How Long Does Content Stay on Spee.ch?

+

All content uploaded on spee.ch is guaranteed to stay up for at least 10 years with no maintenance. Future updates will likely extend that time horizon further as blockchain technology improves.

+
+ +

Contribute

+

If you have an idea for your own spee.ch-like site on top of LBRY, fork our github repo and go to town!

+

If you want to improve spee.ch, join our discord channel or solve one of our github issues.

+
); diff --git a/client/src/pages/ShowAssetDetails/view.jsx b/client/src/pages/ShowAssetDetails/view.jsx index 71051454..d2a532e4 100644 --- a/client/src/pages/ShowAssetDetails/view.jsx +++ b/client/src/pages/ShowAssetDetails/view.jsx @@ -38,13 +38,16 @@ class ShowAssetDetails extends React.Component { asset={asset} >
- - + +
+ +
{!this.state.closed && } + ); } else { diff --git a/client/src/pages/TosPage/index.jsx b/client/src/pages/TosPage/index.jsx index b8e812a2..fea80880 100644 --- a/client/src/pages/TosPage/index.jsx +++ b/client/src/pages/TosPage/index.jsx @@ -10,54 +10,56 @@ class TosPage extends React.Component { pageUri={'tos'} > -

Terms of Service

-

Last updated: September 25, 2018

-

Please read these Terms of Service ("Terms", "Terms of Service") carefully before using the https://spee.ch website (the "Service") operated by LBRY INC ("us", "we", or "our").

-

Your access to and use of the Service is conditioned upon your acceptance of and compliance with these Terms. These Terms apply to all visitors, users and others who wish to access or use the Service.

-

By accessing or using the Service you agree to be bound by these Terms. If you disagree with any part of the terms then you do not have permission to access the Service.

-
- -

Links To Other Web Sites

-

Our Service may contain links to third party web sites or services that are not owned or controlled by LBRY INC

-

LBRY INC has no control over, and assumes no responsibility for the content, privacy policies, or practices of any third party web sites or services. We do not warrant the offerings of any of these entities/individuals or their websites.

-

You acknowledge and agree that LBRY INC shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such third party web sites or services.

-

We strongly advise you to read the terms and conditions and privacy policies of any third party web sites or services that you visit.

-
- -

Termination

-

We may terminate or suspend your access to the Service immediately, without prior notice or liability, under our sole discretion, for any reason whatsoever and without limitation, including but not limited to a breach of the Terms.

-

All provisions of the Terms which by their nature should survive termination shall survive termination, including, without limitation, ownership provisions, warranty disclaimers, indemnity and limitations of liability.

-
- -

Indemnification

-

You agree to defend, indemnify and hold harmless LBRY INC and its licensee and licensors, and their employees, contractors, agents, officers and directors, from and against any and all claims, damages, obligations, losses, liabilities, costs or debt, and expenses (including but not limited to attorney's fees), resulting from or arising out of a) your use and access of the Service, or b) a breach of these Terms.

-
- -

Limitation Of Liability

-

In no event shall LBRY INC, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from (i) your access to or use of or inability to access or use the Service; (ii) any conduct or content of any third party on the Service; (iii) any content obtained from the Service; and (iv) unauthorized access, use or alteration of your transmissions or content, whether based on warranty, contract, tort (including negligence) or any other legal theory, whether or not we have been informed of the possibility of such damage, and even if a remedy set forth herein is found to have failed of its essential purpose.

-
- -

Disclaimer

-

Your use of the Service is at your sole risk. The Service is provided on an "AS IS" and "AS AVAILABLE" basis. The Service is provided without warranties of any kind, whether express or implied, including, but not limited to, implied warranties of merchantability, fitness for a particular purpose, non-infringement or course of performance.

-

LBRY INC its subsidiaries, affiliates, and its licensors do not warrant that a) the Service will function uninterrupted, secure or available at any particular time or location; b) any errors or defects will be corrected; c) the Service is free of viruses or other harmful components; or d) the results of using the Service will meet your requirements.

-
- -

Exclusions

-

Some jurisdictions do not allow the exclusion of certain warranties or the exclusion or limitation of liability for consequential or incidental damages, so the limitations above may not apply to you.

-
- -

Governing Law

-

These Terms shall be governed and construed in accordance with the laws of Delaware, United States, without regard to its conflict of law provisions.

-

Our failure to enforce any right or provision of these Terms will not be considered a waiver of those rights. If any provision of these Terms is held to be invalid or unenforceable by a court, the remaining provisions of these Terms will remain in effect. These Terms constitute the entire agreement between us regarding our Service, and supersede and replace any prior agreements we might have had between us regarding the Service.

-
- -

Changes

-

We reserve the right, at our sole discretion, to modify or replace these Terms at any time. If a revision is material we will provide at least 30 days notice prior to any new terms taking effect. What constitutes a material change will be determined at our sole discretion.

-

By continuing to access or use our Service after any revisions become effective, you agree to be bound by the revised terms. If you do not agree to the new terms, you are no longer authorized to use the Service.

-
- -

Contact Us

-

If you have any questions about these Terms, please contact us.

+ +

Terms of Service

+

Last updated: September 25, 2018

+

Please read these Terms of Service ("Terms", "Terms of Service") carefully before using the https://spee.ch website (the "Service") operated by LBRY INC ("us", "we", or "our").

+

Your access to and use of the Service is conditioned upon your acceptance of and compliance with these Terms. These Terms apply to all visitors, users and others who wish to access or use the Service.

+

By accessing or using the Service you agree to be bound by these Terms. If you disagree with any part of the terms then you do not have permission to access the Service.

+
+ +

Links To Other Web Sites

+

Our Service may contain links to third party web sites or services that are not owned or controlled by LBRY INC

+

LBRY INC has no control over, and assumes no responsibility for the content, privacy policies, or practices of any third party web sites or services. We do not warrant the offerings of any of these entities/individuals or their websites.

+

You acknowledge and agree that LBRY INC shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such third party web sites or services.

+

We strongly advise you to read the terms and conditions and privacy policies of any third party web sites or services that you visit.

+
+ +

Termination

+

We may terminate or suspend your access to the Service immediately, without prior notice or liability, under our sole discretion, for any reason whatsoever and without limitation, including but not limited to a breach of the Terms.

+

All provisions of the Terms which by their nature should survive termination shall survive termination, including, without limitation, ownership provisions, warranty disclaimers, indemnity and limitations of liability.

+
+ +

Indemnification

+

You agree to defend, indemnify and hold harmless LBRY INC and its licensee and licensors, and their employees, contractors, agents, officers and directors, from and against any and all claims, damages, obligations, losses, liabilities, costs or debt, and expenses (including but not limited to attorney's fees), resulting from or arising out of a) your use and access of the Service, or b) a breach of these Terms.

+
+ +

Limitation Of Liability

+

In no event shall LBRY INC, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from (i) your access to or use of or inability to access or use the Service; (ii) any conduct or content of any third party on the Service; (iii) any content obtained from the Service; and (iv) unauthorized access, use or alteration of your transmissions or content, whether based on warranty, contract, tort (including negligence) or any other legal theory, whether or not we have been informed of the possibility of such damage, and even if a remedy set forth herein is found to have failed of its essential purpose.

+
+ +

Disclaimer

+

Your use of the Service is at your sole risk. The Service is provided on an "AS IS" and "AS AVAILABLE" basis. The Service is provided without warranties of any kind, whether express or implied, including, but not limited to, implied warranties of merchantability, fitness for a particular purpose, non-infringement or course of performance.

+

LBRY INC its subsidiaries, affiliates, and its licensors do not warrant that a) the Service will function uninterrupted, secure or available at any particular time or location; b) any errors or defects will be corrected; c) the Service is free of viruses or other harmful components; or d) the results of using the Service will meet your requirements.

+
+ +

Exclusions

+

Some jurisdictions do not allow the exclusion of certain warranties or the exclusion or limitation of liability for consequential or incidental damages, so the limitations above may not apply to you.

+
+ +

Governing Law

+

These Terms shall be governed and construed in accordance with the laws of Delaware, United States, without regard to its conflict of law provisions.

+

Our failure to enforce any right or provision of these Terms will not be considered a waiver of those rights. If any provision of these Terms is held to be invalid or unenforceable by a court, the remaining provisions of these Terms will remain in effect. These Terms constitute the entire agreement between us regarding our Service, and supersede and replace any prior agreements we might have had between us regarding the Service.

+
+ +

Changes

+

We reserve the right, at our sole discretion, to modify or replace these Terms at any time. If a revision is material we will provide at least 30 days notice prior to any new terms taking effect. What constitutes a material change will be determined at our sole discretion.

+

By continuing to access or use our Service after any revisions become effective, you agree to be bound by the revised terms. If you do not agree to the new terms, you are no longer authorized to use the Service.

+
+ +

Contact Us

+

If you have any questions about these Terms, please contact us.

+
); diff --git a/client/src/utils/createAssetMetaTags.js b/client/src/utils/createAssetMetaTags.js index 6b03f353..587cd641 100644 --- a/client/src/utils/createAssetMetaTags.js +++ b/client/src/utils/createAssetMetaTags.js @@ -4,41 +4,41 @@ import createMetaTagsArray from './createMetaTagsArray'; import createCanonicalLink from '@globalutils/createCanonicalLink'; const { - details: { - host, - title: siteTitle, - twitter, - }, - assetDefaults: { - description: defaultDescription, - thumbnail: defaultThumbnail, - }, + details: { host, title: siteTitle, twitter }, + assetDefaults: { description: defaultDescription, thumbnail: defaultThumbnail }, } = siteConfig; const VIDEO = 'VIDEO'; const IMAGE = 'IMAGE'; const GIF = 'GIF'; +const TEXT = 'TEXT'; -const determineMediaType = (contentType) => { +const determineMediaType = contentType => { switch (contentType) { case 'image/jpg': case 'image/jpeg': case 'image/png': + case 'image/svg+xml': return IMAGE; case 'image/gif': return GIF; case 'video/mp4': case 'video/webm': return VIDEO; + case 'text/markdown': + case 'text/plain': + return TEXT; default: return ''; } }; -const createAssetMetaTags = (asset) => { +const createAssetMetaTags = asset => { const { claimData } = asset; const { contentType } = claimData; - const canonicalLink = createCanonicalLink({ asset: { ...asset.claimData, shortId: asset.shortId }}); + const canonicalLink = createCanonicalLink({ + asset: { ...asset.claimData, shortId: asset.shortId }, + }); const showUrl = `${host}${canonicalLink}`; const serveUrl = `${showUrl}.${claimData.fileExt}`; @@ -48,14 +48,14 @@ const createAssetMetaTags = (asset) => { const ogThumbnail = claimData.thumbnail || defaultThumbnail; // {property: 'og:title'] = ogTitle}, const metaTags = { - 'og:title' : ogTitle, - 'twitter:title' : ogTitle, - 'og:description' : ogDescription, + 'og:title': ogTitle, + 'twitter:title': ogTitle, + 'og:description': ogDescription, 'twitter:description': ogDescription, - 'og:url' : showUrl, - 'og:site_name' : siteTitle, - 'twitter:site' : twitter, - 'fb:app_id' : '1371961932852223', + 'og:url': showUrl, + 'og:site_name': siteTitle, + 'twitter:site': twitter, + 'fb:app_id': '1371961932852223', }; if (determineMediaType(contentType) === VIDEO) { const videoEmbedUrl = `${host}/video-embed${canonicalLink}`; diff --git a/client/src/utils/determineContentTypeFromExtension.js b/client/src/utils/determineContentTypeFromExtension.js index aa18f476..779641c4 100644 --- a/client/src/utils/determineContentTypeFromExtension.js +++ b/client/src/utils/determineContentTypeFromExtension.js @@ -1,4 +1,4 @@ -const determineContentTypeFromExtension = (thumbnail) => { +const determineContentTypeFromExtension = thumbnail => { if (thumbnail) { const fileExt = thumbnail.substring(thumbnail.lastIndexOf('.')); switch (fileExt) { @@ -11,6 +11,11 @@ const determineContentTypeFromExtension = (thumbnail) => { return 'image/gif'; case 'mp4': return 'video/mp4'; + case 'svg': + return 'image/svg+xml'; + case 'md': + case 'markdown': + return 'text/markdown'; default: return ''; } diff --git a/client/src/utils/file.js b/client/src/utils/file.js index 4652eb32..811fd346 100644 --- a/client/src/utils/file.js +++ b/client/src/utils/file.js @@ -18,6 +18,7 @@ export function validateFile(file) { case 'image/jpeg': case 'image/jpg': case 'image/png': + case 'image/svg+xml': if (file.size > maxSizeImage) { throw new Error(`Sorry, images are limited to ${maxSizeImage / SIZE_MB} megabytes.`); } diff --git a/package-lock.json b/package-lock.json index f80a46cc..7fbffe40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2075,6 +2075,11 @@ } } }, + "bail": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", + "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==" + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -2605,7 +2610,7 @@ }, "bl": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz", "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { @@ -3122,6 +3127,21 @@ "supports-color": "^5.3.0" } }, + "character-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", + "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==" + }, + "character-entities-legacy": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", + "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==" + }, + "character-reference-invalid": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", + "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==" + }, "chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", @@ -3374,6 +3394,11 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, + "collapse-white-space": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", + "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==" + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -3952,7 +3977,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true, "optional": true @@ -4019,14 +4044,14 @@ "dependencies": { "file-type": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "resolved": "http://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", "dev": true, "optional": true }, "get-stream": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", "dev": true, "optional": true, @@ -4037,7 +4062,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true, "optional": true @@ -4231,6 +4256,22 @@ "@babel/runtime": "^7.1.2" } }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "requires": { + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" + } + } + }, "dom-walk": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", @@ -4243,6 +4284,28 @@ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, "dont-sniff-mimetype": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz", @@ -4377,6 +4440,11 @@ "tapable": "^1.0.0" } }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -4446,7 +4514,7 @@ }, "es6-promisify": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { @@ -5620,12 +5688,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5640,17 +5710,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -5767,7 +5840,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5779,6 +5853,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5793,6 +5868,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5800,12 +5876,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5824,6 +5902,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -5904,7 +5983,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -5916,6 +5996,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -6037,6 +6118,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6682,6 +6764,43 @@ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", "dev": true }, + "html-to-react": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/html-to-react/-/html-to-react-1.3.4.tgz", + "integrity": "sha512-/tWDdb/8Koi/QEP5YUY1653PcDpBnnMblXRhotnTuhFDjI1Fc6Wzox5d4sw73Xk5rM2OdM5np4AYjT/US/Wj7Q==", + "requires": { + "domhandler": "^2.4.2", + "escape-string-regexp": "^1.0.5", + "htmlparser2": "^3.10.0", + "lodash.camelcase": "^4.3.0", + "ramda": "^0.26" + } + }, + "htmlparser2": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz", + "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==", + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", + "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "http-errors": { "version": "1.6.3", "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -7141,6 +7260,20 @@ "kind-of": "^3.0.2" } }, + "is-alphabetical": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", + "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==" + }, + "is-alphanumerical": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", + "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -7203,6 +7336,11 @@ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, + "is-decimal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", + "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==" + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -7262,6 +7400,11 @@ "is-extglob": "^2.1.1" } }, + "is-hexadecimal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", + "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==" + }, "is-installed-globally": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", @@ -7353,8 +7496,7 @@ "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" }, "is-plain-object": { "version": "2.0.4", @@ -7430,12 +7572,22 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, + "is-whitespace-character": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz", + "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==" + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, + "is-word-character": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz", + "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==" + }, "is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", @@ -7963,6 +8115,11 @@ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", "dev": true }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -8114,6 +8271,11 @@ "object-visit": "^1.0.0" } }, + "markdown-escapes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz", + "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==" + }, "matcher": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", @@ -8146,6 +8308,14 @@ "safe-buffer": "^5.1.2" } }, + "mdast-add-list-metadata": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-add-list-metadata/-/mdast-add-list-metadata-1.0.1.tgz", + "integrity": "sha512-fB/VP4MJ0LaRsog7hGPxgOrSL3gE/2uEdZyDuSEnKCv/8IkYHiDkIQSbChiJoHyxZZXZ9bzckyRk+vNxFzh8rA==", + "requires": { + "unist-util-visit-parents": "1.1.2" + } + }, "media-typer": { "version": "0.3.0", "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -9150,7 +9320,7 @@ "dependencies": { "JSONStream": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.4.tgz", + "resolved": false, "integrity": "sha512-Y7vfi3I5oMOYIr+WxV8NZxDSwcbNgzdKYsTNInmycOq9bUYwGg9ryu57Wg5NLmCjqdFPNUmpMBo3kSJN9tCbXg==", "requires": { "jsonparse": "^1.2.0", @@ -9159,12 +9329,12 @@ }, "abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "resolved": false, "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "agent-base": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", + "resolved": false, "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", "requires": { "es6-promisify": "^5.0.0" @@ -9172,7 +9342,7 @@ }, "agentkeepalive": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.4.1.tgz", + "resolved": false, "integrity": "sha512-MPIwsZU9PP9kOrZpyu2042kYA8Fdt/AedQYkYXucHgF9QoD9dXVp0ypuGnHXSR0hTstBxdt85Xkh4JolYfK5wg==", "requires": { "humanize-ms": "^1.2.1" @@ -9180,7 +9350,7 @@ }, "ajv": { "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "resolved": false, "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { "co": "^4.6.0", @@ -9191,7 +9361,7 @@ }, "ansi-align": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "resolved": false, "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "requires": { "string-width": "^2.0.0" @@ -9199,12 +9369,12 @@ }, "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "resolved": false, "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "resolved": false, "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "^1.9.0" @@ -9212,27 +9382,27 @@ }, "ansicolors": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "resolved": false, "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" }, "ansistyles": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz", + "resolved": false, "integrity": "sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=" }, "aproba": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "resolved": false, "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "archy": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "resolved": false, "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" }, "are-we-there-yet": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "resolved": false, "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "requires": { "delegates": "^1.0.0", @@ -9241,12 +9411,12 @@ }, "asap": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "resolved": false, "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, "asn1": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "resolved": false, "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "requires": { "safer-buffer": "~2.1.0" @@ -9254,32 +9424,32 @@ }, "assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "resolved": false, "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "resolved": false, "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "aws-sign2": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "resolved": false, "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "resolved": false, "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "balanced-match": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "resolved": false, "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "bcrypt-pbkdf": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "resolved": false, "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "optional": true, "requires": { @@ -9288,7 +9458,7 @@ }, "bin-links": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-1.1.2.tgz", + "resolved": false, "integrity": "sha512-8eEHVgYP03nILphilltWjeIjMbKyJo3wvp9K816pHbhP301ismzw15mxAAEVQ/USUwcP++1uNrbERbp8lOA6Fg==", "requires": { "bluebird": "^3.5.0", @@ -9300,7 +9470,7 @@ }, "block-stream": { "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "resolved": false, "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "requires": { "inherits": "~2.0.0" @@ -9308,12 +9478,12 @@ }, "bluebird": { "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "resolved": false, "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" }, "boxen": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "resolved": false, "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "requires": { "ansi-align": "^2.0.0", @@ -9327,7 +9497,7 @@ }, "brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "resolved": false, "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "^1.0.0", @@ -9336,32 +9506,32 @@ }, "buffer-from": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "resolved": false, "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==" }, "builtin-modules": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "resolved": false, "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" }, "builtins": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "resolved": false, "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" }, "byline": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "resolved": false, "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=" }, "byte-size": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-4.0.3.tgz", + "resolved": false, "integrity": "sha512-JGC3EV2bCzJH/ENSh3afyJrH4vwxbHTuO5ljLoI5+2iJOcEpMgP8T782jH9b5qGxf2mSUIp1lfGnfKNrRHpvVg==" }, "cacache": { "version": "11.2.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.2.0.tgz", + "resolved": false, "integrity": "sha512-IFWl6lfK6wSeYCHUXh+N1lY72UDrpyrYQJNIVQf48paDuWbv5RbAtJYf/4gUQFObTCHZwdZ5sI8Iw7nqwP6nlQ==", "requires": { "bluebird": "^3.5.1", @@ -9382,27 +9552,27 @@ }, "call-limit": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/call-limit/-/call-limit-1.1.0.tgz", + "resolved": false, "integrity": "sha1-b9YbA/PaQqLNDsK2DwK9DnGZH+o=" }, "camelcase": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "resolved": false, "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, "capture-stack-trace": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "resolved": false, "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" }, "caseless": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "resolved": false, "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "chalk": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "resolved": false, "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { "ansi-styles": "^3.2.1", @@ -9412,17 +9582,17 @@ }, "chownr": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "resolved": false, "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" }, "ci-info": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.4.0.tgz", + "resolved": false, "integrity": "sha512-Oqmw2pVfCl8sCL+1QgMywPfdxPJPkC51y4usw0iiE2S9qnEOAqXy8bwl1CpMpnoU39g4iKJTz6QZj+28FvOnjQ==" }, "cidr-regex": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/cidr-regex/-/cidr-regex-2.0.9.tgz", + "resolved": false, "integrity": "sha512-F7/fBRUU45FnvSPjXdpIrc++WRSBdCiSTlyq4ZNhLKOlHFNWgtzZ0Fd+zrqI/J1j0wmlx/f5ZQDmD2GcbrNcmw==", "requires": { "ip-regex": "^2.1.0" @@ -9430,12 +9600,12 @@ }, "cli-boxes": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "resolved": false, "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" }, "cli-columns": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cli-columns/-/cli-columns-3.1.2.tgz", + "resolved": false, "integrity": "sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4=", "requires": { "string-width": "^2.0.0", @@ -9444,7 +9614,7 @@ }, "cli-table3": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.0.tgz", + "resolved": false, "integrity": "sha512-c7YHpUyO1SaKaO7kYtxd5NZ8FjAmSK3LpKkuzdwn+2CwpFxBpdoQLm+OAnnCfoEl7onKhN9PKQi1lsHuAIUqGQ==", "requires": { "colors": "^1.1.2", @@ -9454,7 +9624,7 @@ }, "cliui": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "resolved": false, "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "requires": { "string-width": "^2.1.1", @@ -9464,12 +9634,12 @@ "dependencies": { "ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "resolved": false, "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "resolved": false, "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { "ansi-regex": "^3.0.0" @@ -9479,12 +9649,12 @@ }, "clone": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "resolved": false, "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" }, "cmd-shim": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz", + "resolved": false, "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=", "requires": { "graceful-fs": "^4.1.2", @@ -9493,17 +9663,17 @@ }, "co": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "resolved": false, "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "code-point-at": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "resolved": false, "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "color-convert": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "resolved": false, "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "requires": { "color-name": "^1.1.1" @@ -9511,18 +9681,18 @@ }, "color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "resolved": false, "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "colors": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "resolved": false, "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "optional": true }, "columnify": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "resolved": false, "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", "requires": { "strip-ansi": "^3.0.0", @@ -9531,7 +9701,7 @@ }, "combined-stream": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "resolved": false, "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { "delayed-stream": "~1.0.0" @@ -9539,12 +9709,12 @@ }, "concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "resolved": false, "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "resolved": false, "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { "buffer-from": "^1.0.0", @@ -9555,7 +9725,7 @@ }, "config-chain": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", + "resolved": false, "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", "requires": { "ini": "^1.3.4", @@ -9564,7 +9734,7 @@ }, "configstore": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "resolved": false, "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", "requires": { "dot-prop": "^4.1.0", @@ -9577,12 +9747,12 @@ }, "console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "resolved": false, "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "copy-concurrently": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "resolved": false, "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "requires": { "aproba": "^1.1.1", @@ -9595,19 +9765,19 @@ "dependencies": { "iferr": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "resolved": false, "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" } } }, "core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "resolved": false, "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "create-error-class": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "resolved": false, "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "requires": { "capture-stack-trace": "^1.0.0" @@ -9615,7 +9785,7 @@ }, "cross-spawn": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "resolved": false, "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "requires": { "lru-cache": "^4.0.1", @@ -9625,17 +9795,17 @@ }, "crypto-random-string": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "resolved": false, "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" }, "cyclist": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "resolved": false, "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" }, "dashdash": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "resolved": false, "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { "assert-plus": "^1.0.0" @@ -9643,7 +9813,7 @@ }, "debug": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "resolved": false, "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { "ms": "2.0.0" @@ -9651,34 +9821,34 @@ "dependencies": { "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "resolved": false, "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "debuglog": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "resolved": false, "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=" }, "decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "resolved": false, "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decode-uri-component": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "resolved": false, "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "deep-extend": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "resolved": false, "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" }, "defaults": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "resolved": false, "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "requires": { "clone": "^1.0.2" @@ -9686,27 +9856,27 @@ }, "delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "resolved": false, "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "resolved": false, "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "detect-indent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "resolved": false, "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=" }, "detect-newline": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "resolved": false, "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=" }, "dezalgo": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "resolved": false, "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", "requires": { "asap": "^2.0.0", @@ -9715,7 +9885,7 @@ }, "dot-prop": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "resolved": false, "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "requires": { "is-obj": "^1.0.0" @@ -9723,17 +9893,17 @@ }, "dotenv": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", + "resolved": false, "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==" }, "duplexer3": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "resolved": false, "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, "duplexify": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "resolved": false, "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", "requires": { "end-of-stream": "^1.0.0", @@ -9744,7 +9914,7 @@ }, "ecc-jsbn": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "resolved": false, "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "optional": true, "requires": { @@ -9754,12 +9924,12 @@ }, "editor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz", + "resolved": false, "integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=" }, "encoding": { "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "resolved": false, "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { "iconv-lite": "~0.4.13" @@ -9767,7 +9937,7 @@ }, "end-of-stream": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "resolved": false, "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "requires": { "once": "^1.4.0" @@ -9775,12 +9945,12 @@ }, "err-code": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "resolved": false, "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=" }, "errno": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "resolved": false, "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "requires": { "prr": "~1.0.1" @@ -9788,12 +9958,12 @@ }, "es6-promise": { "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "resolved": false, "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" }, "es6-promisify": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "resolved": false, "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "requires": { "es6-promise": "^4.0.3" @@ -9801,12 +9971,12 @@ }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "resolved": false, "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "execa": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "resolved": false, "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "requires": { "cross-spawn": "^5.0.1", @@ -9820,37 +9990,37 @@ }, "extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "resolved": false, "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extsprintf": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "resolved": false, "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "resolved": false, "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "fast-json-stable-stringify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "resolved": false, "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "figgy-pudding": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.4.1.tgz", + "resolved": false, "integrity": "sha512-j1SAT641cerGuOvoSBoaE9LbSzh1N/E5ufk9oMpOKuyK8MyW3sGg4rh+4qhLmVTEAzipO5XTHYT4gjb6JYLE8g==" }, "find-npm-prefix": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz", + "resolved": false, "integrity": "sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA==" }, "find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "resolved": false, "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { "locate-path": "^2.0.0" @@ -9858,7 +10028,7 @@ }, "flush-write-stream": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "resolved": false, "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "requires": { "inherits": "^2.0.1", @@ -9867,12 +10037,12 @@ }, "forever-agent": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "resolved": false, "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "resolved": false, "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { "asynckit": "^0.4.0", @@ -9882,7 +10052,7 @@ }, "from2": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "resolved": false, "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "requires": { "inherits": "^2.0.1", @@ -9891,7 +10061,7 @@ }, "fs-minipass": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "resolved": false, "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "requires": { "minipass": "^2.2.1" @@ -9899,7 +10069,7 @@ }, "fs-vacuum": { "version": "1.2.10", - "resolved": "https://registry.npmjs.org/fs-vacuum/-/fs-vacuum-1.2.10.tgz", + "resolved": false, "integrity": "sha1-t2Kb7AekAxolSP35n17PHMizHjY=", "requires": { "graceful-fs": "^4.1.2", @@ -9909,7 +10079,7 @@ }, "fs-write-stream-atomic": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "resolved": false, "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "requires": { "graceful-fs": "^4.1.2", @@ -9920,19 +10090,19 @@ "dependencies": { "iferr": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "resolved": false, "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" } } }, "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "resolved": false, "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fstream": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "resolved": false, "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "requires": { "graceful-fs": "^4.1.2", @@ -9943,7 +10113,7 @@ }, "gauge": { "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "resolved": false, "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "requires": { "aproba": "^1.0.3", @@ -9958,7 +10128,7 @@ "dependencies": { "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "resolved": false, "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { "code-point-at": "^1.0.0", @@ -9970,12 +10140,12 @@ }, "genfun": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/genfun/-/genfun-4.0.1.tgz", + "resolved": false, "integrity": "sha1-7RAEHy5KfxsKOEZtF6XD4n3x38E=" }, "gentle-fs": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/gentle-fs/-/gentle-fs-2.0.1.tgz", + "resolved": false, "integrity": "sha512-cEng5+3fuARewXktTEGbwsktcldA+YsnUEaXZwcK/3pjSE1X9ObnTs+/8rYf8s+RnIcQm2D5x3rwpN7Zom8Bew==", "requires": { "aproba": "^1.1.2", @@ -9990,24 +10160,24 @@ "dependencies": { "iferr": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "resolved": false, "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" } } }, "get-caller-file": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "resolved": false, "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" }, "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": false, "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, "getpass": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "resolved": false, "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { "assert-plus": "^1.0.0" @@ -10015,7 +10185,7 @@ }, "glob": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "resolved": false, "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { "fs.realpath": "^1.0.0", @@ -10028,7 +10198,7 @@ }, "global-dirs": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "resolved": false, "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "requires": { "ini": "^1.3.4" @@ -10036,7 +10206,7 @@ }, "got": { "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "resolved": false, "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "requires": { "create-error-class": "^3.0.0", @@ -10054,12 +10224,12 @@ }, "graceful-fs": { "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "resolved": false, "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, "har-schema": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "resolved": false, "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { @@ -10096,27 +10266,27 @@ }, "has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "resolved": false, "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "resolved": false, "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "hosted-git-info": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "resolved": false, "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" }, "http-cache-semantics": { "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "resolved": false, "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" }, "http-proxy-agent": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "resolved": false, "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", "requires": { "agent-base": "4", @@ -10125,7 +10295,7 @@ }, "http-signature": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "resolved": false, "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { "assert-plus": "^1.0.0", @@ -10135,7 +10305,7 @@ }, "https-proxy-agent": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "resolved": false, "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", "requires": { "agent-base": "^4.1.0", @@ -10144,7 +10314,7 @@ }, "humanize-ms": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "resolved": false, "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", "requires": { "ms": "^2.0.0" @@ -10152,7 +10322,7 @@ }, "iconv-lite": { "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "resolved": false, "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -10160,12 +10330,12 @@ }, "iferr": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-1.0.2.tgz", + "resolved": false, "integrity": "sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg==" }, "ignore-walk": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "resolved": false, "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "requires": { "minimatch": "^3.0.4" @@ -10173,17 +10343,17 @@ }, "import-lazy": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "resolved": false, "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" }, "imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "resolved": false, "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "resolved": false, "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { "once": "^1.3.0", @@ -10192,17 +10362,17 @@ }, "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "resolved": false, "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "resolved": false, "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "init-package-json": { "version": "1.10.3", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.3.tgz", + "resolved": false, "integrity": "sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==", "requires": { "glob": "^7.1.1", @@ -10217,22 +10387,22 @@ }, "invert-kv": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "resolved": false, "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, "ip": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "resolved": false, "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, "ip-regex": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "resolved": false, "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" }, "is-builtin-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": false, "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "requires": { "builtin-modules": "^1.0.0" @@ -10240,7 +10410,7 @@ }, "is-ci": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", + "resolved": false, "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", "requires": { "ci-info": "^1.0.0" @@ -10248,7 +10418,7 @@ }, "is-cidr": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/is-cidr/-/is-cidr-2.0.6.tgz", + "resolved": false, "integrity": "sha512-A578p1dV22TgPXn6NCaDAPj6vJvYsBgAzUrAd28a4oldeXJjWqEUuSZOLIW3im51mazOKsoyVp8NU/OItlWacw==", "requires": { "cidr-regex": "^2.0.8" @@ -10256,7 +10426,7 @@ }, "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "resolved": false, "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { "number-is-nan": "^1.0.0" @@ -10264,7 +10434,7 @@ }, "is-installed-globally": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "resolved": false, "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", "requires": { "global-dirs": "^0.1.0", @@ -10273,17 +10443,17 @@ }, "is-npm": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "resolved": false, "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" }, "is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": false, "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" }, "is-path-inside": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "resolved": false, "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "requires": { "path-is-inside": "^1.0.1" @@ -10291,73 +10461,73 @@ }, "is-redirect": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "resolved": false, "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" }, "is-retry-allowed": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "resolved": false, "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" }, "is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "resolved": false, "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "resolved": false, "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "resolved": false, "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "resolved": false, "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isstream": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "resolved": false, "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "jsbn": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "resolved": false, "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "optional": true }, "json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "resolved": false, "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, "json-schema": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "resolved": false, "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "resolved": false, "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, "json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "resolved": false, "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "resolved": false, "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" }, "jsprim": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "resolved": false, "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "requires": { "assert-plus": "1.0.0", @@ -10368,7 +10538,7 @@ }, "latest-version": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "resolved": false, "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "requires": { "package-json": "^4.0.0" @@ -10376,12 +10546,12 @@ }, "lazy-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazy-property/-/lazy-property-1.0.0.tgz", + "resolved": false, "integrity": "sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=" }, "lcid": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "resolved": false, "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "requires": { "invert-kv": "^1.0.0" @@ -10389,7 +10559,7 @@ }, "libcipm": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/libcipm/-/libcipm-2.0.2.tgz", + "resolved": false, "integrity": "sha512-9uZ6/LAflVEijksTRq/RX0e+pGA4mr8tND9Cmk2JMg7j2fFUBrs8PpFX2DOAJR/XoxPzz+5h8bkWmtIYLunKAg==", "requires": { "bin-links": "^1.1.2", @@ -10410,7 +10580,7 @@ }, "libnpmhook": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/libnpmhook/-/libnpmhook-4.0.1.tgz", + "resolved": false, "integrity": "sha512-3qqpfqvBD1712WA6iGe0stkG40WwAeoWcujA6BlC0Be1JArQbqwabnEnZ0CRcD05Tf1fPYJYdCbSfcfedEJCOg==", "requires": { "figgy-pudding": "^3.1.0", @@ -10419,7 +10589,7 @@ "dependencies": { "npm-registry-fetch": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.1.1.tgz", + "resolved": false, "integrity": "sha512-xBobENeenvjIG8PgQ1dy77AXTI25IbYhmA3DusMIfw/4EL5BaQ5e1V9trkPrqHvyjR3/T0cnH6o0Wt/IzcI5Ag==", "requires": { "bluebird": "^3.5.1", @@ -10433,7 +10603,7 @@ }, "libnpx": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/libnpx/-/libnpx-10.2.0.tgz", + "resolved": false, "integrity": "sha512-X28coei8/XRCt15cYStbLBph+KGhFra4VQhRBPuH/HHMkC5dxM8v24RVgUsvODKCrUZ0eTgiTqJp6zbl0sskQQ==", "requires": { "dotenv": "^5.0.1", @@ -10448,7 +10618,7 @@ }, "locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "resolved": false, "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "requires": { "p-locate": "^2.0.0", @@ -10457,7 +10627,7 @@ }, "lock-verify": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lock-verify/-/lock-verify-2.0.2.tgz", + "resolved": false, "integrity": "sha512-QNVwK0EGZBS4R3YQ7F1Ox8p41Po9VGl2QG/2GsuvTbkJZYSsPeWHKMbbH6iZMCHWSMww5nrJroZYnGzI4cePuw==", "requires": { "npm-package-arg": "^5.1.2 || 6", @@ -10466,7 +10636,7 @@ }, "lockfile": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", + "resolved": false, "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", "requires": { "signal-exit": "^3.0.2" @@ -10474,12 +10644,12 @@ }, "lodash._baseindexof": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz", + "resolved": false, "integrity": "sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=" }, "lodash._baseuniq": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz", + "resolved": false, "integrity": "sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg=", "requires": { "lodash._createset": "~4.0.0", @@ -10488,17 +10658,17 @@ }, "lodash._bindcallback": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "resolved": false, "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=" }, "lodash._cacheindexof": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz", + "resolved": false, "integrity": "sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=" }, "lodash._createcache": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash._createcache/-/lodash._createcache-3.1.2.tgz", + "resolved": false, "integrity": "sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=", "requires": { "lodash._getnative": "^3.0.0" @@ -10506,52 +10676,52 @@ }, "lodash._createset": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/lodash._createset/-/lodash._createset-4.0.3.tgz", + "resolved": false, "integrity": "sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=" }, "lodash._getnative": { "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "resolved": false, "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" }, "lodash._root": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "resolved": false, "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=" }, "lodash.clonedeep": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "resolved": false, "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" }, "lodash.restparam": { "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "resolved": false, "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" }, "lodash.union": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "resolved": false, "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" }, "lodash.uniq": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "resolved": false, "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, "lodash.without": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.without/-/lodash.without-4.4.0.tgz", + "resolved": false, "integrity": "sha1-PNRXSgC2e643OpS3SHcmQFB7eqw=" }, "lowercase-keys": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "resolved": false, "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, "lru-cache": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "resolved": false, "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "requires": { "pseudomap": "^1.0.2", @@ -10560,7 +10730,7 @@ }, "make-dir": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "resolved": false, "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "requires": { "pify": "^3.0.0" @@ -10568,7 +10738,7 @@ }, "make-fetch-happen": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz", + "resolved": false, "integrity": "sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ==", "requires": { "agentkeepalive": "^3.4.1", @@ -10586,12 +10756,12 @@ }, "meant": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/meant/-/meant-1.0.1.tgz", + "resolved": false, "integrity": "sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg==" }, "mem": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "resolved": false, "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "requires": { "mimic-fn": "^1.0.0" @@ -10599,12 +10769,12 @@ }, "mime-db": { "version": "1.35.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "resolved": false, "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" }, "mime-types": { "version": "2.1.19", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "resolved": false, "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "requires": { "mime-db": "~1.35.0" @@ -10612,12 +10782,12 @@ }, "mimic-fn": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "resolved": false, "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "resolved": false, "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "^1.1.7" @@ -10625,12 +10795,12 @@ }, "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": false, "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "minipass": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.3.tgz", + "resolved": false, "integrity": "sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==", "requires": { "safe-buffer": "^5.1.2", @@ -10639,14 +10809,14 @@ "dependencies": { "yallist": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "resolved": false, "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" } } }, "minizlib": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "resolved": false, "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", "requires": { "minipass": "^2.2.1" @@ -10654,7 +10824,7 @@ }, "mississippi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "resolved": false, "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "requires": { "concat-stream": "^1.5.0", @@ -10671,7 +10841,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": false, "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { "minimist": "0.0.8" @@ -10679,7 +10849,7 @@ }, "move-concurrently": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "resolved": false, "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "requires": { "aproba": "^1.1.1", @@ -10692,17 +10862,17 @@ }, "ms": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "resolved": false, "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "mute-stream": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "resolved": false, "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, "node-fetch-npm": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", + "resolved": false, "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", "requires": { "encoding": "^0.1.11", @@ -10712,7 +10882,7 @@ }, "node-gyp": { "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "resolved": false, "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", "requires": { "fstream": "^1.0.0", @@ -10731,7 +10901,7 @@ "dependencies": { "nopt": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "resolved": false, "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "requires": { "abbrev": "1" @@ -10739,12 +10909,12 @@ }, "semver": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "resolved": false, "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" }, "tar": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "resolved": false, "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "requires": { "block-stream": "*", @@ -10756,7 +10926,7 @@ }, "nopt": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "resolved": false, "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "requires": { "abbrev": "1", @@ -10765,7 +10935,7 @@ }, "normalize-package-data": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "resolved": false, "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "requires": { "hosted-git-info": "^2.1.4", @@ -10776,7 +10946,7 @@ }, "npm-audit-report": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-1.3.1.tgz", + "resolved": false, "integrity": "sha512-SjTF8ZP4rOu3JiFrTMi4M1CmVo2tni2sP4TzhyCMHwnMGf6XkdGLZKt9cdZ12esKf0mbQqFyU9LtY0SoeahL7g==", "requires": { "cli-table3": "^0.5.0", @@ -10785,17 +10955,17 @@ }, "npm-bundled": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", + "resolved": false, "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==" }, "npm-cache-filename": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz", + "resolved": false, "integrity": "sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE=" }, "npm-install-checks": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-3.0.0.tgz", + "resolved": false, "integrity": "sha1-1K7N/VGlPjcjt7L5Oy7ijjB7wNc=", "requires": { "semver": "^2.3.0 || 3.x || 4 || 5" @@ -10803,7 +10973,7 @@ }, "npm-lifecycle": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-2.1.0.tgz", + "resolved": false, "integrity": "sha512-QbBfLlGBKsktwBZLj6AviHC6Q9Y3R/AY4a2PYSIRhSKSS0/CxRyD/PfxEX6tPeOCXQgMSNdwGeECacstgptc+g==", "requires": { "byline": "^5.0.0", @@ -10818,12 +10988,12 @@ }, "npm-logical-tree": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz", + "resolved": false, "integrity": "sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg==" }, "npm-package-arg": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", + "resolved": false, "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", "requires": { "hosted-git-info": "^2.6.0", @@ -10834,7 +11004,7 @@ }, "npm-packlist": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.11.tgz", + "resolved": false, "integrity": "sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA==", "requires": { "ignore-walk": "^3.0.1", @@ -10843,7 +11013,7 @@ }, "npm-pick-manifest": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-2.1.0.tgz", + "resolved": false, "integrity": "sha512-q9zLP8cTr8xKPmMZN3naxp1k/NxVFsjxN6uWuO1tiw9gxg7wZWQ/b5UTfzD0ANw2q1lQxdLKTeCCksq+bPSgbQ==", "requires": { "npm-package-arg": "^6.0.0", @@ -10852,7 +11022,7 @@ }, "npm-profile": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-3.0.2.tgz", + "resolved": false, "integrity": "sha512-rEJOFR6PbwOvvhGa2YTNOJQKNuc6RovJ6T50xPU7pS9h/zKPNCJ+VHZY2OFXyZvEi+UQYtHRTp8O/YM3tUD20A==", "requires": { "aproba": "^1.1.2 || 2", @@ -10861,7 +11031,7 @@ }, "npm-registry-client": { "version": "8.6.0", - "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.6.0.tgz", + "resolved": false, "integrity": "sha512-Qs6P6nnopig+Y8gbzpeN/dkt+n7IyVd8f45NTMotGk6Qo7GfBmzwYx6jRLoOOgKiMnaQfYxsuyQlD8Mc3guBhg==", "requires": { "concat-stream": "^1.5.2", @@ -10880,12 +11050,12 @@ "dependencies": { "retry": { "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "resolved": false, "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=" }, "ssri": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "resolved": false, "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "requires": { "safe-buffer": "^5.1.1" @@ -10895,7 +11065,7 @@ }, "npm-registry-fetch": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-1.1.0.tgz", + "resolved": false, "integrity": "sha512-XJPIBfMtgaooRtZmuA42xCeLf3tkxdIX0xqRsGWwNrcVvJ9UYFccD7Ho7QWCzvkM3i/QrkUC37Hu0a+vDBmt5g==", "requires": { "bluebird": "^3.5.1", @@ -10908,7 +11078,7 @@ "dependencies": { "cacache": { "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "resolved": false, "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "requires": { "bluebird": "^3.5.1", @@ -10928,7 +11098,7 @@ "dependencies": { "mississippi": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "resolved": false, "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "requires": { "concat-stream": "^1.5.0", @@ -10947,12 +11117,12 @@ }, "figgy-pudding": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-2.0.1.tgz", + "resolved": false, "integrity": "sha512-yIJPhIBi/oFdU/P+GSXjmk/rmGjuZkm7A5LTXZxNrEprXJXRK012FiI1BR1Pga+0d/d6taWWD+B5d2ozqaxHig==" }, "make-fetch-happen": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-3.0.0.tgz", + "resolved": false, "integrity": "sha512-FmWY7gC0mL6Z4N86vE14+m719JKE4H0A+pyiOH18B025gF/C113pyfb4gHDDYP5cqnRMHOz06JGdmffC/SES+w==", "requires": { "agentkeepalive": "^3.4.1", @@ -10970,7 +11140,7 @@ }, "pump": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "resolved": false, "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "requires": { "end-of-stream": "^1.1.0", @@ -10979,12 +11149,12 @@ }, "smart-buffer": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", + "resolved": false, "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=" }, "socks": { "version": "1.1.10", - "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz", + "resolved": false, "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", "requires": { "ip": "^1.1.4", @@ -10993,7 +11163,7 @@ }, "socks-proxy-agent": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz", + "resolved": false, "integrity": "sha512-ZwEDymm204mTzvdqyUqOdovVr2YRd2NYskrYrF2LXyZ9qDiMAoFESGK8CRphiO7rtbo2Y757k2Nia3x2hGtalA==", "requires": { "agent-base": "^4.1.0", @@ -11002,7 +11172,7 @@ }, "ssri": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "resolved": false, "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "requires": { "safe-buffer": "^5.1.1" @@ -11012,7 +11182,7 @@ }, "npm-run-path": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "resolved": false, "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { "path-key": "^2.0.0" @@ -11020,12 +11190,12 @@ }, "npm-user-validate": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-1.0.0.tgz", + "resolved": false, "integrity": "sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE=" }, "npmlog": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "resolved": false, "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "requires": { "are-we-there-yet": "~1.1.2", @@ -11036,22 +11206,22 @@ }, "number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "resolved": false, "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "oauth-sign": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "resolved": false, "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "resolved": false, "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "resolved": false, "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { "wrappy": "1" @@ -11059,17 +11229,17 @@ }, "opener": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.0.tgz", + "resolved": false, "integrity": "sha512-MD4s/o61y2slS27zm2s4229V2gAUHX0/e3/XOmY/jsXwhysjjCIHN8lx7gqZCrZk19ym+HjCUWHeMKD7YJtKCQ==" }, "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": false, "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-locale": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "resolved": false, "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "requires": { "execa": "^0.7.0", @@ -11079,12 +11249,12 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": false, "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "resolved": false, "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "requires": { "os-homedir": "^1.0.0", @@ -11093,12 +11263,12 @@ }, "p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "resolved": false, "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-limit": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "resolved": false, "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "requires": { "p-try": "^1.0.0" @@ -11106,7 +11276,7 @@ }, "p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "resolved": false, "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "requires": { "p-limit": "^1.1.0" @@ -11114,12 +11284,12 @@ }, "p-try": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "resolved": false, "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" }, "package-json": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "resolved": false, "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "requires": { "got": "^6.7.1", @@ -11130,7 +11300,7 @@ }, "pacote": { "version": "8.1.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-8.1.6.tgz", + "resolved": false, "integrity": "sha512-wTOOfpaAQNEQNtPEx92x9Y9kRWVu45v583XT8x2oEV2xRB74+xdqMZIeGW4uFvAyZdmSBtye+wKdyyLaT8pcmw==", "requires": { "bluebird": "^3.5.1", @@ -11162,7 +11332,7 @@ }, "parallel-transform": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "resolved": false, "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "requires": { "cyclist": "~0.2.2", @@ -11172,52 +11342,52 @@ }, "path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "resolved": false, "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": false, "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "resolved": false, "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" }, "path-key": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "resolved": false, "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "performance-now": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "resolved": false, "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "resolved": false, "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" }, "prepend-http": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "resolved": false, "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" }, "process-nextick-args": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "resolved": false, "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "promise-inflight": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "resolved": false, "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "promise-retry": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "resolved": false, "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", "requires": { "err-code": "^1.0.0", @@ -11226,14 +11396,14 @@ "dependencies": { "retry": { "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "resolved": false, "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=" } } }, "promzard": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "resolved": false, "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", "requires": { "read": "1" @@ -11241,12 +11411,12 @@ }, "proto-list": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "resolved": false, "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" }, "protoduck": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.0.tgz", + "resolved": false, "integrity": "sha512-agsGWD8/RZrS4ga6v82Fxb0RHIS2RZnbsSue6A9/MBRhB/jcqOANAMNrqM9900b8duj+Gx+T/JMy5IowDoO/hQ==", "requires": { "genfun": "^4.0.1" @@ -11254,22 +11424,22 @@ }, "prr": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "resolved": false, "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, "pseudomap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "resolved": false, "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", + "resolved": false, "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" }, "pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "resolved": false, "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "requires": { "end-of-stream": "^1.1.0", @@ -11278,7 +11448,7 @@ }, "pumpify": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "resolved": false, "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "requires": { "duplexify": "^3.6.0", @@ -11288,7 +11458,7 @@ "dependencies": { "pump": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "resolved": false, "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "requires": { "end-of-stream": "^1.1.0", @@ -11299,22 +11469,22 @@ }, "punycode": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "resolved": false, "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "qrcode-terminal": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "resolved": false, "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==" }, "qs": { "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "resolved": false, "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "query-string": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.1.0.tgz", + "resolved": false, "integrity": "sha512-pNB/Gr8SA8ff8KpUFM36o/WFAlthgaThka5bV19AD9PNTH20Pwq5Zxodif2YyHwrctp6SkL4GqlOot0qR/wGaw==", "requires": { "decode-uri-component": "^0.2.0", @@ -11323,12 +11493,12 @@ }, "qw": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/qw/-/qw-1.0.1.tgz", + "resolved": false, "integrity": "sha1-77/cdA+a0FQwRCassYNBLMi5ltQ=" }, "rc": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", + "resolved": false, "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", "requires": { "deep-extend": "^0.5.1", @@ -11339,14 +11509,14 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": false, "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" } } }, "read": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "resolved": false, "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", "requires": { "mute-stream": "~0.0.4" @@ -11354,7 +11524,7 @@ }, "read-cmd-shim": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz", + "resolved": false, "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=", "requires": { "graceful-fs": "^4.1.2" @@ -11362,7 +11532,7 @@ }, "read-installed": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz", + "resolved": false, "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=", "requires": { "debuglog": "^1.0.1", @@ -11376,7 +11546,7 @@ }, "read-package-json": { "version": "2.0.13", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.13.tgz", + "resolved": false, "integrity": "sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg==", "requires": { "glob": "^7.1.1", @@ -11388,7 +11558,7 @@ }, "read-package-tree": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.2.1.tgz", + "resolved": false, "integrity": "sha512-2CNoRoh95LxY47LvqrehIAfUVda2JbuFE/HaGYs42bNrGG+ojbw1h3zOcPcQ+1GQ3+rkzNndZn85u1XyZ3UsIA==", "requires": { "debuglog": "^1.0.1", @@ -11400,7 +11570,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": false, "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", @@ -11414,7 +11584,7 @@ }, "readdir-scoped-modules": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz", + "resolved": false, "integrity": "sha1-n6+jfShr5dksuuve4DDcm19AZ0c=", "requires": { "debuglog": "^1.0.1", @@ -11425,7 +11595,7 @@ }, "registry-auth-token": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "resolved": false, "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", "requires": { "rc": "^1.1.6", @@ -11434,7 +11604,7 @@ }, "registry-url": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "resolved": false, "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "requires": { "rc": "^1.0.1" @@ -11442,7 +11612,7 @@ }, "request": { "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "resolved": false, "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "requires": { "aws-sign2": "~0.7.0", @@ -11469,27 +11639,27 @@ }, "require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "resolved": false, "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-main-filename": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "resolved": false, "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, "resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "resolved": false, "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, "retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "resolved": false, "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" }, "rimraf": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "resolved": false, "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { "glob": "^7.0.5" @@ -11497,7 +11667,7 @@ }, "run-queue": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "resolved": false, "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "requires": { "aproba": "^1.1.1" @@ -11505,22 +11675,22 @@ }, "safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "resolved": false, "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "resolved": false, "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "resolved": false, "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" }, "semver-diff": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "resolved": false, "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "requires": { "semver": "^5.0.3" @@ -11528,12 +11698,12 @@ }, "set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "resolved": false, "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "sha": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/sha/-/sha-2.0.1.tgz", + "resolved": false, "integrity": "sha1-YDCCL70smCOUn49y7WQR7lzyWq4=", "requires": { "graceful-fs": "^4.1.2", @@ -11542,7 +11712,7 @@ }, "shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "resolved": false, "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { "shebang-regex": "^1.0.0" @@ -11550,32 +11720,32 @@ }, "shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "resolved": false, "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "signal-exit": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "resolved": false, "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "slash": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "resolved": false, "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" }, "slide": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "resolved": false, "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" }, "smart-buffer": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.1.tgz", + "resolved": false, "integrity": "sha512-RFqinRVJVcCAL9Uh1oVqE6FZkqsyLiVOYEZ20TqIOjuX7iFVJ+zsbs4RIghnw/pTs7mZvt8ZHhvm1ZUrR4fykg==" }, "socks": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.2.0.tgz", + "resolved": false, "integrity": "sha512-uRKV9uXQ9ytMbGm2+DilS1jB7N3AC0mmusmW5TVWjNuBZjxS8+lX38fasKVY9I4opv/bY/iqTbcpFFaTwpfwRg==", "requires": { "ip": "^1.1.5", @@ -11584,7 +11754,7 @@ }, "socks-proxy-agent": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz", + "resolved": false, "integrity": "sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw==", "requires": { "agent-base": "~4.2.0", @@ -11593,12 +11763,12 @@ }, "sorted-object": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/sorted-object/-/sorted-object-2.0.1.tgz", + "resolved": false, "integrity": "sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw=" }, "sorted-union-stream": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz", + "resolved": false, "integrity": "sha1-x3lMfgd4gAUv9xqNSi27Sppjisc=", "requires": { "from2": "^1.3.0", @@ -11607,7 +11777,7 @@ "dependencies": { "from2": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-1.3.0.tgz", + "resolved": false, "integrity": "sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0=", "requires": { "inherits": "~2.0.1", @@ -11616,12 +11786,12 @@ }, "isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "resolved": false, "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": false, "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { "core-util-is": "~1.0.0", @@ -11632,14 +11802,14 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": false, "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" } } }, "spdx-correct": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "resolved": false, "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "requires": { "spdx-expression-parse": "^3.0.0", @@ -11648,12 +11818,12 @@ }, "spdx-exceptions": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "resolved": false, "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" }, "spdx-expression-parse": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "resolved": false, "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "requires": { "spdx-exceptions": "^2.1.0", @@ -11662,12 +11832,12 @@ }, "spdx-license-ids": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "resolved": false, "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" }, "sshpk": { "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "resolved": false, "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "requires": { "asn1": "~0.2.3", @@ -11683,12 +11853,12 @@ }, "ssri": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.0.tgz", + "resolved": false, "integrity": "sha512-zYOGfVHPhxyzwi8MdtdNyxv3IynWCIM4jYReR48lqu0VngxgH1c+C6CmipRdJ55eVByTJV/gboFEEI7TEQI8DA==" }, "stream-each": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "resolved": false, "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", "requires": { "end-of-stream": "^1.1.0", @@ -11697,7 +11867,7 @@ }, "stream-iterate": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stream-iterate/-/stream-iterate-1.2.0.tgz", + "resolved": false, "integrity": "sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE=", "requires": { "readable-stream": "^2.1.5", @@ -11706,17 +11876,17 @@ }, "stream-shift": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "resolved": false, "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" }, "strict-uri-encode": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "resolved": false, "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" }, "string-width": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "resolved": false, "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { "is-fullwidth-code-point": "^2.0.0", @@ -11725,17 +11895,17 @@ "dependencies": { "ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "resolved": false, "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "resolved": false, "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "resolved": false, "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { "ansi-regex": "^3.0.0" @@ -11745,7 +11915,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": false, "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -11753,12 +11923,12 @@ }, "stringify-package": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.0.tgz", + "resolved": false, "integrity": "sha512-JIQqiWmLiEozOC0b0BtxZ/AOUtdUZHCBPgqIZ2kSJJqGwgb9neo44XdTHUC4HZSGqi03hOeB7W/E8rAlKnGe9g==" }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": false, "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" @@ -11766,17 +11936,17 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": false, "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "resolved": false, "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "supports-color": { "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "resolved": false, "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "^3.0.0" @@ -11784,7 +11954,7 @@ }, "tar": { "version": "4.4.6", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.6.tgz", + "resolved": false, "integrity": "sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg==", "requires": { "chownr": "^1.0.1", @@ -11798,14 +11968,14 @@ "dependencies": { "yallist": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "resolved": false, "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" } } }, "term-size": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "resolved": false, "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", "requires": { "execa": "^0.7.0" @@ -11813,17 +11983,17 @@ }, "text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "resolved": false, "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": false, "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "resolved": false, "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "requires": { "readable-stream": "^2.1.5", @@ -11832,17 +12002,17 @@ }, "timed-out": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "resolved": false, "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, "tiny-relative-date": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz", + "resolved": false, "integrity": "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==" }, "tough-cookie": { "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "resolved": false, "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "requires": { "psl": "^1.1.24", @@ -11851,7 +12021,7 @@ }, "tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "resolved": false, "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { "safe-buffer": "^5.0.1" @@ -11859,28 +12029,28 @@ }, "tweetnacl": { "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "resolved": false, "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "optional": true }, "typedarray": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "resolved": false, "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "uid-number": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "resolved": false, "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=" }, "umask": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", + "resolved": false, "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=" }, "unique-filename": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "resolved": false, "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", "requires": { "unique-slug": "^2.0.0" @@ -11888,7 +12058,7 @@ }, "unique-slug": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "resolved": false, "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", "requires": { "imurmurhash": "^0.1.4" @@ -11896,7 +12066,7 @@ }, "unique-string": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "resolved": false, "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "requires": { "crypto-random-string": "^1.0.0" @@ -11904,17 +12074,17 @@ }, "unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "resolved": false, "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "unzip-response": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "resolved": false, "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" }, "update-notifier": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "resolved": false, "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", "requires": { "boxen": "^1.2.1", @@ -11931,7 +12101,7 @@ }, "url-parse-lax": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "resolved": false, "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "requires": { "prepend-http": "^1.0.1" @@ -11939,22 +12109,22 @@ }, "util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "resolved": false, "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util-extend": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", + "resolved": false, "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=" }, "uuid": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "resolved": false, "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "resolved": false, "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "requires": { "spdx-correct": "^3.0.0", @@ -11963,7 +12133,7 @@ }, "validate-npm-package-name": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "resolved": false, "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "requires": { "builtins": "^1.0.3" @@ -11971,7 +12141,7 @@ }, "verror": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "resolved": false, "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { "assert-plus": "^1.0.0", @@ -11981,7 +12151,7 @@ }, "wcwidth": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "resolved": false, "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "requires": { "defaults": "^1.0.3" @@ -11989,7 +12159,7 @@ }, "which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "resolved": false, "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { "isexe": "^2.0.0" @@ -11997,12 +12167,12 @@ }, "which-module": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "resolved": false, "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "wide-align": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "resolved": false, "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "requires": { "string-width": "^1.0.2" @@ -12010,7 +12180,7 @@ "dependencies": { "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "resolved": false, "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { "code-point-at": "^1.0.0", @@ -12022,7 +12192,7 @@ }, "widest-line": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", + "resolved": false, "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", "requires": { "string-width": "^2.1.1" @@ -12030,7 +12200,7 @@ }, "worker-farm": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "resolved": false, "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "requires": { "errno": "~0.1.7" @@ -12038,7 +12208,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": false, "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { "string-width": "^1.0.1", @@ -12047,7 +12217,7 @@ "dependencies": { "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "resolved": false, "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { "code-point-at": "^1.0.0", @@ -12059,12 +12229,12 @@ }, "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "resolved": false, "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "resolved": false, "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", "requires": { "graceful-fs": "^4.1.11", @@ -12074,27 +12244,27 @@ }, "xdg-basedir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "resolved": false, "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" }, "xtend": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "resolved": false, "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "y18n": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "resolved": false, "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, "yallist": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "resolved": false, "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", + "resolved": false, "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", "requires": { "cliui": "^4.0.0", @@ -12113,14 +12283,14 @@ "dependencies": { "y18n": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "resolved": false, "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" } } }, "yargs-parser": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "resolved": false, "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "requires": { "camelcase": "^4.1.0" @@ -12451,6 +12621,19 @@ "pbkdf2": "^3.0.3" } }, + "parse-entities": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.0.tgz", + "integrity": "sha512-XXtDdOPLSB0sHecbEapQi6/58U/ODj/KWfIXmmMCJF/eRn8laX6LZbOyioMoETOOJoWRW8/qTSl5VQkUIfKM5g==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -12971,6 +13154,11 @@ "performance-now": "^2.1.0" } }, + "ramda": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", + "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==" + }, "random-bytes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", @@ -13143,6 +13331,20 @@ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, + "react-markdown": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-4.0.6.tgz", + "integrity": "sha512-E1d/q+OBk5eumId42oYqVrJRB/+whrZdk+YHqUBCCNeWxqeV+Qzt+yLTsft9+4HRDj89Od7eAbUPQBYq8ZwShQ==", + "requires": { + "html-to-react": "^1.3.4", + "mdast-add-list-metadata": "1.0.1", + "prop-types": "^15.6.1", + "remark-parse": "^5.0.0", + "unified": "^6.1.5", + "unist-util-visit": "^1.3.0", + "xtend": "^4.0.1" + } + }, "react-redux": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.1.1.tgz", @@ -13467,6 +13669,28 @@ } } }, + "remark-parse": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz", + "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==", + "requires": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -13493,6 +13717,11 @@ "is-finite": "^1.0.0" } }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" + }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -14019,7 +14248,7 @@ "dependencies": { "commander": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", "dev": true, "optional": true, @@ -14628,6 +14857,11 @@ "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==", "dev": true }, + "state-toggle": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz", + "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==" + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -14727,7 +14961,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -15291,6 +15524,11 @@ "punycode": "^1.4.1" } }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", @@ -15303,6 +15541,16 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "trim-trailing-lines": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz", + "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==" + }, + "trough": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz", + "integrity": "sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==" + }, "true-case-path": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", @@ -15448,7 +15696,7 @@ }, "buffer": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", + "resolved": "http://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", "dev": true, "optional": true, @@ -15487,6 +15735,15 @@ } } }, + "unherit": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz", + "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==", + "requires": { + "inherits": "^2.0.1", + "xtend": "^4.0.1" + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -15515,6 +15772,19 @@ "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==", "dev": true }, + "unified": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", + "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^2.0.0", + "x-is-string": "^0.1.0" + } + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -15577,6 +15847,47 @@ "crypto-random-string": "^1.0.0" } }, + "unist-util-is": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz", + "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==" + }, + "unist-util-remove-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz", + "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==", + "requires": { + "unist-util-visit": "^1.1.0" + } + }, + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" + }, + "unist-util-visit": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.0.tgz", + "integrity": "sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==", + "requires": { + "unist-util-visit-parents": "^2.0.0" + }, + "dependencies": { + "unist-util-visit-parents": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz", + "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==", + "requires": { + "unist-util-is": "^2.1.2" + } + } + } + }, + "unist-util-visit-parents": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz", + "integrity": "sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q==" + }, "universal-analytics": { "version": "0.4.20", "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.20.tgz", @@ -15866,8 +16177,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util.promisify": { "version": "1.0.0", @@ -15929,6 +16239,30 @@ "extsprintf": "^1.2.0" } }, + "vfile": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", + "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", + "requires": { + "is-buffer": "^1.1.4", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + } + }, + "vfile-location": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.4.tgz", + "integrity": "sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w==" + }, + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "requires": { + "unist-util-stringify-position": "^1.1.1" + } + }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", @@ -16492,6 +16826,11 @@ "async-limiter": "~1.0.0" } }, + "x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=" + }, "x-xss-protection": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.1.0.tgz", @@ -16506,8 +16845,7 @@ "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "xterm": { "version": "3.10.1", diff --git a/package.json b/package.json index 41dbbbee..f0b37f13 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "react-feather": "^1.1.4", "react-ga": "^2.5.3", "react-helmet": "^5.2.0", + "react-markdown": "^4.0.6", "react-redux": "^5.1.1", "react-router-dom": "^4.3.1", "react-select": "^2.1.1", diff --git a/public/assets/img/451sign.svg b/public/assets/img/451sign.svg new file mode 100644 index 00000000..71865025 --- /dev/null +++ b/public/assets/img/451sign.svg @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/server/chainquery/models/ClaimModel.js b/server/chainquery/models/ClaimModel.js index 6480b67f..387e2e73 100644 --- a/server/chainquery/models/ClaimModel.js +++ b/server/chainquery/models/ClaimModel.js @@ -2,7 +2,7 @@ const logger = require('winston'); const { assetDefaults: { thumbnail: defaultThumbnail }, - details: { host } + details: { host }, } = require('@config/siteConfig'); const getterMethods = { @@ -15,8 +15,12 @@ const getterMethods = { return 'png'; case 'image/gif': return 'gif'; + case 'image/svg+xml': + return 'svg'; case 'video/mp4': return 'mp4'; + case 'text/markdown': + return 'md'; default: logger.debug('setting unknown file type as file extension jpg'); return 'jpg'; @@ -31,141 +35,134 @@ const getterMethods = { generated_channel() { console.log(this); // - } -} - -export default (sequelize, { - BOOLEAN, - DATE, - DECIMAL, - ENUM, - INTEGER, - STRING, - TEXT, -}) => sequelize.define( - 'claim', - { - id: { - primaryKey: true, - type: INTEGER, - set() { }, - }, - transaction_hash_id: { - type: STRING, - set() { }, - }, - vout: { - type: INTEGER, - set() { }, - }, - name: { - type: STRING, - set() { }, - }, - claim_id: { - type: STRING, - set() { }, - }, - claim_type: { - type: INTEGER, - set() { }, - }, - publisher_id: { - type: STRING, - set() { }, - }, - publisher_sig: { - type: STRING, - set() { }, - }, - certificate: { - type: STRING, - set() { }, - }, - sd_hash: { - type: STRING, - set() { }, - }, - transaction_time: { - type: INTEGER, - set() { }, - }, - version: { - type: STRING, - set() { }, - }, - valid_at_height: { - type: INTEGER, - set() { }, - }, - height: { - type: INTEGER, - set() { }, - }, - effective_amount: { - type: INTEGER, - set() { }, - }, - author: { - type: STRING, - set() { }, - }, - description: { - type: STRING, - set() { }, - }, - content_type: { - type: STRING, - set() { }, - }, - is_nsfw: { - type: BOOLEAN, - set() { }, - }, - language: { - type: STRING, - set() { }, - }, - thumbnail_url: { - type: STRING, - set() { }, - }, - title: { - type: STRING, - set() { }, - }, - fee: { - type: DECIMAL(58, 8), - set() { }, - }, - fee_currency: { - type: STRING, - set() { }, - }, - bid_state: { - type: ENUM('Active', 'Expired', 'Controlling', 'Spent', 'Accepted'), - set() { }, - }, - created_at: { - type: DATE(6), - set() { }, - }, - modified_at: { - type: DATE(6), - set() { }, - }, - fee_address: { - type: STRING, - set() { }, - }, - claim_address: { - type: STRING, - set() { }, - }, }, - { - freezeTableName: true, - getterMethods, - timestamps: false, // don't use default timestamps columns - } -); +}; + +export default (sequelize, { BOOLEAN, DATE, DECIMAL, ENUM, INTEGER, STRING, TEXT }) => + sequelize.define( + 'claim', + { + id: { + primaryKey: true, + type: INTEGER, + set() {}, + }, + transaction_hash_id: { + type: STRING, + set() {}, + }, + vout: { + type: INTEGER, + set() {}, + }, + name: { + type: STRING, + set() {}, + }, + claim_id: { + type: STRING, + set() {}, + }, + claim_type: { + type: INTEGER, + set() {}, + }, + publisher_id: { + type: STRING, + set() {}, + }, + publisher_sig: { + type: STRING, + set() {}, + }, + certificate: { + type: STRING, + set() {}, + }, + sd_hash: { + type: STRING, + set() {}, + }, + transaction_time: { + type: INTEGER, + set() {}, + }, + version: { + type: STRING, + set() {}, + }, + valid_at_height: { + type: INTEGER, + set() {}, + }, + height: { + type: INTEGER, + set() {}, + }, + effective_amount: { + type: INTEGER, + set() {}, + }, + author: { + type: STRING, + set() {}, + }, + description: { + type: STRING, + set() {}, + }, + content_type: { + type: STRING, + set() {}, + }, + is_nsfw: { + type: BOOLEAN, + set() {}, + }, + language: { + type: STRING, + set() {}, + }, + thumbnail_url: { + type: STRING, + set() {}, + }, + title: { + type: STRING, + set() {}, + }, + fee: { + type: DECIMAL(58, 8), + set() {}, + }, + fee_currency: { + type: STRING, + set() {}, + }, + bid_state: { + type: ENUM('Active', 'Expired', 'Controlling', 'Spent', 'Accepted'), + set() {}, + }, + created_at: { + type: DATE(6), + set() {}, + }, + modified_at: { + type: DATE(6), + set() {}, + }, + fee_address: { + type: STRING, + set() {}, + }, + claim_address: { + type: STRING, + set() {}, + }, + }, + { + freezeTableName: true, + getterMethods, + timestamps: false, // don't use default timestamps columns + } + ); diff --git a/server/chainquery/queries/claimQueries.js b/server/chainquery/queries/claimQueries.js index 521cda04..6270ea5d 100644 --- a/server/chainquery/queries/claimQueries.js +++ b/server/chainquery/queries/claimQueries.js @@ -18,92 +18,77 @@ const returnShortId = (claimsArray, longId) => { shortIdLength += 1; shortId = longId.substring(0, shortIdLength); possibleMatches = possibleMatches.filter(element => { - return (element.claim_id && (element.claim_id.substring(0, shortIdLength) === shortId)); + return element.claim_id && element.claim_id.substring(0, shortIdLength) === shortId; }); } return shortId; }; -const isLongClaimId = (claimId) => { - return (claimId && (claimId.length === 40)); -} +const isLongClaimId = claimId => { + return claimId && claimId.length === 40; +}; -const isShortClaimId = (claimId) => { - return (claimId && (claimId.length < 40)); -} +const isShortClaimId = claimId => { + return claimId && claimId.length < 40; +}; export default (db, table, sequelize) => ({ + getClaimChannelName: async publisher_id => { + return await table + .findAll({ + where: { claim_id: publisher_id }, + attributes: ['name'], + }) + .then(result => { + if (result.length === 0) { + throw new Error(`no record found for ${claimId}`); + } else if (result.length !== 1) { + logger.warn(`more than one record matches ${claimId} in db.Claim`); + } - getClaimChannelName: async (publisher_id) => { - return await table.findAll({ - where : { claim_id: publisher_id }, - attributes: ['name'], - }).then(result => { - if(result.length === 0) { - throw new Error(`no record found for ${claimId}`); - } else if(result.length !== 1) { - logger.warn(`more than one record matches ${claimId} in db.Claim`); - } - - return result[0].name; - }); + return result[0].name; + }); }, getShortClaimIdFromLongClaimId: async (claimId, claimName, pendingClaim) => { logger.debug(`claim.getShortClaimIdFromLongClaimId for ${claimName}#${claimId}`); - return await table.findAll({ - where: { name: claimName }, - order: [['height', 'ASC']], - }).then(result => { - if(result.length === 0) { - throw new Error('No claim(s) found with that claim name'); - } + return await table + .findAll({ + where: { name: claimName }, + order: [['height', 'ASC']], + }) + .then(result => { + if (result.length === 0) { + throw new Error('No claim(s) found with that claim name'); + } - let list = result.map(claim => claim.dataValues); - if (pendingClaim) { - list = list.concat(pendingClaim); - } + let list = result.map(claim => claim.dataValues); + if (pendingClaim) { + list = list.concat(pendingClaim); + } - return returnShortId(list, claimId); - }); + return returnShortId(list, claimId); + }); }, - getAllChannelClaims: async (channelClaimId, params) => { + getAllChannelClaims: async (channelClaimId, bidState) => { logger.debug(`claim.getAllChannelClaims for ${channelClaimId}`); - - const defaultWhereClauses = { - bid_state: { [sequelize.Op.or]: ['Controlling', 'Active', 'Accepted'] } + const whereClause = bidState || { + [sequelize.Op.or]: [ + { bid_state: 'Controlling' }, + { bid_state: 'Active' }, + { bid_state: 'Accepted' }, + ], }; - - const addWhereClauses = (whereClauses, params) => { - /* - input params = { col: ['Val', 'Val']} - output = { col: { Op.or : [ { Op.eq: 'Value'},...]}, col2:...} - */ - const cols = Object.keys(params) - for (let colKey in cols){ - let col = Object.keys(params)[colKey] - - whereClauses[col] = {} - whereClauses[col][sequelize.Op.or] = [] - for (let itemKey in params[col] ){ - let itemsArr = params[col] - whereClauses[col][sequelize.Op.or].push({ [sequelize.Op.eq]: itemsArr[itemKey] }) - } - } - return whereClauses; - } - - const whereClause = addWhereClauses(defaultWhereClauses, params); - const selectWhere = { ...whereClause, publisher_id: channelClaimId, }; - return await table.findAll({ - where: selectWhere, - order: [['height', 'DESC'],['claim_id', 'ASC']], - }) + return await table + .findAll({ + where: selectWhere, + order: [['height', 'DESC'], ['claim_id', 'ASC']], + }) .then(channelClaimsArray => { if (channelClaimsArray.length === 0) { return null; @@ -114,67 +99,80 @@ export default (db, table, sequelize) => ({ getClaimIdByLongChannelId: async (channelClaimId, claimName) => { logger.debug(`finding claim id for claim ${claimName} from channel ${channelClaimId}`); - return await table.findAll({ - where: { name: claimName, publisher_id: channelClaimId, bid_state: { [sequelize.Op.or]: ['Controlling', 'Active', 'Accepted'] } }, - order: [['id', 'ASC']], - }) - .then(result => { - switch (result.length) { - case 0: - return null; - case 1: - return result[0].claim_id; - default: - // Does this actually happen??? (from converted code) - logger.warn(`${result.length} records found for "${claimName}" in channel "${channelClaimId}"`); - return result[0].claim_id; - } - }); + return await table + .findAll({ + where: { + name: claimName, + publisher_id: channelClaimId, + bid_state: { [sequelize.Op.or]: ['Controlling', 'Active', 'Accepted'] }, + }, + order: [['id', 'ASC']], + }) + .then(result => { + switch (result.length) { + case 0: + return null; + case 1: + return result[0].claim_id; + default: + // Does this actually happen??? (from converted code) + logger.warn( + `${result.length} records found for "${claimName}" in channel "${channelClaimId}"` + ); + return result[0].claim_id; + } + }); }, validateLongClaimId: async (name, claimId) => { - return await table.findOne({ - where: { - name, - claim_id: claimId, - }, - }).then(result => { - if (!result) { - return false; - } - return claimId; - }); + return await table + .findOne({ + where: { + name, + claim_id: claimId, + }, + }) + .then(result => { + if (!result) { + return false; + } + return claimId; + }); }, getLongClaimIdFromShortClaimId: async (name, shortId) => { - return await table.findAll({ - where: { - name, - claim_id: { - [sequelize.Op.like]: `${shortId}%`, - }}, - order: [['height', 'ASC']], - }) - .then(result => { - if(result.length === 0) { - return null; - } + return await table + .findAll({ + where: { + name, + claim_id: { + [sequelize.Op.like]: `${shortId}%`, + }, + }, + order: [['height', 'ASC']], + }) + .then(result => { + if (result.length === 0) { + return null; + } - return result[0].claim_id; - }); + return result[0].claim_id; + }); }, - getTopFreeClaimIdByClaimName: async (name) => { - return await table.findAll({ - // TODO: Limit 1 - where: { name, bid_state: { [sequelize.Op.or]: ['Controlling', 'Active', 'Accepted'] } }, - order: [['effective_amount', 'DESC'], ['height', 'ASC']], - }).then(result => { - if(result.length === 0) { - return null; - } - return result[0].claim_id; - }) + getTopFreeClaimIdByClaimName: async name => { + return await table + .findAll({ + // TODO: Limit 1 + where: { name, bid_state: { [sequelize.Op.or]: ['Controlling', 'Active', 'Accepted'] } }, + order: [['effective_amount', 'DESC'], ['height', 'ASC']], + }) + .then(result => { + if (result.length === 0) { + return null; + } + return result[0].claim_id; + }); }, getLongClaimId: async (claimName, claimId) => { @@ -191,60 +189,63 @@ export default (db, table, sequelize) => ({ resolveClaim: async (name, claimId) => { logger.debug(`Claim.resolveClaim: ${name} ${claimId}`); - return table.findAll({ - where: { name, claim_id: claimId }, - }).then(claimArray => { - if(claimArray.length === 0) { - return null; - } else if(claimArray.length !== 1) { - logger.warn(`more than one record matches ${name}#${claimId} in db.Claim`); - } + return table + .findAll({ + where: { name, claim_id: claimId }, + }) + .then(claimArray => { + if (claimArray.length === 0) { + return null; + } else if (claimArray.length !== 1) { + logger.warn(`more than one record matches ${name}#${claimId} in db.Claim`); + } - return claimArray[0]; - }); + return claimArray[0]; + }); }, resolveClaimInChannel: async (claimName, channelId) => { logger.debug(`Claim.resolveClaimByNames: ${claimName} in ${channelId}`); - return table.findAll({ - where: { - name: claimName, - publisher_id: channelId, - }, - }).then(claimArray => { - if (claimArray.length === 0) { - return null; - } else if (claimArray.length !== 1) { - logger.warn(`more than one record matches ${claimName} in ${channelId}`); - } + return table + .findAll({ + where: { + name: claimName, + publisher_id: channelId, + }, + }) + .then(claimArray => { + if (claimArray.length === 0) { + return null; + } else if (claimArray.length !== 1) { + logger.warn(`more than one record matches ${claimName} in ${channelId}`); + } - return claimArray[0]; - }); + return claimArray[0]; + }); }, getOutpoint: async (name, claimId) => { logger.debug(`finding outpoint for ${name}#${claimId}`); - return await table.findAll({ - where : { name, claim_id: claimId }, - attributes: ['transaction_hash_id'], - }).then(result => { - if(result.length === 0) { - throw new Error(`no record found for ${name}#${claimId}`); - } else if(result.length !== 1) { - logger.warn(`more than one record matches ${name}#${claimId} in db.Claim`); - } + return await table + .findAll({ + where: { name, claim_id: claimId }, + attributes: ['transaction_hash_id'], + }) + .then(result => { + if (result.length === 0) { + throw new Error(`no record found for ${name}#${claimId}`); + } else if (result.length !== 1) { + logger.warn(`more than one record matches ${name}#${claimId} in db.Claim`); + } - return result[0].transaction_hash_id; - }); + return result[0].transaction_hash_id; + }); }, getCurrentHeight: async () => { - return await table - .max('height') - .then(result => { - return (result || 100000); + return await table.max('height').then(result => { + return result || 100000; }); }, - -}) +}); diff --git a/server/controllers/api/channel/claims/getChannelClaims.js b/server/controllers/api/channel/claims/getChannelClaims.js index 5b9475ae..921c1f2e 100644 --- a/server/controllers/api/channel/claims/getChannelClaims.js +++ b/server/controllers/api/channel/claims/getChannelClaims.js @@ -1,20 +1,15 @@ -const db = require('../../../../models'); const chainquery = require('chainquery').default; const getClaimData = require('server/utils/getClaimData'); const { returnPaginatedChannelClaims } = require('./channelPagination.js'); const getChannelClaims = async (channelName, channelLongId, page) => { - const params = { - content_type: ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'video/mp4'], - }; - let channelShortId = await chainquery.claim.queries.getShortClaimIdFromLongClaimId( channelLongId, channelName ); let channelClaims; if (channelLongId) { - channelClaims = await chainquery.claim.queries.getAllChannelClaims(channelLongId, params); + channelClaims = await chainquery.claim.queries.getAllChannelClaims(channelLongId); } /* Put mempool unconfirmed claims at the beginning diff --git a/server/controllers/api/claim/publish/validateFileTypeAndSize.js b/server/controllers/api/claim/publish/validateFileTypeAndSize.js index a42d9b29..997e6710 100644 --- a/server/controllers/api/claim/publish/validateFileTypeAndSize.js +++ b/server/controllers/api/claim/publish/validateFileTypeAndSize.js @@ -1,21 +1,18 @@ const logger = require('winston'); const { - publishing: { - maxSizeImage = 10000000, - maxSizeGif = 50000000, - maxSizeVideo = 50000000, - } + publishing: { maxSizeImage = 10000000, maxSizeGif = 50000000, maxSizeVideo = 50000000 }, } = require('@config/siteConfig'); const SIZE_MB = 1000000; -const validateFileTypeAndSize = (file) => { +const validateFileTypeAndSize = file => { // check file type and size switch (file.type) { case 'image/jpeg': case 'image/jpg': case 'image/png': + case 'image/svg+xml': if (file.size > maxSizeImage) { logger.debug('publish > file validation > .jpeg/.jpg/.png was too big'); throw new Error(`Sorry, images are limited to ${maxSizeImage / SIZE_MB} megabytes.`); @@ -35,7 +32,11 @@ const validateFileTypeAndSize = (file) => { break; default: logger.debug('publish > file validation > unrecognized file type'); - throw new Error('The ' + file.type + ' content type is not supported. Only, image/jpg, image/png, image/gif, and video/mp4 content types are currently supported.'); + throw new Error( + 'The ' + + file.type + + ' content type is not supported. Only, image/jpg, image/png, image/gif, and video/mp4 content types are currently supported.' + ); } return file; }; diff --git a/server/models/claim.js b/server/models/claim.js index 63aa8b94..acede7b3 100644 --- a/server/models/claim.js +++ b/server/models/claim.js @@ -1,12 +1,17 @@ const logger = require('winston'); const returnShortId = require('./utils/returnShortId.js'); const isApprovedChannel = require('../../utils/isApprovedChannel'); -const { assetDefaults: { thumbnail: defaultThumbnail }, details: { host } } = require('@config/siteConfig'); -const { publishing: { serveOnlyApproved, approvedChannels } } = require('@config/siteConfig'); +const { + assetDefaults: { thumbnail: defaultThumbnail }, + details: { host }, +} = require('@config/siteConfig'); +const { + publishing: { serveOnlyApproved, approvedChannels }, +} = require('@config/siteConfig'); const NO_CLAIM = 'NO_CLAIM'; -function determineFileExtensionFromContentType (contentType) { +function determineFileExtensionFromContentType(contentType) { switch (contentType) { case 'image/jpeg': case 'image/jpg': @@ -17,20 +22,22 @@ function determineFileExtensionFromContentType (contentType) { return 'gif'; case 'video/mp4': return 'mp4'; + case 'image/svg+xml': + return 'svg'; default: logger.debug('setting unknown file type as file extension jpg'); return 'jpg'; } } -function determineThumbnail (storedThumbnail, defaultThumbnail) { +function determineThumbnail(storedThumbnail, defaultThumbnail) { if (storedThumbnail === '') { return defaultThumbnail; } return storedThumbnail; } -function prepareClaimData (claim) { +function prepareClaimData(claim) { // logger.debug('preparing claim data based on resolved data:', claim); claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail); claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType); @@ -38,12 +45,12 @@ function prepareClaimData (claim) { return claim; } -function isLongClaimId (claimId) { - return (claimId && (claimId.length === 40)); +function isLongClaimId(claimId) { + return claimId && claimId.length === 40; } -function isShortClaimId (claimId) { - return (claimId && (claimId.length < 40)); +function isShortClaimId(claimId) { + return claimId && claimId.length < 40; } module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => { @@ -51,141 +58,141 @@ module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => { 'Claim', { address: { - type : STRING, + type: STRING, default: null, }, amount: { - type : DECIMAL(19, 8), + type: DECIMAL(19, 8), default: null, }, claimId: { - type : STRING, + type: STRING, default: null, }, claimSequence: { - type : INTEGER, + type: INTEGER, default: null, }, decodedClaim: { - type : BOOLEAN, + type: BOOLEAN, default: null, }, depth: { - type : INTEGER, + type: INTEGER, default: null, }, effectiveAmount: { - type : DECIMAL(19, 8), + type: DECIMAL(19, 8), default: null, }, hasSignature: { - type : BOOLEAN, + type: BOOLEAN, default: null, }, height: { - type : INTEGER, + type: INTEGER, default: null, }, hex: { - type : TEXT('long'), + type: TEXT('long'), default: null, }, name: { - type : STRING, + type: STRING, default: null, }, nout: { - type : INTEGER, + type: INTEGER, default: null, }, txid: { - type : STRING, + type: STRING, default: null, }, validAtHeight: { - type : INTEGER, + type: INTEGER, default: null, }, outpoint: { - type : STRING, + type: STRING, default: null, }, claimType: { - type : STRING, + type: STRING, default: null, }, certificateId: { - type : STRING, + type: STRING, default: null, }, author: { - type : STRING, + type: STRING, default: null, }, description: { - type : TEXT('long'), + type: TEXT('long'), default: null, }, language: { - type : STRING, + type: STRING, default: null, }, license: { - type : STRING, + type: STRING, default: null, }, licenseUrl: { - type : STRING, + type: STRING, default: null, }, nsfw: { - type : BOOLEAN, + type: BOOLEAN, default: null, }, preview: { - type : STRING, + type: STRING, default: null, }, thumbnail: { - type : STRING, + type: STRING, default: null, }, title: { - type : STRING, + type: STRING, default: null, }, metadataVersion: { - type : STRING, + type: STRING, default: null, }, contentType: { - type : STRING, + type: STRING, default: null, }, source: { - type : STRING, + type: STRING, default: null, }, sourceType: { - type : STRING, + type: STRING, default: null, }, sourceVersion: { - type : STRING, + type: STRING, default: null, }, streamVersion: { - type : STRING, + type: STRING, default: null, }, valueVersion: { - type : STRING, + type: STRING, default: null, }, channelName: { - type : STRING, + type: STRING, allowNull: true, - default : null, + default: null, }, }, { @@ -201,14 +208,13 @@ module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => { }); }; - Claim.getShortClaimIdFromLongClaimId = function (claimId, claimName) { + Claim.getShortClaimIdFromLongClaimId = function(claimId, claimName) { logger.debug(`Claim.getShortClaimIdFromLongClaimId for ${claimName}#${claimId}`); return new Promise((resolve, reject) => { - this - .findAll({ - where: { name: claimName }, - order: [['height', 'ASC']], - }) + this.findAll({ + where: { name: claimName }, + order: [['height', 'ASC']], + }) .then(result => { switch (result.length) { case 0: @@ -223,15 +229,14 @@ module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => { }); }; - Claim.getAllChannelClaims = function (channelClaimId) { + Claim.getAllChannelClaims = function(channelClaimId) { logger.debug(`Claim.getAllChannelClaims for ${channelClaimId}`); return new Promise((resolve, reject) => { - this - .findAll({ - where: { certificateId: channelClaimId }, - order: [['height', 'DESC']], - raw : true, // returns an array of only data, not an array of instances - }) + this.findAll({ + where: { certificateId: channelClaimId }, + order: [['height', 'DESC']], + raw: true, // returns an array of only data, not an array of instances + }) .then(channelClaimsArray => { switch (channelClaimsArray.length) { case 0: @@ -251,14 +256,13 @@ module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => { }); }; - Claim.getClaimIdByLongChannelId = function (channelClaimId, claimName) { + Claim.getClaimIdByLongChannelId = function(channelClaimId, claimName) { logger.debug(`finding claim id for claim ${claimName} from channel ${channelClaimId}`); return new Promise((resolve, reject) => { - this - .findAll({ - where: { name: claimName, certificateId: channelClaimId }, - order: [['id', 'ASC']], - }) + this.findAll({ + where: { name: claimName, certificateId: channelClaimId }, + order: [['id', 'ASC']], + }) .then(result => { switch (result.length) { case 0: @@ -266,7 +270,9 @@ module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => { case 1: return resolve(result[0].claimId); default: - logger.warn(`${result.length} records found for "${claimName}" in channel "${channelClaimId}"`); + logger.warn( + `${result.length} records found for "${claimName}" in channel "${channelClaimId}"` + ); return resolve(result[0].claimId); } }) @@ -276,7 +282,7 @@ module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => { }); }; - Claim.validateLongClaimId = function (name, claimId) { + Claim.validateLongClaimId = function(name, claimId) { return new Promise((resolve, reject) => { this.findOne({ where: { @@ -297,17 +303,17 @@ module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => { }); }; - Claim.getLongClaimIdFromShortClaimId = function (name, shortId) { + Claim.getLongClaimIdFromShortClaimId = function(name, shortId) { return new Promise((resolve, reject) => { - this - .findAll({ - where: { - name, - claimId: { - [sequelize.Op.like]: `${shortId}%`, - }}, - order: [['height', 'ASC']], - }) + this.findAll({ + where: { + name, + claimId: { + [sequelize.Op.like]: `${shortId}%`, + }, + }, + order: [['height', 'ASC']], + }) .then(result => { switch (result.length) { case 0: @@ -323,13 +329,12 @@ module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => { }); }; - Claim.getTopFreeClaimIdByClaimName = function (name) { + Claim.getTopFreeClaimIdByClaimName = function(name) { return new Promise((resolve, reject) => { - this - .findAll({ - where: { name }, - order: [['effectiveAmount', 'DESC'], ['height', 'ASC']], - }) + this.findAll({ + where: { name }, + order: [['effectiveAmount', 'DESC'], ['height', 'ASC']], + }) .then(result => { switch (result.length) { case 0: @@ -345,7 +350,7 @@ module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => { }); }; - Claim.getLongClaimId = function (claimName, claimId) { + Claim.getLongClaimId = function(claimName, claimId) { logger.debug(`getLongClaimId(${claimName}, ${claimId})`); if (isLongClaimId(claimId)) { return this.validateLongClaimId(claimName, claimId); @@ -356,13 +361,12 @@ module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => { } }; - Claim.fetchClaim = function (name, claimId) { + Claim.fetchClaim = function(name, claimId) { logger.debug(`Claim.resolveClaim: ${name} ${claimId}`); return new Promise((resolve, reject) => { - this - .findAll({ - where: { name, claimId }, - }) + this.findAll({ + where: { name, claimId }, + }) .then(claimArray => { switch (claimArray.length) { case 0: @@ -380,13 +384,15 @@ module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => { }); }; - Claim.resolveClaim = function (name, claimId) { + Claim.resolveClaim = function(name, claimId) { return new Promise((resolve, reject) => { - this - .fetchClaim(name, claimId) + this.fetchClaim(name, claimId) .then(claim => { logger.info('resolveClaim claims:', claim); - if (serveOnlyApproved && !isApprovedChannel({ longId: claim.certificateId }, approvedChannels)) { + if ( + serveOnlyApproved && + !isApprovedChannel({ longId: claim.certificateId }, approvedChannels) + ) { throw new Error('This content is unavailable'); } return resolve(claim); @@ -397,13 +403,12 @@ module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => { }); }; - Claim.getOutpoint = function (name, claimId) { + Claim.getOutpoint = function(name, claimId) { logger.debug(`finding outpoint for ${name}#${claimId}`); - return this - .findAll({ - where : { name, claimId }, - attributes: ['outpoint'], - }) + return this.findAll({ + where: { name, claimId }, + attributes: ['outpoint'], + }) .then(result => { logger.debug('outpoint result'); switch (result.length) { @@ -421,10 +426,9 @@ module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => { }); }; - Claim.getCurrentHeight = function () { + Claim.getCurrentHeight = function() { return new Promise((resolve, reject) => { - return this - .max('height') + return this.max('height') .then(result => { if (result) { return resolve(result); -- 2.45.3 From 57cb4b91e8b06892a477e4aec3bdd6e9deaa4c14 Mon Sep 17 00:00:00 2001 From: Shawn Date: Sun, 27 Jan 2019 20:45:44 -0600 Subject: [PATCH 09/16] Fix oEmbed data, remove bad og: data --- client/src/utils/createAssetMetaTags.js | 38 +++++++++---------- package-lock.json | 28 ++++++++++---- .../api/oEmbed/getOEmbedDataForAsset.js | 25 ++++++------ 3 files changed, 51 insertions(+), 40 deletions(-) diff --git a/client/src/utils/createAssetMetaTags.js b/client/src/utils/createAssetMetaTags.js index 6b03f353..2baa2cc3 100644 --- a/client/src/utils/createAssetMetaTags.js +++ b/client/src/utils/createAssetMetaTags.js @@ -4,22 +4,15 @@ import createMetaTagsArray from './createMetaTagsArray'; import createCanonicalLink from '@globalutils/createCanonicalLink'; const { - details: { - host, - title: siteTitle, - twitter, - }, - assetDefaults: { - description: defaultDescription, - thumbnail: defaultThumbnail, - }, + details: { host, title: siteTitle, twitter }, + assetDefaults: { description: defaultDescription, thumbnail: defaultThumbnail }, } = siteConfig; const VIDEO = 'VIDEO'; const IMAGE = 'IMAGE'; const GIF = 'GIF'; -const determineMediaType = (contentType) => { +const determineMediaType = contentType => { switch (contentType) { case 'image/jpg': case 'image/jpeg': @@ -35,10 +28,12 @@ const determineMediaType = (contentType) => { } }; -const createAssetMetaTags = (asset) => { +const createAssetMetaTags = asset => { const { claimData } = asset; const { contentType } = claimData; - const canonicalLink = createCanonicalLink({ asset: { ...asset.claimData, shortId: asset.shortId }}); + const canonicalLink = createCanonicalLink({ + asset: { ...asset.claimData, shortId: asset.shortId }, + }); const showUrl = `${host}${canonicalLink}`; const serveUrl = `${showUrl}.${claimData.fileExt}`; @@ -46,16 +41,19 @@ const createAssetMetaTags = (asset) => { const ogDescription = claimData.description || defaultDescription; const ogThumbnailContentType = determineContentTypeFromExtension(claimData.thumbnail); const ogThumbnail = claimData.thumbnail || defaultThumbnail; + + console.log('asset.claimData', asset.claimData); + // {property: 'og:title'] = ogTitle}, const metaTags = { - 'og:title' : ogTitle, - 'twitter:title' : ogTitle, - 'og:description' : ogDescription, + 'og:title': ogTitle, + 'twitter:title': ogTitle, + 'og:description': ogDescription, 'twitter:description': ogDescription, - 'og:url' : showUrl, - 'og:site_name' : siteTitle, - 'twitter:site' : twitter, - 'fb:app_id' : '1371961932852223', + 'og:url': showUrl, + 'og:site_name': siteTitle, + 'twitter:site': twitter, + 'fb:app_id': '1371961932852223', }; if (determineMediaType(contentType) === VIDEO) { const videoEmbedUrl = `${host}/video-embed${canonicalLink}`; @@ -85,8 +83,6 @@ const createAssetMetaTags = (asset) => { // image tags metaTags['og:image'] = serveUrl; metaTags['og:image'] = serveUrl; - metaTags['og:image:width'] = 600; - metaTags['og:image:height'] = 315; metaTags['og:image:type'] = contentType; metaTags['twitter:image'] = serveUrl; } diff --git a/package-lock.json b/package-lock.json index f80a46cc..33095ba7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5620,12 +5620,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5640,17 +5642,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -5767,7 +5772,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5779,6 +5785,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5793,6 +5800,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5800,12 +5808,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5824,6 +5834,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -5904,7 +5915,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -5916,6 +5928,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -6037,6 +6050,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", diff --git a/server/controllers/api/oEmbed/getOEmbedDataForAsset.js b/server/controllers/api/oEmbed/getOEmbedDataForAsset.js index d55f9232..2b3a59dc 100644 --- a/server/controllers/api/oEmbed/getOEmbedDataForAsset.js +++ b/server/controllers/api/oEmbed/getOEmbedDataForAsset.js @@ -3,19 +3,16 @@ const db = require('../../../models'); const getClaimId = require('../../utils/getClaimId'); const { - details: { - host, - title: siteTitle, - }, + details: { host, title: siteTitle }, } = require('@config/siteConfig'); const getOEmbedDataForAsset = (channelName, channelClaimId, claimName, claimId) => { let fileData, claimData; let data = { - version : '1.0', + version: '1.0', provider_name: siteTitle, - provider_url : host, - cache_age : 86400, // one day in seconds + provider_url: host, + cache_age: 86400, // one day in seconds }; return getClaimId(channelName, channelClaimId, claimName, claimId) @@ -23,7 +20,7 @@ const getOEmbedDataForAsset = (channelName, channelClaimId, claimName, claimId) claimId = fullClaimId; return db.Claim.findOne({ where: { - name : claimName, + name: claimName, claimId: fullClaimId, }, }); @@ -43,19 +40,23 @@ const getOEmbedDataForAsset = (channelName, channelClaimId, claimName, claimId) .then(fileRecord => { fileData = fileRecord.dataValues; logger.debug('file data:', fileData); - const serveUrl = `${host}/${fileData.claimId}/${fileData.name}.${fileData.fileType.substring(fileData.fileType.indexOf('/') + 1)}`; + const serveUrl = `${host}/${fileData.claimId}/${fileData.name}.${fileData.fileType.substring( + fileData.fileType.indexOf('/') + 1 + )}`; // set the resource type if (fileData.fileType === 'video/mp4') { data['type'] = 'video'; - data['html'] = ``; + data['html'] = ``; } else { data['type'] = 'picture'; data['url'] = serveUrl; } // get the data data['title'] = claimData.title; - data['width'] = fileData.width || 600; - data['height'] = fileData.height || 400; + data['width'] = fileData.fileWidth || 600; + data['height'] = fileData.fileHeight || 400; data['author_name'] = siteTitle; data['author_url'] = host; }) -- 2.45.3 From 2f109efeb7cbe89d1e197f1da482098b2a1784d6 Mon Sep 17 00:00:00 2001 From: jessop Date: Tue, 29 Jan 2019 01:05:16 -0500 Subject: [PATCH 10/16] enables chainquery generated extension --- server/chainquery/models/ClaimModel.js | 10 ----- server/utils/fetchClaimData.js | 6 +-- server/utils/getClaimData.js | 61 ++++++++++++++------------ 3 files changed, 35 insertions(+), 42 deletions(-) diff --git a/server/chainquery/models/ClaimModel.js b/server/chainquery/models/ClaimModel.js index 387e2e73..7d44d166 100644 --- a/server/chainquery/models/ClaimModel.js +++ b/server/chainquery/models/ClaimModel.js @@ -26,16 +26,6 @@ const getterMethods = { return 'jpg'; } }, - - // TODO: Factor this out. - generated_thumbnail() { - return this.thumbnail_url || defaultThumbnail; - }, - - generated_channel() { - console.log(this); - // - }, }; export default (sequelize, { BOOLEAN, DATE, DECIMAL, ENUM, INTEGER, STRING, TEXT }) => diff --git a/server/utils/fetchClaimData.js b/server/utils/fetchClaimData.js index d192dfee..79bcf6a8 100644 --- a/server/utils/fetchClaimData.js +++ b/server/utils/fetchClaimData.js @@ -1,15 +1,15 @@ const chainquery = require('chainquery').default; const db = require('server/models'); -const fetchClaimData = async (params) => { +const fetchClaimData = async params => { let { claimId, claimName: name } = params; if (claimId === 'none') claimId = null; const [cq, local] = await Promise.all([ - chainquery.claim.queries.resolveClaim(name, claimId).then(res => res.dataValues).catch(() => {}), + chainquery.claim.queries.resolveClaim(name, claimId).catch(() => {}), db.Claim.resolveClaim(name, claimId).catch(() => {}), ]); - + // Todo: don't use localdb to get post publish content if (!cq && !local) { return null; } diff --git a/server/utils/getClaimData.js b/server/utils/getClaimData.js index 86385a96..883bcd08 100644 --- a/server/utils/getClaimData.js +++ b/server/utils/getClaimData.js @@ -1,52 +1,55 @@ -const { details: { host } } = require('@config/siteConfig'); +const { + details: { host }, + assetDefaults: { thumbnail }, +} = require('@config/siteConfig'); const chainquery = require('chainquery').default; -const { getClaim } = require('server/lbrynet'); +// const { getClaim } = require('server/lbrynet'); const { isBlocked } = require('./blockList'); module.exports = async (data, chName = null, chShortId = null) => { // TODO: Refactor getching the channel name out; requires invasive changes. - const certificateId = data.publisher_id || data.certificateId; - let lbrynetClaimResult = null; - let lbrynetFileExt = null; + const dataVals = data.dataValues ? data.dataValues : data; + const txid = dataVals.transaction_hash_id || dataVals.txid; + const nout = dataVals.vout || dataVals.nout; + const outpoint = `${txid}:${nout}`; + const certificateId = dataVals.publisher_id || dataVals.certificateId; + const fileExt = data.generated_extension || dataVals.fileExt; + let channelShortId = chShortId; let channelName = chName; + // TODO: Factor blocked out let blocked; - const outPoint = `${data.transaction_hash_id}:${data.vout}`; - if (isBlocked(outPoint)) { + + if (isBlocked(outpoint)) { blocked = true; } if (!chName && certificateId && !channelName) { - channelName = await chainquery.claim.queries.getClaimChannelName(certificateId).catch(() => { - }); + channelName = await chainquery.claim.queries.getClaimChannelName(certificateId).catch(() => {}); } if (!chShortId && certificateId && channelName) { - channelShortId = await chainquery.claim.queries.getShortClaimIdFromLongClaimId(certificateId, channelName).catch(() => null); + channelShortId = await chainquery.claim.queries + .getShortClaimIdFromLongClaimId(certificateId, channelName) + .catch(() => null); } - if (!chName && !chShortId && !data.fileExt) { - const lbrynetUri = `${data.name}#${data.claim_id}`; - lbrynetClaimResult = await getClaim(lbrynetUri).catch(() => { - return 'invalid URI'; - }); - lbrynetFileExt = lbrynetClaimResult && lbrynetClaimResult.file_name && lbrynetClaimResult.file_name.includes('.') && lbrynetClaimResult.file_name.split('.').slice(-1).pop(); - } + // Find a solution for the legacy application/octet-stream file extensions - return ({ - name : data.name, - title : data.title, + return { + name: dataVals.name, + title: dataVals.title, certificateId, channelName, channelShortId, - contentType: data.content_type || data.contentType, - claimId : data.claim_id || data.claimId, - fileExt : data.generated_extension || data.fileExt || lbrynetFileExt, - description: data.description, - thumbnail : data.generated_thumbnail || data.thumbnail_url || data.thumbnail, - outpoint : outPoint || data.outpoint, + contentType: dataVals.content_type || data.contentType, + claimId: dataVals.claim_id || data.claimId, + fileExt: fileExt, + description: dataVals.description, + thumbnail: dataVals.thumbnail_url || data.thumbnail || thumbnail, + outpoint, host, - pending : Boolean(data.height === 0), - blocked : blocked, - }); + pending: Boolean(dataVals.height === 0), + blocked: blocked, + }; }; -- 2.45.3 From 0942dd8392d9d197eb1670b90e5461838cc2d665 Mon Sep 17 00:00:00 2001 From: Jeremy Kauffman Date: Tue, 29 Jan 2019 14:03:54 -0500 Subject: [PATCH 11/16] name is required and unique for api docs --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8a184765..c3fe459a 100644 --- a/README.md +++ b/README.md @@ -116,7 +116,7 @@ curl -F 'name=MyPictureName' -F 'file=@/path/to/myPicture.jpeg' https://spee.ch/ ``` Parameters: - * `name` (required) + * `name` (required, must be unique across the instance) * `file` (required) (must be type .mp4, .jpeg, .jpg, .gif, or .png) * `nsfw` (optional) * `license` (optional) -- 2.45.3 From 13aa109d28495225fe7f9ee7d10c387622f451fa Mon Sep 17 00:00:00 2001 From: jessop Date: Fri, 1 Feb 2019 02:18:15 -0500 Subject: [PATCH 12/16] small bugfixes to outpoint and tweak markdown --- client/src/containers/AssetDisplay/view.jsx | 2 +- client/src/containers/AssetInfo/view.jsx | 2 +- server/utils/getClaimData.js | 9 ++++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/client/src/containers/AssetDisplay/view.jsx b/client/src/containers/AssetDisplay/view.jsx index 29c320ee..c12ad741 100644 --- a/client/src/containers/AssetDisplay/view.jsx +++ b/client/src/containers/AssetDisplay/view.jsx @@ -64,7 +64,7 @@ class AssetDisplay extends React.Component { if (typeof contentType === 'string') { fileExt = contentType.split('/')[1] || 'jpg'; } - const sourceUrl = `${createCanonicalLink({ asset: asset.claimData })}.${fileExt}?${outpoint}`; + const sourceUrl = `${createCanonicalLink({ asset: asset.claimData })}.${fileExt}?outpoint=${outpoint}`; return (
{(status === LOCAL_CHECK) && diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index 0f3a6187..59360840 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -37,7 +37,7 @@ class AssetInfo extends React.Component { { description && ( } - content={
} + content={
} /> )} {editable && ( diff --git a/server/utils/getClaimData.js b/server/utils/getClaimData.js index 883bcd08..f725f94e 100644 --- a/server/utils/getClaimData.js +++ b/server/utils/getClaimData.js @@ -10,7 +10,14 @@ module.exports = async (data, chName = null, chShortId = null) => { // TODO: Refactor getching the channel name out; requires invasive changes. const dataVals = data.dataValues ? data.dataValues : data; const txid = dataVals.transaction_hash_id || dataVals.txid; - const nout = dataVals.vout || dataVals.nout; + let nout; + + if (typeof dataVals.vout === 'number') { + nout = dataVals.vout; + } else { + nout = dataVals.nout; + } + const outpoint = `${txid}:${nout}`; const certificateId = dataVals.publisher_id || dataVals.certificateId; const fileExt = data.generated_extension || dataVals.fileExt; -- 2.45.3 From 3a380598af301b9893b82bc2c780da60d74cd2d1 Mon Sep 17 00:00:00 2001 From: jessop Date: Mon, 4 Feb 2019 00:50:31 -0500 Subject: [PATCH 13/16] improves markdown presentation --- client/scss/_asset-display.scss | 11 +---- client/scss/_label.scss | 6 ++- client/scss/_markdown.scss | 48 +++++++++++++++++----- client/scss/_row.scss | 6 +-- client/scss/_variables.scss | 2 + client/src/components/FileViewer/index.jsx | 2 +- client/src/containers/AssetInfo/view.jsx | 2 +- 7 files changed, 50 insertions(+), 27 deletions(-) diff --git a/client/scss/_asset-display.scss b/client/scss/_asset-display.scss index cc338237..b6d8dae0 100644 --- a/client/scss/_asset-display.scss +++ b/client/scss/_asset-display.scss @@ -5,19 +5,10 @@ } .asset-document { - $asset-info-width: 1000px; - max-width: $asset-info-width; width: 100%; padding: $thin-padding; height: fit-content; - - @media (max-width: $break-point-tablet) { - margin: $primary-padding $secondary-padding; - } - - @media (max-width: $break-point-mobile) { - margin: $primary-padding 0; - } + box-sizing: border-box; } .asset-display { height: fit-content; diff --git a/client/scss/_label.scss b/client/scss/_label.scss index 2e92784a..41957add 100644 --- a/client/scss/_label.scss +++ b/client/scss/_label.scss @@ -2,13 +2,17 @@ padding-top: $thin-padding; padding-bottom: $thin-padding; display: inline-block; - font-size: 12px; + font-weight: bold; + font-size: $text-medium; + width: 100%; + box-sizing: border-box; } .label-radio { padding-left: $thin-padding; padding-right: $thin-padding; cursor: pointer; + font-weight: bold; } @media (max-width: $break-point-tablet ) { diff --git a/client/scss/_markdown.scss b/client/scss/_markdown.scss index 05b10c3c..ed972f03 100644 --- a/client/scss/_markdown.scss +++ b/client/scss/_markdown.scss @@ -8,14 +8,14 @@ h6 { font-size: inherit; font-weight: 600; - margin-bottom: var(--spacing-vertical-medium); - padding-top: var(--spacing-vertical-medium); + margin-bottom: $tertiary-padding; + padding-top: $tertiary-padding; } // Paragraphs p { font-size: 1.15rem; - margin-bottom: var(--spacing-vertical-medium); + margin-bottom: $tertiary-padding; white-space: pre-line; svg { @@ -28,15 +28,24 @@ } } + blockquote { + border-radius: 8px; + background: $blockquote-background; + padding: $tertiary-padding; + min-width: 60%; + } + // Strikethrough text del { } // Tables table { + width: 100%; margin-bottom: 1.2rem; - padding: var(--spacing-vertical-medium); background-color: $base-color; + border-spacing: 0; + border: .5px solid $chrome-color; tr { td, @@ -45,15 +54,32 @@ th:first-of-type, td:last-of-type, th:last-of-type { - padding: var(--spacing-vertical-medium); + padding: $thin-padding $tertiary-padding; + text-overflow: ellipsis; } + td:last-of-type { + text-align: right; + } + + th { + background: $chrome-color; + } + + } + tr:nth-child(even){ + background: $chrome-color; } } // Image img { - margin-bottom: var(--spacing-vertical-medium); - padding-top: var(--spacing-vertical-medium); + margin-bottom: $tertiary-padding; + margin-top: $tertiary-padding; + padding: $secondary-padding; + object-fit: scale-down; + max-width: 100%; + border: $subtle-border; + box-sizing: border-box; } // Horizontal Rule @@ -77,8 +103,8 @@ } code { - margin-bottom: var(--spacing-vertical-medium); - padding: var(--spacing-vertical-medium); + margin-bottom: $tertiary-padding; + padding: $tertiary-padding; background-color: $subtle-border-color; color: $text-color; @@ -94,7 +120,7 @@ // Lists ul, ol { - margin-bottom: var(--spacing-vertical-medium); + margin-bottom: $thin-padding; > li { list-style-position: outside; @@ -106,7 +132,7 @@ } li { - margin-left: var(--spacing-vertical-large); + margin-left: $primary-padding; p { display: inline-block; diff --git a/client/scss/_row.scss b/client/scss/_row.scss index 4fbdf10c..e9ae9ded 100644 --- a/client/scss/_row.scss +++ b/client/scss/_row.scss @@ -4,21 +4,21 @@ .row-labeled { display: flex; - flex-direction: row; + flex-direction: column; flex-wrap: nowrap; justify-content: flex-start; padding-bottom: $tertiary-padding; } .row-labeled-label { - width: 30%; + width: 100%; display: flex; align-items: center; flex: 1; } .row-labeled-content { align-self: center; - width: 70%; + width: 100%; } @media (max-width: $break-point-tablet ) { diff --git a/client/scss/_variables.scss b/client/scss/_variables.scss index 603e01b1..0722103d 100644 --- a/client/scss/_variables.scss +++ b/client/scss/_variables.scss @@ -2,6 +2,7 @@ $base-color: white; //default white $card-color: white; //default white $chrome-color: lightgray; //default white (navbar) +$blockquote-background: #EEEEFF; $background-color: $base-color; //text colors @@ -11,6 +12,7 @@ $text-color: #333; $success-color: green; $failure-color: red; $grey: #9095A5; +$blockquote-text: $text-color; //borders and highlights diff --git a/client/src/components/FileViewer/index.jsx b/client/src/components/FileViewer/index.jsx index 56f05453..8cd0172e 100644 --- a/client/src/components/FileViewer/index.jsx +++ b/client/src/components/FileViewer/index.jsx @@ -38,7 +38,7 @@ class FileViewer extends React.Component {
{ this.state.fileLoaded && - + } { !this.state.fileLoaded && diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index 59360840..70d63298 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -37,7 +37,7 @@ class AssetInfo extends React.Component { { description && ( } - content={
} + content={
} /> )} {editable && ( -- 2.45.3 From c2a9d7e4c00d16ff2b0569a4249c373783ecf605 Mon Sep 17 00:00:00 2001 From: jessop Date: Tue, 5 Feb 2019 01:32:35 -0500 Subject: [PATCH 14/16] makes final tweaks to markdown --- client/src/components/FileViewer/index.jsx | 1 + client/src/containers/AssetInfo/view.jsx | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/client/src/components/FileViewer/index.jsx b/client/src/components/FileViewer/index.jsx index 8cd0172e..0d3d4866 100644 --- a/client/src/components/FileViewer/index.jsx +++ b/client/src/components/FileViewer/index.jsx @@ -1,5 +1,6 @@ import React from 'react'; import ReactMarkdown from 'react-markdown'; +// TODO: get markdown settings from siteConfig class FileViewer extends React.Component { diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index 70d63298..c1e6154d 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -22,6 +22,7 @@ class AssetInfo extends React.Component { const canonicalUrl = createCanonicalLink({ asset: { ...claimData, shortId: asset.shortId }}); const assetCanonicalUrl = `${host}${canonicalUrl}`; // Todo Issue #882 centralize all this media type detection + // Todo get markdown settings from siteConfig const embedable = contentType.split('/')[0] === 'image' || contentType === 'video/mp4'; let channelCanonicalUrl; @@ -37,7 +38,7 @@ class AssetInfo extends React.Component { { description && ( } - content={
} + content={
} /> )} {editable && ( -- 2.45.3 From 02ce5b694944a28583a187558e38f1cd668470d5 Mon Sep 17 00:00:00 2001 From: jessop Date: Tue, 5 Feb 2019 02:38:49 -0500 Subject: [PATCH 15/16] adds extension mime utility to chainquery claim model --- package-lock.json | 42 +++++++++----------------- package.json | 1 + server/chainquery/models/ClaimModel.js | 25 ++------------- 3 files changed, 17 insertions(+), 51 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7fbffe40..bfd34b73 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5688,14 +5688,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5710,20 +5708,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -5840,8 +5835,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -5853,7 +5847,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5868,7 +5861,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5876,14 +5868,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5902,7 +5892,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -5983,8 +5972,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -5996,7 +5984,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -6118,7 +6105,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -8519,16 +8505,16 @@ "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=" }, "mime-db": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", - "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==" + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" }, "mime-types": { - "version": "2.1.20", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", - "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "requires": { - "mime-db": "~1.36.0" + "mime-db": "~1.37.0" } }, "mimic-fn": { diff --git a/package.json b/package.json index f0b37f13..8698d893 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "inquirer": "^5.2.0", "ip": "^1.1.5", "make-dir": "^1.3.0", + "mime-types": "^2.1.21", "module-alias": "^2.1.0", "mysql2": "^1.6.4", "npm": "^6.3.0", diff --git a/server/chainquery/models/ClaimModel.js b/server/chainquery/models/ClaimModel.js index 7d44d166..022656f9 100644 --- a/server/chainquery/models/ClaimModel.js +++ b/server/chainquery/models/ClaimModel.js @@ -1,30 +1,9 @@ const logger = require('winston'); - -const { - assetDefaults: { thumbnail: defaultThumbnail }, - details: { host }, -} = require('@config/siteConfig'); +const mime = require('mime-types'); const getterMethods = { generated_extension() { - switch (this.content_type) { - case 'image/jpeg': - case 'image/jpg': - return 'jpg'; - case 'image/png': - return 'png'; - case 'image/gif': - return 'gif'; - case 'image/svg+xml': - return 'svg'; - case 'video/mp4': - return 'mp4'; - case 'text/markdown': - return 'md'; - default: - logger.debug('setting unknown file type as file extension jpg'); - return 'jpg'; - } + return mime.extension(this.content_type) ? mime.extension(this.content_type) : 'jpg'; }, }; -- 2.45.3 From 5063ce0724e52784a9751508ce4ae7d234ff00a7 Mon Sep 17 00:00:00 2001 From: jessop Date: Tue, 5 Feb 2019 03:55:22 -0500 Subject: [PATCH 16/16] adds some siteConfig settings for future use --- cli/defaults/siteConfig.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cli/defaults/siteConfig.json b/cli/defaults/siteConfig.json index de2eca7b..15243fce 100644 --- a/cli/defaults/siteConfig.json +++ b/cli/defaults/siteConfig.json @@ -23,6 +23,7 @@ "publishing": { "primaryClaimAddress": null, "uploadDirectory": "/home/lbry/Uploads", + "lbrynetHome": "/home/lbry", "thumbnailChannel": null, "thumbnailChannelId": null, "additionalClaimAddresses": [], @@ -39,6 +40,18 @@ "maxSizeGif": 50000000, "maxSizeVideo": 50000000 }, + "serving": { + "markdownSettings": { + "skipHtml": true, + "privilegedDisallowedTypesDescriptions": ["Image"], + "privilegedDisallowedTypesMain": [], + "publicDisallowedTypesDescriptions": ["Image"], + "publicDisallowedTypesMain": [] + }, + "customFileExtensions": { + "application/example-type": "example" + } + }, "startup": { "performChecks": true, "performUpdates": true -- 2.45.3