Compare commits
131 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d61f6db05 | ||
|
|
b25de1d921 | ||
|
|
0d63b72cf6 | ||
|
|
9936aeec6c | ||
|
|
8885764e72 | ||
|
|
46db2b035e | ||
|
|
74273b8bf7 | ||
|
|
dcd7ccc099 | ||
|
|
5bfd62b57a | ||
|
|
dc9739c1f3 | ||
|
|
2a0d0194a7 | ||
|
|
920c10c318 | ||
|
|
fee69db8a3 | ||
|
|
ea663368e7 | ||
|
|
334d6feffd | ||
|
|
b8ebc2e2c0 | ||
|
|
2e6b35354d | ||
|
|
42d2b57814 | ||
|
|
e88b535127 | ||
|
|
0bb8d8e2e6 | ||
|
|
5678b3192d | ||
|
|
117530f1d6 | ||
|
|
ee5973b9f3 | ||
|
|
fc99b7320f | ||
|
|
a8536a101e | ||
|
|
5302ace413 | ||
|
|
2e255ace60 | ||
|
|
b7515fb32a | ||
|
|
396a6bb3e9 | ||
|
|
79fcbdcd62 | ||
|
|
e2348f5b38 | ||
|
|
d345998052 | ||
|
|
08cc04379d | ||
|
|
027af5a853 | ||
|
|
abc27165a2 | ||
|
|
3aa420a589 | ||
|
|
045ff730bc | ||
|
|
075f17ee36 | ||
|
|
cb3177fa06 | ||
|
|
d3e00adf4e | ||
|
|
9100958e22 | ||
|
|
eed1c0c568 | ||
|
|
f692bee5cd | ||
|
|
86cfaaee6d | ||
|
|
e8b5fd0523 | ||
|
|
2fadf6e680 | ||
|
|
835549d503 | ||
|
|
0540ceaf43 | ||
|
|
6812d1ac62 | ||
|
|
1375a59105 | ||
|
|
ec5ece7975 | ||
|
|
2efcc07706 | ||
|
|
9cef13ae74 | ||
|
|
3466ce0004 | ||
|
|
605094aa10 | ||
|
|
19ad9a7dac | ||
|
|
f870dff905 | ||
|
|
200f997239 | ||
|
|
63d8ec3e13 | ||
|
|
ae22e622eb | ||
|
|
66edc3d99f | ||
|
|
c15458cd10 | ||
|
|
8fa672edd1 | ||
|
|
3d68a8ddb0 | ||
|
|
c8ded47fce | ||
|
|
f9e7274c55 | ||
|
|
a86b57e326 | ||
|
|
b312df68cf | ||
|
|
590bc364f3 | ||
|
|
5fc4314462 | ||
|
|
a2ed4aa847 | ||
|
|
9ffd00006d | ||
|
|
748ae21788 | ||
|
|
2b3ad7e7c4 | ||
|
|
d07bb785cf | ||
|
|
37fed1c94c | ||
|
|
601d725ff8 | ||
|
|
4914517330 | ||
|
|
bbaff67dbd | ||
|
|
d228cc6dee | ||
|
|
1810764092 | ||
|
|
aaec84a2ae | ||
|
|
6f40303aa3 | ||
|
|
5c4922538a | ||
|
|
156c6abffc | ||
|
|
deaa66117a | ||
|
|
bb63e17fbc | ||
|
|
7806ba76ab | ||
|
|
3d2c892973 | ||
|
|
d2226836a1 | ||
|
|
f510fef4ce | ||
|
|
cb7f2aafda | ||
|
|
c02401e94a | ||
|
|
aec4df9260 | ||
|
|
8928e191cc | ||
|
|
45ba37fa5a | ||
|
|
f20d5f88c5 | ||
|
|
cfc88af2d4 | ||
|
|
9575af7a2b | ||
|
|
6e180f2c29 | ||
|
|
b9e986abc0 | ||
|
|
efaf1fb336 | ||
|
|
0168670bca | ||
|
|
bc96c3e387 | ||
|
|
6473b7f96c | ||
|
|
8fe6bbfa35 | ||
|
|
0ad19f7dde | ||
|
|
fc1e9588ec | ||
|
|
1e63c503ff | ||
|
|
c5384ba086 | ||
|
|
220c2af8bc | ||
|
|
0f8734801b | ||
|
|
e88221b616 | ||
|
|
8fe2013f32 | ||
|
|
f4d893ede1 | ||
|
|
f8bba86158 | ||
|
|
eb86e37521 | ||
|
|
c2d6eb2329 | ||
|
|
e8ac3944a8 | ||
|
|
bbc2dd0cbe | ||
|
|
3babcb3302 | ||
|
|
a062a89401 | ||
|
|
2a71c5a32b | ||
|
|
e379c664f1 | ||
|
|
8b0b1bbeac | ||
|
|
ff093efe14 | ||
|
|
a4a34c624f | ||
|
|
8a021f4afb | ||
|
|
983d92c46f | ||
|
|
da50df986a | ||
|
|
471e7ad875 |
2
.reflex
@@ -1 +1 @@
|
||||
-r '\.go$' -R '^node_modules/' -R '^static/' -R '^.cache/' -G '*_test.go' -s -- go run main.go routes.go --level debug
|
||||
-r '\.go$' -R 'node_modules' -R '^static/' -R '^.cache/' -G '*_test.go' -s -- go run main.go routes.go --level debug
|
||||
|
||||
@@ -54,4 +54,6 @@ ENV PATH=/bin
|
||||
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
|
||||
COPY --from=builder /dozzle/dozzle /dozzle
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
ENTRYPOINT ["/dozzle"]
|
||||
|
||||
2
Makefile
@@ -1,5 +1,5 @@
|
||||
TAG := $(shell git describe --tags)
|
||||
PLATFROMS := linux/amd64,linux/arm64/v7,linux/arm64/v8
|
||||
PLATFROMS := linux/amd64,linux/arm/v7,linux/arm64/v8
|
||||
|
||||
.PHONY: publish
|
||||
publish:
|
||||
|
||||
@@ -138,6 +138,6 @@ To Build and test locally:
|
||||
2. Install Go.
|
||||
3. Globally install [packr utility](https://github.com/gobuffalo/packr) with `go get -u github.com/gobuffalo/packr/packr` outside of dozzle directory.
|
||||
4. Install [reflex](https://github.com/cespare/reflex) with `get -u github.com/cespare/reflex` outside of dozzle.
|
||||
5. Install node modules with `npm install`.
|
||||
6. Do `npm start`
|
||||
5. Install node modules with `yarn`.
|
||||
6. Do `yarn dev`
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
</pane>
|
||||
<pane min-size="10">
|
||||
<splitpanes>
|
||||
<pane class="has-min-height">
|
||||
<pane class="has-min-height router-view">
|
||||
<search></search>
|
||||
<router-view></router-view>
|
||||
</pane>
|
||||
@@ -82,6 +82,9 @@ export default {
|
||||
if (this.hasSmallerScrollbars) {
|
||||
document.documentElement.classList.add("has-custom-scrollbars");
|
||||
}
|
||||
if (this.hasLightTheme) {
|
||||
document.documentElement.setAttribute("data-theme", "light");
|
||||
}
|
||||
this.menuWidth = this.settings.menuWidth;
|
||||
},
|
||||
watch: {
|
||||
@@ -92,6 +95,13 @@ export default {
|
||||
document.documentElement.classList.remove("has-custom-scrollbars");
|
||||
}
|
||||
},
|
||||
hasLightTheme(newValue, oldValue) {
|
||||
if (newValue) {
|
||||
document.documentElement.setAttribute("data-theme", "light");
|
||||
} else {
|
||||
document.documentElement.removeAttribute("data-theme");
|
||||
}
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
...mapState(["activeContainers", "isMobile", "settings"]),
|
||||
@@ -99,6 +109,9 @@ export default {
|
||||
hasSmallerScrollbars() {
|
||||
return this.settings.smallerScrollbars;
|
||||
},
|
||||
hasLightTheme() {
|
||||
return this.settings.lightTheme;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions({
|
||||
@@ -119,9 +132,15 @@ export default {
|
||||
<style scoped lang="scss">
|
||||
::v-deep .splitpanes--vertical > .splitpanes__splitter {
|
||||
min-width: 3px;
|
||||
background: #666;
|
||||
background: var(--border-color);
|
||||
&:hover {
|
||||
background: rgb(255, 221, 87);
|
||||
background: var(--border-hover-color);
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.router-view {
|
||||
padding-top: 75px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ exports[`<App /> renders correctly 1`] = `
|
||||
pushotherpanes="true"
|
||||
>
|
||||
<pane-stub
|
||||
class="has-min-height"
|
||||
class="has-min-height router-view"
|
||||
maxsize="100"
|
||||
minsize="0"
|
||||
>
|
||||
|
||||
@@ -26,5 +26,18 @@ export default {
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
font-weight: bold;
|
||||
font-family: monospace;
|
||||
|
||||
button.delete {
|
||||
background-color: var(--scheme-main-ter);
|
||||
opacity: 0.6;
|
||||
&:after,
|
||||
&:before {
|
||||
background-color: var(--text-color);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -31,6 +31,8 @@ export default {
|
||||
);
|
||||
|
||||
intersectionObserver.observe(this.$refs.observer);
|
||||
|
||||
this.$once("hook:beforeDestroy", () => intersectionObserver.disconnect());
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -19,10 +19,10 @@ describe("<LogEventSource />", () => {
|
||||
global.EventSource = EventSource;
|
||||
window.scrollTo = jest.fn();
|
||||
const observe = jest.fn();
|
||||
const unobserve = jest.fn();
|
||||
const disconnect = jest.fn();
|
||||
global.IntersectionObserver = jest.fn(() => ({
|
||||
observe,
|
||||
unobserve,
|
||||
disconnect,
|
||||
}));
|
||||
debounce.mockClear();
|
||||
});
|
||||
@@ -144,7 +144,7 @@ describe("<LogEventSource />", () => {
|
||||
await wrapper.vm.$nextTick();
|
||||
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
|
||||
<ul class="events medium">
|
||||
<li class=""><span class="date">today at 10:55 AM</span> <span class="text">"This is a message."</span></li>
|
||||
<li class=""><span class="date"><time datetime="2019-06-12T10:55:42.459Z">today at 10:55 AM</time></span> <span class="text">"This is a message."</span></li>
|
||||
</ul>
|
||||
`);
|
||||
});
|
||||
@@ -159,7 +159,7 @@ describe("<LogEventSource />", () => {
|
||||
await wrapper.vm.$nextTick();
|
||||
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
|
||||
<ul class="events medium">
|
||||
<li class=""><span class="date">today at 10:55 AM</span> <span class="text"><span style="color:#000">black<span style="color:#AAA">white</span></span></span></li>
|
||||
<li class=""><span class="date"><time datetime="2019-06-12T10:55:42.459Z">today at 10:55 AM</time></span> <span class="text"><span style="color:#000">black<span style="color:#AAA">white</span></span></span></li>
|
||||
</ul>
|
||||
`);
|
||||
});
|
||||
@@ -174,7 +174,7 @@ describe("<LogEventSource />", () => {
|
||||
await wrapper.vm.$nextTick();
|
||||
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
|
||||
<ul class="events medium">
|
||||
<li class=""><span class="date">today at 10:55 AM</span> <span class="text"><test>foo bar</test></span></li>
|
||||
<li class=""><span class="date"><time datetime="2019-06-12T10:55:42.459Z">today at 10:55 AM</time></span> <span class="text"><test>foo bar</test></span></li>
|
||||
</ul>
|
||||
`);
|
||||
});
|
||||
@@ -192,7 +192,7 @@ describe("<LogEventSource />", () => {
|
||||
await wrapper.vm.$nextTick();
|
||||
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
|
||||
<ul class="events medium">
|
||||
<li class=""><span class="date">today at 10:55 AM</span> <span class="text">This is a <mark>test</mark> <hi></hi></span></li>
|
||||
<li class=""><span class="date"><time datetime="2019-06-12T10:55:42.459Z">today at 10:55 AM</time></span> <span class="text">This is a <mark>test</mark> <hi></hi></span></li>
|
||||
</ul>
|
||||
`);
|
||||
});
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
<template>
|
||||
<ul class="events" :class="settings.size">
|
||||
<li v-for="item in filtered" :key="item.key" :class="{ event: !!item.event }">
|
||||
<span class="date" v-if="settings.showTimestamp">{{ item.date | relativeTime }}</span>
|
||||
<span class="date" v-if="settings.showTimestamp"><relative-time :date="item.date"></relative-time></span>
|
||||
<span class="text" v-html="colorize(item.message)"></span>
|
||||
</li>
|
||||
</ul>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapActions, mapGetters, mapState } from "vuex";
|
||||
import { formatRelative } from "date-fns";
|
||||
import AnsiConvertor from "ansi-to-html";
|
||||
import DOMPurify from "dompurify";
|
||||
import RelativeTime from "./RelativeTime";
|
||||
|
||||
const ansiConvertor = new AnsiConvertor({ escapeXML: true });
|
||||
|
||||
@@ -24,7 +23,7 @@ if (window.trustedTypes && trustedTypes.createPolicy) {
|
||||
export default {
|
||||
props: ["messages"],
|
||||
name: "LogViewer",
|
||||
components: {},
|
||||
components: { RelativeTime },
|
||||
data() {
|
||||
return {
|
||||
showSearch: false,
|
||||
@@ -60,11 +59,6 @@ export default {
|
||||
return messages;
|
||||
},
|
||||
},
|
||||
filters: {
|
||||
relativeTime(date) {
|
||||
return formatRelative(date, new Date());
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
@@ -97,6 +91,13 @@ export default {
|
||||
.date {
|
||||
background-color: #262626;
|
||||
color: #258ccd;
|
||||
|
||||
[data-theme="light"] & {
|
||||
background-color: #f0f0f0;
|
||||
color: #009900;
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.text {
|
||||
@@ -109,8 +110,8 @@ li.event {
|
||||
|
||||
::v-deep mark {
|
||||
border-radius: 2px;
|
||||
background-color: #ffdd57;
|
||||
animation: pops 0.2s ease-out;
|
||||
background-color: var(--secondary-color);
|
||||
animation: pops 200ms ease-out;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,13 +2,15 @@
|
||||
<aside>
|
||||
<a
|
||||
role="button"
|
||||
class="navbar-burger burger is-white is-hidden-tablet is-pulled-right"
|
||||
class="navbar-burger burger is-hidden-tablet is-pulled-right"
|
||||
@click="showNav = !showNav"
|
||||
:class="{ 'is-active': showNav }"
|
||||
>
|
||||
<span></span> <span></span> <span></span>
|
||||
</a>
|
||||
<h1 class="title has-text-warning is-marginless">Dozzle</h1>
|
||||
<svg class="logo">
|
||||
<use href="#logo"></use>
|
||||
</svg>
|
||||
<p class="menu-label is-hidden-mobile" :class="{ 'is-active': showNav }">Containers</p>
|
||||
<ul class="menu-list is-hidden-mobile" :class="{ 'is-active': showNav }">
|
||||
<li v-for="item in visibleContainers" :key="item.id">
|
||||
@@ -54,7 +56,7 @@ aside {
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: #222;
|
||||
background: var(--scheme-main-ter);
|
||||
z-index: 2;
|
||||
max-height: 100vh;
|
||||
overflow: auto;
|
||||
@@ -68,8 +70,12 @@ aside {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.burger.is-white {
|
||||
color: #fff;
|
||||
.title {
|
||||
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.burger {
|
||||
color: var(--body-color);
|
||||
}
|
||||
|
||||
.is-hidden-mobile.is-active {
|
||||
@@ -79,5 +85,11 @@ aside {
|
||||
.navbar-burger {
|
||||
height: 2.35rem;
|
||||
}
|
||||
|
||||
.logo {
|
||||
width: 82px;
|
||||
height: 36px;
|
||||
fill: var(--logo-color);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
34
assets/components/RelativeTime.vue
Normal file
@@ -0,0 +1,34 @@
|
||||
<template>
|
||||
<time :datetime="date.toISOString()">{{ date | relativeTime }}</time>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { formatRelative } from "date-fns";
|
||||
import { enGB, enUS } from "date-fns/locale";
|
||||
|
||||
const use24Hr =
|
||||
new Intl.DateTimeFormat(undefined, {
|
||||
hour: "numeric",
|
||||
})
|
||||
.formatToParts(new Date(2020, 0, 1, 13))
|
||||
.find((part) => part.type === "hour").value.length === 2;
|
||||
|
||||
const locale = use24Hr ? enGB : enUS;
|
||||
|
||||
export default {
|
||||
props: {
|
||||
date: {
|
||||
required: true,
|
||||
type: Date,
|
||||
},
|
||||
},
|
||||
name: "RelativeTime",
|
||||
components: {},
|
||||
|
||||
filters: {
|
||||
relativeTime(date) {
|
||||
return formatRelative(date, new Date(), { locale });
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
88
assets/components/ScrollProgress.vue
Normal file
@@ -0,0 +1,88 @@
|
||||
<template>
|
||||
<div class="scroll-progress">
|
||||
<svg width="100" height="100" viewBox="0 0 100 100">
|
||||
<circle r="44" cx="50" cy="50" :style="{ '--progress': scrollProgress }" />
|
||||
</svg>
|
||||
<div class="is-overlay columns is-vcentered is-centered has-text-weight-light">
|
||||
<span class="column is-narrow is-paddingless is-size-2">
|
||||
{{ Math.ceil(scrollProgress * 100) }}
|
||||
</span>
|
||||
<span class="column is-narrow is-paddingless">
|
||||
%
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from "vuex";
|
||||
import throttle from "lodash.throttle";
|
||||
|
||||
export default {
|
||||
name: "ScrollProgress",
|
||||
data() {
|
||||
return {
|
||||
scrollProgress: 0,
|
||||
animation: { cancel: () => {} },
|
||||
parentElement: document,
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.onScrollThrottled = throttle(this.onScroll, 150);
|
||||
},
|
||||
mounted() {
|
||||
this.attachEvents();
|
||||
this.$once("hook:beforeDestroy", this.detachEvents);
|
||||
},
|
||||
watch: {
|
||||
activeContainers() {
|
||||
this.detachEvents();
|
||||
this.attachEvents();
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
...mapState(["activeContainers"]),
|
||||
},
|
||||
methods: {
|
||||
attachEvents() {
|
||||
this.parentElement = this.$el.closest("[data-scrolling]") || document;
|
||||
this.parentElement.addEventListener("scroll", this.onScrollThrottled);
|
||||
},
|
||||
detachEvents() {
|
||||
this.parentElement.removeEventListener("scroll", this.onScrollThrottled);
|
||||
},
|
||||
onScroll() {
|
||||
const p = this.parentElement == document ? document.documentElement : this.parentElement;
|
||||
this.scrollProgress = p.scrollTop / (p.scrollHeight - p.clientHeight);
|
||||
this.animation.cancel();
|
||||
this.animation = this.$el.animate(
|
||||
{ opacity: [1, 0] },
|
||||
{
|
||||
duration: 500,
|
||||
delay: 2000,
|
||||
fill: "both",
|
||||
easing: "ease-out",
|
||||
}
|
||||
);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.scroll-progress {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
circle {
|
||||
fill: var(--scheme-main-ter);
|
||||
fill-opacity: 0.8;
|
||||
transition: stroke-dashoffset 250ms ease-out;
|
||||
transform: rotate(-90deg);
|
||||
transform-origin: 50% 50%;
|
||||
stroke: var(--primary-color);
|
||||
stroke-dashoffset: calc(276.32px - var(--progress) * 276.32px);
|
||||
stroke-dasharray: 276.32px 276.32px;
|
||||
stroke-width: 3;
|
||||
will-change: stroke-dashoffset;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -4,17 +4,16 @@
|
||||
<slot name="header"></slot>
|
||||
</header>
|
||||
<main ref="content" :data-scrolling="scrollable">
|
||||
<div class="is-scrollbar-progress is-hidden-mobile">
|
||||
<scroll-progress v-show="paused"></scroll-progress>
|
||||
</div>
|
||||
<slot></slot>
|
||||
<div ref="scrollObserver"></div>
|
||||
<div ref="scrollObserver" class="is-scroll-observer"></div>
|
||||
</main>
|
||||
<div class="scroll-bar-notification">
|
||||
|
||||
<div class="is-scrollbar-notification">
|
||||
<transition name="fade">
|
||||
<button
|
||||
class="button"
|
||||
:class="hasMore ? 'is-warning' : 'is-primary'"
|
||||
@click="scrollToBottom('instant')"
|
||||
v-show="paused"
|
||||
>
|
||||
<button class="button" :class="hasMore ? 'has-more' : ''" @click="scrollToBottom('instant')" v-show="paused">
|
||||
<icon name="download"></icon>
|
||||
</button>
|
||||
</transition>
|
||||
@@ -24,6 +23,7 @@
|
||||
|
||||
<script>
|
||||
import Icon from "./Icon";
|
||||
import ScrollProgress from "./ScrollProgress";
|
||||
|
||||
export default {
|
||||
props: {
|
||||
@@ -34,6 +34,7 @@ export default {
|
||||
},
|
||||
components: {
|
||||
Icon,
|
||||
ScrollProgress,
|
||||
},
|
||||
name: "ScrollableView",
|
||||
data() {
|
||||
@@ -44,20 +45,22 @@ export default {
|
||||
},
|
||||
mounted() {
|
||||
const { content } = this.$refs;
|
||||
new MutationObserver((e) => {
|
||||
const mutationObserver = new MutationObserver((e) => {
|
||||
if (!this.paused) {
|
||||
this.scrollToBottom("instant");
|
||||
} else {
|
||||
this.hasMore = true;
|
||||
}
|
||||
}).observe(content, { childList: true, subtree: true });
|
||||
});
|
||||
mutationObserver.observe(content, { childList: true, subtree: true });
|
||||
this.$once("hook:beforeDestroy", () => mutationObserver.disconnect());
|
||||
|
||||
const intersectionObserver = new IntersectionObserver(
|
||||
(entries) => (this.paused = entries[0].intersectionRatio == 0),
|
||||
{ threshholds: [0, 1], rootMargin: "80px 0px" }
|
||||
);
|
||||
|
||||
intersectionObserver.observe(this.$refs.scrollObserver);
|
||||
this.$once("hook:beforeDestroy", () => intersectionObserver.disconnect());
|
||||
},
|
||||
|
||||
methods: {
|
||||
@@ -75,6 +78,7 @@ section {
|
||||
|
||||
&.is-full-height-scrollable {
|
||||
height: 100vh;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
main {
|
||||
@@ -83,12 +87,54 @@ section {
|
||||
scroll-snap-type: y proximity;
|
||||
}
|
||||
|
||||
.scroll-bar-notification {
|
||||
.is-scrollbar-progress {
|
||||
text-align: right;
|
||||
margin-right: 110px;
|
||||
.scroll-progress {
|
||||
position: fixed;
|
||||
top: 60px;
|
||||
z-index: 2;
|
||||
}
|
||||
}
|
||||
|
||||
.is-scroll-observer {
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
.is-scrollbar-notification {
|
||||
text-align: right;
|
||||
margin-right: 65px;
|
||||
button {
|
||||
position: fixed;
|
||||
bottom: 30px;
|
||||
background-color: var(--secondary-color);
|
||||
transition: background-color 1s ease-out;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
|
||||
border: none !important;
|
||||
|
||||
&.has-more {
|
||||
background-color: var(--primary-color);
|
||||
animation-name: bounce;
|
||||
animation-duration: 1000ms;
|
||||
animation-fill-mode: both;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes bounce {
|
||||
0%,
|
||||
20%,
|
||||
50%,
|
||||
80%,
|
||||
100% {
|
||||
transform: translateY(0);
|
||||
}
|
||||
40% {
|
||||
transform: translateY(-30px);
|
||||
}
|
||||
60% {
|
||||
transform: translateY(-15px);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -75,17 +75,36 @@ export default {
|
||||
width: 350px;
|
||||
position: fixed;
|
||||
padding: 10px;
|
||||
background: rgba(50, 50, 50, 0.9);
|
||||
background: var(--scheme-main-ter);
|
||||
top: 0;
|
||||
right: 0;
|
||||
border-radius: 0 0 0 5px;
|
||||
z-index: 10;
|
||||
}
|
||||
.delete {
|
||||
margin-left: 1em;
|
||||
}
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
|
||||
|
||||
.icon {
|
||||
padding: 10px 3px;
|
||||
button.delete {
|
||||
margin-left: 1em;
|
||||
background-color: var(--scheme-main-ter);
|
||||
opacity: 0.6;
|
||||
&:after,
|
||||
&:before {
|
||||
background-color: var(--text-color);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.icon {
|
||||
padding: 10px 3px;
|
||||
}
|
||||
|
||||
.input {
|
||||
color: var(--body-color);
|
||||
&::placeholder {
|
||||
color: var(--border-color);
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
<template>
|
||||
<aside>
|
||||
<div class="columns is-marginless">
|
||||
<div class="column">
|
||||
<h1 class="title has-text-warning is-marginless">Dozzle</h1>
|
||||
<div class="column is-paddingless">
|
||||
<router-link :to="{ name: 'default' }">
|
||||
<svg class="logo">
|
||||
<use href="#logo"></use>
|
||||
</svg>
|
||||
</router-link>
|
||||
</div>
|
||||
<div class="column is-narrow has-text-right is-hidden-mobile">
|
||||
<div class="column is-narrow has-text-right x">
|
||||
<router-link
|
||||
:to="{ name: 'settings' }"
|
||||
active-class="is-active"
|
||||
@@ -79,10 +83,6 @@ aside {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.burger.is-white {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.is-hidden-mobile.is-active {
|
||||
display: block !important;
|
||||
}
|
||||
@@ -92,11 +92,17 @@ li.exited a {
|
||||
color: #777;
|
||||
}
|
||||
|
||||
.logo {
|
||||
width: 122px;
|
||||
height: 54px;
|
||||
fill: var(--logo-color);
|
||||
}
|
||||
|
||||
.will-append-container.icon {
|
||||
transition: transform 0.2s ease-out;
|
||||
&.is-active {
|
||||
pointer-events: none;
|
||||
color: #00d1b2;
|
||||
color: var(--primary-color);
|
||||
}
|
||||
.router-link-exact-active & {
|
||||
visibility: hidden;
|
||||
|
||||
@@ -6,10 +6,7 @@ import Switch from "buefy/dist/esm/switch";
|
||||
import store from "./store";
|
||||
import config from "./store/config";
|
||||
import App from "./App.vue";
|
||||
import Container from "./pages/Container.vue";
|
||||
import Settings from "./pages/Settings.vue";
|
||||
import Index from "./pages/Index.vue";
|
||||
import Show from "./pages/Show.vue";
|
||||
import { Container, Settings, Index, Show, ContainerNotFound, PageNotFound } from "./pages";
|
||||
|
||||
Vue.use(VueRouter);
|
||||
Vue.use(Meta);
|
||||
@@ -28,6 +25,11 @@ const routes = [
|
||||
name: "container",
|
||||
props: true,
|
||||
},
|
||||
{
|
||||
path: "/container/*",
|
||||
component: ContainerNotFound,
|
||||
name: "container-not-found",
|
||||
},
|
||||
{
|
||||
path: "/settings",
|
||||
component: Settings,
|
||||
@@ -38,6 +40,11 @@ const routes = [
|
||||
component: Show,
|
||||
name: "show",
|
||||
},
|
||||
{
|
||||
path: "/*",
|
||||
component: PageNotFound,
|
||||
name: "page-not-found",
|
||||
},
|
||||
];
|
||||
|
||||
const router = new VueRouter({
|
||||
|
||||
@@ -13,6 +13,7 @@ import { mapActions, mapGetters, mapState } from "vuex";
|
||||
import LogViewerWithSource from "../components/LogViewerWithSource";
|
||||
import ScrollableView from "../components/ScrollableView";
|
||||
import ContainerTitle from "../components/ContainerTitle";
|
||||
import store from "../store";
|
||||
|
||||
export default {
|
||||
props: ["id", "name"],
|
||||
|
||||
18
assets/pages/ContainerNotFound.vue
Normal file
@@ -0,0 +1,18 @@
|
||||
<template>
|
||||
<div class="hero is-halfheight">
|
||||
<div class="hero-body">
|
||||
<div class="container has-text-centered">
|
||||
<h1 class="title">
|
||||
Container not found.
|
||||
<small class="subtitle">It may have been removed.</small>
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "ContainerNotFound",
|
||||
};
|
||||
</script>
|
||||
@@ -1,9 +0,0 @@
|
||||
import { shallowMount } from "@vue/test-utils";
|
||||
import Index from "./Index";
|
||||
|
||||
describe("<Index />", () => {
|
||||
test("renders correctly", () => {
|
||||
const wrapper = shallowMount(Index);
|
||||
expect(wrapper.element).toMatchSnapshot();
|
||||
});
|
||||
});
|
||||
@@ -1,22 +1,146 @@
|
||||
<template>
|
||||
<div class="hero is-fullheight is-dark">
|
||||
<div class="hero-body">
|
||||
<div class="container has-text-centered">
|
||||
<h1 class="title">Please choose a container from the list to view the logs</h1>
|
||||
<div>
|
||||
<section class="hero is-small mt-4">
|
||||
<div class="hero-body">
|
||||
<div class="container">
|
||||
<h1 class="title">
|
||||
Hello, there!
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="level section">
|
||||
<div class="level-item has-text-centered">
|
||||
<div>
|
||||
<p class="title">{{ containers.length }}</p>
|
||||
<p class="heading">Total Containers</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="level-item has-text-centered">
|
||||
<div>
|
||||
<p class="title">{{ runningContainers.length }}</p>
|
||||
<p class="heading">Running</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="level-item has-text-centered">
|
||||
<div>
|
||||
<p class="title">{{ version }}</p>
|
||||
<p class="heading">Dozzle Version</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="columns is-centered">
|
||||
<div class="column is-4">
|
||||
<div class="panel">
|
||||
<p class="panel-heading">
|
||||
Containers
|
||||
</p>
|
||||
<div class="panel-block">
|
||||
<p class="control has-icons-left">
|
||||
<input
|
||||
class="input"
|
||||
type="text"
|
||||
placeholder="Search Containers"
|
||||
v-model="search"
|
||||
@keyup.esc="search = null"
|
||||
/>
|
||||
<span class="icon is-left">
|
||||
<icon name="search"></icon>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<p class="panel-tabs">
|
||||
<a :class="{ 'is-active': sort === 'recent' }" @click="sort = 'recent'">Recent</a>
|
||||
<a :class="{ 'is-active': sort === 'running' }" @click="sort = 'running'">Running</a>
|
||||
<a :class="{ 'is-active': sort === 'all' }" @click="sort = 'all'">All</a>
|
||||
</p>
|
||||
<router-link
|
||||
:to="{ name: 'container', params: { id: item.id, name: item.name } }"
|
||||
v-for="item in results.slice(0, 10)"
|
||||
:key="item.id"
|
||||
class="panel-block"
|
||||
>
|
||||
<span class="name">{{ item.name }}</span>
|
||||
|
||||
<!-- <div class="subtitle is-7 status">
|
||||
{{ item.status }}
|
||||
</div> -->
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapActions, mapGetters, mapState } from "vuex";
|
||||
import Icon from "../components/Icon";
|
||||
import config from "../store/config";
|
||||
|
||||
export default {
|
||||
props: [],
|
||||
name: "Default",
|
||||
name: "Index",
|
||||
components: { Icon },
|
||||
data() {
|
||||
return {
|
||||
version: config.version,
|
||||
search: null,
|
||||
sort: "recent",
|
||||
};
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapState(["containers"]),
|
||||
mostRecentContainers() {
|
||||
return [...this.containers].sort((a, b) => b.created - a.created);
|
||||
},
|
||||
runningContainers() {
|
||||
return this.containers.filter((c) => c.state === "running");
|
||||
},
|
||||
allContainers() {
|
||||
return this.containers;
|
||||
},
|
||||
results() {
|
||||
if (this.search) {
|
||||
const term = this.search.toLowerCase();
|
||||
return this.allContainers.filter((c) => c.name.toLowerCase().includes(term));
|
||||
}
|
||||
switch (this.sort) {
|
||||
case "all":
|
||||
return this.allContainers;
|
||||
case "running":
|
||||
return this.runningContainers;
|
||||
case "recent":
|
||||
return this.mostRecentContainers;
|
||||
default:
|
||||
throw `Invalid sort order: ${this.sort}`;
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
.hero.is-dark {
|
||||
color: #ddd;
|
||||
background-color: #111;
|
||||
<style lang="scss" scoped>
|
||||
.panel {
|
||||
border: 1px solid var(--border-color);
|
||||
.panel-block,
|
||||
.panel-tabs {
|
||||
border-color: var(--border-color);
|
||||
.is-active {
|
||||
border-color: var(--border-hover-color);
|
||||
}
|
||||
.name {
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
}
|
||||
.status {
|
||||
margin-left: auto;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.icon {
|
||||
padding: 10px 3px;
|
||||
}
|
||||
</style>
|
||||
|
||||
18
assets/pages/PageNotFound.vue
Normal file
@@ -0,0 +1,18 @@
|
||||
<template>
|
||||
<div class="hero is-halfheight">
|
||||
<div class="hero-body">
|
||||
<div class="container has-text-centered">
|
||||
<h1 class="title">
|
||||
Oops,
|
||||
<small class="subtitle">this page doesn't exist</small>
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "PageNotFound",
|
||||
};
|
||||
</script>
|
||||
@@ -45,6 +45,12 @@
|
||||
</b-switch>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<b-switch v-model="lightTheme">
|
||||
Use light theme
|
||||
</b-switch>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<h2 class="title is-6 is-marginless">Font size</h2>
|
||||
Modify the font size when viewing logs.
|
||||
@@ -112,29 +118,30 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
...mapState(["settings"]),
|
||||
...["search", "size", "smallerScrollbars", "showTimestamp", "showAllContainers"].reduce((map, name) => {
|
||||
map[name] = {
|
||||
get() {
|
||||
return this.settings[name];
|
||||
},
|
||||
set(value) {
|
||||
this.updateSetting({ [name]: value });
|
||||
},
|
||||
};
|
||||
return map;
|
||||
}, {}),
|
||||
...["search", "size", "smallerScrollbars", "showTimestamp", "showAllContainers", "lightTheme"].reduce(
|
||||
(map, name) => {
|
||||
map[name] = {
|
||||
get() {
|
||||
return this.settings[name];
|
||||
},
|
||||
set(value) {
|
||||
this.updateSetting({ [name]: value });
|
||||
},
|
||||
};
|
||||
return map;
|
||||
},
|
||||
{}
|
||||
),
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.title {
|
||||
color: #eee;
|
||||
color: var(--title-color);
|
||||
}
|
||||
|
||||
a.next-release {
|
||||
text-decoration: underline;
|
||||
color: #00d1b2;
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
@@ -145,7 +152,7 @@ a.next-release {
|
||||
}
|
||||
|
||||
.has-underline {
|
||||
border-bottom: 1px solid #fff;
|
||||
border-bottom: 1px solid var(--title-color);
|
||||
padding: 1em 0px;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`<Index /> renders correctly 1`] = `
|
||||
<div
|
||||
class="hero is-fullheight is-dark"
|
||||
>
|
||||
<div
|
||||
class="hero-body"
|
||||
>
|
||||
<div
|
||||
class="container has-text-centered"
|
||||
>
|
||||
<h1
|
||||
class="title"
|
||||
>
|
||||
Please choose a container from the list to view the logs
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
6
assets/pages/index.js
Normal file
@@ -0,0 +1,6 @@
|
||||
export { default as Index } from "./Index.vue";
|
||||
export { default as ContainerNotFound } from "./ContainerNotFound.vue";
|
||||
export { default as Show } from "./Show.vue";
|
||||
export { default as Container } from "./Container.vue";
|
||||
export { default as Settings } from "./Settings.vue";
|
||||
export { default as PageNotFound } from "./PageNotFound.vue";
|
||||
@@ -1,2 +1,6 @@
|
||||
const config = JSON.parse(document.querySelector("script#config__json").textContent);
|
||||
if (config.version == "{{ .Version }}") {
|
||||
config.version = "dev";
|
||||
config.base = "";
|
||||
}
|
||||
export default config;
|
||||
|
||||
@@ -6,4 +6,5 @@ export const DEFAULT_SETTINGS = {
|
||||
smallerScrollbars: false,
|
||||
showTimestamp: true,
|
||||
showAllContainers: false,
|
||||
lightTheme: false
|
||||
};
|
||||
|
||||
@@ -1,7 +1,29 @@
|
||||
@charset "utf-8";
|
||||
@import "~bulma/sass/utilities/initial-variables.sass";
|
||||
|
||||
$menu-item-active-background-color: hsl(171, 100%, 41%);
|
||||
$menu-item-color: hsl(0, 6%, 87%);
|
||||
$body-family: "Roboto", sans-serif;
|
||||
$body-background-color: var(--body-background-color);
|
||||
|
||||
$scheme-main: var(--scheme-main);
|
||||
$scheme-main-bis: var(--scheme-main-bis);
|
||||
$scheme-main-ter: var(--scheme-main-ter);
|
||||
|
||||
$border: var(--border-color);
|
||||
$border-hover: var(--border-hover-color);
|
||||
|
||||
$menu-item-active-background-color: var(--menu-item-active-background-color);
|
||||
$menu-item-color: var(--menu-item-color);
|
||||
$menu-item-hover-background-color: var(--menu-item-hover-background-color);
|
||||
$menu-item-hover-color: var(--menu-item-hover-color);
|
||||
|
||||
$text-strong: var(--text-strong-color);
|
||||
$text: var(--text-color);
|
||||
|
||||
$panel-heading-background-color: var(--panel-heading-background-color);
|
||||
$panel-heading-color: var(--panel-heading-color);
|
||||
|
||||
$link: $turquoise;
|
||||
$link-active: $grey-dark;
|
||||
|
||||
@import "~bulma";
|
||||
@import "../node_modules/splitpanes/dist/splitpanes.css";
|
||||
@@ -9,14 +31,56 @@ $menu-item-color: hsl(0, 6%, 87%);
|
||||
@import "~buefy/src/scss/components/_dropdown";
|
||||
@import "~buefy/src/scss/components/_switch";
|
||||
|
||||
body {
|
||||
font-family: "Roboto", sans-serif;
|
||||
color: #ddd;
|
||||
background-color: #111;
|
||||
html {
|
||||
--scheme-main: #{$black};
|
||||
--scheme-main-bis: #{$black-bis};
|
||||
--scheme-main-ter: #{$black-ter};
|
||||
|
||||
--border-color: #{$grey-darker};
|
||||
--border-hover-color: var(--secondary-color);
|
||||
--logo-color: var(--secondary-color);
|
||||
|
||||
--primary-color: #{$turquoise};
|
||||
--secondary-color: #{$yellow};
|
||||
|
||||
--body-background-color: #{$black-bis};
|
||||
|
||||
--menu-item-active-background-color: var(--primary-color);
|
||||
--menu-item-color: hsl(0, 6%, 87%);
|
||||
--menu-item-hover-background-color: #{$white-ter};
|
||||
--menu-item-hover-color: #{$black-ter};
|
||||
|
||||
--panel-heading-background-color: var(--secondary-color);
|
||||
--panel-heading-color: var(--scheme-main-bis);
|
||||
|
||||
--text-strong-color: #{$grey-lightest};
|
||||
--text-color: #{$grey-lighter};
|
||||
}
|
||||
|
||||
h1.title {
|
||||
font-family: "Gafata", sans-serif;
|
||||
[data-theme="light"] {
|
||||
--scheme-main: #{$white};
|
||||
--scheme-main-bis: #{$white-bis};
|
||||
--scheme-main-ter: #{$white-ter};
|
||||
|
||||
--border-color: #{$grey-lighter};
|
||||
--border-hover-color: var(--secondary-color);
|
||||
--logo-color: #{$grey-darker};
|
||||
|
||||
--primary-color: #{$turquoise};
|
||||
--secondary-color: #d8f0ca;
|
||||
|
||||
--body-background-color: #{$white-bis};
|
||||
--body-color: #{$grey-darker};
|
||||
|
||||
--menu-item-color: #{$grey-dark};
|
||||
--menu-item-hover-background-color: #eee8e7;
|
||||
--menu-item-hover-color: #{black-ter};
|
||||
|
||||
--panel-heading-background-color: var(--secondary-color);
|
||||
--panel-heading-color: var(--text-strong-color);
|
||||
|
||||
--text-strong-color: #{$grey-dark};
|
||||
--text-color: #{$grey-darker};
|
||||
}
|
||||
|
||||
html {
|
||||
@@ -60,7 +124,7 @@ html.has-custom-scrollbars {
|
||||
color: #fff;
|
||||
border-color: transparent;
|
||||
&:hover {
|
||||
border-color: rgb(255, 221, 87) !important;
|
||||
border-color: var(--border-hover-color) !important;
|
||||
background: rgba(0, 0, 0, 0.8) !important;
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
@@ -95,9 +95,8 @@ func (d *dockerClient) ListContainers() ([]Container, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var containers []Container
|
||||
var containers = make([]Container, 0, len(list))
|
||||
for _, c := range list {
|
||||
|
||||
container := Container{
|
||||
ID: c.ID[:12],
|
||||
Names: c.Names,
|
||||
@@ -116,10 +115,6 @@ func (d *dockerClient) ListContainers() ([]Container, error) {
|
||||
return strings.ToLower(containers[i].Name) < strings.ToLower(containers[j].Name)
|
||||
})
|
||||
|
||||
if containers == nil {
|
||||
containers = []Container{}
|
||||
}
|
||||
|
||||
return containers, nil
|
||||
}
|
||||
|
||||
|
||||
1
integration/.dockerignore
Normal file
@@ -0,0 +1 @@
|
||||
node_modules
|
||||
@@ -1,8 +1,8 @@
|
||||
FROM amir20/docker-alpine-puppeteer:edge
|
||||
FROM amir20/docker-alpine-puppeteer:v1
|
||||
|
||||
COPY --chown=pptruser:pptruser package*.json yarn.lock /app/
|
||||
RUN yarn
|
||||
COPY package*.json yarn.lock /app/
|
||||
RUN yarn
|
||||
|
||||
COPY --chown=pptruser:pptruser . /app/
|
||||
COPY . /app/
|
||||
|
||||
CMD [ "yarn", "test"]
|
||||
CMD ["yarn", "test"]
|
||||
|
||||
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 74 KiB |
21
integration/__tests__/custom_base.js
Normal file
@@ -0,0 +1,21 @@
|
||||
const puppeteer = require("puppeteer");
|
||||
|
||||
const { CUSTOM_URL: URL } = process.env;
|
||||
|
||||
describe("Dozzle with custom base", () => {
|
||||
beforeEach(async () => {
|
||||
await page.goto(URL, { waitUntil: "networkidle2" });
|
||||
});
|
||||
|
||||
it("renders full page on desktop", async () => {
|
||||
const image = await page.screenshot({ fullPage: true });
|
||||
|
||||
expect(image).toMatchImageSnapshot();
|
||||
});
|
||||
|
||||
it("and shows one container with correct title", async () => {
|
||||
const menuTitle = await page.$eval("aside ul.menu-list li a", (e) => e.title);
|
||||
|
||||
expect(menuTitle).toEqual("custom_base");
|
||||
});
|
||||
});
|
||||
@@ -2,11 +2,11 @@ const puppeteer = require("puppeteer");
|
||||
const iPhoneX = puppeteer.devices["iPhone X"];
|
||||
const iPadLandscape = puppeteer.devices["iPad landscape"];
|
||||
|
||||
const { BASE } = process.env;
|
||||
const { DEFAULT_URL: URL } = process.env;
|
||||
|
||||
describe("home page", () => {
|
||||
beforeEach(async () => {
|
||||
await page.goto(BASE, { waitUntil: "networkidle2" });
|
||||
await page.goto(URL, { waitUntil: "networkidle2" });
|
||||
});
|
||||
|
||||
it("renders full page on desktop", async () => {
|
||||
@@ -43,7 +43,7 @@ describe("home page", () => {
|
||||
});
|
||||
|
||||
beforeEach(async () => {
|
||||
await page.goto(BASE, { waitUntil: "networkidle2" });
|
||||
await page.goto(URL, { waitUntil: "networkidle2" });
|
||||
});
|
||||
|
||||
it("and shows one container with correct title", async () => {
|
||||
37
integration/__tests__/light_mode.js
Normal file
@@ -0,0 +1,37 @@
|
||||
const puppeteer = require("puppeteer");
|
||||
const iPhoneX = puppeteer.devices["iPhone X"];
|
||||
const iPadLandscape = puppeteer.devices["iPad landscape"];
|
||||
|
||||
const { DEFAULT_URL: URL } = process.env;
|
||||
|
||||
describe("Dozzle with light mode", () => {
|
||||
beforeAll(async () => {
|
||||
await page.goto(URL + "/settings", { waitUntil: "networkidle2" });
|
||||
await page.$$eval("label.switch", (elements) => {
|
||||
elements.filter((e) => e.textContent.trim() === "Use light theme")[0].click();
|
||||
});
|
||||
});
|
||||
beforeEach(async () => {
|
||||
await page.goto(URL, { waitUntil: "networkidle2" });
|
||||
});
|
||||
|
||||
it("renders full page on desktop", async () => {
|
||||
const image = await page.screenshot({ fullPage: true });
|
||||
|
||||
expect(image).toMatchImageSnapshot();
|
||||
});
|
||||
|
||||
it("renders ipad viewport", async () => {
|
||||
await page.emulate(iPadLandscape);
|
||||
const image = await page.screenshot();
|
||||
|
||||
expect(image).toMatchImageSnapshot();
|
||||
});
|
||||
|
||||
it("renders iphone viewport", async () => {
|
||||
await page.emulate(iPhoneX);
|
||||
const image = await page.screenshot();
|
||||
|
||||
expect(image).toMatchImageSnapshot();
|
||||
});
|
||||
});
|
||||
@@ -1,5 +1,14 @@
|
||||
version: "3.4"
|
||||
services:
|
||||
custom_base:
|
||||
container_name: custom_base
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
environment:
|
||||
- DOZZLE_FILTER=name=custom_base
|
||||
- DOZZLE_BASE=/foobarbase
|
||||
build:
|
||||
context: ..
|
||||
dozzle:
|
||||
container_name: dozzle
|
||||
volumes:
|
||||
@@ -12,7 +21,11 @@ services:
|
||||
build:
|
||||
context: .
|
||||
command: yarn test
|
||||
volumes:
|
||||
- ./__tests__:/app/__tests__
|
||||
environment:
|
||||
- BASE=http://dozzle:8080/
|
||||
- DEFAULT_URL=http://dozzle:8080/
|
||||
- CUSTOM_URL=http://custom_base:8080/foobarbase
|
||||
depends_on:
|
||||
- dozzle
|
||||
- custom_base
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"dependencies": {
|
||||
"jest": "^26.0.1",
|
||||
"jest-image-snapshot": "^4.0.0",
|
||||
"puppeteer": "^3.0.4"
|
||||
"puppeteer": "^5.0.0"
|
||||
},
|
||||
"jest": {
|
||||
"preset": "jest-puppeteer",
|
||||
|
||||
@@ -326,103 +326,103 @@
|
||||
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd"
|
||||
integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==
|
||||
|
||||
"@jest/console@^26.0.1":
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.0.1.tgz#62b3b2fa8990f3cbffbef695c42ae9ddbc8f4b39"
|
||||
integrity sha512-9t1KUe/93coV1rBSxMmBAOIK3/HVpwxArCA1CxskKyRiv6o8J70V8C/V3OJminVCTa2M0hQI9AWRd5wxu2dAHw==
|
||||
"@jest/console@^26.1.0":
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.1.0.tgz#f67c89e4f4d04dbcf7b052aed5ab9c74f915b954"
|
||||
integrity sha512-+0lpTHMd/8pJp+Nd4lyip+/Iyf2dZJvcCqrlkeZQoQid+JlThA4M9vxHtheyrQ99jJTMQam+es4BcvZ5W5cC3A==
|
||||
dependencies:
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/types" "^26.1.0"
|
||||
chalk "^4.0.0"
|
||||
jest-message-util "^26.0.1"
|
||||
jest-util "^26.0.1"
|
||||
jest-message-util "^26.1.0"
|
||||
jest-util "^26.1.0"
|
||||
slash "^3.0.0"
|
||||
|
||||
"@jest/core@^26.0.1":
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.0.1.tgz#aa538d52497dfab56735efb00e506be83d841fae"
|
||||
integrity sha512-Xq3eqYnxsG9SjDC+WLeIgf7/8KU6rddBxH+SCt18gEpOhAGYC/Mq+YbtlNcIdwjnnT+wDseXSbU0e5X84Y4jTQ==
|
||||
"@jest/core@^26.1.0":
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.1.0.tgz#4580555b522de412a7998b3938c851e4f9da1c18"
|
||||
integrity sha512-zyizYmDJOOVke4OO/De//aiv8b07OwZzL2cfsvWF3q9YssfpcKfcnZAwDY8f+A76xXSMMYe8i/f/LPocLlByfw==
|
||||
dependencies:
|
||||
"@jest/console" "^26.0.1"
|
||||
"@jest/reporters" "^26.0.1"
|
||||
"@jest/test-result" "^26.0.1"
|
||||
"@jest/transform" "^26.0.1"
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/console" "^26.1.0"
|
||||
"@jest/reporters" "^26.1.0"
|
||||
"@jest/test-result" "^26.1.0"
|
||||
"@jest/transform" "^26.1.0"
|
||||
"@jest/types" "^26.1.0"
|
||||
ansi-escapes "^4.2.1"
|
||||
chalk "^4.0.0"
|
||||
exit "^0.1.2"
|
||||
graceful-fs "^4.2.4"
|
||||
jest-changed-files "^26.0.1"
|
||||
jest-config "^26.0.1"
|
||||
jest-haste-map "^26.0.1"
|
||||
jest-message-util "^26.0.1"
|
||||
jest-changed-files "^26.1.0"
|
||||
jest-config "^26.1.0"
|
||||
jest-haste-map "^26.1.0"
|
||||
jest-message-util "^26.1.0"
|
||||
jest-regex-util "^26.0.0"
|
||||
jest-resolve "^26.0.1"
|
||||
jest-resolve-dependencies "^26.0.1"
|
||||
jest-runner "^26.0.1"
|
||||
jest-runtime "^26.0.1"
|
||||
jest-snapshot "^26.0.1"
|
||||
jest-util "^26.0.1"
|
||||
jest-validate "^26.0.1"
|
||||
jest-watcher "^26.0.1"
|
||||
jest-resolve "^26.1.0"
|
||||
jest-resolve-dependencies "^26.1.0"
|
||||
jest-runner "^26.1.0"
|
||||
jest-runtime "^26.1.0"
|
||||
jest-snapshot "^26.1.0"
|
||||
jest-util "^26.1.0"
|
||||
jest-validate "^26.1.0"
|
||||
jest-watcher "^26.1.0"
|
||||
micromatch "^4.0.2"
|
||||
p-each-series "^2.1.0"
|
||||
rimraf "^3.0.0"
|
||||
slash "^3.0.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
"@jest/environment@^26.0.1":
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.0.1.tgz#82f519bba71959be9b483675ee89de8c8f72a5c8"
|
||||
integrity sha512-xBDxPe8/nx251u0VJ2dFAFz2H23Y98qdIaNwnMK6dFQr05jc+Ne/2np73lOAx+5mSBO/yuQldRrQOf6hP1h92g==
|
||||
"@jest/environment@^26.1.0":
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.1.0.tgz#378853bcdd1c2443b4555ab908cfbabb851e96da"
|
||||
integrity sha512-86+DNcGongbX7ai/KE/S3/NcUVZfrwvFzOOWX/W+OOTvTds7j07LtC+MgGydH5c8Ri3uIrvdmVgd1xFD5zt/xA==
|
||||
dependencies:
|
||||
"@jest/fake-timers" "^26.0.1"
|
||||
"@jest/types" "^26.0.1"
|
||||
jest-mock "^26.0.1"
|
||||
"@jest/fake-timers" "^26.1.0"
|
||||
"@jest/types" "^26.1.0"
|
||||
jest-mock "^26.1.0"
|
||||
|
||||
"@jest/fake-timers@^26.0.1":
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.0.1.tgz#f7aeff13b9f387e9d0cac9a8de3bba538d19d796"
|
||||
integrity sha512-Oj/kCBnTKhm7CR+OJSjZty6N1bRDr9pgiYQr4wY221azLz5PHi08x/U+9+QpceAYOWheauLP8MhtSVFrqXQfhg==
|
||||
"@jest/fake-timers@^26.1.0":
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.1.0.tgz#9a76b7a94c351cdbc0ad53e5a748789f819a65fe"
|
||||
integrity sha512-Y5F3kBVWxhau3TJ825iuWy++BAuQzK/xEa+wD9vDH3RytW9f2DbMVodfUQC54rZDX3POqdxCgcKdgcOL0rYUpA==
|
||||
dependencies:
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/types" "^26.1.0"
|
||||
"@sinonjs/fake-timers" "^6.0.1"
|
||||
jest-message-util "^26.0.1"
|
||||
jest-mock "^26.0.1"
|
||||
jest-util "^26.0.1"
|
||||
jest-message-util "^26.1.0"
|
||||
jest-mock "^26.1.0"
|
||||
jest-util "^26.1.0"
|
||||
|
||||
"@jest/globals@^26.0.1":
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.0.1.tgz#3f67b508a7ce62b6e6efc536f3d18ec9deb19a9c"
|
||||
integrity sha512-iuucxOYB7BRCvT+TYBzUqUNuxFX1hqaR6G6IcGgEqkJ5x4htNKo1r7jk1ji9Zj8ZMiMw0oB5NaA7k5Tx6MVssA==
|
||||
"@jest/globals@^26.1.0":
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.1.0.tgz#6cc5d7cbb79b76b120f2403d7d755693cf063ab1"
|
||||
integrity sha512-MKiHPNaT+ZoG85oMaYUmGHEqu98y3WO2yeIDJrs2sJqHhYOy3Z6F7F/luzFomRQ8SQ1wEkmahFAz2291Iv8EAw==
|
||||
dependencies:
|
||||
"@jest/environment" "^26.0.1"
|
||||
"@jest/types" "^26.0.1"
|
||||
expect "^26.0.1"
|
||||
"@jest/environment" "^26.1.0"
|
||||
"@jest/types" "^26.1.0"
|
||||
expect "^26.1.0"
|
||||
|
||||
"@jest/reporters@^26.0.1":
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.0.1.tgz#14ae00e7a93e498cec35b0c00ab21c375d9b078f"
|
||||
integrity sha512-NWWy9KwRtE1iyG/m7huiFVF9YsYv/e+mbflKRV84WDoJfBqUrNRyDbL/vFxQcYLl8IRqI4P3MgPn386x76Gf2g==
|
||||
"@jest/reporters@^26.1.0":
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.1.0.tgz#08952e90c90282e14ff49e927bdf1873617dae78"
|
||||
integrity sha512-SVAysur9FOIojJbF4wLP0TybmqwDkdnFxHSPzHMMIYyBtldCW9gG+Q5xWjpMFyErDiwlRuPyMSJSU64A67Pazg==
|
||||
dependencies:
|
||||
"@bcoe/v8-coverage" "^0.2.3"
|
||||
"@jest/console" "^26.0.1"
|
||||
"@jest/test-result" "^26.0.1"
|
||||
"@jest/transform" "^26.0.1"
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/console" "^26.1.0"
|
||||
"@jest/test-result" "^26.1.0"
|
||||
"@jest/transform" "^26.1.0"
|
||||
"@jest/types" "^26.1.0"
|
||||
chalk "^4.0.0"
|
||||
collect-v8-coverage "^1.0.0"
|
||||
exit "^0.1.2"
|
||||
glob "^7.1.2"
|
||||
graceful-fs "^4.2.4"
|
||||
istanbul-lib-coverage "^3.0.0"
|
||||
istanbul-lib-instrument "^4.0.0"
|
||||
istanbul-lib-instrument "^4.0.3"
|
||||
istanbul-lib-report "^3.0.0"
|
||||
istanbul-lib-source-maps "^4.0.0"
|
||||
istanbul-reports "^3.0.2"
|
||||
jest-haste-map "^26.0.1"
|
||||
jest-resolve "^26.0.1"
|
||||
jest-util "^26.0.1"
|
||||
jest-worker "^26.0.0"
|
||||
jest-haste-map "^26.1.0"
|
||||
jest-resolve "^26.1.0"
|
||||
jest-util "^26.1.0"
|
||||
jest-worker "^26.1.0"
|
||||
slash "^3.0.0"
|
||||
source-map "^0.6.0"
|
||||
string-length "^4.0.1"
|
||||
@@ -431,61 +431,61 @@
|
||||
optionalDependencies:
|
||||
node-notifier "^7.0.0"
|
||||
|
||||
"@jest/source-map@^26.0.0":
|
||||
version "26.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.0.0.tgz#fd7706484a7d3faf7792ae29783933bbf48a4749"
|
||||
integrity sha512-S2Z+Aj/7KOSU2TfW0dyzBze7xr95bkm5YXNUqqCek+HE0VbNNSNzrRwfIi5lf7wvzDTSS0/ib8XQ1krFNyYgbQ==
|
||||
"@jest/source-map@^26.1.0":
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.1.0.tgz#a6a020d00e7d9478f4b690167c5e8b77e63adb26"
|
||||
integrity sha512-XYRPYx4eEVX15cMT9mstnO7hkHP3krNtKfxUYd8L7gbtia8JvZZ6bMzSwa6IQJENbudTwKMw5R1BePRD+bkEmA==
|
||||
dependencies:
|
||||
callsites "^3.0.0"
|
||||
graceful-fs "^4.2.4"
|
||||
source-map "^0.6.0"
|
||||
|
||||
"@jest/test-result@^26.0.1":
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.0.1.tgz#1ffdc1ba4bc289919e54b9414b74c9c2f7b2b718"
|
||||
integrity sha512-oKwHvOI73ICSYRPe8WwyYPTtiuOAkLSbY8/MfWF3qDEd/sa8EDyZzin3BaXTqufir/O/Gzea4E8Zl14XU4Mlyg==
|
||||
"@jest/test-result@^26.1.0":
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.1.0.tgz#a93fa15b21ad3c7ceb21c2b4c35be2e407d8e971"
|
||||
integrity sha512-Xz44mhXph93EYMA8aYDz+75mFbarTV/d/x0yMdI3tfSRs/vh4CqSxgzVmCps1fPkHDCtn0tU8IH9iCKgGeGpfw==
|
||||
dependencies:
|
||||
"@jest/console" "^26.0.1"
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/console" "^26.1.0"
|
||||
"@jest/types" "^26.1.0"
|
||||
"@types/istanbul-lib-coverage" "^2.0.0"
|
||||
collect-v8-coverage "^1.0.0"
|
||||
|
||||
"@jest/test-sequencer@^26.0.1":
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.0.1.tgz#b0563424728f3fe9e75d1442b9ae4c11da73f090"
|
||||
integrity sha512-ssga8XlwfP8YjbDcmVhwNlrmblddMfgUeAkWIXts1V22equp2GMIHxm7cyeD5Q/B0ZgKPK/tngt45sH99yLLGg==
|
||||
"@jest/test-sequencer@^26.1.0":
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.1.0.tgz#41a6fc8b850c3f33f48288ea9ea517c047e7f14e"
|
||||
integrity sha512-Z/hcK+rTq56E6sBwMoQhSRDVjqrGtj1y14e2bIgcowARaIE1SgOanwx6gvY4Q9gTKMoZQXbXvptji+q5GYxa6Q==
|
||||
dependencies:
|
||||
"@jest/test-result" "^26.0.1"
|
||||
"@jest/test-result" "^26.1.0"
|
||||
graceful-fs "^4.2.4"
|
||||
jest-haste-map "^26.0.1"
|
||||
jest-runner "^26.0.1"
|
||||
jest-runtime "^26.0.1"
|
||||
jest-haste-map "^26.1.0"
|
||||
jest-runner "^26.1.0"
|
||||
jest-runtime "^26.1.0"
|
||||
|
||||
"@jest/transform@^26.0.1":
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.0.1.tgz#0e3ecbb34a11cd4b2080ed0a9c4856cf0ceb0639"
|
||||
integrity sha512-pPRkVkAQ91drKGbzCfDOoHN838+FSbYaEAvBXvKuWeeRRUD8FjwXkqfUNUZL6Ke48aA/1cqq/Ni7kVMCoqagWA==
|
||||
"@jest/transform@^26.1.0":
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.1.0.tgz#697f48898c2a2787c9b4cb71d09d7e617464e509"
|
||||
integrity sha512-ICPm6sUXmZJieq45ix28k0s+d/z2E8CHDsq+WwtWI6kW8m7I8kPqarSEcUN86entHQ570ZBRci5OWaKL0wlAWw==
|
||||
dependencies:
|
||||
"@babel/core" "^7.1.0"
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/types" "^26.1.0"
|
||||
babel-plugin-istanbul "^6.0.0"
|
||||
chalk "^4.0.0"
|
||||
convert-source-map "^1.4.0"
|
||||
fast-json-stable-stringify "^2.0.0"
|
||||
graceful-fs "^4.2.4"
|
||||
jest-haste-map "^26.0.1"
|
||||
jest-haste-map "^26.1.0"
|
||||
jest-regex-util "^26.0.0"
|
||||
jest-util "^26.0.1"
|
||||
jest-util "^26.1.0"
|
||||
micromatch "^4.0.2"
|
||||
pirates "^4.0.1"
|
||||
slash "^3.0.0"
|
||||
source-map "^0.6.1"
|
||||
write-file-atomic "^3.0.0"
|
||||
|
||||
"@jest/types@^26.0.1":
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.0.1.tgz#b78333fbd113fa7aec8d39de24f88de8686dac67"
|
||||
integrity sha512-IbtjvqI9+eS1qFnOIEL7ggWmT+iK/U+Vde9cGWtYb/b6XgKb3X44ZAe/z9YZzoAAZ/E92m0DqrilF934IGNnQA==
|
||||
"@jest/types@^26.1.0":
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.1.0.tgz#f8afaaaeeb23b5cad49dd1f7779689941dcb6057"
|
||||
integrity sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ==
|
||||
dependencies:
|
||||
"@types/istanbul-lib-coverage" "^2.0.0"
|
||||
"@types/istanbul-reports" "^1.1.1"
|
||||
@@ -506,6 +506,17 @@
|
||||
dependencies:
|
||||
"@sinonjs/commons" "^1.7.0"
|
||||
|
||||
"@types/babel__core@^7.0.0":
|
||||
version "7.1.9"
|
||||
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d"
|
||||
integrity sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.1.0"
|
||||
"@babel/types" "^7.0.0"
|
||||
"@types/babel__generator" "*"
|
||||
"@types/babel__template" "*"
|
||||
"@types/babel__traverse" "*"
|
||||
|
||||
"@types/babel__core@^7.1.7":
|
||||
version "7.1.7"
|
||||
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89"
|
||||
@@ -765,16 +776,16 @@ aws4@^1.8.0:
|
||||
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e"
|
||||
integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==
|
||||
|
||||
babel-jest@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.0.1.tgz#450139ce4b6c17174b136425bda91885c397bc46"
|
||||
integrity sha512-Z4GGmSNQ8pX3WS1O+6v3fo41YItJJZsVxG5gIQ+HuB/iuAQBJxMTHTwz292vuYws1LnHfwSRgoqI+nxdy/pcvw==
|
||||
babel-jest@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.1.0.tgz#b20751185fc7569a0f135730584044d1cb934328"
|
||||
integrity sha512-Nkqgtfe7j6PxLO6TnCQQlkMm8wdTdnIF8xrdpooHCuD5hXRzVEPbPneTJKknH5Dsv3L8ip9unHDAp48YQ54Dkg==
|
||||
dependencies:
|
||||
"@jest/transform" "^26.0.1"
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/transform" "^26.1.0"
|
||||
"@jest/types" "^26.1.0"
|
||||
"@types/babel__core" "^7.1.7"
|
||||
babel-plugin-istanbul "^6.0.0"
|
||||
babel-preset-jest "^26.0.0"
|
||||
babel-preset-jest "^26.1.0"
|
||||
chalk "^4.0.0"
|
||||
graceful-fs "^4.2.4"
|
||||
slash "^3.0.0"
|
||||
@@ -790,13 +801,14 @@ babel-plugin-istanbul@^6.0.0:
|
||||
istanbul-lib-instrument "^4.0.0"
|
||||
test-exclude "^6.0.0"
|
||||
|
||||
babel-plugin-jest-hoist@^26.0.0:
|
||||
version "26.0.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.0.0.tgz#fd1d35f95cf8849fc65cb01b5e58aedd710b34a8"
|
||||
integrity sha512-+AuoehOrjt9irZL7DOt2+4ZaTM6dlu1s5TTS46JBa0/qem4dy7VNW3tMb96qeEqcIh20LD73TVNtmVEeymTG7w==
|
||||
babel-plugin-jest-hoist@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.1.0.tgz#c6a774da08247a28285620a64dfadbd05dd5233a"
|
||||
integrity sha512-qhqLVkkSlqmC83bdMhM8WW4Z9tB+JkjqAqlbbohS9sJLT5Ha2vfzuKqg5yenXrAjOPG2YC0WiXdH3a9PvB+YYw==
|
||||
dependencies:
|
||||
"@babel/template" "^7.3.3"
|
||||
"@babel/types" "^7.3.3"
|
||||
"@types/babel__core" "^7.0.0"
|
||||
"@types/babel__traverse" "^7.0.6"
|
||||
|
||||
babel-preset-current-node-syntax@^0.1.2:
|
||||
@@ -815,12 +827,12 @@ babel-preset-current-node-syntax@^0.1.2:
|
||||
"@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
|
||||
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
|
||||
|
||||
babel-preset-jest@^26.0.0:
|
||||
version "26.0.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.0.0.tgz#1eac82f513ad36c4db2e9263d7c485c825b1faa6"
|
||||
integrity sha512-9ce+DatAa31DpR4Uir8g4Ahxs5K4W4L8refzt+qHWQANb6LhGcAEfIFgLUwk67oya2cCUd6t4eUMtO/z64ocNw==
|
||||
babel-preset-jest@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.1.0.tgz#612f714e5b457394acfd863793c564cbcdb7d1c1"
|
||||
integrity sha512-na9qCqFksknlEj5iSdw1ehMVR06LCCTkZLGKeEtxDDdhg8xpUF09m29Kvh1pRbZ07h7AQ5ttLYUwpXL4tO6w7w==
|
||||
dependencies:
|
||||
babel-plugin-jest-hoist "^26.0.0"
|
||||
babel-plugin-jest-hoist "^26.1.0"
|
||||
babel-preset-current-node-syntax "^0.1.2"
|
||||
|
||||
balanced-match@^1.0.0:
|
||||
@@ -1408,16 +1420,16 @@ expect-puppeteer@^4.4.0:
|
||||
resolved "https://registry.yarnpkg.com/expect-puppeteer/-/expect-puppeteer-4.4.0.tgz#1c948af08acdd6c8cbdb7f90e617f44d86888886"
|
||||
integrity sha512-6Ey4Xy2xvmuQu7z7YQtMsaMV0EHJRpVxIDOd5GRrm04/I3nkTKIutELfECsLp6le+b3SSa3cXhPiw6PgqzxYWA==
|
||||
|
||||
expect@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/expect/-/expect-26.0.1.tgz#18697b9611a7e2725e20ba3ceadda49bc9865421"
|
||||
integrity sha512-QcCy4nygHeqmbw564YxNbHTJlXh47dVID2BUP52cZFpLU9zHViMFK6h07cC1wf7GYCTIigTdAXhVua8Yl1FkKg==
|
||||
expect@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/expect/-/expect-26.1.0.tgz#8c62e31d0f8d5a8ebb186ee81473d15dd2fbf7c8"
|
||||
integrity sha512-QbH4LZXDsno9AACrN9eM0zfnby9G+OsdNgZUohjg/P0mLy1O+/bzTAJGT6VSIjVCe8yKM6SzEl/ckEOFBT7Vnw==
|
||||
dependencies:
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/types" "^26.1.0"
|
||||
ansi-styles "^4.0.0"
|
||||
jest-get-type "^26.0.0"
|
||||
jest-matcher-utils "^26.0.1"
|
||||
jest-message-util "^26.0.1"
|
||||
jest-matcher-utils "^26.1.0"
|
||||
jest-message-util "^26.1.0"
|
||||
jest-regex-util "^26.0.0"
|
||||
|
||||
extend-shallow@^2.0.1:
|
||||
@@ -2041,6 +2053,16 @@ istanbul-lib-instrument@^4.0.0:
|
||||
istanbul-lib-coverage "^3.0.0"
|
||||
semver "^6.3.0"
|
||||
|
||||
istanbul-lib-instrument@^4.0.3:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d"
|
||||
integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==
|
||||
dependencies:
|
||||
"@babel/core" "^7.7.5"
|
||||
"@istanbuljs/schema" "^0.1.2"
|
||||
istanbul-lib-coverage "^3.0.0"
|
||||
semver "^6.3.0"
|
||||
|
||||
istanbul-lib-report@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
|
||||
@@ -2067,57 +2089,57 @@ istanbul-reports@^3.0.2:
|
||||
html-escaper "^2.0.0"
|
||||
istanbul-lib-report "^3.0.0"
|
||||
|
||||
jest-changed-files@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.0.1.tgz#1334630c6a1ad75784120f39c3aa9278e59f349f"
|
||||
integrity sha512-q8LP9Sint17HaE2LjxQXL+oYWW/WeeXMPE2+Op9X3mY8IEGFVc14xRxFjUuXUbcPAlDLhtWdIEt59GdQbn76Hw==
|
||||
jest-changed-files@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.1.0.tgz#de66b0f30453bca2aff98e9400f75905da495305"
|
||||
integrity sha512-HS5MIJp3B8t0NRKGMCZkcDUZo36mVRvrDETl81aqljT1S9tqiHRSpyoOvWg9ZilzZG9TDisDNaN1IXm54fLRZw==
|
||||
dependencies:
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/types" "^26.1.0"
|
||||
execa "^4.0.0"
|
||||
throat "^5.0.0"
|
||||
|
||||
jest-cli@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.0.1.tgz#3a42399a4cbc96a519b99ad069a117d955570cac"
|
||||
integrity sha512-pFLfSOBcbG9iOZWaMK4Een+tTxi/Wcm34geqZEqrst9cZDkTQ1LZ2CnBrTlHWuYAiTMFr0EQeK52ScyFU8wK+w==
|
||||
jest-cli@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.1.0.tgz#eb9ec8a18cf3b6aa556d9deaa9e24be12b43ad87"
|
||||
integrity sha512-Imumvjgi3rU7stq6SJ1JUEMaV5aAgJYXIs0jPqdUnF47N/Tk83EXfmtvNKQ+SnFVI6t6mDOvfM3aA9Sg6kQPSw==
|
||||
dependencies:
|
||||
"@jest/core" "^26.0.1"
|
||||
"@jest/test-result" "^26.0.1"
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/core" "^26.1.0"
|
||||
"@jest/test-result" "^26.1.0"
|
||||
"@jest/types" "^26.1.0"
|
||||
chalk "^4.0.0"
|
||||
exit "^0.1.2"
|
||||
graceful-fs "^4.2.4"
|
||||
import-local "^3.0.2"
|
||||
is-ci "^2.0.0"
|
||||
jest-config "^26.0.1"
|
||||
jest-util "^26.0.1"
|
||||
jest-validate "^26.0.1"
|
||||
jest-config "^26.1.0"
|
||||
jest-util "^26.1.0"
|
||||
jest-validate "^26.1.0"
|
||||
prompts "^2.0.1"
|
||||
yargs "^15.3.1"
|
||||
|
||||
jest-config@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.0.1.tgz#096a3d4150afadf719d1fab00e9a6fb2d6d67507"
|
||||
integrity sha512-9mWKx2L1LFgOXlDsC4YSeavnblN6A4CPfXFiobq+YYLaBMymA/SczN7xYTSmLaEYHZOcB98UdoN4m5uNt6tztg==
|
||||
jest-config@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.1.0.tgz#9074f7539acc185e0113ad6d22ed589c16a37a73"
|
||||
integrity sha512-ONTGeoMbAwGCdq4WuKkMcdMoyfs5CLzHEkzFOlVvcDXufZSaIWh/OXMLa2fwKXiOaFcqEw8qFr4VOKJQfn4CVw==
|
||||
dependencies:
|
||||
"@babel/core" "^7.1.0"
|
||||
"@jest/test-sequencer" "^26.0.1"
|
||||
"@jest/types" "^26.0.1"
|
||||
babel-jest "^26.0.1"
|
||||
"@jest/test-sequencer" "^26.1.0"
|
||||
"@jest/types" "^26.1.0"
|
||||
babel-jest "^26.1.0"
|
||||
chalk "^4.0.0"
|
||||
deepmerge "^4.2.2"
|
||||
glob "^7.1.1"
|
||||
graceful-fs "^4.2.4"
|
||||
jest-environment-jsdom "^26.0.1"
|
||||
jest-environment-node "^26.0.1"
|
||||
jest-environment-jsdom "^26.1.0"
|
||||
jest-environment-node "^26.1.0"
|
||||
jest-get-type "^26.0.0"
|
||||
jest-jasmine2 "^26.0.1"
|
||||
jest-jasmine2 "^26.1.0"
|
||||
jest-regex-util "^26.0.0"
|
||||
jest-resolve "^26.0.1"
|
||||
jest-util "^26.0.1"
|
||||
jest-validate "^26.0.1"
|
||||
jest-resolve "^26.1.0"
|
||||
jest-util "^26.1.0"
|
||||
jest-validate "^26.1.0"
|
||||
micromatch "^4.0.2"
|
||||
pretty-format "^26.0.1"
|
||||
pretty-format "^26.1.0"
|
||||
|
||||
jest-dev-server@^4.4.0:
|
||||
version "4.4.0"
|
||||
@@ -2132,15 +2154,15 @@ jest-dev-server@^4.4.0:
|
||||
tree-kill "^1.2.2"
|
||||
wait-on "^3.3.0"
|
||||
|
||||
jest-diff@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.0.1.tgz#c44ab3cdd5977d466de69c46929e0e57f89aa1de"
|
||||
integrity sha512-odTcHyl5X+U+QsczJmOjWw5tPvww+y9Yim5xzqxVl/R1j4z71+fHW4g8qu1ugMmKdFdxw+AtQgs5mupPnzcIBQ==
|
||||
jest-diff@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.1.0.tgz#00a549bdc936c9691eb4dc25d1fbd78bf456abb2"
|
||||
integrity sha512-GZpIcom339y0OXznsEKjtkfKxNdg7bVbEofK8Q6MnevTIiR1jNhDWKhRX6X0SDXJlwn3dy59nZ1z55fLkAqPWg==
|
||||
dependencies:
|
||||
chalk "^4.0.0"
|
||||
diff-sequences "^26.0.0"
|
||||
jest-get-type "^26.0.0"
|
||||
pretty-format "^26.0.1"
|
||||
pretty-format "^26.1.0"
|
||||
|
||||
jest-docblock@^26.0.0:
|
||||
version "26.0.0"
|
||||
@@ -2149,39 +2171,39 @@ jest-docblock@^26.0.0:
|
||||
dependencies:
|
||||
detect-newline "^3.0.0"
|
||||
|
||||
jest-each@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.0.1.tgz#633083061619302fc90dd8f58350f9d77d67be04"
|
||||
integrity sha512-OTgJlwXCAR8NIWaXFL5DBbeS4QIYPuNASkzSwMCJO+ywo9BEa6TqkaSWsfR7VdbMLdgYJqSfQcIyjJCNwl5n4Q==
|
||||
jest-each@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.1.0.tgz#e35449875009a22d74d1bda183b306db20f286f7"
|
||||
integrity sha512-lYiSo4Igr81q6QRsVQq9LIkJW0hZcKxkIkHzNeTMPENYYDw/W/Raq28iJ0sLlNFYz2qxxeLnc5K2gQoFYlu2bA==
|
||||
dependencies:
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/types" "^26.1.0"
|
||||
chalk "^4.0.0"
|
||||
jest-get-type "^26.0.0"
|
||||
jest-util "^26.0.1"
|
||||
pretty-format "^26.0.1"
|
||||
jest-util "^26.1.0"
|
||||
pretty-format "^26.1.0"
|
||||
|
||||
jest-environment-jsdom@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.0.1.tgz#217690852e5bdd7c846a4e3b50c8ffd441dfd249"
|
||||
integrity sha512-u88NJa3aptz2Xix2pFhihRBAatwZHWwSiRLBDBQE1cdJvDjPvv7ZGA0NQBxWwDDn7D0g1uHqxM8aGgfA9Bx49g==
|
||||
jest-environment-jsdom@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.1.0.tgz#9dc7313ffe1b59761dad1fedb76e2503e5d37c5b"
|
||||
integrity sha512-dWfiJ+spunVAwzXbdVqPH1LbuJW/kDL+FyqgA5YzquisHqTi0g9hquKif9xKm7c1bKBj6wbmJuDkeMCnxZEpUw==
|
||||
dependencies:
|
||||
"@jest/environment" "^26.0.1"
|
||||
"@jest/fake-timers" "^26.0.1"
|
||||
"@jest/types" "^26.0.1"
|
||||
jest-mock "^26.0.1"
|
||||
jest-util "^26.0.1"
|
||||
"@jest/environment" "^26.1.0"
|
||||
"@jest/fake-timers" "^26.1.0"
|
||||
"@jest/types" "^26.1.0"
|
||||
jest-mock "^26.1.0"
|
||||
jest-util "^26.1.0"
|
||||
jsdom "^16.2.2"
|
||||
|
||||
jest-environment-node@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.0.1.tgz#584a9ff623124ff6eeb49e0131b5f7612b310b13"
|
||||
integrity sha512-4FRBWcSn5yVo0KtNav7+5NH5Z/tEgDLp7VRQVS5tCouWORxj+nI+1tOLutM07Zb2Qi7ja+HEDoOUkjBSWZg/IQ==
|
||||
jest-environment-node@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.1.0.tgz#8bb387b3eefb132eab7826f9a808e4e05618960b"
|
||||
integrity sha512-DNm5x1aQH0iRAe9UYAkZenuzuJ69VKzDCAYISFHQ5i9e+2Tbeu2ONGY7YStubCLH8a1wdKBgqScYw85+ySxqxg==
|
||||
dependencies:
|
||||
"@jest/environment" "^26.0.1"
|
||||
"@jest/fake-timers" "^26.0.1"
|
||||
"@jest/types" "^26.0.1"
|
||||
jest-mock "^26.0.1"
|
||||
jest-util "^26.0.1"
|
||||
"@jest/environment" "^26.1.0"
|
||||
"@jest/fake-timers" "^26.1.0"
|
||||
"@jest/types" "^26.1.0"
|
||||
jest-mock "^26.1.0"
|
||||
jest-util "^26.1.0"
|
||||
|
||||
jest-environment-puppeteer@^4.4.0:
|
||||
version "4.4.0"
|
||||
@@ -2198,19 +2220,19 @@ jest-get-type@^26.0.0:
|
||||
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.0.0.tgz#381e986a718998dbfafcd5ec05934be538db4039"
|
||||
integrity sha512-zRc1OAPnnws1EVfykXOj19zo2EMw5Hi6HLbFCSjpuJiXtOWAYIjNsHVSbpQ8bDX7L5BGYGI8m+HmKdjHYFF0kg==
|
||||
|
||||
jest-haste-map@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.0.1.tgz#40dcc03c43ac94d25b8618075804d09cd5d49de7"
|
||||
integrity sha512-J9kBl/EdjmDsvyv7CiyKY5+DsTvVOScenprz/fGqfLg/pm1gdjbwwQ98nW0t+OIt+f+5nAVaElvn/6wP5KO7KA==
|
||||
jest-haste-map@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.1.0.tgz#ef31209be73f09b0d9445e7d213e1b53d0d1476a"
|
||||
integrity sha512-WeBS54xCIz9twzkEdm6+vJBXgRBQfdbbXD0dk8lJh7gLihopABlJmIQFdWSDDtuDe4PRiObsjZSUjbJ1uhWEpA==
|
||||
dependencies:
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/types" "^26.1.0"
|
||||
"@types/graceful-fs" "^4.1.2"
|
||||
anymatch "^3.0.3"
|
||||
fb-watchman "^2.0.0"
|
||||
graceful-fs "^4.2.4"
|
||||
jest-serializer "^26.0.0"
|
||||
jest-util "^26.0.1"
|
||||
jest-worker "^26.0.0"
|
||||
jest-serializer "^26.1.0"
|
||||
jest-util "^26.1.0"
|
||||
jest-worker "^26.1.0"
|
||||
micromatch "^4.0.2"
|
||||
sane "^4.0.3"
|
||||
walker "^1.0.7"
|
||||
@@ -2232,54 +2254,54 @@ jest-image-snapshot@^4.0.0:
|
||||
pngjs "^3.4.0"
|
||||
rimraf "^2.6.2"
|
||||
|
||||
jest-jasmine2@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.0.1.tgz#947c40ee816636ba23112af3206d6fa7b23c1c1c"
|
||||
integrity sha512-ILaRyiWxiXOJ+RWTKupzQWwnPaeXPIoLS5uW41h18varJzd9/7I0QJGqg69fhTT1ev9JpSSo9QtalriUN0oqOg==
|
||||
jest-jasmine2@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.1.0.tgz#4dfe349b2b2d3c6b3a27c024fd4cb57ac0ed4b6f"
|
||||
integrity sha512-1IPtoDKOAG+MeBrKvvuxxGPJb35MTTRSDglNdWWCndCB3TIVzbLThRBkwH9P081vXLgiJHZY8Bz3yzFS803xqQ==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.1.0"
|
||||
"@jest/environment" "^26.0.1"
|
||||
"@jest/source-map" "^26.0.0"
|
||||
"@jest/test-result" "^26.0.1"
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/environment" "^26.1.0"
|
||||
"@jest/source-map" "^26.1.0"
|
||||
"@jest/test-result" "^26.1.0"
|
||||
"@jest/types" "^26.1.0"
|
||||
chalk "^4.0.0"
|
||||
co "^4.6.0"
|
||||
expect "^26.0.1"
|
||||
expect "^26.1.0"
|
||||
is-generator-fn "^2.0.0"
|
||||
jest-each "^26.0.1"
|
||||
jest-matcher-utils "^26.0.1"
|
||||
jest-message-util "^26.0.1"
|
||||
jest-runtime "^26.0.1"
|
||||
jest-snapshot "^26.0.1"
|
||||
jest-util "^26.0.1"
|
||||
pretty-format "^26.0.1"
|
||||
jest-each "^26.1.0"
|
||||
jest-matcher-utils "^26.1.0"
|
||||
jest-message-util "^26.1.0"
|
||||
jest-runtime "^26.1.0"
|
||||
jest-snapshot "^26.1.0"
|
||||
jest-util "^26.1.0"
|
||||
pretty-format "^26.1.0"
|
||||
throat "^5.0.0"
|
||||
|
||||
jest-leak-detector@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.0.1.tgz#79b19ab3f41170e0a78eb8fa754a116d3447fb8c"
|
||||
integrity sha512-93FR8tJhaYIWrWsbmVN1pQ9ZNlbgRpfvrnw5LmgLRX0ckOJ8ut/I35CL7awi2ecq6Ca4lL59bEK9hr7nqoHWPA==
|
||||
jest-leak-detector@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.1.0.tgz#039c3a07ebcd8adfa984b6ac015752c35792e0a6"
|
||||
integrity sha512-dsMnKF+4BVOZwvQDlgn3MG+Ns4JuLv8jNvXH56bgqrrboyCbI1rQg6EI5rs+8IYagVcfVP2yZFKfWNZy0rK0Hw==
|
||||
dependencies:
|
||||
jest-get-type "^26.0.0"
|
||||
pretty-format "^26.0.1"
|
||||
pretty-format "^26.1.0"
|
||||
|
||||
jest-matcher-utils@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.0.1.tgz#12e1fc386fe4f14678f4cc8dbd5ba75a58092911"
|
||||
integrity sha512-PUMlsLth0Azen8Q2WFTwnSkGh2JZ8FYuwijC8NR47vXKpsrKmA1wWvgcj1CquuVfcYiDEdj985u5Wmg7COEARw==
|
||||
jest-matcher-utils@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.1.0.tgz#cf75a41bd413dda784f022de5a65a2a5c73a5c92"
|
||||
integrity sha512-PW9JtItbYvES/xLn5mYxjMd+Rk+/kIt88EfH3N7w9KeOrHWaHrdYPnVHndGbsFGRJ2d5gKtwggCvkqbFDoouQA==
|
||||
dependencies:
|
||||
chalk "^4.0.0"
|
||||
jest-diff "^26.0.1"
|
||||
jest-diff "^26.1.0"
|
||||
jest-get-type "^26.0.0"
|
||||
pretty-format "^26.0.1"
|
||||
pretty-format "^26.1.0"
|
||||
|
||||
jest-message-util@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.0.1.tgz#07af1b42fc450b4cc8e90e4c9cef11b33ce9b0ac"
|
||||
integrity sha512-CbK8uQREZ8umUfo8+zgIfEt+W7HAHjQCoRaNs4WxKGhAYBGwEyvxuK81FXa7VeB9pwDEXeeKOB2qcsNVCAvB7Q==
|
||||
jest-message-util@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.1.0.tgz#52573fbb8f5cea443c4d1747804d7a238a3e233c"
|
||||
integrity sha512-dY0+UlldiAJwNDJ08SF0HdF32g9PkbF2NRK/+2iMPU40O6q+iSn1lgog/u0UH8ksWoPv0+gNq8cjhYO2MFtT0g==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.0.0"
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/types" "^26.1.0"
|
||||
"@types/stack-utils" "^1.0.1"
|
||||
chalk "^4.0.0"
|
||||
graceful-fs "^4.2.4"
|
||||
@@ -2287,12 +2309,12 @@ jest-message-util@^26.0.1:
|
||||
slash "^3.0.0"
|
||||
stack-utils "^2.0.2"
|
||||
|
||||
jest-mock@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.0.1.tgz#7fd1517ed4955397cf1620a771dc2d61fad8fd40"
|
||||
integrity sha512-MpYTBqycuPYSY6xKJognV7Ja46/TeRbAZept987Zp+tuJvMN0YBWyyhG9mXyYQaU3SBI0TUlSaO5L3p49agw7Q==
|
||||
jest-mock@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.1.0.tgz#80d8286da1f05a345fbad1bfd6fa49a899465d3d"
|
||||
integrity sha512-1Rm8EIJ3ZFA8yCIie92UbxZWj9SuVmUGcyhLHyAhY6WI3NIct38nVcfOPWhJteqSn8V8e3xOMha9Ojfazfpovw==
|
||||
dependencies:
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/types" "^26.1.0"
|
||||
|
||||
jest-pnp-resolver@^1.2.1:
|
||||
version "1.2.1"
|
||||
@@ -2312,165 +2334,165 @@ jest-regex-util@^26.0.0:
|
||||
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28"
|
||||
integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==
|
||||
|
||||
jest-resolve-dependencies@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.0.1.tgz#607ba7ccc32151d185a477cff45bf33bce417f0b"
|
||||
integrity sha512-9d5/RS/ft0vB/qy7jct/qAhzJsr6fRQJyGAFigK3XD4hf9kIbEH5gks4t4Z7kyMRhowU6HWm/o8ILqhaHdSqLw==
|
||||
jest-resolve-dependencies@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.1.0.tgz#1ce36472f864a5dadf7dc82fa158e1c77955691b"
|
||||
integrity sha512-fQVEPHHQ1JjHRDxzlLU/buuQ9om+hqW6Vo928aa4b4yvq4ZHBtRSDsLdKQLuCqn5CkTVpYZ7ARh2fbA8WkRE6g==
|
||||
dependencies:
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/types" "^26.1.0"
|
||||
jest-regex-util "^26.0.0"
|
||||
jest-snapshot "^26.0.1"
|
||||
jest-snapshot "^26.1.0"
|
||||
|
||||
jest-resolve@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.0.1.tgz#21d1ee06f9ea270a343a8893051aeed940cde736"
|
||||
integrity sha512-6jWxk0IKZkPIVTvq6s72RH735P8f9eCJW3IM5CX/SJFeKq1p2cZx0U49wf/SdMlhaB/anann5J2nCJj6HrbezQ==
|
||||
jest-resolve@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.1.0.tgz#a530eaa302b1f6fa0479079d1561dd69abc00e68"
|
||||
integrity sha512-KsY1JV9FeVgEmwIISbZZN83RNGJ1CC+XUCikf/ZWJBX/tO4a4NvA21YixokhdR9UnmPKKAC4LafVixJBrwlmfg==
|
||||
dependencies:
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/types" "^26.1.0"
|
||||
chalk "^4.0.0"
|
||||
graceful-fs "^4.2.4"
|
||||
jest-pnp-resolver "^1.2.1"
|
||||
jest-util "^26.0.1"
|
||||
jest-util "^26.1.0"
|
||||
read-pkg-up "^7.0.1"
|
||||
resolve "^1.17.0"
|
||||
slash "^3.0.0"
|
||||
|
||||
jest-runner@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.0.1.tgz#ea03584b7ae4bacfb7e533d680a575a49ae35d50"
|
||||
integrity sha512-CApm0g81b49Znm4cZekYQK67zY7kkB4umOlI2Dx5CwKAzdgw75EN+ozBHRvxBzwo1ZLYZ07TFxkaPm+1t4d8jA==
|
||||
jest-runner@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.1.0.tgz#457f7fc522afe46ca6db1dccf19f87f500b3288d"
|
||||
integrity sha512-elvP7y0fVDREnfqit0zAxiXkDRSw6dgCkzPCf1XvIMnSDZ8yogmSKJf192dpOgnUVykmQXwYYJnCx641uLTgcw==
|
||||
dependencies:
|
||||
"@jest/console" "^26.0.1"
|
||||
"@jest/environment" "^26.0.1"
|
||||
"@jest/test-result" "^26.0.1"
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/console" "^26.1.0"
|
||||
"@jest/environment" "^26.1.0"
|
||||
"@jest/test-result" "^26.1.0"
|
||||
"@jest/types" "^26.1.0"
|
||||
chalk "^4.0.0"
|
||||
exit "^0.1.2"
|
||||
graceful-fs "^4.2.4"
|
||||
jest-config "^26.0.1"
|
||||
jest-config "^26.1.0"
|
||||
jest-docblock "^26.0.0"
|
||||
jest-haste-map "^26.0.1"
|
||||
jest-jasmine2 "^26.0.1"
|
||||
jest-leak-detector "^26.0.1"
|
||||
jest-message-util "^26.0.1"
|
||||
jest-resolve "^26.0.1"
|
||||
jest-runtime "^26.0.1"
|
||||
jest-util "^26.0.1"
|
||||
jest-worker "^26.0.0"
|
||||
jest-haste-map "^26.1.0"
|
||||
jest-jasmine2 "^26.1.0"
|
||||
jest-leak-detector "^26.1.0"
|
||||
jest-message-util "^26.1.0"
|
||||
jest-resolve "^26.1.0"
|
||||
jest-runtime "^26.1.0"
|
||||
jest-util "^26.1.0"
|
||||
jest-worker "^26.1.0"
|
||||
source-map-support "^0.5.6"
|
||||
throat "^5.0.0"
|
||||
|
||||
jest-runtime@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.0.1.tgz#a121a6321235987d294168e282d52b364d7d3f89"
|
||||
integrity sha512-Ci2QhYFmANg5qaXWf78T2Pfo6GtmIBn2rRaLnklRyEucmPccmCKvS9JPljcmtVamsdMmkyNkVFb9pBTD6si9Lw==
|
||||
jest-runtime@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.1.0.tgz#45a37af42115f123ed5c51f126c05502da2469cb"
|
||||
integrity sha512-1qiYN+EZLmG1QV2wdEBRf+Ci8i3VSfIYLF02U18PiUDrMbhfpN/EAMMkJtT02jgJUoaEOpHAIXG6zS3QRMzRmA==
|
||||
dependencies:
|
||||
"@jest/console" "^26.0.1"
|
||||
"@jest/environment" "^26.0.1"
|
||||
"@jest/fake-timers" "^26.0.1"
|
||||
"@jest/globals" "^26.0.1"
|
||||
"@jest/source-map" "^26.0.0"
|
||||
"@jest/test-result" "^26.0.1"
|
||||
"@jest/transform" "^26.0.1"
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/console" "^26.1.0"
|
||||
"@jest/environment" "^26.1.0"
|
||||
"@jest/fake-timers" "^26.1.0"
|
||||
"@jest/globals" "^26.1.0"
|
||||
"@jest/source-map" "^26.1.0"
|
||||
"@jest/test-result" "^26.1.0"
|
||||
"@jest/transform" "^26.1.0"
|
||||
"@jest/types" "^26.1.0"
|
||||
"@types/yargs" "^15.0.0"
|
||||
chalk "^4.0.0"
|
||||
collect-v8-coverage "^1.0.0"
|
||||
exit "^0.1.2"
|
||||
glob "^7.1.3"
|
||||
graceful-fs "^4.2.4"
|
||||
jest-config "^26.0.1"
|
||||
jest-haste-map "^26.0.1"
|
||||
jest-message-util "^26.0.1"
|
||||
jest-mock "^26.0.1"
|
||||
jest-config "^26.1.0"
|
||||
jest-haste-map "^26.1.0"
|
||||
jest-message-util "^26.1.0"
|
||||
jest-mock "^26.1.0"
|
||||
jest-regex-util "^26.0.0"
|
||||
jest-resolve "^26.0.1"
|
||||
jest-snapshot "^26.0.1"
|
||||
jest-util "^26.0.1"
|
||||
jest-validate "^26.0.1"
|
||||
jest-resolve "^26.1.0"
|
||||
jest-snapshot "^26.1.0"
|
||||
jest-util "^26.1.0"
|
||||
jest-validate "^26.1.0"
|
||||
slash "^3.0.0"
|
||||
strip-bom "^4.0.0"
|
||||
yargs "^15.3.1"
|
||||
|
||||
jest-serializer@^26.0.0:
|
||||
version "26.0.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.0.0.tgz#f6c521ddb976943b93e662c0d4d79245abec72a3"
|
||||
integrity sha512-sQGXLdEGWFAE4wIJ2ZaIDb+ikETlUirEOBsLXdoBbeLhTHkZUJwgk3+M8eyFizhM6le43PDCCKPA1hzkSDo4cQ==
|
||||
jest-serializer@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.1.0.tgz#72a394531fc9b08e173dc7d297440ac610d95022"
|
||||
integrity sha512-eqZOQG/0+MHmr25b2Z86g7+Kzd5dG9dhCiUoyUNJPgiqi38DqbDEOlHcNijyfZoj74soGBohKBZuJFS18YTJ5w==
|
||||
dependencies:
|
||||
graceful-fs "^4.2.4"
|
||||
|
||||
jest-snapshot@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.0.1.tgz#1baa942bd83d47b837a84af7fcf5fd4a236da399"
|
||||
integrity sha512-jxd+cF7+LL+a80qh6TAnTLUZHyQoWwEHSUFJjkw35u3Gx+BZUNuXhYvDqHXr62UQPnWo2P6fvQlLjsU93UKyxA==
|
||||
jest-snapshot@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.1.0.tgz#c36ed1e0334bd7bd2fe5ad07e93a364ead7e1349"
|
||||
integrity sha512-YhSbU7eMTVQO/iRbNs8j0mKRxGp4plo7sJ3GzOQ0IYjvsBiwg0T1o0zGQAYepza7lYHuPTrG5J2yDd0CE2YxSw==
|
||||
dependencies:
|
||||
"@babel/types" "^7.0.0"
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/types" "^26.1.0"
|
||||
"@types/prettier" "^2.0.0"
|
||||
chalk "^4.0.0"
|
||||
expect "^26.0.1"
|
||||
expect "^26.1.0"
|
||||
graceful-fs "^4.2.4"
|
||||
jest-diff "^26.0.1"
|
||||
jest-diff "^26.1.0"
|
||||
jest-get-type "^26.0.0"
|
||||
jest-matcher-utils "^26.0.1"
|
||||
jest-message-util "^26.0.1"
|
||||
jest-resolve "^26.0.1"
|
||||
make-dir "^3.0.0"
|
||||
jest-haste-map "^26.1.0"
|
||||
jest-matcher-utils "^26.1.0"
|
||||
jest-message-util "^26.1.0"
|
||||
jest-resolve "^26.1.0"
|
||||
natural-compare "^1.4.0"
|
||||
pretty-format "^26.0.1"
|
||||
pretty-format "^26.1.0"
|
||||
semver "^7.3.2"
|
||||
|
||||
jest-util@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.0.1.tgz#72c4c51177b695fdd795ca072a6f94e3d7cef00a"
|
||||
integrity sha512-byQ3n7ad1BO/WyFkYvlWQHTsomB6GIewBh8tlGtusiylAlaxQ1UpS0XYH0ngOyhZuHVLN79Qvl6/pMiDMSSG1g==
|
||||
jest-util@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.1.0.tgz#80e85d4ba820decacf41a691c2042d5276e5d8d8"
|
||||
integrity sha512-rNMOwFQevljfNGvbzNQAxdmXQ+NawW/J72dmddsK0E8vgxXCMtwQ/EH0BiWEIxh0hhMcTsxwAxINt7Lh46Uzbg==
|
||||
dependencies:
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/types" "^26.1.0"
|
||||
chalk "^4.0.0"
|
||||
graceful-fs "^4.2.4"
|
||||
is-ci "^2.0.0"
|
||||
make-dir "^3.0.0"
|
||||
micromatch "^4.0.2"
|
||||
|
||||
jest-validate@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.0.1.tgz#a62987e1da5b7f724130f904725e22f4e5b2e23c"
|
||||
integrity sha512-u0xRc+rbmov/VqXnX3DlkxD74rHI/CfS5xaV2VpeaVySjbb1JioNVOyly5b56q2l9ZKe7bVG5qWmjfctkQb0bA==
|
||||
jest-validate@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.1.0.tgz#942c85ad3d60f78250c488a7f85d8f11a29788e7"
|
||||
integrity sha512-WPApOOnXsiwhZtmkDsxnpye+XLb/tUISP+H6cHjfUIXvlG+eKwP+isnivsxlHCPaO9Q5wvbhloIBkdF3qUn+Nw==
|
||||
dependencies:
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/types" "^26.1.0"
|
||||
camelcase "^6.0.0"
|
||||
chalk "^4.0.0"
|
||||
jest-get-type "^26.0.0"
|
||||
leven "^3.1.0"
|
||||
pretty-format "^26.0.1"
|
||||
pretty-format "^26.1.0"
|
||||
|
||||
jest-watcher@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.0.1.tgz#5b5e3ebbdf10c240e22a98af66d645631afda770"
|
||||
integrity sha512-pdZPydsS8475f89kGswaNsN3rhP6lnC3/QDCppP7bg1L9JQz7oU9Mb/5xPETk1RHDCWeqmVC47M4K5RR7ejxFw==
|
||||
jest-watcher@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.1.0.tgz#99812a0cd931f0cb3d153180426135ab83e4d8f2"
|
||||
integrity sha512-ffEOhJl2EvAIki613oPsSG11usqnGUzIiK7MMX6hE4422aXOcVEG3ySCTDFLn1+LZNXGPE8tuJxhp8OBJ1pgzQ==
|
||||
dependencies:
|
||||
"@jest/test-result" "^26.0.1"
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/test-result" "^26.1.0"
|
||||
"@jest/types" "^26.1.0"
|
||||
ansi-escapes "^4.2.1"
|
||||
chalk "^4.0.0"
|
||||
jest-util "^26.0.1"
|
||||
jest-util "^26.1.0"
|
||||
string-length "^4.0.1"
|
||||
|
||||
jest-worker@^26.0.0:
|
||||
version "26.0.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.0.0.tgz#4920c7714f0a96c6412464718d0c58a3df3fb066"
|
||||
integrity sha512-pPaYa2+JnwmiZjK9x7p9BoZht+47ecFCDFA/CJxspHzeDvQcfVBLWzCiWyo+EGrSiQMWZtCFo9iSvMZnAAo8vw==
|
||||
jest-worker@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.1.0.tgz#65d5641af74e08ccd561c240e7db61284f82f33d"
|
||||
integrity sha512-Z9P5pZ6UC+kakMbNJn+tA2RdVdNX5WH1x+5UCBZ9MxIK24pjYtFt96fK+UwBTrjLYm232g1xz0L3eTh51OW+yQ==
|
||||
dependencies:
|
||||
merge-stream "^2.0.0"
|
||||
supports-color "^7.0.0"
|
||||
|
||||
jest@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jest/-/jest-26.0.1.tgz#5c51a2e58dff7525b65f169721767173bf832694"
|
||||
integrity sha512-29Q54kn5Bm7ZGKIuH2JRmnKl85YRigp0o0asTc6Sb6l2ch1DCXIeZTLLFy9ultJvhkTqbswF5DEx4+RlkmCxWg==
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jest/-/jest-26.1.0.tgz#2f3aa7bcffb9bfd025473f83bbbf46a3af026263"
|
||||
integrity sha512-LIti8jppw5BcQvmNJe4w2g1N/3V68HUfAv9zDVm7v+VAtQulGhH0LnmmiVkbNE4M4I43Bj2fXPiBGKt26k9tHw==
|
||||
dependencies:
|
||||
"@jest/core" "^26.0.1"
|
||||
"@jest/core" "^26.1.0"
|
||||
import-local "^3.0.2"
|
||||
jest-cli "^26.0.1"
|
||||
jest-cli "^26.1.0"
|
||||
|
||||
js-tokens@^4.0.0:
|
||||
version "4.0.0"
|
||||
@@ -2746,6 +2768,11 @@ minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
||||
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||
|
||||
mitt@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/mitt/-/mitt-2.0.1.tgz#9e8a075b4daae82dd91aac155a0ece40ca7cb393"
|
||||
integrity sha512-FhuJY+tYHLnPcBHQhbUFzscD5512HumCPE4URXZUgPi3IvOJi4Xva5IIgy3xX56GqCmw++MAm5UURG6kDBYTdg==
|
||||
|
||||
mixin-deep@^1.2.0:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
|
||||
@@ -3063,12 +3090,12 @@ prelude-ls@~1.1.2:
|
||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
||||
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
|
||||
|
||||
pretty-format@^26.0.1:
|
||||
version "26.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.0.1.tgz#a4fe54fe428ad2fd3413ca6bbd1ec8c2e277e197"
|
||||
integrity sha512-SWxz6MbupT3ZSlL0Po4WF/KujhQaVehijR2blyRDCzk9e45EaYMVhMBn49fnRuHxtkSpXTes1GxNpVmH86Bxfw==
|
||||
pretty-format@^26.1.0:
|
||||
version "26.1.0"
|
||||
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.1.0.tgz#272b9cd1f1a924ab5d443dc224899d7a65cb96ec"
|
||||
integrity sha512-GmeO1PEYdM+non4BKCj+XsPJjFOJIPnsLewqhDVoqY1xo0yNmDas7tC2XwpMrRAHR3MaE2hPo37deX5OisJ2Wg==
|
||||
dependencies:
|
||||
"@jest/types" "^26.0.1"
|
||||
"@jest/types" "^26.1.0"
|
||||
ansi-regex "^5.0.0"
|
||||
ansi-styles "^4.0.0"
|
||||
react-is "^16.12.0"
|
||||
@@ -3109,15 +3136,17 @@ punycode@^2.1.0, punycode@^2.1.1:
|
||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
|
||||
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
|
||||
|
||||
puppeteer@^3.0.4:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-3.3.0.tgz#95839af9fdc0aa4de7e5ee073a4c0adeb9e2d3d7"
|
||||
integrity sha512-23zNqRltZ1PPoK28uRefWJ/zKb5Jhnzbbwbpcna2o5+QMn17F0khq5s1bdH3vPlyj+J36pubccR8wiNA/VE0Vw==
|
||||
puppeteer@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-5.0.0.tgz#7cf1b1a5c5b6ce5d7abe4d9c9f206d4c52e214ff"
|
||||
integrity sha512-JnZcgRQnfowRSJoSHteKU7G9fP/YYGB/juPn8m4jNqtzvR0h8GOoFmdjTBesJFfzhYkPU1FosHXnBVUB++xgaA==
|
||||
dependencies:
|
||||
debug "^4.1.0"
|
||||
extract-zip "^2.0.0"
|
||||
https-proxy-agent "^4.0.0"
|
||||
mime "^2.0.3"
|
||||
mitt "^2.0.1"
|
||||
pkg-dir "^4.2.0"
|
||||
progress "^2.0.1"
|
||||
proxy-from-env "^1.0.0"
|
||||
rimraf "^3.0.2"
|
||||
|
||||
46
package.json
@@ -1,18 +1,20 @@
|
||||
{
|
||||
"name": "dozzle",
|
||||
"version": "1.27.1",
|
||||
"version": "2.1.0",
|
||||
"description": "Realtime log viewer for docker containers. ",
|
||||
"scripts": {
|
||||
"prestart": "yarn clean",
|
||||
"start": "npm-run-all -p watch:*",
|
||||
"watch": "npm-run-all -p watch:*",
|
||||
"watch:assets": "webpack --mode=development --watch",
|
||||
"watch:server": "reflex -c .reflex",
|
||||
"dev": "npm-run-all -p dev-server watch:server",
|
||||
"dev-server": "webpack-dev-server --open",
|
||||
"prebuild": "yarn clean",
|
||||
"build": "yarn webpack --mode=production",
|
||||
"clean": "rm -rf static/ a_main-packr.go",
|
||||
"release": "release-it",
|
||||
"test": "TZ=UTC jest",
|
||||
"integration": "docker-compose -f integration/docker-compose.test.yml up --build --force-recreate integration"
|
||||
"integration": "docker-compose -f integration/docker-compose.test.yml up --build --force-recreate --exit-code-from integration"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -27,51 +29,53 @@
|
||||
"dependencies": {
|
||||
"ansi-to-html": "^0.6.14",
|
||||
"buefy": "^0.8.20",
|
||||
"bulma": "^0.8.2",
|
||||
"bulma": "^0.9.0",
|
||||
"date-fns": "^2.14.0",
|
||||
"dompurify": "^2.0.11",
|
||||
"dompurify": "^2.0.12",
|
||||
"hotkeys-js": "^3.8.1",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"lodash.throttle": "^4.1.1",
|
||||
"semver": "^7.3.2",
|
||||
"splitpanes": "^2.2.1",
|
||||
"store": "^2.0.12",
|
||||
"vue": "^2.6.11",
|
||||
"vue-meta": "^2.3.4",
|
||||
"vue-router": "^3.3.2",
|
||||
"vuex": "^3.4.0"
|
||||
"vue-meta": "^2.4.0",
|
||||
"vue-router": "^3.3.4",
|
||||
"vuex": "^3.5.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.10.2",
|
||||
"@babel/plugin-transform-runtime": "^7.10.1",
|
||||
"@babel/core": "^7.10.4",
|
||||
"@babel/plugin-transform-runtime": "^7.10.4",
|
||||
"@vue/component-compiler-utils": "^3.1.2",
|
||||
"@vue/test-utils": "^1.0.3",
|
||||
"babel-core": "^7.0.0-bridge.0",
|
||||
"babel-jest": "^26.0.1",
|
||||
"babel-jest": "^26.1.0",
|
||||
"babel-preset-env": "^1.7.0",
|
||||
"caniuse-lite": "^1.0.30001078",
|
||||
"css-loader": "^3.5.3",
|
||||
"caniuse-lite": "^1.0.30001097",
|
||||
"css-loader": "^3.6.0",
|
||||
"eventsourcemock": "^2.0.0",
|
||||
"html-webpack-plugin": "^4.3.0",
|
||||
"husky": "^4.2.5",
|
||||
"jest": "^26.0.1",
|
||||
"jest": "^26.1.0",
|
||||
"jest-serializer-vue": "^2.0.2",
|
||||
"lint-staged": "^10.2.9",
|
||||
"lint-staged": "^10.2.11",
|
||||
"mini-css-extract-plugin": "^0.9.0",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"postcss-cssnext": "^3.1.0",
|
||||
"postcss-import": "^12.0.1",
|
||||
"postcss-loader": "^3.0.0",
|
||||
"prettier": "^2.0.5",
|
||||
"release-it": "^13.6.2",
|
||||
"sass": "^1.26.8",
|
||||
"sass-loader": "^8.0.2",
|
||||
"release-it": "^13.6.5",
|
||||
"sass": "^1.26.10",
|
||||
"sass-loader": "^9.0.2",
|
||||
"vue-hot-reload-api": "^2.3.4",
|
||||
"vue-jest": "^3.0.5",
|
||||
"vue-loader": "^15.9.2",
|
||||
"vue-jest": "^3.0.6",
|
||||
"vue-loader": "^15.9.3",
|
||||
"vue-style-loader": "^4.1.2",
|
||||
"vue-template-compiler": "^2.6.11",
|
||||
"webpack": "^4.43.0",
|
||||
"webpack-cli": "^3.3.11",
|
||||
"webpack-cli": "^3.3.12",
|
||||
"webpack-dev-server": "^3.11.0",
|
||||
"webpack-pwa-manifest": "^4.2.0"
|
||||
},
|
||||
"husky": {
|
||||
|
||||
@@ -10,12 +10,12 @@ module.exports = (env, argv) => ({
|
||||
maxAssetSize: 350000,
|
||||
maxEntrypointSize: 600000,
|
||||
},
|
||||
devtool: argv.mode === "development" ? "inline-cheap-source-map" : false,
|
||||
devtool: argv.mode !== "production" ? "inline-cheap-source-map" : false,
|
||||
entry: ["./assets/main.js", "./assets/styles.scss"],
|
||||
output: {
|
||||
path: path.resolve(__dirname, "./static"),
|
||||
filename: "[name].js",
|
||||
publicPath: "{{ .Base }}",
|
||||
publicPath: process.env.WEBPACK_DEV_SERVER ? "/" : "{{ .Base }}",
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
@@ -26,19 +26,18 @@ module.exports = (env, argv) => ({
|
||||
{
|
||||
test: /\.(sass|scss|css)$/,
|
||||
use: [
|
||||
MiniCssExtractPlugin.loader,
|
||||
{
|
||||
loader: "css-loader",
|
||||
query: {
|
||||
importLoaders: 1,
|
||||
loader: MiniCssExtractPlugin.loader,
|
||||
options: {
|
||||
hmr: argv.mode !== "production",
|
||||
},
|
||||
},
|
||||
"css-loader",
|
||||
{
|
||||
loader: "postcss-loader",
|
||||
options: {
|
||||
ident: "postcss",
|
||||
plugins: (loader) => [
|
||||
require("postcss-import")(),
|
||||
require("postcss-cssnext")({
|
||||
features: {
|
||||
customProperties: { warnings: false },
|
||||
@@ -75,4 +74,15 @@ module.exports = (env, argv) => ({
|
||||
},
|
||||
extensions: ["*", ".js", ".vue", ".json"],
|
||||
},
|
||||
devServer: {
|
||||
port: 8081,
|
||||
inline: true,
|
||||
hot: true,
|
||||
historyApiFallback: true,
|
||||
proxy: {
|
||||
"/api": {
|
||||
target: "http://localhost:8080",
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||