Switch to tabs
parent
22c6819daa
commit
82283461da
32
.eslintrc.js
32
.eslintrc.js
|
@ -1,17 +1,19 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
root: true,
|
root: true,
|
||||||
env: {
|
env: {
|
||||||
node: true,
|
node: true,
|
||||||
},
|
},
|
||||||
extends: [
|
extends: [
|
||||||
'plugin:vue/essential',
|
'plugin:vue/essential',
|
||||||
'@vue/airbnb',
|
'@vue/airbnb',
|
||||||
],
|
],
|
||||||
rules: {
|
rules: {
|
||||||
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
||||||
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
||||||
},
|
indent: ['error', 'tab'],
|
||||||
parserOptions: {
|
'no-tabs': 'off',
|
||||||
parser: 'babel-eslint',
|
},
|
||||||
},
|
parserOptions: {
|
||||||
|
parser: 'babel-eslint',
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
presets: [
|
presets: [
|
||||||
'@vue/app',
|
'@vue/app',
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
20
package.json
20
package.json
|
@ -1,7 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "dri",
|
"name": "dri",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"private": true,
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"serve": "vue-cli-service serve",
|
"serve": "vue-cli-service serve",
|
||||||
"build": "vue-cli-service build",
|
"build": "vue-cli-service build",
|
||||||
|
@ -19,6 +18,23 @@
|
||||||
"@vue/cli-plugin-eslint": "^3.0.3",
|
"@vue/cli-plugin-eslint": "^3.0.3",
|
||||||
"@vue/cli-service": "^3.0.3",
|
"@vue/cli-service": "^3.0.3",
|
||||||
"@vue/eslint-config-airbnb": "^3.0.3",
|
"@vue/eslint-config-airbnb": "^3.0.3",
|
||||||
"vue-template-compiler": "^2.5.17"
|
"vue-template-compiler": "^2.5.17",
|
||||||
|
"lint-staged": "^6.0.0"
|
||||||
|
},
|
||||||
|
"gitHooks": {
|
||||||
|
"pre-commit": "lint-staged"
|
||||||
|
},
|
||||||
|
"lint-staged": {
|
||||||
|
"Dockerfile": [
|
||||||
|
"hadolint"
|
||||||
|
],
|
||||||
|
"*.js": [
|
||||||
|
"vue-cli-service lint",
|
||||||
|
"git add"
|
||||||
|
],
|
||||||
|
"*.vue": [
|
||||||
|
"vue-cli-service lint",
|
||||||
|
"git add"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
plugins: {
|
plugins: {
|
||||||
autoprefixer: {},
|
autoprefixer: {},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
179
src/api.js
179
src/api.js
|
@ -2,76 +2,163 @@ import parseLink from 'parse-link-header';
|
||||||
|
|
||||||
import { registryAPI, repositoriesPerPage, tagsPerPage, usePortusExplore } from '@/options';
|
import { registryAPI, repositoriesPerPage, tagsPerPage, usePortusExplore } from '@/options';
|
||||||
|
|
||||||
async function paginatable(path, n, last = null) {
|
function parseWWWAuthenticate(text) {
|
||||||
const url = new URL(`${await registryAPI()}${path}`);
|
const result = {};
|
||||||
if (n) url.searchParams.append('n', n);
|
// extract auth-scheme
|
||||||
if (last) url.searchParams.append('last', last);
|
const schemeParts = text.split(' ');
|
||||||
|
[result.scheme] = schemeParts;
|
||||||
|
// extract auth-params
|
||||||
|
const remain = schemeParts.slice(1).join(' ');
|
||||||
|
const parts = remain.split(/ ?, ?/);
|
||||||
|
parts.forEach((part) => {
|
||||||
|
// parse auth-param
|
||||||
|
const kv = part.split('=');
|
||||||
|
if (kv.length === 2) {
|
||||||
|
const key = kv[0].trim();
|
||||||
|
const value = kv[1].trim();
|
||||||
|
if (value.startsWith('"') && value.endsWith('"')) {
|
||||||
|
result[key] = value.substring(1, value.length - 1);
|
||||||
|
} else {
|
||||||
|
result[key] = value;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result[parts] = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
const response = await fetch(url);
|
let cachedToken = null;
|
||||||
let nextLast = null;
|
async function doAuth() {
|
||||||
if (response.headers.has('Link')) {
|
if (cachedToken !== null) {
|
||||||
const links = parseLink(response.headers.get('Link'));
|
return cachedToken;
|
||||||
if (links && links.next) {
|
}
|
||||||
nextLast = links.next.last;
|
|
||||||
}
|
// try accessing registry API
|
||||||
}
|
const response = await fetch(`${await registryAPI()}/v2/`);
|
||||||
return Object.assign(await response.json(), { nextLast });
|
if (response.ok) {
|
||||||
|
// token not needed for registry
|
||||||
|
cachedToken = false;
|
||||||
|
return cachedToken;
|
||||||
|
}
|
||||||
|
if (response.status !== 401) {
|
||||||
|
throw new Error(response.statusText);
|
||||||
|
}
|
||||||
|
|
||||||
|
// solve authentication challenge
|
||||||
|
const { headers } = response;
|
||||||
|
if (!headers.has('Www-Authenticate')) {
|
||||||
|
throw new Error('no challenge presented');
|
||||||
|
}
|
||||||
|
const chal = parseWWWAuthenticate(headers.get('Www-Authenticate'));
|
||||||
|
if (chal.scheme !== 'Bearer') {
|
||||||
|
throw new Error('unsupported scheme');
|
||||||
|
}
|
||||||
|
|
||||||
|
const tokURL = new URL(chal.realm);
|
||||||
|
tokURL.searchParams.append('client_id', 'dri-client');
|
||||||
|
tokURL.searchParams.append('service', chal.service);
|
||||||
|
tokURL.searchParams.append('scope', 'repository:pwd/migrate:pull');
|
||||||
|
const tokResponse = await fetch(tokURL);
|
||||||
|
const tok = await tokResponse.json();
|
||||||
|
cachedToken = tok.token;
|
||||||
|
return tok.token;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function paginatable(path, n, last = null) {
|
||||||
|
const token = await doAuth();
|
||||||
|
const url = new URL(`${await registryAPI()}${path}`);
|
||||||
|
if (n) url.searchParams.append('n', n);
|
||||||
|
if (last) url.searchParams.append('last', last);
|
||||||
|
|
||||||
|
const headers = {};
|
||||||
|
if (token) headers.Authorization = `Bearer ${token}`;
|
||||||
|
const response = await fetch(url, { headers });
|
||||||
|
let nextLast = null;
|
||||||
|
if (response.headers.has('Link')) {
|
||||||
|
const links = parseLink(response.headers.get('Link'));
|
||||||
|
if (links && links.next) {
|
||||||
|
nextLast = links.next.last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Object.assign(await response.json(), { nextLast });
|
||||||
}
|
}
|
||||||
|
|
||||||
async function get(path) {
|
async function get(path) {
|
||||||
const url = new URL(`${await registryAPI()}${path}`);
|
const token = await doAuth();
|
||||||
const response = await fetch(url);
|
const url = new URL(`${await registryAPI()}${path}`);
|
||||||
return response.json();
|
const headers = {};
|
||||||
|
if (token) headers.Authorization = `Bearer ${token}`;
|
||||||
|
const response = await fetch(url, { headers });
|
||||||
|
return response.json();
|
||||||
}
|
}
|
||||||
|
|
||||||
async function head(path) {
|
async function head(path) {
|
||||||
const url = new URL(`${await registryAPI()}${path}`);
|
const token = await doAuth();
|
||||||
const response = await fetch(url, { method: 'HEAD' });
|
const url = new URL(`${await registryAPI()}${path}`);
|
||||||
return response.headers;
|
const headers = {};
|
||||||
|
if (token) headers.Authorization = `Bearer ${token}`;
|
||||||
|
const response = await fetch(url, { method: 'HEAD', headers });
|
||||||
|
return response.headers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async function repos(last = null) {
|
async function portus() {
|
||||||
if (await usePortusExplore()) {
|
// TODO: Use the Portus API when it enables anonymous access
|
||||||
// TODO: Use the Portus API when it enables anonymous access
|
const response = await fetch(`${await registryAPI()}/explore?explore%5Bsearch%5D=`);
|
||||||
const response = await fetch(`${await registryAPI()}/explore?explore%5Bsearch%5D=`);
|
const html = await response.text();
|
||||||
const html = await response.text();
|
|
||||||
|
|
||||||
// unconventionally parse out JSON from HTML
|
// unconventionally parse out JSON from HTML
|
||||||
const startString = 'window.repositories = ';
|
const startString = 'window.repositories = ';
|
||||||
const endString = ';</script>';
|
const endString = ';</script>';
|
||||||
const string = html.substring(
|
const string = html.substring(
|
||||||
html.lastIndexOf(startString) + startString.length,
|
html.lastIndexOf(startString) + startString.length,
|
||||||
html.indexOf(endString),
|
html.indexOf(endString),
|
||||||
);
|
);
|
||||||
return JSON.parse(string);
|
const object = JSON.parse(string);
|
||||||
}
|
return object;
|
||||||
return paginatable('/v2/_catalog', await repositoriesPerPage(), last);
|
}
|
||||||
|
|
||||||
|
async function repos(last = null) {
|
||||||
|
if (await usePortusExplore()) {
|
||||||
|
const p = await portus();
|
||||||
|
return {
|
||||||
|
repositories: p.map(r => r.full_name),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return paginatable('/v2/_catalog', await repositoriesPerPage(), last);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function repo(name) {
|
async function repo(name) {
|
||||||
return get(`/v2/${name}`);
|
return get(`/v2/${name}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function tags(name, last = null) {
|
async function tags(name, last = null) {
|
||||||
return paginatable(`/v2/${name}/tags/list`, await tagsPerPage(), last);
|
if (await usePortusExplore()) {
|
||||||
|
const p = await portus();
|
||||||
|
return {
|
||||||
|
tags: p.find(r => r.full_name === name)
|
||||||
|
.tags.map(t => t[0].name),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return paginatable(`/v2/${name}/tags/list`, await tagsPerPage(), last);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function tag(name, ref) {
|
async function tag(name, ref) {
|
||||||
return get(`/v2/${name}/manifests/${ref}`);
|
return get(`/v2/${name}/manifests/${ref}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function blob(name, digest) {
|
async function blob(name, digest) {
|
||||||
const headers = await head(`/v2/${name}/blobs/${digest}`);
|
const headers = await head(`/v2/${name}/blobs/${digest}`);
|
||||||
return {
|
return {
|
||||||
contentLength: parseInt(headers.get('Content-Length'), 10),
|
contentLength: parseInt(headers.get('Content-Length'), 10),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
repos,
|
repos,
|
||||||
repo,
|
repo,
|
||||||
tags,
|
tags,
|
||||||
tag,
|
tag,
|
||||||
blob,
|
blob,
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,21 +8,21 @@ import { blob } from '@/api';
|
||||||
import LoadableText from '@/components/LoadableText.vue';
|
import LoadableText from '@/components/LoadableText.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
LoadableText,
|
LoadableText,
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
repo: String,
|
repo: String,
|
||||||
blob: String,
|
blob: String,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
size: '',
|
size: '',
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
async created() {
|
async created() {
|
||||||
const size = await blob(this.repo, this.blob);
|
const size = await blob(this.repo, this.blob);
|
||||||
this.size = filesize(size.contentLength);
|
this.size = filesize(size.contentLength);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -4,9 +4,9 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
message: String,
|
message: String,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -24,12 +24,12 @@
|
||||||
import { version, source } from '@/options';
|
import { version, source } from '@/options';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
version,
|
version,
|
||||||
source,
|
source,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -10,9 +10,9 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
to: { type: [Object, String], required: false },
|
to: { type: [Object, String], required: false },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -4,9 +4,9 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
text: String,
|
text: String,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -7,17 +7,17 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
nextLast: String,
|
nextLast: String,
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
prev() {
|
prev() {
|
||||||
this.$router.back();
|
this.$router.back();
|
||||||
},
|
},
|
||||||
next() {
|
next() {
|
||||||
this.$router.push(`?last=${this.nextLast}`);
|
this.$router.push(`?last=${this.nextLast}`);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -8,32 +8,32 @@ import { tag, blob } from '@/api';
|
||||||
import LoadableText from '@/components/LoadableText.vue';
|
import LoadableText from '@/components/LoadableText.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
LoadableText,
|
LoadableText,
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
repo: String,
|
repo: String,
|
||||||
tag: String,
|
tag: String,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
size: '',
|
size: '',
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
async created() {
|
async created() {
|
||||||
const r = await tag(this.repo, this.tag);
|
const r = await tag(this.repo, this.tag);
|
||||||
if (r.mediaType === 'application/vnd.docker.distribution.manifest.list.v2+json') {
|
if (r.mediaType === 'application/vnd.docker.distribution.manifest.list.v2+json') {
|
||||||
console.error('V2 manifest lists not supported yet');
|
console.error('V2 manifest lists not supported yet');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (r.schemaVersion === 1) {
|
if (r.schemaVersion === 1) {
|
||||||
r.layers = r.fsLayers.map(l => ({ digest: l.blobSum }));
|
r.layers = r.fsLayers.map(l => ({ digest: l.blobSum }));
|
||||||
}
|
}
|
||||||
const sizes = await Promise.all(r.layers.map(async layer => (
|
const sizes = await Promise.all(r.layers.map(async layer => (
|
||||||
await blob(this.repo, layer.digest)
|
await blob(this.repo, layer.digest)
|
||||||
).contentLength));
|
).contentLength));
|
||||||
const total = sizes.reduce((a, b) => a + b, 0);
|
const total = sizes.reduce((a, b) => a + b, 0);
|
||||||
this.size = filesize(total);
|
this.size = filesize(total);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -7,6 +7,6 @@ import 'normalize.css';
|
||||||
Vue.config.productionTip = false;
|
Vue.config.productionTip = false;
|
||||||
|
|
||||||
new Vue({
|
new Vue({
|
||||||
router,
|
router,
|
||||||
render: h => h(App),
|
render: h => h(App),
|
||||||
}).$mount('#app');
|
}).$mount('#app');
|
||||||
|
|
120
src/options.js
120
src/options.js
|
@ -2,89 +2,89 @@ const version = process.env.VUE_APP_VERSION || '[master]';
|
||||||
const source = process.env.VUE_APP_SOURCE_LINK || 'https://github.com/productionwentdown/dri';
|
const source = process.env.VUE_APP_SOURCE_LINK || 'https://github.com/productionwentdown/dri';
|
||||||
|
|
||||||
const defaultConfig = {
|
const defaultConfig = {
|
||||||
merged: false,
|
merged: false,
|
||||||
|
|
||||||
registryHost: process.env.VUE_APP_REGISTRY_HOST,
|
registryHost: process.env.VUE_APP_REGISTRY_HOST,
|
||||||
registryAPI: process.env.VUE_APP_REGISTRY_API,
|
registryAPI: process.env.VUE_APP_REGISTRY_API,
|
||||||
|
|
||||||
repositoriesPerPage: process.env.VUE_APP_REPOSITORIES_PER_PAGE,
|
repositoriesPerPage: process.env.VUE_APP_REPOSITORIES_PER_PAGE,
|
||||||
tagsPerPage: process.env.VUE_APP_TAGS_PER_PAGE,
|
tagsPerPage: process.env.VUE_APP_TAGS_PER_PAGE,
|
||||||
|
|
||||||
usePortusExplore: process.env.VUE_APP_USE_PORTUS_EXPLORE,
|
usePortusExplore: process.env.VUE_APP_USE_PORTUS_EXPLORE,
|
||||||
};
|
};
|
||||||
|
|
||||||
async function config() {
|
async function config() {
|
||||||
if (defaultConfig.merged) {
|
if (defaultConfig.merged) {
|
||||||
return defaultConfig;
|
return defaultConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch('config.json');
|
const response = await fetch('config.json');
|
||||||
const jsonConfig = await response.json();
|
const jsonConfig = await response.json();
|
||||||
defaultConfig.merged = true;
|
defaultConfig.merged = true;
|
||||||
return Object.assign(defaultConfig, jsonConfig);
|
return Object.assign(defaultConfig, jsonConfig);
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
defaultConfig.merged = true;
|
defaultConfig.merged = true;
|
||||||
return defaultConfig;
|
return defaultConfig;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function registryHost() {
|
async function registryHost() {
|
||||||
const c = await config();
|
const c = await config();
|
||||||
if (c.registryHost) {
|
if (c.registryHost) {
|
||||||
return c.registryHost;
|
return c.registryHost;
|
||||||
}
|
}
|
||||||
return window.location.host;
|
return window.location.host;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function registryAPI() {
|
async function registryAPI() {
|
||||||
const c = await config();
|
const c = await config();
|
||||||
if (c.registryAPI) {
|
if (c.registryAPI) {
|
||||||
return c.registryAPI;
|
return c.registryAPI;
|
||||||
}
|
}
|
||||||
const host = await registryHost();
|
const host = await registryHost();
|
||||||
// assume API uses the same protocol as the page
|
// assume API uses the same protocol as the page
|
||||||
// this is because browsers don't allow mixed content
|
// this is because browsers don't allow mixed content
|
||||||
// if a HTTPS API needs to be accessed over HTTP, configure registryAPI
|
// if a HTTPS API needs to be accessed over HTTP, configure registryAPI
|
||||||
return `${window.location.protocol}//${host}`;
|
return `${window.location.protocol}//${host}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function usePortusExplore() {
|
async function usePortusExplore() {
|
||||||
const c = await config();
|
const c = await config();
|
||||||
if (c.usePortusExplore) {
|
if (c.usePortusExplore) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function repositoriesPerPage() {
|
async function repositoriesPerPage() {
|
||||||
const c = await config();
|
const c = await config();
|
||||||
try {
|
try {
|
||||||
const n = parseInt(c.repositoriesPerPage, 10);
|
const n = parseInt(c.repositoriesPerPage, 10);
|
||||||
if (n > 0) return n;
|
if (n > 0) return n;
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function tagsPerPage() {
|
async function tagsPerPage() {
|
||||||
const c = await config();
|
const c = await config();
|
||||||
try {
|
try {
|
||||||
const n = parseInt(c.tagsPerPage, 10);
|
const n = parseInt(c.tagsPerPage, 10);
|
||||||
if (n > 0) return n;
|
if (n > 0) return n;
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
version,
|
version,
|
||||||
source,
|
source,
|
||||||
registryHost,
|
registryHost,
|
||||||
registryAPI,
|
registryAPI,
|
||||||
repositoriesPerPage,
|
repositoriesPerPage,
|
||||||
tagsPerPage,
|
tagsPerPage,
|
||||||
usePortusExplore,
|
usePortusExplore,
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,28 +8,40 @@ import Blob from '@/views/Blob.vue';
|
||||||
|
|
||||||
Vue.use(Router);
|
Vue.use(Router);
|
||||||
|
|
||||||
|
const removeEncode = (to, _, next) => {
|
||||||
|
if (to.path.indexOf('%2F') > -1) {
|
||||||
|
return next({
|
||||||
|
path: to.path.replace('%2F', '/'),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return next();
|
||||||
|
};
|
||||||
|
|
||||||
export default new Router({
|
export default new Router({
|
||||||
//mode: 'history',
|
// mode: 'history',
|
||||||
routes: [
|
routes: [
|
||||||
{
|
{
|
||||||
path: '/',
|
path: '/',
|
||||||
name: 'repos',
|
name: 'repos',
|
||||||
component: Repos,
|
component: Repos,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/:repo+/blobs/:digest',
|
path: '/:repo+/blobs/:digest',
|
||||||
name: 'blob',
|
name: 'blob',
|
||||||
component: Blob,
|
component: Blob,
|
||||||
},
|
beforeEnter: removeEncode,
|
||||||
{
|
},
|
||||||
path: '/:repo+/tags/:tag',
|
{
|
||||||
name: 'tag',
|
path: '/:repo+/tags/:tag',
|
||||||
component: Tag,
|
name: 'tag',
|
||||||
},
|
component: Tag,
|
||||||
{
|
beforeEnter: removeEncode,
|
||||||
path: '/:repo+',
|
},
|
||||||
name: 'repo',
|
{
|
||||||
component: Repo,
|
path: '/:repo+',
|
||||||
},
|
name: 'repo',
|
||||||
],
|
component: Repo,
|
||||||
|
beforeEnter: removeEncode,
|
||||||
|
},
|
||||||
|
],
|
||||||
});
|
});
|
||||||
|
|
|
@ -22,11 +22,11 @@ import ListItem from '@/components/ListItem.vue';
|
||||||
import BlobSize from '@/components/BlobSize.vue';
|
import BlobSize from '@/components/BlobSize.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
Layout,
|
Layout,
|
||||||
List,
|
List,
|
||||||
ListItem,
|
ListItem,
|
||||||
BlobSize,
|
BlobSize,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -39,44 +39,44 @@ import Paginator from '@/components/Paginator.vue';
|
||||||
import TagSize from '@/components/TagSize.vue';
|
import TagSize from '@/components/TagSize.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
Layout,
|
Layout,
|
||||||
Error,
|
Error,
|
||||||
Toolbar,
|
Toolbar,
|
||||||
List,
|
List,
|
||||||
ListHeader,
|
ListHeader,
|
||||||
ListItem,
|
ListItem,
|
||||||
Paginator,
|
Paginator,
|
||||||
TagSize,
|
TagSize,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
error: '',
|
error: '',
|
||||||
registryHost: '',
|
registryHost: '',
|
||||||
tags: [],
|
tags: [],
|
||||||
nextLast: '',
|
nextLast: '',
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
async created() {
|
async created() {
|
||||||
this.registryHost = await registryHost();
|
this.registryHost = await registryHost();
|
||||||
await this.fetchTags();
|
await this.fetchTags();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async fetchTags() {
|
async fetchTags() {
|
||||||
try {
|
try {
|
||||||
const r = await tags(this.$route.params.repo, this.$route.query.last);
|
const r = await tags(this.$route.params.repo, this.$route.query.last);
|
||||||
this.tags = r.tags;
|
this.tags = r.tags;
|
||||||
this.nextLast = r.nextLast;
|
this.nextLast = r.nextLast;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
this.error = `Unable to fetch tags (${e.name})`;
|
this.error = `Unable to fetch tags (${e.name})`;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
async $route() {
|
async $route() {
|
||||||
await this.fetchTags();
|
await this.fetchTags();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -36,43 +36,43 @@ import ListItem from '@/components/ListItem.vue';
|
||||||
import Paginator from '@/components/Paginator.vue';
|
import Paginator from '@/components/Paginator.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
Layout,
|
Layout,
|
||||||
Error,
|
Error,
|
||||||
Toolbar,
|
Toolbar,
|
||||||
List,
|
List,
|
||||||
ListHeader,
|
ListHeader,
|
||||||
ListItem,
|
ListItem,
|
||||||
Paginator,
|
Paginator,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
error: '',
|
error: '',
|
||||||
registryHost: '',
|
registryHost: '',
|
||||||
repos: [],
|
repos: [],
|
||||||
nextLast: '',
|
nextLast: '',
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
async created() {
|
async created() {
|
||||||
this.registryHost = await registryHost();
|
this.registryHost = await registryHost();
|
||||||
await this.fetchRepos();
|
await this.fetchRepos();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async fetchRepos() {
|
async fetchRepos() {
|
||||||
try {
|
try {
|
||||||
const r = await repos(this.$route.query.last);
|
const r = await repos(this.$route.query.last);
|
||||||
this.repos = r.repositories;
|
this.repos = r.repositories;
|
||||||
this.nextLast = r.nextLast;
|
this.nextLast = r.nextLast;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
this.error = `Unable to fetch repositories (${e.name})`;
|
this.error = `Unable to fetch repositories (${e.name})`;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
async $route() {
|
async $route() {
|
||||||
await this.fetchRepos();
|
await this.fetchRepos();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -14,7 +14,9 @@
|
||||||
</ListItem>
|
</ListItem>
|
||||||
<ListItem>
|
<ListItem>
|
||||||
<span slot="title">Size</span>
|
<span slot="title">Size</span>
|
||||||
<span slot="detail"><TagSize :repo="$route.params.repo" :tag="$route.params.tag" /></span>
|
<span slot="detail">
|
||||||
|
<TagSize :repo="$route.params.repo" :tag="$route.params.tag" />
|
||||||
|
</span>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
</List>
|
</List>
|
||||||
<h2>Layers</h2>
|
<h2>Layers</h2>
|
||||||
|
@ -50,56 +52,56 @@ import TagSize from '@/components/TagSize.vue';
|
||||||
import BlobSize from '@/components/BlobSize.vue';
|
import BlobSize from '@/components/BlobSize.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
Layout,
|
Layout,
|
||||||
Error,
|
Error,
|
||||||
Toolbar,
|
Toolbar,
|
||||||
List,
|
List,
|
||||||
ListHeader,
|
ListHeader,
|
||||||
ListItem,
|
ListItem,
|
||||||
TagSize,
|
TagSize,
|
||||||
BlobSize,
|
BlobSize,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
error: '',
|
error: '',
|
||||||
registryHost: '',
|
registryHost: '',
|
||||||
tag: {},
|
tag: {},
|
||||||
layers: [],
|
layers: [],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
async created() {
|
async created() {
|
||||||
this.registryHost = await registryHost();
|
this.registryHost = await registryHost();
|
||||||
await this.fetchTag();
|
await this.fetchTag();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async fetchTag() {
|
async fetchTag() {
|
||||||
try {
|
try {
|
||||||
const r = await tag(this.$route.params.repo, this.$route.params.tag);
|
const r = await tag(this.$route.params.repo, this.$route.params.tag);
|
||||||
if (r.mediaType === 'application/vnd.docker.distribution.manifest.list.v2+json') {
|
if (r.mediaType === 'application/vnd.docker.distribution.manifest.list.v2+json') {
|
||||||
this.error = 'V2 manifest lists not supported yet';
|
this.error = 'V2 manifest lists not supported yet';
|
||||||
}
|
}
|
||||||
if (r.schemaVersion === 1) {
|
if (r.schemaVersion === 1) {
|
||||||
r.layers = r.fsLayers.map(l => ({ digest: l.blobSum }));
|
r.layers = r.fsLayers.map(l => ({ digest: l.blobSum }));
|
||||||
}
|
}
|
||||||
this.tag = r;
|
this.tag = r;
|
||||||
console.log(r);
|
console.log(r);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
this.error = `Unable to fetch tag (${e.name})`;
|
this.error = `Unable to fetch tag (${e.name})`;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
identifier(t, n) {
|
identifier(t, n) {
|
||||||
return t.layers[n].digest.split(':')[1].slice(0, 10);
|
return t.layers[n].digest.split(':')[1].slice(0, 10);
|
||||||
},
|
},
|
||||||
command() {
|
command() {
|
||||||
return 'not implemented';
|
return 'not implemented';
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
async $route() {
|
async $route() {
|
||||||
await this.fetchTag();
|
await this.fetchTag();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
lintOnSave: false,
|
lintOnSave: false,
|
||||||
baseUrl: '',
|
baseUrl: '',
|
||||||
};
|
};
|
||||||
|
|
286
yarn.lock
286
yarn.lock
|
@ -1001,6 +1001,10 @@ ansi-colors@^3.0.0:
|
||||||
version "3.0.6"
|
version "3.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.0.6.tgz#a0b9e00e8c1cc6685b1c3130dbeb9abed03ca6a4"
|
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.0.6.tgz#a0b9e00e8c1cc6685b1c3130dbeb9abed03ca6a4"
|
||||||
|
|
||||||
|
ansi-escapes@^1.0.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
|
||||||
|
|
||||||
ansi-escapes@^3.0.0:
|
ansi-escapes@^3.0.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
|
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
|
||||||
|
@ -1021,12 +1025,16 @@ ansi-styles@^2.2.1:
|
||||||
version "2.2.1"
|
version "2.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
|
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
|
||||||
|
|
||||||
ansi-styles@^3.2.1:
|
ansi-styles@^3.2.0, ansi-styles@^3.2.1:
|
||||||
version "3.2.1"
|
version "3.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
||||||
dependencies:
|
dependencies:
|
||||||
color-convert "^1.9.0"
|
color-convert "^1.9.0"
|
||||||
|
|
||||||
|
any-observable@^0.2.0:
|
||||||
|
version "0.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242"
|
||||||
|
|
||||||
anymatch@^2.0.0:
|
anymatch@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
|
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
|
||||||
|
@ -1034,6 +1042,10 @@ anymatch@^2.0.0:
|
||||||
micromatch "^3.1.4"
|
micromatch "^3.1.4"
|
||||||
normalize-path "^2.1.1"
|
normalize-path "^2.1.1"
|
||||||
|
|
||||||
|
app-root-path@^2.0.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.1.0.tgz#98bf6599327ecea199309866e8140368fd2e646a"
|
||||||
|
|
||||||
aproba@^1.0.3, aproba@^1.1.1:
|
aproba@^1.0.3, aproba@^1.1.1:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
||||||
|
@ -1554,7 +1566,7 @@ caseless@~0.12.0:
|
||||||
version "0.12.0"
|
version "0.12.0"
|
||||||
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
||||||
|
|
||||||
chalk@^1.1.3:
|
chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
|
||||||
version "1.1.3"
|
version "1.1.3"
|
||||||
resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
|
resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -1639,16 +1651,33 @@ clean-css@4.2.x:
|
||||||
dependencies:
|
dependencies:
|
||||||
source-map "~0.6.0"
|
source-map "~0.6.0"
|
||||||
|
|
||||||
|
cli-cursor@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
|
||||||
|
dependencies:
|
||||||
|
restore-cursor "^1.0.1"
|
||||||
|
|
||||||
cli-cursor@^2.1.0:
|
cli-cursor@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
|
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
|
||||||
dependencies:
|
dependencies:
|
||||||
restore-cursor "^2.0.0"
|
restore-cursor "^2.0.0"
|
||||||
|
|
||||||
|
cli-spinners@^0.1.2:
|
||||||
|
version "0.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c"
|
||||||
|
|
||||||
cli-spinners@^1.1.0:
|
cli-spinners@^1.1.0:
|
||||||
version "1.3.1"
|
version "1.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a"
|
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a"
|
||||||
|
|
||||||
|
cli-truncate@^0.2.1:
|
||||||
|
version "0.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
|
||||||
|
dependencies:
|
||||||
|
slice-ansi "0.0.4"
|
||||||
|
string-width "^1.0.1"
|
||||||
|
|
||||||
cli-width@^2.0.0:
|
cli-width@^2.0.0:
|
||||||
version "2.2.0"
|
version "2.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
|
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
|
||||||
|
@ -1741,7 +1770,7 @@ commander@2.17.x, commander@~2.17.1:
|
||||||
version "2.17.1"
|
version "2.17.1"
|
||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
|
||||||
|
|
||||||
commander@^2.13.0:
|
commander@^2.11.0, commander@^2.13.0, commander@^2.9.0:
|
||||||
version "2.18.0"
|
version "2.18.0"
|
||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970"
|
||||||
|
|
||||||
|
@ -2119,6 +2148,10 @@ dashdash@^1.12.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
assert-plus "^1.0.0"
|
assert-plus "^1.0.0"
|
||||||
|
|
||||||
|
date-fns@^1.27.2:
|
||||||
|
version "1.29.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6"
|
||||||
|
|
||||||
date-now@^0.1.4:
|
date-now@^0.1.4:
|
||||||
version "0.1.4"
|
version "0.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
|
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
|
||||||
|
@ -2155,6 +2188,10 @@ decode-uri-component@^0.2.0:
|
||||||
version "0.2.0"
|
version "0.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
|
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
|
||||||
|
|
||||||
|
dedent@^0.7.0:
|
||||||
|
version "0.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
|
||||||
|
|
||||||
deep-equal@^1.0.1:
|
deep-equal@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
|
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
|
||||||
|
@ -2405,6 +2442,10 @@ electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.62:
|
||||||
version "1.3.70"
|
version "1.3.70"
|
||||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.70.tgz#ded377256d92d81b4257d36c65aa890274afcfd2"
|
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.70.tgz#ded377256d92d81b4257d36c65aa890274afcfd2"
|
||||||
|
|
||||||
|
elegant-spinner@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
|
||||||
|
|
||||||
elliptic@^6.0.0:
|
elliptic@^6.0.0:
|
||||||
version "6.4.1"
|
version "6.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a"
|
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a"
|
||||||
|
@ -2718,6 +2759,10 @@ execa@^0.8.0:
|
||||||
signal-exit "^3.0.0"
|
signal-exit "^3.0.0"
|
||||||
strip-eof "^1.0.0"
|
strip-eof "^1.0.0"
|
||||||
|
|
||||||
|
exit-hook@^1.0.0:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
|
||||||
|
|
||||||
expand-brackets@^0.1.4:
|
expand-brackets@^0.1.4:
|
||||||
version "0.1.5"
|
version "0.1.5"
|
||||||
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
|
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
|
||||||
|
@ -2876,6 +2921,13 @@ figgy-pudding@^3.5.1:
|
||||||
version "3.5.1"
|
version "3.5.1"
|
||||||
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
|
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
|
||||||
|
|
||||||
|
figures@^1.7.0:
|
||||||
|
version "1.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
|
||||||
|
dependencies:
|
||||||
|
escape-string-regexp "^1.0.5"
|
||||||
|
object-assign "^4.1.0"
|
||||||
|
|
||||||
figures@^2.0.0:
|
figures@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
|
resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
|
||||||
|
@ -2951,6 +3003,10 @@ find-cache-dir@^1.0.0:
|
||||||
make-dir "^1.0.0"
|
make-dir "^1.0.0"
|
||||||
pkg-dir "^2.0.0"
|
pkg-dir "^2.0.0"
|
||||||
|
|
||||||
|
find-parent-dir@^0.3.0:
|
||||||
|
version "0.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54"
|
||||||
|
|
||||||
find-root@^1.1.0:
|
find-root@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
|
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
|
||||||
|
@ -3110,6 +3166,10 @@ get-caller-file@^1.0.1:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
|
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
|
||||||
|
|
||||||
|
get-own-enumerable-property-symbols@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b"
|
||||||
|
|
||||||
get-stream@^3.0.0:
|
get-stream@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
|
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
|
||||||
|
@ -3504,6 +3564,16 @@ imurmurhash@^0.1.4:
|
||||||
version "0.1.4"
|
version "0.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
|
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
|
||||||
|
|
||||||
|
indent-string@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
|
||||||
|
dependencies:
|
||||||
|
repeating "^2.0.0"
|
||||||
|
|
||||||
|
indent-string@^3.0.0:
|
||||||
|
version "3.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
|
||||||
|
|
||||||
indexes-of@^1.0.1:
|
indexes-of@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
|
resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
|
||||||
|
@ -3719,6 +3789,12 @@ is-extglob@^2.1.0, is-extglob@^2.1.1:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
||||||
|
|
||||||
|
is-finite@^1.0.0:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
|
||||||
|
dependencies:
|
||||||
|
number-is-nan "^1.0.0"
|
||||||
|
|
||||||
is-fullwidth-code-point@^1.0.0:
|
is-fullwidth-code-point@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
|
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
|
||||||
|
@ -3763,10 +3839,16 @@ is-number@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
|
resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
|
||||||
|
|
||||||
is-obj@^1.0.0:
|
is-obj@^1.0.0, is-obj@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
|
resolved "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
|
||||||
|
|
||||||
|
is-observable@^0.2.0:
|
||||||
|
version "0.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2"
|
||||||
|
dependencies:
|
||||||
|
symbol-observable "^0.2.2"
|
||||||
|
|
||||||
is-path-cwd@^1.0.0:
|
is-path-cwd@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
|
resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
|
||||||
|
@ -3807,6 +3889,10 @@ is-regex@^1.0.4:
|
||||||
dependencies:
|
dependencies:
|
||||||
has "^1.0.1"
|
has "^1.0.1"
|
||||||
|
|
||||||
|
is-regexp@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
|
||||||
|
|
||||||
is-relative@^0.2.1:
|
is-relative@^0.2.1:
|
||||||
version "0.2.1"
|
version "0.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5"
|
resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5"
|
||||||
|
@ -3891,6 +3977,19 @@ javascript-stringify@^1.6.0:
|
||||||
version "1.6.0"
|
version "1.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3"
|
resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3"
|
||||||
|
|
||||||
|
jest-get-type@^21.2.0:
|
||||||
|
version "21.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23"
|
||||||
|
|
||||||
|
jest-validate@^21.1.0:
|
||||||
|
version "21.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7"
|
||||||
|
dependencies:
|
||||||
|
chalk "^2.0.1"
|
||||||
|
jest-get-type "^21.2.0"
|
||||||
|
leven "^2.1.0"
|
||||||
|
pretty-format "^21.2.1"
|
||||||
|
|
||||||
joi@^13.0.0:
|
joi@^13.0.0:
|
||||||
version "13.6.0"
|
version "13.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/joi/-/joi-13.6.0.tgz#877d820e3ad688a49c32421ffefc746bfbe2d0a0"
|
resolved "https://registry.yarnpkg.com/joi/-/joi-13.6.0.tgz#877d820e3ad688a49c32421ffefc746bfbe2d0a0"
|
||||||
|
@ -4030,6 +4129,10 @@ lcid@^2.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
invert-kv "^2.0.0"
|
invert-kv "^2.0.0"
|
||||||
|
|
||||||
|
leven@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
|
||||||
|
|
||||||
levn@^0.3.0, levn@~0.3.0:
|
levn@^0.3.0, levn@~0.3.0:
|
||||||
version "0.3.0"
|
version "0.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
|
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
|
||||||
|
@ -4037,6 +4140,79 @@ levn@^0.3.0, levn@~0.3.0:
|
||||||
prelude-ls "~1.1.2"
|
prelude-ls "~1.1.2"
|
||||||
type-check "~0.3.2"
|
type-check "~0.3.2"
|
||||||
|
|
||||||
|
lint-staged@^6.0.0:
|
||||||
|
version "6.1.1"
|
||||||
|
resolved "http://registry.npmjs.org/lint-staged/-/lint-staged-6.1.1.tgz#cd08c4d9b8ccc2d37198d1c47ce77d22be6cf324"
|
||||||
|
dependencies:
|
||||||
|
app-root-path "^2.0.0"
|
||||||
|
chalk "^2.1.0"
|
||||||
|
commander "^2.11.0"
|
||||||
|
cosmiconfig "^4.0.0"
|
||||||
|
debug "^3.1.0"
|
||||||
|
dedent "^0.7.0"
|
||||||
|
execa "^0.8.0"
|
||||||
|
find-parent-dir "^0.3.0"
|
||||||
|
is-glob "^4.0.0"
|
||||||
|
jest-validate "^21.1.0"
|
||||||
|
listr "^0.13.0"
|
||||||
|
lodash "^4.17.4"
|
||||||
|
log-symbols "^2.0.0"
|
||||||
|
minimatch "^3.0.0"
|
||||||
|
npm-which "^3.0.1"
|
||||||
|
p-map "^1.1.1"
|
||||||
|
path-is-inside "^1.0.2"
|
||||||
|
pify "^3.0.0"
|
||||||
|
staged-git-files "1.0.0"
|
||||||
|
stringify-object "^3.2.0"
|
||||||
|
|
||||||
|
listr-silent-renderer@^1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e"
|
||||||
|
|
||||||
|
listr-update-renderer@^0.4.0:
|
||||||
|
version "0.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7"
|
||||||
|
dependencies:
|
||||||
|
chalk "^1.1.3"
|
||||||
|
cli-truncate "^0.2.1"
|
||||||
|
elegant-spinner "^1.0.1"
|
||||||
|
figures "^1.7.0"
|
||||||
|
indent-string "^3.0.0"
|
||||||
|
log-symbols "^1.0.2"
|
||||||
|
log-update "^1.0.2"
|
||||||
|
strip-ansi "^3.0.1"
|
||||||
|
|
||||||
|
listr-verbose-renderer@^0.4.0:
|
||||||
|
version "0.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35"
|
||||||
|
dependencies:
|
||||||
|
chalk "^1.1.3"
|
||||||
|
cli-cursor "^1.0.2"
|
||||||
|
date-fns "^1.27.2"
|
||||||
|
figures "^1.7.0"
|
||||||
|
|
||||||
|
listr@^0.13.0:
|
||||||
|
version "0.13.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/listr/-/listr-0.13.0.tgz#20bb0ba30bae660ee84cc0503df4be3d5623887d"
|
||||||
|
dependencies:
|
||||||
|
chalk "^1.1.3"
|
||||||
|
cli-truncate "^0.2.1"
|
||||||
|
figures "^1.7.0"
|
||||||
|
indent-string "^2.1.0"
|
||||||
|
is-observable "^0.2.0"
|
||||||
|
is-promise "^2.1.0"
|
||||||
|
is-stream "^1.1.0"
|
||||||
|
listr-silent-renderer "^1.1.1"
|
||||||
|
listr-update-renderer "^0.4.0"
|
||||||
|
listr-verbose-renderer "^0.4.0"
|
||||||
|
log-symbols "^1.0.2"
|
||||||
|
log-update "^1.0.2"
|
||||||
|
ora "^0.2.3"
|
||||||
|
p-map "^1.1.1"
|
||||||
|
rxjs "^5.4.2"
|
||||||
|
stream-to-observable "^0.2.0"
|
||||||
|
strip-ansi "^3.0.1"
|
||||||
|
|
||||||
load-json-file@^2.0.0:
|
load-json-file@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
|
resolved "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
|
||||||
|
@ -4124,12 +4300,25 @@ lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5,
|
||||||
version "4.17.11"
|
version "4.17.11"
|
||||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
|
||||||
|
|
||||||
log-symbols@^2.2.0:
|
log-symbols@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
|
||||||
|
dependencies:
|
||||||
|
chalk "^1.0.0"
|
||||||
|
|
||||||
|
log-symbols@^2.0.0, log-symbols@^2.2.0:
|
||||||
version "2.2.0"
|
version "2.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
|
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
|
||||||
dependencies:
|
dependencies:
|
||||||
chalk "^2.0.1"
|
chalk "^2.0.1"
|
||||||
|
|
||||||
|
log-update@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1"
|
||||||
|
dependencies:
|
||||||
|
ansi-escapes "^1.0.0"
|
||||||
|
cli-cursor "^1.0.2"
|
||||||
|
|
||||||
loglevel@^1.4.1:
|
loglevel@^1.4.1:
|
||||||
version "1.6.1"
|
version "1.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
|
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
|
||||||
|
@ -4314,7 +4503,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
||||||
|
|
||||||
minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
|
minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
|
||||||
version "3.0.4"
|
version "3.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -4563,12 +4752,26 @@ npm-packlist@^1.1.6:
|
||||||
ignore-walk "^3.0.1"
|
ignore-walk "^3.0.1"
|
||||||
npm-bundled "^1.0.1"
|
npm-bundled "^1.0.1"
|
||||||
|
|
||||||
|
npm-path@^2.0.2:
|
||||||
|
version "2.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64"
|
||||||
|
dependencies:
|
||||||
|
which "^1.2.10"
|
||||||
|
|
||||||
npm-run-path@^2.0.0:
|
npm-run-path@^2.0.0:
|
||||||
version "2.0.2"
|
version "2.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
|
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
|
||||||
dependencies:
|
dependencies:
|
||||||
path-key "^2.0.0"
|
path-key "^2.0.0"
|
||||||
|
|
||||||
|
npm-which@^3.0.1:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa"
|
||||||
|
dependencies:
|
||||||
|
commander "^2.9.0"
|
||||||
|
npm-path "^2.0.2"
|
||||||
|
which "^1.2.10"
|
||||||
|
|
||||||
npmlog@^4.0.2:
|
npmlog@^4.0.2:
|
||||||
version "4.1.2"
|
version "4.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
|
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
|
||||||
|
@ -4680,6 +4883,10 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
wrappy "1"
|
wrappy "1"
|
||||||
|
|
||||||
|
onetime@^1.0.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
|
||||||
|
|
||||||
onetime@^2.0.0:
|
onetime@^2.0.0:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
|
resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
|
||||||
|
@ -4707,6 +4914,15 @@ optionator@^0.8.2:
|
||||||
type-check "~0.3.2"
|
type-check "~0.3.2"
|
||||||
wordwrap "~1.0.0"
|
wordwrap "~1.0.0"
|
||||||
|
|
||||||
|
ora@^0.2.3:
|
||||||
|
version "0.2.3"
|
||||||
|
resolved "http://registry.npmjs.org/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4"
|
||||||
|
dependencies:
|
||||||
|
chalk "^1.1.1"
|
||||||
|
cli-cursor "^1.0.2"
|
||||||
|
cli-spinners "^0.1.2"
|
||||||
|
object-assign "^4.0.1"
|
||||||
|
|
||||||
ora@^2.1.0:
|
ora@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/ora/-/ora-2.1.0.tgz#6caf2830eb924941861ec53a173799e008b51e5b"
|
resolved "https://registry.yarnpkg.com/ora/-/ora-2.1.0.tgz#6caf2830eb924941861ec53a173799e008b51e5b"
|
||||||
|
@ -5298,6 +5514,13 @@ pretty-error@^2.0.2:
|
||||||
renderkid "^2.0.1"
|
renderkid "^2.0.1"
|
||||||
utila "~0.4"
|
utila "~0.4"
|
||||||
|
|
||||||
|
pretty-format@^21.2.1:
|
||||||
|
version "21.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36"
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^3.0.0"
|
||||||
|
ansi-styles "^3.2.0"
|
||||||
|
|
||||||
private@^0.1.6:
|
private@^0.1.6:
|
||||||
version "0.1.8"
|
version "0.1.8"
|
||||||
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
|
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
|
||||||
|
@ -5602,6 +5825,12 @@ repeat-string@^1.5.2, repeat-string@^1.6.1:
|
||||||
version "1.6.1"
|
version "1.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
|
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
|
||||||
|
|
||||||
|
repeating@^2.0.0:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
|
||||||
|
dependencies:
|
||||||
|
is-finite "^1.0.0"
|
||||||
|
|
||||||
request-promise-core@1.1.1:
|
request-promise-core@1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6"
|
resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6"
|
||||||
|
@ -5688,6 +5917,13 @@ resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.6.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
path-parse "^1.0.5"
|
path-parse "^1.0.5"
|
||||||
|
|
||||||
|
restore-cursor@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
|
||||||
|
dependencies:
|
||||||
|
exit-hook "^1.0.0"
|
||||||
|
onetime "^1.0.0"
|
||||||
|
|
||||||
restore-cursor@^2.0.0:
|
restore-cursor@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
|
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
|
||||||
|
@ -5742,6 +5978,12 @@ rx-lite@*, rx-lite@^4.0.8:
|
||||||
version "4.0.8"
|
version "4.0.8"
|
||||||
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
|
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
|
||||||
|
|
||||||
|
rxjs@^5.4.2:
|
||||||
|
version "5.5.12"
|
||||||
|
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc"
|
||||||
|
dependencies:
|
||||||
|
symbol-observable "1.0.1"
|
||||||
|
|
||||||
safe-buffer@5.1.1:
|
safe-buffer@5.1.1:
|
||||||
version "5.1.1"
|
version "5.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
|
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
|
||||||
|
@ -5914,6 +6156,10 @@ slash@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
|
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
|
||||||
|
|
||||||
|
slice-ansi@0.0.4:
|
||||||
|
version "0.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
|
||||||
|
|
||||||
slice-ansi@1.0.0:
|
slice-ansi@1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
|
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
|
||||||
|
@ -6081,6 +6327,10 @@ stackframe@^1.0.4:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b"
|
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b"
|
||||||
|
|
||||||
|
staged-git-files@1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.0.0.tgz#cdb847837c1fcc52c08a872d4883cc0877668a80"
|
||||||
|
|
||||||
static-extend@^0.1.1:
|
static-extend@^0.1.1:
|
||||||
version "0.1.2"
|
version "0.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
|
resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
|
||||||
|
@ -6128,6 +6378,12 @@ stream-shift@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
|
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
|
||||||
|
|
||||||
|
stream-to-observable@^0.2.0:
|
||||||
|
version "0.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.2.0.tgz#59d6ea393d87c2c0ddac10aa0d561bc6ba6f0e10"
|
||||||
|
dependencies:
|
||||||
|
any-observable "^0.2.0"
|
||||||
|
|
||||||
string-width@^1.0.1:
|
string-width@^1.0.1:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
|
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
|
||||||
|
@ -6169,6 +6425,14 @@ string_decoder@~0.10.x:
|
||||||
version "0.10.31"
|
version "0.10.31"
|
||||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
|
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
|
||||||
|
|
||||||
|
stringify-object@^3.2.0:
|
||||||
|
version "3.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.2.tgz#9853052e5a88fb605a44cd27445aa257ad7ffbcd"
|
||||||
|
dependencies:
|
||||||
|
get-own-enumerable-property-symbols "^2.0.1"
|
||||||
|
is-obj "^1.0.1"
|
||||||
|
is-regexp "^1.0.0"
|
||||||
|
|
||||||
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
||||||
version "3.0.1"
|
version "3.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
|
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
|
||||||
|
@ -6234,6 +6498,14 @@ svgo@^1.0.0:
|
||||||
unquote "~1.1.1"
|
unquote "~1.1.1"
|
||||||
util.promisify "~1.0.0"
|
util.promisify "~1.0.0"
|
||||||
|
|
||||||
|
symbol-observable@1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
|
||||||
|
|
||||||
|
symbol-observable@^0.2.2:
|
||||||
|
version "0.2.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40"
|
||||||
|
|
||||||
table@4.0.2:
|
table@4.0.2:
|
||||||
version "4.0.2"
|
version "4.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
|
resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
|
||||||
|
@ -6809,7 +7081,7 @@ which-module@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
||||||
|
|
||||||
which@^1.2.9:
|
which@^1.2.10, which@^1.2.9:
|
||||||
version "1.3.1"
|
version "1.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
Loading…
Reference in New Issue