Amio 2018-09-05 19:04:26 +08:00
commit c0a595c4d9
8 zmienionych plików z 252 dodań i 43 usunięć

7
libs/got.js 100644
Wyświetl plik

@ -0,0 +1,7 @@
const got = require('got')
module.exports = got.extend({
json: true,
timeout: 3200,
retry: 0
})

Wyświetl plik

@ -2,27 +2,52 @@
const pool = require('./live-pool.js')
const raven = require('./raven.js')
module.exports = async (scope, fn, paramsPath) => {
const fetchKey = `#${scope}/${paramsPath}`
module.exports = async (service, fn, paramsPath) => {
const fetchStart = new Date()
const fetchKey = `#${service}/${paramsPath}`
if (pool.has(fetchKey)) return pool.get(fetchKey)
const fetchStart = new Date()
const fetcher = fn(...paramsPath.split('/')).then(
result => {
const timeSpan = String(new Date() - fetchStart).padStart(4, ' ')
console.log(`${timeSpan}ms ${fetchKey}`)
console.log(timeSince(fetchStart), fetchKey)
return typeof result === 'object' ? result : { failed: true }
},
err => errorHandler(scope, paramsPath, err)
err => errorHandler(service, paramsPath, err)
).finally(() => {
pool.delete(fetchKey)
})
pool.set(fetchKey, fetcher)
return fetcher
}
const timeSince = startStamp => {
return String(new Date() - startStamp).padStart(4, ' ') + 'ms'
}
const gotErrorHandler = (service, paramsPath, err) => {
const serviceKey = `/${service}/${paramsPath}`
let status = 'unknown'
if (err.statusCode === '404') {
status = 'not found'
} else if (err.code === 'ETIMEDOUT') {
status = 'timeout'
}
logError(serviceKey, err, status)
sendError(serviceKey, err, status)
return { status, failed: true }
}
const errorHandler = (scope, paramsPath, err) => {
if (err.url) {
return gotErrorHandler(scope, paramsPath, err)
}
let status = 'unknown'
if (err.response && err.response.status === 404) {
@ -57,10 +82,28 @@ const errorLogger = (serviceKey, err, status) => {
}
}
// log error
const logError = (serviceKey, err, status) => {
console.error(`LIVE_FN_ERR <${status}> ${serviceKey}
@ ${err.url}
> [${err.statusCode || err.code}] ${err.message}`)
}
// send error to sentry
const sendError = (serviceKey, err, status) => {
status === 'unknown' && raven && raven.captureException(err, {
tags: {
serviceKey,
url: err.url
}
})
}
const printError = (serviceKey, status, err) => {
let details = err.message
if (status === 'unknown') {
details += `\n ${err.stack}`.replace(/^/mg, ' ')
}
console.error(`LIVE_FN_ERR <${status}> ${serviceKey} > ${err.config.url}\n`, details)
const url = (err.config && err.config.url) || ''
console.error(`LIVE_FN_ERR <${status}> ${serviceKey} > ${url}\n`, details)
}

Wyświetl plik

@ -1,4 +1,4 @@
const axios = require('../axios.js')
const got = require('../got.js')
const statuses = [
['passed', 'green'],
@ -17,8 +17,8 @@ module.exports = async (user, repo, branch = 'master') => {
const com = `https://api.travis-ci.com/${user}/${repo}.svg?branch=${branch}`
const org = `https://api.travis-ci.org/${user}/${repo}.svg?branch=${branch}`
const [svg1, svg2] = await Promise.all([
axios(com).then(({ data }) => data).catch(e => undefined),
axios(org).then(({ data }) => data).catch(e => undefined)
got(com, { json: false }).then(({ body }) => body),
got(org, { json: false }).then(({ body }) => body)
])
const result = statuses.find(st => {

Wyświetl plik

@ -23,16 +23,14 @@ module.exports = Object.entries(liveFns).map(([name, fn]) => {
color = 'grey',
failed = false
} = await (
API_HOST
? apiFetcher(req.url)
: liveFetcher(name, fn, req.params['*'])
API_HOST ? apiFetcher(req.url) : liveFetcher(name, fn, req.params['*'])
)
const style = req.headers.host === 'flat.badgen.net' ? 'flat' : undefined
req.params = { subject, status, color, style }
serveBadge(req, res, {
code: 200, // Always 200 for badges
maxAge: failed ? '0' : (Math.random() * 60 + 60).toFixed()
code: 200, // always 200 for badges
sMaxAge: failed ? '0' : (Math.random() * 60 + 60).toFixed()
})
})
})

Wyświetl plik

@ -9,10 +9,10 @@ const noneSquareIconWidths = {
}
module.exports = (req, res, options = {}) => {
const { code = 200, maxAge = '86400' } = options
const { code = 200, sMaxAge = '86400', params } = options
const hostStyle = req.headers.host === 'flat.badgen.net' ? 'flat' : undefined
const { subject, status, color } = req.params
const { subject, status, color } = params || req.params
const { style, label, list, icon, iconWidth, color: queryColor } = req.query
const badge = badgen({
@ -26,6 +26,6 @@ module.exports = (req, res, options = {}) => {
})
res.setHeader('Content-Type', 'image/svg+xml;charset=utf-8')
res.setHeader('Cache-Control', `${CACHE_CONTROL}, s-maxage=${maxAge}`)
res.setHeader('Cache-Control', `${CACHE_CONTROL}, s-maxage=${sMaxAge}`)
send(res, code, badge)
}

Wyświetl plik

@ -15,7 +15,7 @@ module.exports = serveMarked('libs/index.md', {
img { height: 20px }
pre, code { background-color: #EEF2F8; font-weight: 400 }
pre > code { padding: 0 }
pre > code { padding: 0; font-family: SF Mono, Courier, Monaco, monospace }
li { vertical-align: top; font: 16px/32px sans-serif; color: #777 }
li code { padding: 0.3em 0.5em; display: pre; color: #333 }

204
package-lock.json wygenerowano
Wyświetl plik

@ -3,6 +3,29 @@
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"@sindresorhus/is": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.11.0.tgz",
"integrity": "sha512-i5Zh5+3QARyXtzq3Bd2Lg3aBRFLcgYbNoap3Hyu1uRN8X+D+0JMqqc4uk4XjhNxfVdCnL8WHUA2wxa33QCC50w==",
"requires": {
"symbol-observable": "^1.2.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=="
}
}
},
"@szmarczak/http-timer": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.1.tgz",
"integrity": "sha512-WljfOGkmSJe8SUkl+4TPvN2ec0dpUGVyfTBQLoXJUiILs+wBSc4Kvp2N3aAWE4VwwDSLGdmD3/bufS5BgZpVSQ==",
"requires": {
"defer-to-connect": "^1.0.1"
}
},
"@types/node": {
"version": "10.5.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.6.tgz",
@ -229,7 +252,7 @@
"dependencies": {
"chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
@ -441,6 +464,20 @@
"unset-value": "^1.0.0"
}
},
"cacheable-request": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-4.0.1.tgz",
"integrity": "sha512-sJJ9ivV+1DytIdAgQG1CsRjAESGD5WnjTr4BsQ3X4xZKp3O9i6Es7MWeQ1pOTuE0bTLVEf86YFjSGpr53wz7nw==",
"requires": {
"clone-response": "^1.0.2",
"get-stream": "^3.0.0",
"http-cache-semantics": "^4.0.0",
"keyv": "^3.0.0",
"lowercase-keys": "^1.0.1",
"normalize-url": "^3.1.0",
"responselike": "^1.0.2"
}
},
"caller-path": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
@ -648,6 +685,14 @@
"wrap-ansi": "^2.0.0"
}
},
"clone-response": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
"integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
"requires": {
"mimic-response": "^1.0.0"
}
},
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@ -847,12 +892,25 @@
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true
},
"decompress-response": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
"integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
"requires": {
"mimic-response": "^1.0.0"
}
},
"deep-is": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true
},
"defer-to-connect": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.1.tgz",
"integrity": "sha512-2e0FJesseUqQj671gvZWfUyxpnFx/5n4xleamlpCD3U6Fm5dh5qzmmLNxNhtmHF06+SYVHH8QU6FACffYTnj0Q=="
},
"define-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@ -1028,6 +1086,11 @@
"integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==",
"dev": true
},
"duplexer3": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
"integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
},
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
@ -1039,6 +1102,14 @@
"safer-buffer": "^2.1.0"
}
},
"end-of-stream": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
"integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
"requires": {
"once": "^1.4.0"
}
},
"entities": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
@ -2376,8 +2447,7 @@
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
"dev": true
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
},
"get-value": {
"version": "2.0.6",
@ -2454,6 +2524,33 @@
"pinkie-promise": "^2.0.0"
}
},
"got": {
"version": "9.2.0",
"resolved": "https://registry.npmjs.org/got/-/got-9.2.0.tgz",
"integrity": "sha512-H6GUT6PMamiIm5pVufgmfmuk7Tl92Vr2RHf8n587SGs5HPiarOUVrmyL6bGIfX/mJ5IEUMpHEdGR03LSIHhZrQ==",
"requires": {
"@sindresorhus/is": "^0.11.0",
"@szmarczak/http-timer": "^1.1.0",
"cacheable-request": "^4.0.1",
"decompress-response": "^3.3.0",
"duplexer3": "^0.1.4",
"get-stream": "^4.0.0",
"mimic-response": "^1.0.1",
"p-cancelable": "^0.5.0",
"to-readable-stream": "^1.0.0",
"url-parse-lax": "^3.0.0"
},
"dependencies": {
"get-stream": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.0.0.tgz",
"integrity": "sha512-FneLKMENeOR7wOK0/ZXCh+lwqtnPwkeunJjRN28LPqzGvNAhYvrTAhXv6xDm4vsJ0M7lcRbIYHQudKsSy2RtSQ==",
"requires": {
"pump": "^3.0.0"
}
}
}
},
"graceful-fs": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
@ -2590,6 +2687,11 @@
}
}
},
"http-cache-semantics": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
"integrity": "sha512-NtexGRtaV5z3ZUX78W9UDTOJPBdpqms6RmwQXmOhHws7CuQK3cqIoQtnmeqi1VvVD6u6eMMRL0sKE9BCZXTDWQ=="
},
"http-errors": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
@ -2962,6 +3064,11 @@
"yargs": "^11.0.0"
}
},
"json-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
"integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
},
"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",
@ -3013,6 +3120,14 @@
"array-includes": "^3.0.3"
}
},
"keyv": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
"integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
"requires": {
"json-buffer": "3.0.0"
}
},
"kind-of": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
@ -3094,6 +3209,11 @@
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
"lowercase-keys": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
"integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
},
"lru-cache": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
@ -3293,6 +3413,11 @@
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
"dev": true
},
"mimic-response": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
"integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@ -3431,6 +3556,11 @@
"remove-trailing-separator": "^1.0.1"
}
},
"normalize-url": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
"integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg=="
},
"npm-run-path": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
@ -6155,7 +6285,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1"
}
@ -6227,6 +6356,11 @@
"own-or": "^1.0.0"
}
},
"p-cancelable": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.5.0.tgz",
"integrity": "sha512-UTykUaG4vhPAMNi1/GZKGdCNDj4qGnq6taAjnOG0KCx5Fva3b1vtskXtagAePmgIhUrdcoDGEvAQIHaSPXEZWg=="
},
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
@ -6466,6 +6600,11 @@
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
"dev": true
},
"prepend-http": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
"integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
},
"pretty-error": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
@ -6503,6 +6642,15 @@
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
"dev": true
},
"pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
"punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
@ -6520,22 +6668,15 @@
"integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
},
"raven": {
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/raven/-/raven-2.6.3.tgz",
"integrity": "sha512-bKre7qlDW+y1+G2bUtCuntdDYc8o5v1T233t0vmJfbj8ttGOgLrGRlYB8saelVMW9KUAJNLrhFkAKOwFWFJonw==",
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/raven/-/raven-2.6.4.tgz",
"integrity": "sha512-6PQdfC4+DQSFncowthLf+B6Hr0JpPsFBgTVYTAOq7tCmx/kR4SXbeawtPch20+3QfUcQDoJBLjWW1ybvZ4kXTw==",
"requires": {
"cookie": "0.3.1",
"md5": "^2.2.1",
"stack-trace": "0.0.10",
"timed-out": "4.0.1",
"uuid": "3.0.0"
},
"dependencies": {
"uuid": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.0.tgz",
"integrity": "sha1-Zyj8BFnEUNeWqZwxg3VpvfZy1yg="
}
"uuid": "3.3.2"
}
},
"raw-body": {
@ -6754,6 +6895,14 @@
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
"dev": true
},
"responselike": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
"integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
"requires": {
"lowercase-keys": "^1.0.0"
}
},
"restore-cursor": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
@ -6837,9 +6986,9 @@
"integrity": "sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg=="
},
"serve-handler": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-5.0.0.tgz",
"integrity": "sha512-VbNr1Yk4cDMAdIyVr5J1vPtGuXUsuu0R8iht+reK0g8t48fSuGWqnsIYVh3xXFJynFDHMLbPQ9mll+/hhmuGEQ==",
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-5.0.2.tgz",
"integrity": "sha512-sYhCyS//dNTTFHb8OlL/bFTTwACtlvnT2ybA0v1hTHxEnQ9tN1m2ifBIv4ozHUE8OjYCYUbuJ6No0enWdKHi5w==",
"requires": {
"bytes": "3.0.0",
"content-disposition": "0.5.2",
@ -7533,6 +7682,11 @@
}
}
},
"to-readable-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
"integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q=="
},
"to-regex": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
@ -7737,6 +7891,14 @@
"integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
"dev": true
},
"url-parse-lax": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
"integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
"requires": {
"prepend-http": "^2.0.0"
}
},
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@ -7757,8 +7919,7 @@
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
"dev": true
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"validate-npm-package-license": {
"version": "3.0.4",
@ -7855,8 +8016,7 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"write": {
"version": "0.2.1",

Wyświetl plik

@ -22,12 +22,13 @@
"cheerio": "^1.0.0-rc.2",
"chrome-webstore": "^1.0.0",
"date-fns": "^1.29.0",
"got": "^9.2.0",
"micro": "^9.3.3",
"micro-fork": "^0.1.0",
"millify": "^2.0.1",
"raven": "^2.6.3",
"raven": "^2.6.4",
"semver": "^5.5.1",
"serve-handler": "^5.0.0",
"serve-handler": "^5.0.2",
"serve-marked": "^0.3.3",
"xml2js": "^0.4.19"
},