Refactor to reduce code duplication

This commit is contained in:
Christian Bundy 2019-06-24 17:07:18 -07:00
parent 9bb7538da9
commit 5ff11a2a4e
No known key found for this signature in database
GPG Key ID: EB541AAEF4366237
6 changed files with 167 additions and 198 deletions

143
index.js
View File

@ -5,10 +5,10 @@ const path = require('path')
const pull = require('pull-stream')
const router = require('koa-router')()
const views = require('koa-views')
const ssbRef = require('ssb-ref')
const cooler = require('./lib/cooler')
const md = require('ssb-markdown')
const lodash = require('lodash')
const prettyMs = require('pretty-ms')
const renderMsg = require('./lib/render-msg')
const app = module.exports = new Koa()
@ -24,62 +24,22 @@ router
app.use(router.routes())
async function message (ctx) {
var ssb = await cooler.connect()
var msg = await cooler.get(ssb.get, {
const ssb = await cooler.connect()
const rawMsg = await cooler.get(ssb.get, {
id: ctx.params.id,
meta: true,
private: true
})
async function fixUp (msg) {
lodash.set(msg, 'value.meta.md.block', () =>
md.block(msg.value.content.text)
)
const name = await cooler.get(
ssb.about.socialValue, { key: 'name',
dest: msg.value.author
}
)
const avatarMsg = await cooler.get(
ssb.about.socialValue, { key: 'image',
dest: msg.value.author
}
)
const avatarId = avatarMsg != null && typeof avatarMsg.link === 'string'
? avatarMsg.link
: avatarMsg
const avatarUrl = `http://localhost:8989/blobs/get/${avatarId}`
const ts = new Date(msg.value.timestamp)
lodash.set(msg, 'value.meta.timestamp.received.iso8601', ts.toISOString())
lodash.set(msg, 'value.meta.timestamp.received.since', prettyMs(Date.now() - ts, { compact: true }))
lodash.set(msg, 'value.meta.author.name', name)
lodash.set(msg, 'value.meta.author.avatar', {
id: avatarId,
url: avatarUrl
})
return msg
}
var fixedMsg = await fixUp(msg)
await ctx.render('single-message', { msg: fixedMsg })
const msg = await renderMsg(ssb)(rawMsg)
await ctx.render('single-message', { msg })
}
async function author (ctx) {
if (ssbRef.isFeed(ctx.params.id) === false) {
throw new Error(`not a feed: ${ctx.params.id}`)
}
var ssb = await cooler.connect()
var whoami = await cooler.get(ssb.whoami)
const userName = await cooler.get(
ssb.about.socialValue, {
key: 'name',
dest: whoami.id
}
)
var msgSource = await cooler.read(
ssb.createUserStream, {
@ -104,53 +64,13 @@ async function author (ctx) {
)
})
const msgs = await Promise.all(rawMsgs.map(async (msg) => {
lodash.set(msg, 'value.meta.md.block', () =>
md.block(msg.value.content.text)
)
const msgs = await Promise.all(rawMsgs.map(renderMsg(ssb)))
const name = await cooler.get(
ssb.about.socialValue, { key: 'name',
dest: msg.value.author
}
)
const avatarMsg = await cooler.get(
ssb.about.socialValue, { key: 'image',
dest: msg.value.author
}
)
const avatarId = avatarMsg != null && typeof avatarMsg.link === 'string'
? avatarMsg.link
: avatarMsg
const avatarUrl = `http://localhost:8989/blobs/get/${avatarId}`
const ts = new Date(msg.value.timestamp)
lodash.set(msg, 'value.meta.timestamp.received.iso8601', ts.toISOString())
lodash.set(msg, 'value.meta.timestamp.received.since', prettyMs(Date.now() - ts, { compact: true }))
lodash.set(msg, 'value.meta.author.name', name)
lodash.set(msg, 'value.meta.author.avatar', {
id: avatarId,
url: avatarUrl
})
return msg
}))
await ctx.render('home', { whoami, msgs, userName })
await ctx.render('home', { msgs })
}
async function home (ctx) {
var ssb = await cooler.connect()
var whoami = await cooler.get(ssb.whoami)
const userName = await cooler.get(
ssb.about.socialValue, {
key: 'name',
dest: whoami.id
}
)
var msgSource = await cooler.read(
ssb.messagesByType, {
@ -171,42 +91,9 @@ async function home (ctx) {
)
})
const msgs = await Promise.all(rawMsgs.map(async (msg) => {
lodash.set(msg, 'value.meta.md.block', () =>
md.block(msg.value.content.text)
)
const msgs = await Promise.all(rawMsgs.map(renderMsg(ssb)))
const name = await cooler.get(
ssb.about.socialValue, { key: 'name',
dest: msg.value.author
}
)
const avatarMsg = await cooler.get(
ssb.about.socialValue, { key: 'image',
dest: msg.value.author
}
)
const avatarId = avatarMsg != null && typeof avatarMsg.link === 'string'
? avatarMsg.link
: avatarMsg
const avatarUrl = `http://localhost:8989/blobs/get/${avatarId}`
const ts = new Date(msg.value.timestamp)
lodash.set(msg, 'value.meta.timestamp.received.iso8601', ts.toISOString())
lodash.set(msg, 'value.meta.timestamp.received.since', prettyMs(Date.now() - ts, { compact: true }))
lodash.set(msg, 'value.meta.author.name', name)
lodash.set(msg, 'value.meta.author.avatar', {
id: avatarId,
url: avatarUrl
})
return msg
}))
await ctx.render('home', { whoami, msgs, userName })
await ctx.render('home', { msgs })
}
if (!module.parent) {

41
lib/render-msg.js Normal file
View File

@ -0,0 +1,41 @@
const lodash = require('lodash')
const md = require('ssb-markdown')
const prettyMs = require('pretty-ms')
const cooler = require('./cooler')
const toUrl = require('./to-url')
module.exports = (ssb) => async function (msg) {
lodash.set(msg, 'value.meta.md.block', () =>
md.block(msg.value.content.text, { toUrl: toUrl(msg) })
)
const name = await cooler.get(
ssb.about.socialValue, { key: 'name',
dest: msg.value.author
}
)
const avatarMsg = await cooler.get(
ssb.about.socialValue, { key: 'image',
dest: msg.value.author
}
)
const avatarId = avatarMsg != null && typeof avatarMsg.link === 'string'
? avatarMsg.link
: avatarMsg
const avatarUrl = `http://localhost:8989/blobs/get/${avatarId}`
const ts = new Date(msg.value.timestamp)
lodash.set(msg, 'value.meta.timestamp.received.iso8601', ts.toISOString())
lodash.set(msg, 'value.meta.timestamp.received.since', prettyMs(Date.now() - ts, { compact: true }))
lodash.set(msg, 'value.meta.author.name', name)
lodash.set(msg, 'value.meta.author.avatar', {
id: avatarId,
url: avatarUrl
})
return msg
}

34
lib/to-url.js Normal file
View File

@ -0,0 +1,34 @@
const ssbRef = require('ssb-ref')
const ssbMsgs = require('ssb-msgs')
const lodash = require('lodash')
module.exports = (msg) => {
var mentionNames = {}
const mentions = lodash.get(msg, 'value.content.mentions', [])
ssbMsgs.links(mentions, 'feed').forEach(function (link) {
if (link.name && typeof link.name === 'string') {
var name = (link.name.charAt(0) === '@') ? link.name : '@' + link.name
mentionNames[name] = link.link
}
})
return (ref, isImage) => {
// @mentions
if (ref in mentionNames) {
return '/author/' + encodeURIComponent(mentionNames[ref])
}
if (ssbRef.isFeedId(ref)) {
return '/author/' + encodeURIComponent(ref)
} else if (ssbRef.isMsgId(ref)) {
return '/message/' + encodeURIComponent(ref)
} else if (ssbRef.isBlobId(ref)) {
return 'http://localhost:8989/blobs/get/' + encodeURIComponent(ref)
} else if (ref && ref[0] === '#') {
return '/hashtag/' + encodeURIComponent(ref.substr(1))
}
return ''
}
}

View File

@ -14,7 +14,8 @@
"pull-stream": "^3.6.12",
"ssb-client": "^4.7.7",
"ssb-markdown": "^5.0.1",
"ssb-uri": "^1.0.1"
"ssb-msgs": "^5.2.0",
"ssb-ref": "^2.13.9"
},
"bin": {
"oasis": "./index.js"

View File

@ -36,6 +36,10 @@
overflow-x: scroll;
}
.message img {
max-width: 100%;
}
.message code {
color: hsl(330, 75%, 50%)
}
@ -54,7 +58,7 @@
.message {
background: #fff;
padding: 1.5rem;
margin: 2rem 0;
margin: 0.75rem 0;
border-radius: 2px;
border: 1px solid #ddd;

138
yarn.lock
View File

@ -465,14 +465,6 @@ cross-spawn@^6.0.5:
shebang-command "^1.2.0"
which "^1.2.9"
d@1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
dependencies:
es5-ext "^0.10.50"
type "^1.0.1"
debug-log@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f"
@ -623,6 +615,11 @@ dir-glob@2.0.0:
arrify "^1.0.1"
path-type "^3.0.0"
discontinuous-range@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a"
integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=
doctrine@1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
@ -731,32 +728,6 @@ es-to-primitive@^1.2.0:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@~0.10.14:
version "0.10.50"
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.50.tgz#6d0e23a0abdb27018e5ac4fd09b412bc5517a778"
integrity sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==
dependencies:
es6-iterator "~2.0.3"
es6-symbol "~3.1.1"
next-tick "^1.0.0"
es6-iterator@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
dependencies:
d "1"
es5-ext "^0.10.35"
es6-symbol "^3.1.1"
es6-symbol@^3.1.0, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=
dependencies:
d "1"
es5-ext "~0.10.14"
escape-html@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
@ -1340,7 +1311,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
inherits@2, inherits@^2.0.1, inherits@^2.0.3:
inherits@2, inherits@^2.0.1:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@ -1379,7 +1350,7 @@ invert-kv@^1.0.0:
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
ip@^1.1.5:
ip@^1.1.3, ip@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
@ -1403,7 +1374,7 @@ is-arrayish@^0.2.1:
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
is-buffer@^1.1.4, is-buffer@^1.1.5:
is-buffer@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
@ -1413,6 +1384,11 @@ is-callable@^1.1.4:
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
is-canonical-base64@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/is-canonical-base64/-/is-canonical-base64-1.1.1.tgz#37b5ced939f38c07ce513838cd7945b60dbc84a7"
integrity sha512-o6t/DwgEapC0bsloqtegAQyZzQXaQ5+8fzsyf2KmLqupC2ifLFq/lMQiFCJeGpdSrK1o6GL+WW2lRU050lLlFg==
is-data-descriptor@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
@ -1560,6 +1536,11 @@ is-utf8@^0.2.0:
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
is-valid-domain@~0.0.1:
version "0.0.11"
resolved "https://registry.yarnpkg.com/is-valid-domain/-/is-valid-domain-0.0.11.tgz#9c045f5a43f68d6f0e20739ecc14d2dc22cb82fd"
integrity sha512-N+XmAifLwbpAf6d5GM5DliNOZZrq2wnmdsAuhM2gyVaKAoJQIBz4emiPC4cnh4cIGiIqg0QvAa7sCpvGkN4WCg==
is-whitespace@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f"
@ -2007,6 +1988,11 @@ mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
dependencies:
minimist "0.0.8"
moo@^0.4.3:
version "0.4.3"
resolved "https://registry.yarnpkg.com/moo/-/moo-0.4.3.tgz#3f847a26f31cf625a956a87f2b10fbc013bfd10e"
integrity sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@ -2022,6 +2008,13 @@ multicb@^1.2.1, multicb@^1.2.2:
resolved "https://registry.yarnpkg.com/multicb/-/multicb-1.2.2.tgz#90514ab0fa733c9b9f4e9870fab77180acdf3c34"
integrity sha512-PZM4dhYFmCF6uZGWpEmoPMUqJBywS9IcAgybT2GmSpYI1BvGvoWSdbio+ik+q/YD2vodhvslESWIS3NnkKYdqQ==
multiserver-address@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/multiserver-address/-/multiserver-address-1.0.1.tgz#9df723da8f30d9099ff9b70b904295653570119d"
integrity sha512-IfZMAGs9onCLkYNSnNBri3JxuvhQYllMyh3W9ry86iEDcfW9uPVsHTHDsjDxQtL+dPq3byshmA+Y4LN2wLHwNw==
dependencies:
nearley "^2.15.1"
multiserver-scopes@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/multiserver-scopes/-/multiserver-scopes-1.0.0.tgz#91496d995cd46d2a8a0d06249ee7fb8057caa4a7"
@ -2097,16 +2090,22 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
nearley@^2.15.1:
version "2.16.0"
resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.16.0.tgz#77c297d041941d268290ec84b739d0ee297e83a7"
integrity sha512-Tr9XD3Vt/EujXbZBv6UAHYoLUSMQAxSsTnm9K3koXzjzNWY195NqALeyrzLZBKzAkL3gl92BcSogqrHjD8QuUg==
dependencies:
commander "^2.19.0"
moo "^0.4.3"
railroad-diagrams "^1.0.0"
randexp "0.4.6"
semver "^5.4.1"
negotiator@0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
next-tick@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
nice-try@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
@ -2187,16 +2186,6 @@ object.pick@^1.3.0:
dependencies:
isobject "^3.0.1"
ohm-js@^0.14.0:
version "0.14.0"
resolved "https://registry.yarnpkg.com/ohm-js/-/ohm-js-0.14.0.tgz#ef5dbe33d493407916f8c4c12115161872c2bc0d"
integrity sha512-Iuiapfkaf0ZdvuJo9thtE57BT93uNOSIb3/DtwuBNBJiiT28ALzTg++w3HoAXWbQBYPem9Bd8BaNJcDYoABWUA==
dependencies:
es6-symbol "^3.1.0"
inherits "^2.0.3"
is-buffer "^1.1.4"
util-extend "^1.0.3"
on-finished@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
@ -2587,6 +2576,19 @@ punycode@^2.1.0:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
railroad-diagrams@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e"
integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=
randexp@0.4.6:
version "0.4.6"
resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3"
integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==
dependencies:
discontinuous-range "1.0.0"
ret "~0.1.10"
rc@^1.1.6:
version "1.2.8"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
@ -2796,7 +2798,7 @@ secret-handshake@^1.1.16:
pull-handshake "^1.1.1"
pull-stream "^3.4.5"
"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0:
"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0:
version "5.7.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
@ -3090,12 +3092,22 @@ ssb-markdown@^5.0.1:
markdown-it-hashtag "^0.4.0"
node-emoji "^1.10.0"
ssb-uri@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ssb-uri/-/ssb-uri-1.0.1.tgz#47d091d1a0183c31bfdcb97c3d17bbc29b7a63c0"
integrity sha512-WtjMIxiZP9FWf8W/v/mUXKiHbcwIzFX8tqXx/pyUK95he3+F7yEPJk2/nh/DbU6N9/zIoC9yWOq9BfjsfpNv4Q==
ssb-msgs@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/ssb-msgs/-/ssb-msgs-5.2.0.tgz#c681da5cd70c574c922dca4f03c521538135c243"
integrity sha1-xoHaXNcMV0ySLcpPA8UhU4E1wkM=
dependencies:
ohm-js "^0.14.0"
ssb-ref "^2.0.0"
ssb-ref@^2.0.0, ssb-ref@^2.13.9:
version "2.13.9"
resolved "https://registry.yarnpkg.com/ssb-ref/-/ssb-ref-2.13.9.tgz#1de8c5b4f12e5b743be95705656ad2706c0e3cd0"
integrity sha512-TfatNqLvoP+eW/pMIbCmNcaoDq4R2k8jCtWkwDKx4AtluN/LwtyP931d5Mh+2gmzA04W7kxkr6f5ENGgdadMYg==
dependencies:
ip "^1.1.3"
is-canonical-base64 "^1.1.1"
is-valid-domain "~0.0.1"
multiserver-address "^1.0.1"
standard-engine@~9.0.0:
version "9.0.0"
@ -3320,11 +3332,6 @@ type-is@^1.6.16:
media-typer "0.3.0"
mime-types "~2.1.24"
type@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/type/-/type-1.0.1.tgz#084c9a17fcc9151a2cdb1459905c2e45e4bb7d61"
integrity sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw==
uc.micro@^1.0.1, uc.micro@^1.0.5:
version "1.0.6"
resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
@ -3390,11 +3397,6 @@ use@^3.1.0:
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
util-extend@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f"
integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=
validate-npm-package-license@^3.0.1:
version "3.0.4"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"