aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml34
-rw-r--r--Makefile6
-rwxr-xr-xbin/candidates.js197
-rw-r--r--docker/candidate.Dockerfile7
-rw-r--r--package.json1
-rw-r--r--yarn.lock124
6 files changed, 364 insertions, 5 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 196c4e1..b528229 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -77,6 +77,21 @@ docker conflate:
when: manual
cache: {}
+docker candidate:
+ image: docker:latest
+ services:
+ - docker:dind
+ stage: docker
+ before_script:
+ - echo "$CI_JOB_TOKEN" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
+ script:
+ - docker build --pull -t "$CI_REGISTRY_IMAGE":candidate -f "docker/candidate.Dockerfile" .
+ - docker push "$CI_REGISTRY_IMAGE":candidate
+ after_script:
+ - docker logout $CI_REGISTRY
+ when: manual
+ cache: {}
+
prepare:
stage: prepare
image: "registry.gitlab.com/alantgeo/vicmap2osm:prepare"
@@ -161,6 +176,25 @@ conflate:
paths:
- dist
+candidate:
+ stage: candidate
+ image: "registry.gitlab.com/alantgeo/vicmap2osm:candidate"
+ before_script:
+ - ls data dist
+ cache:
+ <<: *global_cache
+ policy: pull
+ script:
+ - yarn install
+ - cp src/polygon-lookup-patch.js node_modules/polygon-lookup/index.js
+ - make dist/candidate
+ - make testUploadCandidates
+ when: manual
+ artifacts:
+ name: "candidate"
+ paths:
+ - dist
+
build compareSuburb:
stage: build
image: "registry.gitlab.com/alantgeo/vicmap2osm:build-osm"
diff --git a/Makefile b/Makefile
index bdebbf8..71d1b2d 100644
--- a/Makefile
+++ b/Makefile
@@ -188,7 +188,7 @@ data/victoria-admin-level10.osm.pbf: data/victoria-admin.osm.pbf
osmium tags-filter --remove-tags --output=$@ $< r/admin_level=10
data/victoria-admin-level10.osm.geojson: data/victoria-admin-level10.osm.pbf
- osmium export --overwrite --geometry-types=polygon --output-format=geojsonseq --format-option=print_record_separator=false --output $@ $<
+ osmium export --overwrite --geometry-types=polygon --add-unique-id=type_id --output-format=geojsonseq --format-option=print_record_separator=false --output $@ $<
data/victoria-admin-level10.osm.fgb: data/victoria-admin-level10.osm.geojson
ogr2ogr -f FlatGeobuf $@ $<
@@ -198,3 +198,7 @@ dist/vicmapSuburbDiffersWithOSM.geojson: dist/vicmap-osm.geojson data/victoria-a
printDifferentSuburbs: dist/vicmapSuburbDiffersWithOSM.geojson
ogr2ogr -f CSV -select '_osmSuburb,addr:suburb' /vsistdout/ $< | sort | uniq
+
+dist/candidates: data/victoria-admin-level10.osm.geojson dist/conflate
+ mkdir -p $@
+ ./bin/candidates.js $^ $@
diff --git a/bin/candidates.js b/bin/candidates.js
new file mode 100755
index 0000000..e350f6f
--- /dev/null
+++ b/bin/candidates.js
@@ -0,0 +1,197 @@
+#!/usr/bin/env node
+
+/**
+ * Prepare import candidates by conflation category and suburb as OSM XML
+ */
+
+const fs = require('fs')
+const path = require('path')
+const { Transform, pipeline } = require('stream')
+const ndjson = require('ndjson')
+const PolygonLookup = require('polygon-lookup')
+const geojsontoosm = require('geojsontoosm')
+
+const argv = require('yargs/yargs')(process.argv.slice(2))
+ .option('verbose', {
+ type: 'boolean',
+ description: 'Verbose logging'
+ })
+ .argv
+
+if (argv._.length < 3) {
+ console.error("Usage: ./conflate.js data/victoria-admin-level10.osm.geojson dist/conflate dist/candidates")
+ process.exit(1)
+}
+
+const suburbsFile = argv._[0]
+const conflatePath = argv._[1]
+const outputPath = argv._[2]
+
+if (!fs.existsSync(suburbsFile)) {
+ console.error(`${suburbsFile} not found`)
+ process.exit(1)
+}
+
+if (!fs.existsSync(conflatePath)) {
+ console.error(`${conflatePath} not found`)
+ process.exit(1)
+}
+
+// output GeoJSON Features by layer by suburb ID
+const outputFeatures = {
+ 'newAddressWithoutConflicts': {},
+ 'addrUnitFromHousenumber': {}
+}
+
+for (const layer of Object.keys(outputFeatures)) {
+ const layerPath = path.join(outputPath, layer)
+ if (!fs.existsSync(layerPath)) {
+ fs.mkdirSync(layerPath)
+ }
+}
+
+// suburb GeoJSON Features
+const suburbs = []
+
+// suburb ID to name
+const suburbName = {
+ 0: 'VIC'
+}
+
+// suburb point in polygon index
+let suburbLookup
+
+const outsideVicSuburb = {
+ type: 'Feature',
+ id: 0,
+ properties: {
+ name: 'VIC'
+ },
+ geometry: null
+}
+
+// index suburbs
+let suburbCount = 0
+const readSuburbs = new Transform({
+ readableObjectMode: true,
+ writableObjectMode: true,
+ transform(suburb, encoding, callback) {
+ suburbCount++
+
+ if (process.stdout.isTTY && suburbCount % 1000 === 0) {
+ process.stdout.write(` ${suburbCount.toLocaleString()}\r`)
+ }
+
+ if (!('id' in suburb)) {
+ console.log('Suburb missing id', suburb)
+ process.exit(1)
+ }
+
+ for (const layer of Object.keys(outputFeatures)) {
+ outputFeatures[layer][suburb.id] = []
+ }
+
+ suburbName[suburb.id] = suburb.properties.name
+
+ suburbs.push(suburb)
+
+ callback()
+ }
+})
+
+// produce import candidates
+let sourceCount = 0
+const candidates = new Transform({
+ readableObjectMode: true,
+ writableObjectMode: true,
+ transform(feature, encoding, callback) {
+ sourceCount++
+
+ if (process.stdout.isTTY && sourceCount % 1000 === 0) {
+ process.stdout.write(` ${sourceCount.toLocaleString()}\r`)
+ }
+
+ // find which suburb this address is in
+ const results = lookupSuburbs.search(...feature.geometry.coordinates.slice(0, 2), 1)
+ const suburb = results ? (results.type === 'FeatureCollection' ? (results.features ? results.features[0] : outsideVicSuburb) : results[0]) : outsideVicSuburb
+
+ outputFeatures['newAddressWithoutConflicts'][suburb.id].push(feature)
+
+ callback()
+ }
+})
+
+/**
+ * Save our candidate address data as .osm files by layer by suburb
+ */
+function outputCandidates() {
+ let i = 0
+ for (const layer of Object.keys(outputFeatures)) {
+ i++
+ let j = 0
+ for (const suburbId of Object.keys(outputFeatures[layer])) {
+ j++
+ if (process.stdout.isTTY && i % 10 === 0) {
+ process.stdout.write(` ${j.toLocaleString()}/${Object.keys(outputFeatures).length.toLocaleString()} - ${layer} - ${i.toLocaleString()}/${suburbs.length.toLocaleString()}\r`)
+ }
+
+ const suburbFeatures = outputFeatures[layer][suburbId]
+ if (suburbFeatures && suburbFeatures.length) {
+ const xml = geojsontoosm(suburbFeatures)
+ fs.writeFileSync(path.join(outputPath, layer, `${suburbId}_${suburbName[suburbId]}.osm`), xml)
+ } // else no data for this suburb
+ }
+ }
+}
+
+// first pass to index by geometry
+console.log('Step 1/X: Reading suburbs')
+pipeline(
+ fs.createReadStream(suburbsFile),
+ ndjson.parse(),
+ readSuburbs,
+ err => {
+ if (err) {
+ console.log(err)
+ process.exit(1)
+ } else {
+ console.log('Step 2/X: Creating index of Suburbs')
+ lookupSuburbs = new PolygonLookup({
+ type: 'FeatureCollection',
+ features: suburbs
+ })
+
+ console.log('Step 3/X: noOSMAddressWithinBlock')
+ pipeline(
+ fs.createReadStream(path.join(conflatePath, 'noOSMAddressWithinBlock.geojson')),
+ ndjson.parse(),
+ candidates,
+ err => {
+ if (err) {
+ console.log(err)
+ process.exit(1)
+ } else {
+
+ console.log('Step 4/X: noExactMatch')
+ pipeline(
+ fs.createReadStream(path.join(conflatePath, 'noExactMatch.geojson')),
+ ndjson.parse(),
+ candidates,
+ err => {
+ if (err) {
+ console.log(err)
+ process.exit(1)
+ } else {
+ console.log('Output candidate .osm files')
+ outputCandidates()
+ process.exit(0)
+ }
+ }
+ )
+ }
+ }
+ )
+
+ }
+ }
+)
diff --git a/docker/candidate.Dockerfile b/docker/candidate.Dockerfile
new file mode 100644
index 0000000..06421f7
--- /dev/null
+++ b/docker/candidate.Dockerfile
@@ -0,0 +1,7 @@
+FROM debian:buster-slim
+RUN apt-get -y update && apt-get -y install curl gnupg make git
+RUN curl -fsSL https://deb.nodesource.com/setup_15.x | bash -
+RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
+RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
+RUN apt-get -y update && apt-get -y install nodejs yarn python3
+RUN git clone https://github.com/grigory-rechistov/osm-bulk-upload.git upload && sed -i s/api\.openstreetmap\.org/master.apis.dev.openstreetmap.org/g upload/*.py
diff --git a/package.json b/package.json
index 3689c8e..bd34415 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,7 @@
"clone-deep": "^4.0.1",
"flatbush": "^3.3.0",
"geoflatbush": "^1.0.0",
+ "geojsontoosm": "^0.0.3",
"mktemp": "^1.0.0",
"ndjson": "^2.0.0",
"object.omit": "^3.0.0",
diff --git a/yarn.lock b/yarn.lock
index 9893e5d..fea125b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -93,6 +93,14 @@
"@turf/helpers" "^6.3.0"
"@turf/invariant" "^6.3.0"
+JSONStream@~0.7.1:
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-0.7.4.tgz#734290e41511eea7c2cfe151fbf9a563a97b9786"
+ integrity sha1-c0KQ5BUR7qfCz+FR+/mlY6l7l4Y=
+ dependencies:
+ jsonparse "0.0.5"
+ through ">=2.2.7 <3"
+
ajv@^6.12.3:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
@@ -174,6 +182,11 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@@ -243,7 +256,17 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-core-util-is@1.0.2:
+concat-stream@^1.5.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
@@ -453,6 +476,24 @@ geojson-rbush@3.x:
"@turf/meta" "6.x"
rbush "^2.0.0"
+geojson-stream@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/geojson-stream/-/geojson-stream-0.0.0.tgz#e5e09a0633ad1a63a4aec5d7c5312a3b8f91a048"
+ integrity sha1-5eCaBjOtGmOkrsXXxTEqO4+RoEg=
+ dependencies:
+ JSONStream "~0.7.1"
+ through "~2.3.4"
+
+geojsontoosm@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/geojsontoosm/-/geojsontoosm-0.0.3.tgz#a0ebb5c14d945a99bf07f7748c9c851997beb1d5"
+ integrity sha512-tewr/qmOVZ5jB3bBWTqQJwWiM/TFachoQfo3HZVoxXbuhf76tIsCccISEH5nybzfMPbRZhmmd0QtkIQLZlekdQ==
+ dependencies:
+ concat-stream "^1.5.0"
+ geojson-stream "0.0.0"
+ jxon "^1.3.2"
+ optimist "^0.6.1"
+
get-caller-file@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
@@ -533,7 +574,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@^2.0.3, inherits@^2.0.4:
+inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -664,6 +705,11 @@ isarray@^2.0.5:
resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
+isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
isobject@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
@@ -694,6 +740,11 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+jsonparse@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-0.0.5.tgz#330542ad3f0a654665b778f3eb2d9a9fa507ac64"
+ integrity sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=
+
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -704,6 +755,13 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
+jxon@^1.3.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/jxon/-/jxon-1.6.1.tgz#ec566dc1e14bc67fa38a484fd92613ed843ea290"
+ integrity sha1-7FZtweFLxn+jikhP2SYT7YQ+opA=
+ dependencies:
+ xmldom "0.1.19"
+
kind-of@^6.0.2:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
@@ -745,6 +803,11 @@ minimist@^1.2.5:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+minimist@~0.0.1:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+ integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
+
mktemp@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/mktemp/-/mktemp-1.0.0.tgz#b670eff23f52d6529e1dc362cb74ddf85448a9e3"
@@ -816,6 +879,14 @@ once@^1.3.0:
dependencies:
wrappy "1"
+optimist@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
osm-geojson@^0.8.4:
version "0.8.4"
resolved "https://registry.yarnpkg.com/osm-geojson/-/osm-geojson-0.8.4.tgz#48693374b2cceea46cc6670a334192fda0b48ce1"
@@ -860,6 +931,11 @@ polygon-lookup@^2.6.0:
point-in-polygon "1.0.1"
rbush "^2.0.2"
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
psl@^1.1.28:
version "1.8.0"
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
@@ -901,6 +977,19 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.6.0:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
+readable-stream@^2.2.2:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
regexp.prototype.flags@^1.3.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"
@@ -960,6 +1049,11 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
@@ -1044,6 +1138,13 @@ string_decoder@^1.1.1:
dependencies:
safe-buffer "~5.2.0"
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
strip-ansi@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
@@ -1081,7 +1182,7 @@ through2@^4.0.0:
dependencies:
readable-stream "3"
-through@^2.3.8, through@~2.3.4:
+"through@>=2.2.7 <3", through@^2.3.8, through@~2.3.4:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
@@ -1111,6 +1212,11 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
unbox-primitive@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
@@ -1135,7 +1241,7 @@ uri-js@^4.2.2:
dependencies:
punycode "^2.1.0"
-util-deprecate@^1.0.1:
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
@@ -1193,6 +1299,11 @@ which-typed-array@^1.1.2:
has-symbols "^1.0.1"
is-typed-array "^1.1.3"
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+ integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+
wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
@@ -1207,6 +1318,11 @@ wrappy@1:
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+xmldom@0.1.19:
+ version "0.1.19"
+ resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.19.tgz#631fc07776efd84118bf25171b37ed4d075a0abc"
+ integrity sha1-Yx/Ad3bv2EEYvyUXGzftTQdaCrw=
+
y18n@^5.0.5:
version "5.0.8"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"