chore(lite): bundling, dynamic import, optimizations (#6910)

Added dynamic imports for views and components.

Extracted to their own bundle:
- Vue related libs (vue, vue-router, pinia etc.)
- Lodash
- Charts

Removed `vite-plugin-pages` package.

Optimize highlight/markdown loading.
This commit is contained in:
Thierry Goettelmann 2023-07-12 10:05:09 +02:00 committed by GitHub
parent c705051a89
commit 5e23e356ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 161 additions and 307 deletions

View File

@ -57,7 +57,6 @@
"postcss-nested": "^6.0.0",
"typescript": "^4.9.3",
"vite": "^4.3.8",
"vite-plugin-pages": "^0.29.1",
"vue-tsc": "^1.6.5"
},
"private": true,

View File

@ -5,7 +5,6 @@
<script lang="ts" setup>
import markdown from "@/libs/markdown";
import { useEventListener } from "@vueuse/core";
import "highlight.js/styles/github-dark.css";
import { computed, type Ref, ref } from "vue";
const rootElement = ref() as Ref<HTMLElement>;

View File

@ -3,14 +3,13 @@
</template>
<script lang="ts" setup>
import HLJS from "highlight.js";
import { type AcceptedLanguage, highlight } from "@/libs/highlight";
import { computed } from "vue";
import "highlight.js/styles/github-dark.css";
const props = withDefaults(
defineProps<{
code?: any;
lang?: string;
lang?: AcceptedLanguage;
}>(),
{ lang: "typescript" }
);
@ -27,7 +26,7 @@ const codeAsText = computed(() => {
});
const codeAsHtml = computed(
() => HLJS.highlight(codeAsText.value, { language: props.lang }).value
() => highlight(codeAsText.value, { language: props.lang }).value
);
</script>

View File

@ -31,7 +31,7 @@ import { faServer } from "@fortawesome/free-solid-svg-icons";
import UiModal from "@/components/ui/UiModal.vue";
import UiButton from "@/components/ui/UiButton.vue";
import { computed, ref, watch } from "vue";
import { difference } from "lodash";
import { difference } from "lodash-es";
import { useHostStore } from "@/stores/host.store";
const { records: hosts } = useHostStore().subscribe();

View File

@ -1,63 +0,0 @@
<template>
<div class="chart-summary">
<div>
<div class="label">{{ $t("total-used") }}</div>
<div>
{{ usedPercent }}%
<br />
{{ valueFormatter(used) }}
</div>
</div>
<div>
<div class="label">{{ $t("total-free") }}</div>
<div>
{{ freePercent }}%
<br />
{{ valueFormatter(total - used) }}
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { percent } from "@/libs/utils";
import { IK_CHART_VALUE_FORMATTER } from "@/types/injection-keys";
import { computed, inject } from "vue";
const props = defineProps<{
total: number;
used: number;
}>();
const usedPercent = computed(() => percent(props.used, props.total));
const freePercent = computed(() =>
percent(props.total - props.used, props.total)
);
const valueFormatter = inject(
IK_CHART_VALUE_FORMATTER,
computed(() => (value) => value.toString())
);
</script>
<style lang="postcss" scoped>
.chart-summary {
font-size: 1.4rem;
font-weight: 700;
display: flex;
margin-top: 2rem;
color: var(--color-blue-scale-200);
gap: 4rem;
& > div {
display: flex;
flex: 1;
justify-content: space-between;
}
}
.label {
text-transform: uppercase;
}
</style>

View File

@ -273,13 +273,9 @@ const documentation = ref();
const route = useRoute();
const mdPaths = import.meta.glob("../../stories/*.md", { as: "raw" });
if (route.meta.storyMdPath !== undefined && route.meta.storyMdPath in mdPaths) {
mdPaths[route.meta.storyMdPath]().then((md) => {
route.meta.storyMdLoader?.().then((md) => {
documentation.value = md;
});
}
const applyPreset = (preset: {
props?: Record<string, any>;

View File

@ -12,15 +12,18 @@
<script lang="ts" setup>
import { IK_HOST_LAST_WEEK_STATS } from "@/types/injection-keys";
import { computed, inject } from "vue";
import { computed, defineAsyncComponent, inject } from "vue";
import { map } from "lodash-es";
import { useI18n } from "vue-i18n";
import LinearChart from "@/components/charts/LinearChart.vue";
import { formatSize } from "@/libs/utils";
import type { HostStats } from "@/libs/xapi-stats";
import type { LinearChartData } from "@/types/chart";
import { RRD_STEP_FROM_STRING } from "@/libs/xapi-stats";
const LinearChart = defineAsyncComponent(
() => import("@/components/charts/LinearChart.vue")
);
const { t } = useI18n();
const hostLastWeekStats = inject(IK_HOST_LAST_WEEK_STATS);

View File

@ -11,16 +11,19 @@
</template>
<script lang="ts" setup>
import LinearChart from "@/components/charts/LinearChart.vue";
import type { HostStats } from "@/libs/xapi-stats";
import { RRD_STEP_FROM_STRING } from "@/libs/xapi-stats";
import { useHostStore } from "@/stores/host.store";
import type { LinearChartData, ValueFormatter } from "@/types/chart";
import { IK_HOST_LAST_WEEK_STATS } from "@/types/injection-keys";
import { sumBy } from "lodash-es";
import { computed, inject } from "vue";
import { computed, defineAsyncComponent, inject } from "vue";
import { useI18n } from "vue-i18n";
const LinearChart = defineAsyncComponent(
() => import("@/components/charts/LinearChart.vue")
);
const { t } = useI18n();
const hostLastWeekStats = inject(IK_HOST_LAST_WEEK_STATS);

View File

@ -15,7 +15,6 @@
</template>
<script lang="ts" setup>
import LinearChart from "@/components/charts/LinearChart.vue";
import SizeStatsSummary from "@/components/ui/SizeStatsSummary.vue";
import { formatSize, getHostMemory } from "@/libs/utils";
import { RRD_STEP_FROM_STRING } from "@/libs/xapi-stats";
@ -24,9 +23,13 @@ import { useHostStore } from "@/stores/host.store";
import type { LinearChartData, ValueFormatter } from "@/types/chart";
import { IK_HOST_LAST_WEEK_STATS } from "@/types/injection-keys";
import { sumBy } from "lodash-es";
import { computed, inject } from "vue";
import { computed, defineAsyncComponent, inject } from "vue";
import { useI18n } from "vue-i18n";
const LinearChart = defineAsyncComponent(
() => import("@/components/charts/LinearChart.vue")
);
const hostMetricsSubscription = useHostMetricsStore().subscribe();
const hostStore = useHostStore();

View File

@ -0,0 +1,31 @@
import type { HighlightResult, Language } from "highlight.js";
import HLJS from "highlight.js/lib/core";
import cssLang from "highlight.js/lib/languages/css";
import jsonLang from "highlight.js/lib/languages/json";
import textLang from "highlight.js/lib/languages/plaintext";
import tsLang from "highlight.js/lib/languages/typescript";
import xmlLang from "highlight.js/lib/languages/xml";
import "highlight.js/styles/github-dark.css";
HLJS.registerLanguage("xml", xmlLang);
HLJS.registerLanguage("css", cssLang);
HLJS.registerLanguage("typescript", tsLang);
HLJS.registerLanguage("json", jsonLang);
HLJS.registerLanguage("plaintext", textLang);
export const highlight: (
code: string,
options: { language: AcceptedLanguage },
ignoreIllegals?: boolean
) => HighlightResult = HLJS.highlight;
export const getLanguage: (
languageName: AcceptedLanguage
) => Language | undefined = HLJS.getLanguage;
export type AcceptedLanguage =
| "xml"
| "css"
| "typescript"
| "json"
| "plaintext";

View File

@ -1,4 +1,8 @@
import HLJS from "highlight.js";
import {
type AcceptedLanguage,
getLanguage,
highlight,
} from "@/libs/highlight";
import { marked } from "marked";
enum VUE_TAG {
@ -9,11 +13,10 @@ enum VUE_TAG {
marked.use({
renderer: {
code(str: string, lang: string) {
const code = highlight(
code(str: string, lang: AcceptedLanguage) {
const code = customHighlight(
str,
Object.values(VUE_TAG).includes(lang as VUE_TAG) ||
HLJS.getLanguage(lang)
Object.values(VUE_TAG).includes(lang as VUE_TAG) || getLanguage(lang)
? lang
: "plaintext"
);
@ -22,7 +25,7 @@ marked.use({
},
});
function highlight(str: string, lang: string) {
function customHighlight(str: string, lang: AcceptedLanguage | VUE_TAG) {
switch (lang) {
case VUE_TAG.TEMPLATE: {
const indented = str
@ -36,7 +39,7 @@ function highlight(str: string, lang: string) {
case VUE_TAG.STYLE:
return wrap(str.trim(), lang);
default: {
return copyable(HLJS.highlight(str, { language: lang }).value);
return copyable(highlight(str, { language: lang }).value);
}
}
}
@ -50,22 +53,22 @@ function wrap(str: string, lang: VUE_TAG) {
case VUE_TAG.TEMPLATE:
openTag = "<template>";
closeTag = "</template>";
code = HLJS.highlight(str, { language: "xml" }).value;
code = highlight(str, { language: "xml" }).value;
break;
case VUE_TAG.SCRIPT:
openTag = '<script lang="ts" setup>';
closeTag = "</script>";
code = HLJS.highlight(str, { language: "typescript" }).value;
code = highlight(str, { language: "typescript" }).value;
break;
case VUE_TAG.STYLE:
openTag = '<style lang="postcss" scoped>';
closeTag = "</style>";
code = HLJS.highlight(str, { language: "scss" }).value;
code = highlight(str, { language: "css" }).value;
break;
}
const openTagHtml = HLJS.highlight(openTag, { language: "xml" }).value;
const closeTagHtml = HLJS.highlight(closeTag, { language: "xml" }).value;
const openTagHtml = highlight(openTag, { language: "xml" }).value;
const closeTagHtml = highlight(closeTag, { language: "xml" }).value;
return `${openTagHtml}${copyable(code)}${closeTagHtml}`;
}

View File

@ -1,24 +1,12 @@
import pool from "@/router/pool";
import story from "@/router/story";
import vm from "@/router/vm";
import HomeView from "@/views/HomeView.vue";
import HostDashboardView from "@/views/host/HostDashboardView.vue";
import HostRootView from "@/views/host/HostRootView.vue";
import PageNotFoundView from "@/views/PageNotFoundView.vue";
import SettingsView from "@/views/settings/SettingsView.vue";
import StoryView from "@/views/StoryView.vue";
import storiesRoutes from "virtual:stories";
import { createRouter, createWebHashHistory } from "vue-router";
const router = createRouter({
history: createWebHashHistory(),
routes: [
{
path: "/story",
name: "story",
component: StoryView,
children: storiesRoutes,
meta: { hasStoryNav: true },
},
{
path: "/",
name: "home",
@ -27,35 +15,28 @@ const router = createRouter({
{
path: "/settings",
name: "settings",
component: SettingsView,
component: () => import("@/views/settings/SettingsView.vue"),
},
story,
pool,
vm,
{
path: "/host/:uuid",
component: HostRootView,
component: () => import("@/views/host/HostRootView.vue"),
children: [
{
path: "",
name: "host.dashboard",
component: HostDashboardView,
component: () => import("@/views/host/HostDashboardView.vue"),
},
],
},
{
path: "/:pathMatch(.*)*",
name: "notFound",
component: PageNotFoundView,
component: () => import("@/views/PageNotFoundView.vue"),
},
],
});
if (import.meta.env.DEV) {
router.addRoute("story", {
path: "",
name: "story-home",
component: () => import("@/views/story/HomeView.vue"),
});
}
export default router;

View File

@ -1,13 +1,5 @@
import PoolAlarmsView from "@/views/pool/PoolAlarmsView.vue";
import PoolDashboardView from "@/views/pool/PoolDashboardView.vue";
import PoolHostsView from "@/views/pool/PoolHostsView.vue";
import PoolNetworkView from "@/views/pool/PoolNetworkView.vue";
import PoolRootView from "@/views/pool/PoolRootView.vue";
import PoolStatsView from "@/views/pool/PoolStatsView.vue";
import PoolStorageView from "@/views/pool/PoolStorageView.vue";
import PoolSystemView from "@/views/pool/PoolSystemView.vue";
import PoolTasksView from "@/views/pool/PoolTasksView.vue";
import PoolVmsView from "@/views/pool/PoolVmsView.vue";
export default {
path: "/pool/:uuid",
@ -22,42 +14,42 @@ export default {
{
path: "alarms",
name: "pool.alarms",
component: PoolAlarmsView,
component: () => import("@/views/pool/PoolAlarmsView.vue"),
},
{
path: "stats",
name: "pool.stats",
component: PoolStatsView,
component: () => import("@/views/pool/PoolStatsView.vue"),
},
{
path: "system",
name: "pool.system",
component: PoolSystemView,
component: () => import("@/views/pool/PoolSystemView.vue"),
},
{
path: "network",
name: "pool.network",
component: PoolNetworkView,
component: () => import("@/views/pool/PoolNetworkView.vue"),
},
{
path: "storage",
name: "pool.storage",
component: PoolStorageView,
component: () => import("@/views/pool/PoolStorageView.vue"),
},
{
path: "tasks",
name: "pool.tasks",
component: PoolTasksView,
component: () => import("@/views/pool/PoolTasksView.vue"),
},
{
path: "hosts",
name: "pool.hosts",
component: PoolHostsView,
component: () => import("@/views/pool/PoolHostsView.vue"),
},
{
path: "vms",
name: "pool.vms",
component: PoolVmsView,
component: () => import("@/views/pool/PoolVmsView.vue"),
},
],
};

View File

@ -0,0 +1,54 @@
import type { RouteRecordRaw } from "vue-router";
const componentLoaders = import.meta.glob("@/stories/*.story.vue");
const docLoaders = import.meta.glob("@/stories/*.story.md", { as: "raw" });
const children: RouteRecordRaw[] = Object.entries(componentLoaders).map(
([path, componentLoader]) => {
const basename = path.replace(/^\/src\/stories\/(.*)\.story.vue$/, "$1");
const docPath = path.replace(/\.vue$/, ".md");
const routeName = `story-${basename}`;
return {
name: routeName,
path: basename,
component: componentLoader,
meta: {
isStory: true,
storyTitle: basenameToStoryTitle(basename),
storyMdLoader: docLoaders[docPath],
},
};
}
);
if (import.meta.env.DEV) {
children.push({
path: "",
name: "story-home",
component: () => import("@/views/story/HomeView.vue"),
});
}
export default {
path: "/story",
name: "story",
component: () => import("@/views/StoryView.vue"),
children,
meta: { hasStoryNav: true },
};
/**
* Transform the route basename to a page title.
*
* Example:
* Filename: `my-component.story.vue`
* Basename: `my-component`
* Page title: `My Component`
*/
function basenameToStoryTitle(basename: string) {
return basename
.split("-")
.map((s) => `${s.charAt(0).toUpperCase()}${s.substring(1)}`)
.join(" ");
}

View File

@ -3,7 +3,7 @@ declare module "vue-router" {
hasStoryNav?: boolean;
isStory?: boolean;
storyTitle?: string;
storyMdPath?: string;
storyMdLoader?: () => Promise<string>;
}
}
export {};

View File

@ -1,9 +1,8 @@
import vueI18n from "@intlify/unplugin-vue-i18n/vite";
import vue from "@vitejs/plugin-vue";
import { basename, resolve } from "path";
import { resolve } from "path";
import { fileURLToPath, URL } from "url";
import { defineConfig } from "vite";
import pages from "vite-plugin-pages";
// https://vitejs.dev/config/
export default defineConfig({
@ -16,23 +15,6 @@ export default defineConfig({
vueI18n({
include: resolve(__dirname, "src/locales/**"),
}),
pages({
moduleId: "virtual:stories",
dirs: [{ dir: "src/stories", baseRoute: "story" }],
extensions: ["story.vue"],
extendRoute: (route) => {
const storyBaseName = basename(route.component as string, ".vue");
return {
...route,
path: route.path.replace(".story", ""),
meta: {
isStory: true,
storyTitle: routeNameToStoryTitle(route.name),
storyMdPath: `../../stories/${storyBaseName}.md`,
},
};
},
}),
],
define: {
XO_LITE_VERSION: JSON.stringify(process.env.npm_package_version),
@ -46,6 +28,25 @@ export default defineConfig({
// https://vitejs.dev/guide/dep-pre-bundling.html#monorepos-and-linked-dependencies
build: {
rollupOptions: {
output: {
manualChunks: (id) => {
if (id.includes("node_modules")) {
if (id.includes("vue") || id.includes("pinia")) {
return "vue";
}
if (id.includes("lodash-es")) {
return "lodash-es";
}
if (id.includes("echarts")) {
return "charts";
}
}
},
},
},
commonjsOptions: {
include: [/complex-matcher/, /node_modules/],
},
@ -58,19 +59,3 @@ export default defineConfig({
},
},
});
/**
* Transform the route name generated by Vite Plugin Pages to a page title.
*
* Example:
* Filename: `my-component.story.vue`
* Route name: `story-my-component.story`
* Page title: `My Component`
*/
function routeNameToStoryTitle(routeName: string) {
return routeName
.replace(/^story-(.*)\.story$/, "$1")
.split("-")
.map((s) => `${s.charAt(0).toUpperCase()}${s.substring(1)}`)
.join(" ");
}

139
yarn.lock
View File

@ -3262,13 +3262,6 @@
resolved "https://registry.yarnpkg.com/@types/d3-time-format/-/d3-time-format-4.0.0.tgz#ee7b6e798f8deb2d9640675f8811d0253aaa1946"
integrity sha512-yjfBUe6DJBsDin2BMIulhSHmr5qNR5Pxs17+oW4DoVPyVIXZ+m6bs7j1UVKP08Emv6jRmYrYqxYzO63mQxy1rw==
"@types/debug@^4.1.7":
version "4.1.8"
resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317"
integrity sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==
dependencies:
"@types/ms" "*"
"@types/estree@^1.0.0":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194"
@ -3407,11 +3400,6 @@
resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c"
integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==
"@types/ms@*":
version "0.7.31"
resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
"@types/node@*", "@types/node@>=14", "@types/node@^20.2.3":
version "20.3.1"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe"
@ -7859,30 +7847,6 @@ deep-equal@^1.0.1:
object-keys "^1.1.1"
regexp.prototype.flags "^1.2.0"
deep-equal@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.1.tgz#c72ab22f3a7d3503a4ca87dde976fe9978816739"
integrity sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==
dependencies:
array-buffer-byte-length "^1.0.0"
call-bind "^1.0.2"
es-get-iterator "^1.1.3"
get-intrinsic "^1.2.0"
is-arguments "^1.1.1"
is-array-buffer "^3.0.2"
is-date-object "^1.0.5"
is-regex "^1.1.4"
is-shared-array-buffer "^1.0.2"
isarray "^2.0.5"
object-is "^1.1.5"
object-keys "^1.1.1"
object.assign "^4.1.4"
regexp.prototype.flags "^1.5.0"
side-channel "^1.0.4"
which-boxed-primitive "^1.0.2"
which-collection "^1.0.1"
which-typed-array "^1.1.9"
deep-equal@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
@ -8698,21 +8662,6 @@ es-array-method-boxes-properly@^1.0.0:
resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==
es-get-iterator@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6"
integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==
dependencies:
call-bind "^1.0.2"
get-intrinsic "^1.1.3"
has-symbols "^1.0.3"
is-arguments "^1.1.1"
is-map "^2.0.2"
is-set "^2.0.2"
is-string "^1.0.7"
isarray "^2.0.5"
stop-iteration-iterator "^1.0.0"
es-set-tostringtag@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8"
@ -9211,13 +9160,6 @@ espree@^9.3.1, espree@^9.5.2:
acorn-jsx "^5.3.2"
eslint-visitor-keys "^3.4.1"
esprima-extract-comments@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/esprima-extract-comments/-/esprima-extract-comments-1.1.0.tgz#0dacab567a5900240de6d344cf18c33617becbc9"
integrity sha512-sBQUnvJwpeE9QnPrxh7dpI/dp67erYG4WXEAreAMoelPRpMR7NWb4YtwRPn9b+H1uLQKl/qS8WYmyaljTpjIsw==
dependencies:
esprima "^4.0.0"
esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
@ -9589,14 +9531,6 @@ extglob@^2.0.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
extract-comments@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/extract-comments/-/extract-comments-1.1.0.tgz#b90bca033a056bd69b8ba1c6b6b120fc2ee95c18"
integrity sha512-dzbZV2AdSSVW/4E7Ti5hZdHWbA+Z80RJsJhr5uiL10oyjl/gy7/o+HI1HwK4/WSZhlq4SNKU3oUzXlM13Qx02Q==
dependencies:
esprima-extract-comments "^1.1.0"
parse-code-context "^1.0.0"
extsprintf@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
@ -11731,7 +11665,7 @@ internal-ip@^4.3.0:
default-gateway "^4.2.0"
ipaddr.js "^1.9.0"
internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5:
internal-slot@^1.0.3, internal-slot@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986"
integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==
@ -11853,7 +11787,7 @@ is-accessor-descriptor@^1.0.0:
dependencies:
kind-of "^6.0.0"
is-arguments@^1.0.4, is-arguments@^1.1.1:
is-arguments@^1.0.4:
version "1.1.1"
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
@ -11964,7 +11898,7 @@ is-data-descriptor@^1.0.0:
dependencies:
kind-of "^6.0.0"
is-date-object@^1.0.1, is-date-object@^1.0.5:
is-date-object@^1.0.1:
version "1.0.5"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
@ -12119,11 +12053,6 @@ is-ip@^3.1.0:
dependencies:
ip-regex "^4.0.0"
is-map@^2.0.1, is-map@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127"
integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==
is-negated-glob@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2"
@ -12256,11 +12185,6 @@ is-resolvable@^1.0.0:
resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
is-set@^2.0.1, is-set@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec"
integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==
is-shared-array-buffer@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
@ -12347,11 +12271,6 @@ is-valid-glob@^1.0.0:
resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa"
integrity sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==
is-weakmap@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2"
integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==
is-weakref@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
@ -12359,14 +12278,6 @@ is-weakref@^1.0.2:
dependencies:
call-bind "^1.0.2"
is-weakset@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d"
integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==
dependencies:
call-bind "^1.0.2"
get-intrinsic "^1.1.1"
is-windows@^1.0.1, is-windows@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
@ -13623,11 +13534,6 @@ loader-utils@^2.0.0:
emojis-list "^3.0.0"
json5 "^2.1.2"
local-pkg@^0.4.3:
version "0.4.3"
resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963"
integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==
locate-path@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
@ -15671,11 +15577,6 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5:
pbkdf2 "^3.0.3"
safe-buffer "^5.1.1"
parse-code-context@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/parse-code-context/-/parse-code-context-1.0.0.tgz#718c295c593d0d19a37f898473268cc75e98de1e"
integrity sha512-OZQaqKaQnR21iqhlnPfVisFjBWjhnMl5J9MgbP8xC+EwoVqbXrq78lp+9Zb3ahmLzrIX5Us/qbvBnaS3hkH6OA==
parse-filepath@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891"
@ -17769,7 +17670,7 @@ regex-not@^1.0.0, regex-not@^1.0.2:
extend-shallow "^3.0.2"
safe-regex "^1.1.0"
regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0:
regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3:
version "1.5.0"
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb"
integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==
@ -18944,13 +18845,6 @@ std-env@^2.2.1:
dependencies:
ci-info "^3.1.1"
stop-iteration-iterator@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4"
integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==
dependencies:
internal-slot "^1.0.4"
stoppable@^1.0.5, stoppable@^1.0.6:
version "1.1.0"
resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b"
@ -20674,21 +20568,6 @@ vinyl@^2.0.0, vinyl@^2.1.0:
remove-trailing-separator "^1.0.1"
replace-ext "^1.0.0"
vite-plugin-pages@^0.29.1:
version "0.29.1"
resolved "https://registry.yarnpkg.com/vite-plugin-pages/-/vite-plugin-pages-0.29.1.tgz#dc1eeff6975ec3a791f18637b90ffa02068fce5e"
integrity sha512-zPf4YIBuv2nOwvtEFeS+Ac4O7Ngoz5x9P0zaj0xPfCObTGEIvo/30//D2FG24UB6YedrFOaJjLq/BS/M/JDKEA==
dependencies:
"@types/debug" "^4.1.7"
debug "^4.3.4"
deep-equal "^2.2.1"
extract-comments "^1.1.0"
fast-glob "^3.2.12"
json5 "^2.2.3"
local-pkg "^0.4.3"
picocolors "^1.0.0"
yaml "^2.2.2"
vite@^4.3.8:
version "4.3.9"
resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.9.tgz#db896200c0b1aa13b37cdc35c9e99ee2fdd5f96d"
@ -21174,16 +21053,6 @@ which-boxed-primitive@^1.0.2:
is-string "^1.0.5"
is-symbol "^1.0.3"
which-collection@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906"
integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==
dependencies:
is-map "^2.0.1"
is-set "^2.0.1"
is-weakmap "^2.0.1"
is-weakset "^2.0.1"
which-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"