The map kinda works

This commit is contained in:
James Lyne 2020-11-23 12:13:28 +00:00
parent 63a799486a
commit 151904c343
114 changed files with 2202 additions and 371 deletions

682
package-lock.json generated
View File

@ -1047,6 +1047,74 @@
"to-fast-properties": "^2.0.0" "to-fast-properties": "^2.0.0"
} }
}, },
"@eslint/eslintrc": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz",
"integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
"debug": "^4.1.1",
"espree": "^7.3.0",
"globals": "^12.1.0",
"ignore": "^4.0.6",
"import-fresh": "^3.2.1",
"js-yaml": "^3.13.1",
"lodash": "^4.17.19",
"minimatch": "^3.0.4",
"strip-json-comments": "^3.1.1"
},
"dependencies": {
"acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"dev": true
},
"espree": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz",
"integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==",
"dev": true,
"requires": {
"acorn": "^7.4.0",
"acorn-jsx": "^5.2.0",
"eslint-visitor-keys": "^1.3.0"
}
},
"globals": {
"version": "12.4.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
"integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
"dev": true,
"requires": {
"type-fest": "^0.8.1"
}
},
"import-fresh": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz",
"integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==",
"dev": true,
"requires": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
}
},
"resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
},
"type-fest": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
"dev": true
}
}
},
"@hapi/address": { "@hapi/address": {
"version": "2.1.4", "version": "2.1.4",
"resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
@ -1107,12 +1175,40 @@
"glob-to-regexp": "^0.3.0" "glob-to-regexp": "^0.3.0"
} }
}, },
"@nodelib/fs.scandir": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
"integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
"dev": true,
"requires": {
"@nodelib/fs.stat": "2.0.3",
"run-parallel": "^1.1.9"
},
"dependencies": {
"@nodelib/fs.stat": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
"integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
"dev": true
}
}
},
"@nodelib/fs.stat": { "@nodelib/fs.stat": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
"integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
"dev": true "dev": true
}, },
"@nodelib/fs.walk": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
"integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
"dev": true,
"requires": {
"@nodelib/fs.scandir": "2.1.3",
"fastq": "^1.6.0"
}
},
"@soda/friendly-errors-webpack-plugin": { "@soda/friendly-errors-webpack-plugin": {
"version": "1.7.1", "version": "1.7.1",
"resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz", "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz",
@ -1240,12 +1336,6 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"@types/eslint-visitor-keys": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
"integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==",
"dev": true
},
"@types/express": { "@types/express": {
"version": "4.17.9", "version": "4.17.9",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.9.tgz", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.9.tgz",
@ -1269,6 +1359,12 @@
"@types/range-parser": "*" "@types/range-parser": "*"
} }
}, },
"@types/geojson": {
"version": "7946.0.7",
"resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.7.tgz",
"integrity": "sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ==",
"dev": true
},
"@types/glob": { "@types/glob": {
"version": "7.1.3", "version": "7.1.3",
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
@ -1305,6 +1401,15 @@
"integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==",
"dev": true "dev": true
}, },
"@types/leaflet": {
"version": "1.5.19",
"resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.5.19.tgz",
"integrity": "sha512-ZAKqfvdU/+KFoCpf8aUba09F8mfSc8R2esq++Cha3E2DgwS5K/I/4eJ+0JylrVHZivgY7PSAeXFv/izP+81/MQ==",
"dev": true,
"requires": {
"@types/geojson": "*"
}
},
"@types/mime": { "@types/mime": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz",
@ -1460,90 +1565,16 @@
} }
}, },
"@typescript-eslint/eslint-plugin": { "@typescript-eslint/eslint-plugin": {
"version": "2.34.0", "version": "4.8.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.8.1.tgz",
"integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", "integrity": "sha512-d7LeQ7dbUrIv5YVFNzGgaW3IQKMmnmKFneRWagRlGYOSfLJVaRbj/FrBNOBC1a3tVO+TgNq1GbHvRtg1kwL0FQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@typescript-eslint/experimental-utils": "2.34.0", "@typescript-eslint/experimental-utils": "4.8.1",
"@typescript-eslint/scope-manager": "4.8.1",
"debug": "^4.1.1",
"functional-red-black-tree": "^1.0.1", "functional-red-black-tree": "^1.0.1",
"regexpp": "^3.0.0", "regexpp": "^3.0.0",
"tsutils": "^3.17.1"
},
"dependencies": {
"regexpp": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
"integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
"dev": true
},
"tsutils": {
"version": "3.17.1",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
"integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
"dev": true,
"requires": {
"tslib": "^1.8.1"
}
}
}
},
"@typescript-eslint/experimental-utils": {
"version": "2.34.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz",
"integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.3",
"@typescript-eslint/typescript-estree": "2.34.0",
"eslint-scope": "^5.0.0",
"eslint-utils": "^2.0.0"
},
"dependencies": {
"eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
"requires": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
}
},
"eslint-utils": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
"dev": true,
"requires": {
"eslint-visitor-keys": "^1.1.0"
}
}
}
},
"@typescript-eslint/parser": {
"version": "2.34.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz",
"integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==",
"dev": true,
"requires": {
"@types/eslint-visitor-keys": "^1.0.0",
"@typescript-eslint/experimental-utils": "2.34.0",
"@typescript-eslint/typescript-estree": "2.34.0",
"eslint-visitor-keys": "^1.1.0"
}
},
"@typescript-eslint/typescript-estree": {
"version": "2.34.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz",
"integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==",
"dev": true,
"requires": {
"debug": "^4.1.1",
"eslint-visitor-keys": "^1.1.0",
"glob": "^7.1.6",
"is-glob": "^4.0.1",
"lodash": "^4.17.15",
"semver": "^7.3.2", "semver": "^7.3.2",
"tsutils": "^3.17.1" "tsutils": "^3.17.1"
}, },
@ -1565,6 +1596,221 @@
} }
} }
}, },
"@typescript-eslint/experimental-utils": {
"version": "4.8.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.8.1.tgz",
"integrity": "sha512-WigyLn144R3+lGATXW4nNcDJ9JlTkG8YdBWHkDlN0lC3gUGtDi7Pe3h5GPvFKMcRz8KbZpm9FJV9NTW8CpRHpg==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.3",
"@typescript-eslint/scope-manager": "4.8.1",
"@typescript-eslint/types": "4.8.1",
"@typescript-eslint/typescript-estree": "4.8.1",
"eslint-scope": "^5.0.0",
"eslint-utils": "^2.0.0"
},
"dependencies": {
"eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
"requires": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
}
}
}
},
"@typescript-eslint/parser": {
"version": "4.8.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.8.1.tgz",
"integrity": "sha512-QND8XSVetATHK9y2Ltc/XBl5Ro7Y62YuZKnPEwnNPB8E379fDsvzJ1dMJ46fg/VOmk0hXhatc+GXs5MaXuL5Uw==",
"dev": true,
"requires": {
"@typescript-eslint/scope-manager": "4.8.1",
"@typescript-eslint/types": "4.8.1",
"@typescript-eslint/typescript-estree": "4.8.1",
"debug": "^4.1.1"
}
},
"@typescript-eslint/scope-manager": {
"version": "4.8.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.8.1.tgz",
"integrity": "sha512-r0iUOc41KFFbZdPAdCS4K1mXivnSZqXS5D9oW+iykQsRlTbQRfuFRSW20xKDdYiaCoH+SkSLeIF484g3kWzwOQ==",
"dev": true,
"requires": {
"@typescript-eslint/types": "4.8.1",
"@typescript-eslint/visitor-keys": "4.8.1"
}
},
"@typescript-eslint/types": {
"version": "4.8.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.8.1.tgz",
"integrity": "sha512-ave2a18x2Y25q5K05K/U3JQIe2Av4+TNi/2YuzyaXLAsDx6UZkz1boZ7nR/N6Wwae2PpudTZmHFXqu7faXfHmA==",
"dev": true
},
"@typescript-eslint/typescript-estree": {
"version": "4.8.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.8.1.tgz",
"integrity": "sha512-bJ6Fn/6tW2g7WIkCWh3QRlaSU7CdUUK52shx36/J7T5oTQzANvi6raoTsbwGM11+7eBbeem8hCCKbyvAc0X3sQ==",
"dev": true,
"requires": {
"@typescript-eslint/types": "4.8.1",
"@typescript-eslint/visitor-keys": "4.8.1",
"debug": "^4.1.1",
"globby": "^11.0.1",
"is-glob": "^4.0.1",
"lodash": "^4.17.15",
"semver": "^7.3.2",
"tsutils": "^3.17.1"
},
"dependencies": {
"@nodelib/fs.stat": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
"integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
"dev": true
},
"array-union": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"dev": true
},
"braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"requires": {
"fill-range": "^7.0.1"
}
},
"dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
"requires": {
"path-type": "^4.0.0"
}
},
"fast-glob": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz",
"integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==",
"dev": true,
"requires": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.0",
"merge2": "^1.3.0",
"micromatch": "^4.0.2",
"picomatch": "^2.2.1"
}
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
},
"globby": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz",
"integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==",
"dev": true,
"requires": {
"array-union": "^2.1.0",
"dir-glob": "^3.0.1",
"fast-glob": "^3.1.1",
"ignore": "^5.1.4",
"merge2": "^1.3.0",
"slash": "^3.0.0"
}
},
"ignore": {
"version": "5.1.8",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
"integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
"dev": true
},
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
},
"micromatch": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
"integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
"dev": true,
"requires": {
"braces": "^3.0.1",
"picomatch": "^2.0.5"
}
},
"path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true
},
"semver": {
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
"integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
"dev": true
},
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"requires": {
"is-number": "^7.0.0"
}
},
"tsutils": {
"version": "3.17.1",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
"integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
"dev": true,
"requires": {
"tslib": "^1.8.1"
}
}
}
},
"@typescript-eslint/visitor-keys": {
"version": "4.8.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.8.1.tgz",
"integrity": "sha512-3nrwXFdEYALQh/zW8rFwP4QltqsanCDz4CwWMPiIZmwlk9GlvBeueEIbq05SEq4ganqM0g9nh02xXgv5XI3PeQ==",
"dev": true,
"requires": {
"@typescript-eslint/types": "4.8.1",
"eslint-visitor-keys": "^2.0.0"
},
"dependencies": {
"eslint-visitor-keys": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
"integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
"dev": true
}
}
},
"@vue/babel-helper-vue-jsx-merge-props": { "@vue/babel-helper-vue-jsx-merge-props": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz", "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz",
@ -4984,6 +5230,23 @@
} }
} }
}, },
"enquirer": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
"integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
"dev": true,
"requires": {
"ansi-colors": "^4.1.1"
},
"dependencies": {
"ansi-colors": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
"integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
"dev": true
}
}
},
"entities": { "entities": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
@ -5066,22 +5329,24 @@
"dev": true "dev": true
}, },
"eslint": { "eslint": {
"version": "6.8.0", "version": "7.14.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.14.0.tgz",
"integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "integrity": "sha512-5YubdnPXrlrYAFCKybPuHIAH++PINe1pmKNc5wQRB9HSbqIK1ywAnntE3Wwua4giKu0bjligf1gLF6qxMGOYRA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/code-frame": "^7.0.0", "@babel/code-frame": "^7.0.0",
"@eslint/eslintrc": "^0.2.1",
"ajv": "^6.10.0", "ajv": "^6.10.0",
"chalk": "^2.1.0", "chalk": "^4.0.0",
"cross-spawn": "^6.0.5", "cross-spawn": "^7.0.2",
"debug": "^4.0.1", "debug": "^4.0.1",
"doctrine": "^3.0.0", "doctrine": "^3.0.0",
"eslint-scope": "^5.0.0", "enquirer": "^2.3.5",
"eslint-utils": "^1.4.3", "eslint-scope": "^5.1.1",
"eslint-visitor-keys": "^1.1.0", "eslint-utils": "^2.1.0",
"espree": "^6.1.2", "eslint-visitor-keys": "^2.0.0",
"esquery": "^1.0.1", "espree": "^7.3.0",
"esquery": "^1.2.0",
"esutils": "^2.0.2", "esutils": "^2.0.2",
"file-entry-cache": "^5.0.1", "file-entry-cache": "^5.0.1",
"functional-red-black-tree": "^1.0.1", "functional-red-black-tree": "^1.0.1",
@ -5090,26 +5355,75 @@
"ignore": "^4.0.6", "ignore": "^4.0.6",
"import-fresh": "^3.0.0", "import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4", "imurmurhash": "^0.1.4",
"inquirer": "^7.0.0",
"is-glob": "^4.0.0", "is-glob": "^4.0.0",
"js-yaml": "^3.13.1", "js-yaml": "^3.13.1",
"json-stable-stringify-without-jsonify": "^1.0.1", "json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.3.0", "levn": "^0.4.1",
"lodash": "^4.17.14", "lodash": "^4.17.19",
"minimatch": "^3.0.4", "minimatch": "^3.0.4",
"mkdirp": "^0.5.1",
"natural-compare": "^1.4.0", "natural-compare": "^1.4.0",
"optionator": "^0.8.3", "optionator": "^0.9.1",
"progress": "^2.0.0", "progress": "^2.0.0",
"regexpp": "^2.0.1", "regexpp": "^3.1.0",
"semver": "^6.1.2", "semver": "^7.2.1",
"strip-ansi": "^5.2.0", "strip-ansi": "^6.0.0",
"strip-json-comments": "^3.0.1", "strip-json-comments": "^3.1.0",
"table": "^5.2.3", "table": "^5.2.3",
"text-table": "^0.2.0", "text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3" "v8-compile-cache": "^2.0.3"
}, },
"dependencies": { "dependencies": {
"acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"dev": true
},
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"requires": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
}
},
"eslint-scope": { "eslint-scope": {
"version": "5.1.1", "version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@ -5120,6 +5434,31 @@
"estraverse": "^4.1.1" "estraverse": "^4.1.1"
} }
}, },
"eslint-visitor-keys": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
"integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
"dev": true
},
"espree": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz",
"integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==",
"dev": true,
"requires": {
"acorn": "^7.4.0",
"acorn-jsx": "^5.2.0",
"eslint-visitor-keys": "^1.3.0"
},
"dependencies": {
"eslint-visitor-keys": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true
}
}
},
"globals": { "globals": {
"version": "12.4.0", "version": "12.4.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
@ -5129,6 +5468,12 @@
"type-fest": "^0.8.1" "type-fest": "^0.8.1"
} }
}, },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"import-fresh": { "import-fresh": {
"version": "3.2.2", "version": "3.2.2",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz",
@ -5139,6 +5484,12 @@
"resolve-from": "^4.0.0" "resolve-from": "^4.0.0"
} }
}, },
"path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true
},
"resolve-from": { "resolve-from": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@ -5146,18 +5497,33 @@
"dev": true "dev": true
}, },
"semver": { "semver": {
"version": "6.3.0", "version": "7.3.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
"dev": true "dev": true
}, },
"strip-ansi": { "shebang-command": {
"version": "5.2.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true, "dev": true,
"requires": { "requires": {
"ansi-regex": "^4.1.0" "shebang-regex": "^3.0.0"
}
},
"shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
} }
}, },
"type-fest": { "type-fest": {
@ -5165,6 +5531,15 @@
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
"dev": true "dev": true
},
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
} }
} }
}, },
@ -5221,9 +5596,9 @@
} }
}, },
"eslint-utils": { "eslint-utils": {
"version": "1.4.3", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
"integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
"dev": true, "dev": true,
"requires": { "requires": {
"eslint-visitor-keys": "^1.1.0" "eslint-visitor-keys": "^1.1.0"
@ -5644,6 +6019,15 @@
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"dev": true "dev": true
}, },
"fastq": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz",
"integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==",
"dev": true,
"requires": {
"reusify": "^1.0.4"
}
},
"faye-websocket": { "faye-websocket": {
"version": "0.10.0", "version": "0.10.0",
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
@ -7443,13 +7827,13 @@
"dev": true "dev": true
}, },
"levn": { "levn": {
"version": "0.3.0", "version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"prelude-ls": "~1.1.2", "prelude-ls": "^1.2.1",
"type-check": "~0.3.2" "type-check": "~0.4.0"
} }
}, },
"lines-and-columns": { "lines-and-columns": {
@ -8161,6 +8545,12 @@
"integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
"dev": true "dev": true
}, },
"normalize-scss": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/normalize-scss/-/normalize-scss-7.0.1.tgz",
"integrity": "sha512-qj16bWnYs+9/ac29IgGjySg4R5qQTp1lXfm7ApFOZNVBYFY8RZ3f8+XQNDDLHeDtI3Ba7Jj4+LuPgz9v/fne2A==",
"dev": true
},
"normalize-url": { "normalize-url": {
"version": "3.3.0", "version": "3.3.0",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
@ -8400,17 +8790,17 @@
} }
}, },
"optionator": { "optionator": {
"version": "0.8.3", "version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
"dev": true, "dev": true,
"requires": { "requires": {
"deep-is": "~0.1.3", "deep-is": "^0.1.3",
"fast-levenshtein": "~2.0.6", "fast-levenshtein": "^2.0.6",
"levn": "~0.3.0", "levn": "^0.4.1",
"prelude-ls": "~1.1.2", "prelude-ls": "^1.2.1",
"type-check": "~0.3.2", "type-check": "^0.4.0",
"word-wrap": "~1.2.3" "word-wrap": "^1.2.3"
} }
}, },
"ora": { "ora": {
@ -9362,9 +9752,9 @@
"dev": true "dev": true
}, },
"prelude-ls": { "prelude-ls": {
"version": "1.1.2", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true "dev": true
}, },
"prepend-http": { "prepend-http": {
@ -9667,9 +10057,9 @@
} }
}, },
"regexpp": { "regexpp": {
"version": "2.0.1", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
"integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
"dev": true "dev": true
}, },
"regexpu-core": { "regexpu-core": {
@ -9890,6 +10280,12 @@
"integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
"dev": true "dev": true
}, },
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true
},
"rgb-regex": { "rgb-regex": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
@ -9927,6 +10323,12 @@
"integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
"dev": true "dev": true
}, },
"run-parallel": {
"version": "1.1.10",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz",
"integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==",
"dev": true
},
"run-queue": { "run-queue": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
@ -11321,12 +11723,12 @@
"dev": true "dev": true
}, },
"type-check": { "type-check": {
"version": "0.3.2", "version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true, "dev": true,
"requires": { "requires": {
"prelude-ls": "~1.1.2" "prelude-ls": "^1.2.1"
} }
}, },
"type-fest": { "type-fest": {

View File

@ -13,8 +13,9 @@
"vue-class-component": "^8.0.0-0" "vue-class-component": "^8.0.0-0"
}, },
"devDependencies": { "devDependencies": {
"@typescript-eslint/eslint-plugin": "^2.33.0", "@types/leaflet": "^1.5.19",
"@typescript-eslint/parser": "^2.33.0", "@typescript-eslint/eslint-plugin": "^4.1.0",
"@typescript-eslint/parser": "^4.1.0",
"@vue/cli-plugin-babel": "~4.5.0", "@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0", "@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-plugin-typescript": "^4.5.9", "@vue/cli-plugin-typescript": "^4.5.9",
@ -23,9 +24,10 @@
"@vue/eslint-config-typescript": "^5.0.2", "@vue/eslint-config-typescript": "^5.0.2",
"axios": "^0.21.0", "axios": "^0.21.0",
"babel-eslint": "^10.1.0", "babel-eslint": "^10.1.0",
"eslint": "^6.7.2", "eslint": "^7.5.0",
"eslint-plugin-vue": "^7.0.0-0", "eslint-plugin-vue": "^7.0.0-0",
"leaflet": "^1.7.1", "leaflet": "^1.7.1",
"normalize-scss": "^7.0.1",
"sass": "^1.29.0", "sass": "^1.29.0",
"sass-loader": "^10.1.0", "sass-loader": "^10.1.0",
"typescript": "~3.9.3", "typescript": "~3.9.3",

View File

@ -13,10 +13,6 @@
<meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="stylesheet" type="text/css" href="css/standalone.css?_=a" media="screen" />
<link rel="stylesheet" type="text/css" href="css/dynmap_style.css?_=a" media="screen" />
<link rel="stylesheet" type="text/css" href="css/rtgame.css?_=a" media="screen" />
<link rel="icon" href="images/dynmap.ico" type="image/ico" /> <link rel="icon" href="images/dynmap.ico" type="image/ico" />
</head> </head>
<body> <body>
@ -24,6 +20,7 @@
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript> </noscript>
<div id="mcmap" class="dynmap"></div> <div id="mcmap" class="dynmap"></div>
<script src="standalone/config.js"></script>
<!-- built files will be auto injected --> <!-- built files will be auto injected -->
</body> </body>
</html> </html>

View File

@ -1,27 +1,76 @@
<template> <template>
<img alt="Vue logo" src="./assets/logo.png"> <Leaflet></Leaflet>
<HelloWorld msg="Welcome to Your Vue.js + TypeScript App"/> <Sidebar></Sidebar>
</template> </template>
<script lang="ts"> <script lang="ts">
import { Options, Vue } from 'vue-class-component'; import {defineComponent, computed, ref} from 'vue';
import HelloWorld from './components/HelloWorld.vue'; import Leaflet from './components/Leaflet.vue';
import Sidebar from './components/Sidebar.vue';
import {ActionTypes, useStore} from "./store";
@Options({ export default defineComponent({
name: 'WorldList',
components: { components: {
HelloWorld, Leaflet,
Sidebar,
}, },
})
export default class App extends Vue {} setup() {
let store = useStore(),
updateInterval = computed(() => store.state.configuration.updateInterval),
updatesEnabled = ref(false),
updateTimeout = ref(0);
return {
store,
updateInterval,
updatesEnabled,
updateTimeout
}
},
mounted() {
this.loadConfiguration();
},
beforeUnmount() {
this.stopUpdates();
},
methods: {
loadConfiguration() {
useStore().dispatch(ActionTypes.LOAD_CONFIGRUATION, undefined).then(() => {
this.startUpdates();
});
},
startUpdates() {
this.updatesEnabled = true;
this.update();
},
update() {
useStore().dispatch(ActionTypes.GET_UPDATE, undefined).then(() => {
if(this.updatesEnabled) {
this.updateTimeout = setTimeout(() => this.update(), this.updateInterval);
}
});
},
stopUpdates() {
this.updatesEnabled = false;
if (this.updateTimeout) {
clearTimeout(this.updateTimeout);
}
this.updateTimeout = 0;
}
}
});
</script> </script>
<style lang="scss"> <style lang="scss">
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style> </style>

View File

@ -1,2 +1,129 @@
import axios from 'axios'; import axios from 'axios';
import {
DynmapConfigurationResponse, DynmapMap, DynmapMessageConfig,
DynmapPlayer,
DynmapServerConfig,
DynmapUpdateResponse,
DynmapWorld
} from "@/dynmap";
export default {
getConfiguration(): Promise<DynmapConfigurationResponse> {
return axios.get(window.config.url.configuration).then((response): DynmapConfigurationResponse => {
const data = response.data,
config: DynmapServerConfig = {
version: data.dynmapversion || '',
allowChat: data.allowwebchat || false,
chatRequiresLogin: data['webchat-requires-login'] || false,
chatInterval: data['webchat-interval'] || 5,
defaultMap: data.defaultmap || undefined,
defaultWorld: data.defaultworld || undefined,
defaultZoom: data.defaultZoom || 0,
followMap: data.followmap || undefined,
followZoom: data.followzoom || 0,
updateInterval: data.updaterate || 3000,
showLayerControl: data.showlayercontrol || true,
title: data.title || 'Dynmap',
loginEnabled: data['login-enabled'] || false,
loginRequired: data.loginrequired || false,
maxPlayers: data.maxcount || 0,
hash: data.confighash || 0,
},
messages: DynmapMessageConfig = {
chatNotAllowed: data['msg-chatnotallowed'] || '',
chatRequiresLogin: data['msg-chatrequireslogin'] || '',
chatCooldown: data.spammessage || '',
mapTypes: data['msg-maptypes'] || '',
players: data['msg-players'] || '',
playerJoin: data.joinmessage || '',
playerQuit: data.quitmessage || '',
anonymousJoin: data['msg-hiddennamejoin'] || '',
anonymousQuit: data['msg-hiddennamequit'] || '',
},
worlds: Array<DynmapWorld> = [];
(data.worlds || []).forEach((world: any) => {
const maps: Array<DynmapMap> = [];
(world.maps || []).forEach((map: any) => {
maps.push({
world: world.name,
background: map.background || '#000000',
backgroundDay: map.backgroundday || '#000000',
backgroundNight: map.backgroundnight || '#000000',
compassView: map.compassView || 'S',
icon: map.icon || undefined,
imageFormat: map.imageFormat || 'png',
name: map.name || '(Unnamed map)',
nightAndDay: map.nightandday || false,
prefix: map.prefix || '',
protected: map.protected || false,
title: map.title || '',
type: map.type || 'HDMapType',
mapToWorld: map.maptoworld || [0, 0, 0, 0, 0, 0, 0, 0, 0],
worldToMap: map.worldtomap || [0, 0, 0, 0, 0, 0, 0, 0, 0],
nativeZoomLevels: map.mapzoomout || 1,
extraZoomLevels: map.mapzoomin || 0,
});
});
worlds.push({
seaLevel: world.sealevel || 64,
name: world.name || '(Unnamed world)',
protected: world.protected || false,
title: world.title || '',
height: world.height || 256,
center: {
x: world.center.x || 0,
y: world.center.y || 0,
z: world.center.z || 0
},
maps,
})
});
return {
config,
messages,
worlds,
}
});
},
getUpdate(requestId: number, world: string, timestamp: number): Promise<DynmapUpdateResponse> {
let url = window.config.url.update;
url = url.replace('{world}', world);
url = url.replace('{timestamp}', timestamp.toString());
return axios.get(url).then((response): DynmapUpdateResponse => {
const data = response.data,
players: Array<DynmapPlayer> = [];
(data.players || []).forEach((player: any) => {
players.push({
account: player.account || "",
health: player.health || 0,
armor: player.armor || 0,
name: player.name || "Steve",
sort: player.sort || 0,
location: {
x: player.x || 0,
y: player.y || 0,
z: player.z || 0,
world: player.world || undefined,
}
});
});
return {
timeOfDay: data.servertime || 0,
thundering: data.isThundering || false,
raining: data.hasStorm || false,
playerCount: data.count || 0,
configHash: data.configHash || 0,
timestamp: data.timestamp || 0,
players,
}
});
}
}

View File

@ -4,6 +4,10 @@
border: 1px solid red; border: 1px solid red;
}*/ }*/
html, body {
height: 100%;
}
/******************* /*******************
* Attribution placement * Attribution placement
*/ */
@ -15,6 +19,11 @@
* Page setup * Page setup
*/ */
.dynmap {
height: 100%;
}
.dynmap .map .tile img, img { .dynmap .map .tile img, img {
image-rendering: -moz-crisp-edges; image-rendering: -moz-crisp-edges;
image-rendering: pixelated; image-rendering: pixelated;
@ -206,7 +215,7 @@
margin-right: 0px; margin-right: 0px;
} }
.dynmap .sidebar < .hitbar:hover { .dynmap .sidebar > .hitbar:hover {
margin-right: 0px; margin-right: 0px;
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 973 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 649 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 963 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 959 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
src/assets/images/armor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 B

BIN
src/assets/images/blank.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 993 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 B

BIN
src/assets/images/book.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 868 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 395 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 802 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

BIN
src/assets/images/heart.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

BIN
src/assets/images/home.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 B

BIN
src/assets/images/moon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1019 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1005 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

BIN
src/assets/images/sign.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 681 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 B

BIN
src/assets/images/spawn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 943 B

BIN
src/assets/images/sun.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
src/assets/images/warp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 B

View File

@ -0,0 +1,50 @@
<template>
<div class="map">
<MapLayer v-for="[name, map] in maps" :key="name" :map="map" :name="name" :leaflet="leaflet"></MapLayer>
<PlayersLayer></PlayersLayer>
</div>
</template>
<script lang="ts">
import {defineComponent} from "@vue/runtime-core";
import L from 'leaflet';
import {useStore} from '@/store';
import MapLayer from "@/components/map/layer/MapLayer.vue";
import PlayersLayer from "@/components/map/layer/PlayersLayer.vue";
export default defineComponent({
components: {
MapLayer,
PlayersLayer
},
data() {
return {
leaflet: undefined as L.Map | undefined,
}
},
computed: {
maps() {
return useStore().state.maps;
},
},
mounted() {
this.leaflet = new L.Map(this.$el, {
zoom: 1,
center: new L.LatLng(0, 0),
zoomAnimation: true,
zoomControl: true,
preferCanvas: true,
attributionControl: false,
crs: L.CRS.Simple,
worldCopyJump: false,
});
},
})
</script>
<style scoped>
</style>

View File

@ -1,19 +0,0 @@
<template>
<div class="map"></div>
</template>
<script>
import "leaflet/dist/leaflet.css";
import L from "leaflet";
export default {
name: "Map",
mounted() {
L;
}
}
</script>
<style scoped>
</style>

View File

@ -1,27 +1,34 @@
<template> <template>
<fieldset class="section"> <fieldset class="section">
<legend>Players [5/500]</legend> <legend>Players [{{ players.size }}/{{ maxPlayers }}]</legend>
<div class="scrollup" style="display: block;"></div> <!-- <div class="scrollup" style="display: block;"></div>-->
<ul class="list content playerlist" style="height: 65px;"> <ul class="list content playerlist">
<li class="player"><span class="playerIcon" title="Follow player"><img src="images/player_face.png"></span><a <PlayerListItem v-for="[account, player] in players" :key="account" :player="player"></PlayerListItem>
href="#" title="Center on player">Blooping2</a></li>
<li class="player otherworld"><span class="playerIcon" title="Follow player"><img
src="images/player_face.png"></span><a href="#" title="Center on player">Clamor_</a></li>
<li class="player"><span class="playerIcon" title="Follow player"><img src="images/player_face.png"></span><a
href="#" title="Center on player">G0rd0nFreeman</a></li>
<li class="player"><span class="playerIcon" title="Follow player"><img src="images/player_face.png"></span><a
href="#" title="Center on player">Ravenpuffe</a></li>
<li class="player"><span class="playerIcon" title="Follow player"><img src="images/player_face.png"></span><a
href="#" title="Center on player">TheGoldenCarts</a></li>
</ul> </ul>
<div class="scrolldown" style="display: block;"></div> <!-- <div class="scrolldown" style="display: block;"></div>-->
</fieldset> </fieldset>
</template> </template>
<script> <script lang="ts">
export default { import PlayerListItem from "./PlayerListItem.vue";
name: "PlayerList" import {defineComponent} from "@vue/runtime-core";
import {useStore} from "@/store";
export default defineComponent({
components: {
PlayerListItem
},
computed: {
players() {
return useStore().state.players;
},
maxPlayers(): number {
return useStore().state.configuration.maxPlayers;
} }
},
});
</script> </script>
<style scoped> <style scoped>

View File

@ -0,0 +1,24 @@
<template>
<li class="player">
<span class="playerIcon" title="Follow player">
<img src="images/player_face.png">
</span>
<a href="#" title="Center on player">{{ player.name }}</a>
</li>
</template>
<script lang="ts">
import {defineComponent} from 'vue';
import {DynmapPlayer} from "@/dynmap";
export default defineComponent({
name: 'PlayerListItem',
props: {
player: Object as () => DynmapPlayer,
}
});
</script>
<style scoped>
</style>

View File

@ -2,154 +2,26 @@
<div class="sidebar pinned"> <div class="sidebar pinned">
<div class="panel"> <div class="panel">
<div class="pin"></div> <div class="pin"></div>
<fieldset class="section"> <WorldList></WorldList>
<legend>Map Types</legend>
<div class="scrollup" style="display: block;"></div>
<ul class="list content worldlist" style="height: 277px;">
<li class="world subsection">Hub
<ul class="maplist sublist">
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Flat" href="#" class="maptype"
style="background-image: url('images/block_world_flat.png');">Flat</a>
</li>
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Surface" href="#" class="maptype"
style="background-image: url('images/block_world_surface.png');">Surface</a>
</li>
</ul>
</li>
<li class="world subsection">New Earth®
<ul class="maplist sublist">
<li class="map item selected" style="background: rgb(0, 0, 0);"><a title="Flat" href="#" class="maptype"
style="background-image: url('images/block_world_flat.png');">Flat</a>
</li>
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Surface" href="#" class="maptype"
style="background-image: url('images/block_world_surface.png');">Surface</a>
</li>
</ul>
</li>
<li class="world subsection">City
<ul class="maplist sublist">
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Flat" href="#" class="maptype"
style="background-image: url('images/block_world_flat.png');">Flat</a>
</li>
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Surface" href="#" class="maptype"
style="background-image: url('images/block_world_surface.png');">Surface</a>
</li>
</ul>
</li>
<li class="world subsection">Island
<ul class="maplist sublist">
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Flat" href="#" class="maptype"
style="background-image: url('images/block_world_flat.png');">Flat</a>
</li>
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Surface" href="#" class="maptype"
style="background-image: url('images/block_world_surface.png');">Surface</a>
</li>
</ul>
</li>
<li class="world subsection">Train
<ul class="maplist sublist">
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Flat" href="#" class="maptype"
style="background-image: url('images/block_world_flat.png');">Flat</a>
</li>
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Surface" href="#" class="maptype"
style="background-image: url('images/block_world_surface.png');">Surface</a>
</li>
</ul>
</li>
<li class="world subsection">Planets
<ul class="maplist sublist">
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Flat" href="#" class="maptype"
style="background-image: url('images/block_world_flat.png');">Flat</a>
</li>
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Surface" href="#" class="maptype"
style="background-image: url('images/block_world_surface.png');">Surface</a>
</li>
</ul>
</li>
<li class="world subsection">Single Material - Part 1
<ul class="maplist sublist">
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Flat" href="#" class="maptype"
style="background-image: url('images/block_world_flat.png');">Flat</a>
</li>
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Surface" href="#" class="maptype"
style="background-image: url('images/block_world_surface.png');">Surface</a>
</li>
</ul>
</li>
<li class="world subsection">Single Material - Part 2
<ul class="maplist sublist">
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Flat" href="#" class="maptype"
style="background-image: url('images/block_world_flat.png');">Flat</a>
</li>
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Surface" href="#" class="maptype"
style="background-image: url('images/block_world_surface.png');">Surface</a>
</li>
</ul>
</li>
<li class="world subsection">Mall
<ul class="maplist sublist">
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Flat" href="#" class="maptype"
style="background-image: url('images/block_world_flat.png');">Flat</a>
</li>
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Surface" href="#" class="maptype"
style="background-image: url('images/block_world_surface.png');">Surface</a>
</li>
</ul>
</li>
<li class="world subsection">Chunks
<ul class="maplist sublist">
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Flat" href="#" class="maptype"
style="background-image: url('images/block_world_flat.png');">Flat</a>
</li>
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Surface" href="#" class="maptype"
style="background-image: url('images/block_world_surface.png');">Surface</a>
</li>
</ul>
</li>
<li class="world subsection">The Netherlands
<ul class="maplist sublist">
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Flat" href="#" class="maptype"
style="background-image: url('images/block_nether_flat.png');">Flat</a>
</li>
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Surface" href="#" class="maptype"
style="background-image: url('images/block_nether_surface.png');">Surface</a>
</li>
</ul>
</li>
<li class="world subsection">1.14 Builds
<ul class="maplist sublist">
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Flat" href="#" class="maptype"
style="background-image: url('images/block_world_flat.png');">Flat</a>
</li>
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Surface" href="#" class="maptype"
style="background-image: url('images/block_world_surface.png');">Surface</a>
</li>
</ul>
</li>
<li class="world subsection">1.13 Builds
<ul class="maplist sublist">
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Flat" href="#" class="maptype"
style="background-image: url('images/block_world_flat.png');">Flat</a>
</li>
<li class="map item" style="background: rgb(0, 0, 0);"><a title="Surface" href="#" class="maptype"
style="background-image: url('images/block_world_surface.png');">Surface</a>
</li>
</ul>
</li>
</ul>
<div class="scrolldown" style="display: block;"></div>
</fieldset>
<PlayerList></PlayerList> <PlayerList></PlayerList>
<div class="hitbar"></div> <div class="hitbar"></div>
</div> </div>
</div> </div>
</template> </template>
<script> <script lang="ts">
import PlayerList from "@/components/PlayerList"; import { Options, Vue } from 'vue-class-component';
export default { import PlayerList from './PlayerList.vue';
name: "Sidebar", import WorldList from './WorldList.vue';
components: {PlayerList}
@Options({
components: {
PlayerList,
WorldList,
},
})
export default class Sidebar extends Vue {
} }
</script> </script>

View File

@ -0,0 +1,34 @@
<template>
<fieldset class="section">
<legend>Map Types</legend>
<!-- <div class="scrollup" style="display: block;"></div>-->
<ul class="list content worldlist">
<WorldListItem :world="world" v-for="[name, world] in worlds" :key="name"></WorldListItem>
</ul>
<!-- <div class="scrolldown" style="display: block;"></div>-->
</fieldset>
</template>
<script lang="ts">
import WorldListItem from './WorldListItem.vue';
import {defineComponent} from 'vue';
import {useStore} from "@/store";
export default defineComponent({
name: 'WorldList',
components: {
WorldListItem
},
computed: {
worlds() {
return useStore().state.worlds;
}
},
});
</script>
<style scoped>
</style>

View File

@ -0,0 +1,62 @@
<template>
<li class="world subsection">
{{ world.title }}
<ul class="maplist sublist">
<li :class="{'map': true, 'item': true, 'selected': map === currentMap}" style="background: rgb(0, 0, 0);" v-for="map in world.maps" :key="map.name">
<a :title="map.title" href="#" class="maptype" :style="{'background-image': `url(${getMapIcon(map)})`}" @click="setCurrentMap(map.name)">{{ map.name }}</a>
</li>
</ul>
</li>
</template>
<script lang="ts">
import {MutationTypes, useStore} from "@/store";
import {DynmapMap, DynmapWorld} from "@/dynmap";
import {defineComponent} from 'vue';
export default defineComponent({
name: 'WorldListItem',
props: {
world: {
type: Object as () => DynmapWorld,
required: true
}
},
computed: {
currentMap(): DynmapMap | undefined {
return useStore().state.currentMap;
}
},
methods: {
getMapIcon(map: DynmapMap): string {
let worldType: string,
mapType: string;
if (this.world.name.endsWith('_nether') || (this.world.name == 'DIM-1')) {
worldType = 'nether';
mapType = (map.name == 'nether') ? 'surface' : 'flat';
} else if (this.world.name.endsWith('the_end') || (this.world.name == 'DIM1')) {
worldType = 'the_end';
mapType = (map.name == 'the_end') ? 'surface' : 'flat';
} else {
worldType = 'world';
mapType = ['surface', 'flat', 'biome', 'cave'].includes(map.name) ? map.name : 'flat';
}
return `images/block_${worldType}_${mapType}.png`;
},
setCurrentMap(map: string) {
useStore().commit(MutationTypes.SET_CURRENT_MAP, {
world: this.world.name,
map
});
}
}
});
</script>
<style scoped>
</style>

View File

@ -0,0 +1,85 @@
<script lang="ts">
import {defineComponent} from "@vue/runtime-core";
import {DynmapMap} from "@/dynmap";
import L from 'leaflet';
import {useStore} from "@/store";
import {hdMapType} from "@/leaflet/mapType/HDMapType";
export default defineComponent({
props: {
name: {
type: String,
required: true
},
map: {
type: Object as () => DynmapMap,
required: true
},
leaflet: {
type: Object as () => L.Map,
required: true,
}
},
data() {
return {
layer: hdMapType({
maxZoom: this.map.nativeZoomLevels + this.map.extraZoomLevels,
maxNativeZoom: this.map.nativeZoomLevels,
errorTileUrl: 'images/blank.png',
worldName: this.map.world,
prefix: this.map.prefix,
}) as L.Layer,
}
},
computed: {
active(): boolean {
return this.map === useStore().state.currentMap;
}
},
watch: {
active(newValue) {
console.warn(`Active for ${this.map.world} ${this.map.name} now ${newValue}`);
if(newValue) {
this.enableLayer();
} else {
this.disableLayer();
}
}
},
mounted() {
console.log('mounted ' + this.name + ' ' + this.active);
if(this.active) {
this.enableLayer();
}
},
unmounted() {
console.log('unmounted ' + this.name);
},
render() {
return null;
},
methods: {
enableLayer() {
console.warn('Enabling layer ' + this.map.world + ' ' + this.map.name);
this.leaflet.addLayer(this.layer);
},
disableLayer() {
console.warn('Disabling layer ' + this.map.world + ' ' + this.map.name);
this.layer.remove();
}
}
})
</script>
<style scoped>
</style>

View File

@ -0,0 +1,41 @@
<template>
<PlayerMarker v-for="[account, player] in players" :key="account" :player="player"></PlayerMarker>
</template>
<script lang="ts">
import PlayerMarker from "@/components/map/marker/PlayerMarker.vue";
import {defineComponent} from "@vue/runtime-core";
import {useStore} from "@/store";
export default defineComponent({
components: {
PlayerMarker
},
data() {
return {
}
},
computed: {
players() {
return useStore().state.players;
},
},
mounted() {
},
unmounted() {
},
render() {
return null;
}
})
</script>
<style scoped>
</style>

Some files were not shown because too many files have changed in this diff Show More