feat(theme-press): basic layout & home

This commit is contained in:
YunYouJun 2022-07-13 13:21:59 +08:00
parent f8c04afdc4
commit ce85edc7de
59 changed files with 746 additions and 193 deletions

View File

@ -1,12 +0,0 @@
<script lang="ts" setup>
import { useCategory, usePageList } from 'valaxy'
const pages = usePageList()
const categories = useCategory('Docs', pages.value)
</script>
<template>
<div text="left" m="2">
<YunCategories :categories="categories.children" :collapsable="false" />
</div>
</template>

View File

@ -1,7 +1,6 @@
<template>
<Layout>
<template #sidebar-child>
<DocsNav />
<br>
<YunConfig />
</template>

View File

@ -4,9 +4,6 @@ import Home from 'valaxy-theme-yun/layouts/home.vue'
<template>
<Home>
<template #board>
<DocsBoard />
</template>
<template #footer>
<UpyunSupport />
</template>

View File

@ -1,12 +0,0 @@
---
layout: docs
title: Docs
title_zh: 文档
end: false
categories:
- Docs
- Guide
markdown: false
---
<DocsHome />

View File

@ -1,3 +0,0 @@
# styles
You can custom styles in `styles/index.scss`.

View File

@ -1,32 +0,0 @@
.gradient-text {
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.sese-btn {
position: relative;
z-index: 0;
@apply from-blue-500 to-blue-700;
&::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
transition: all 0.4s;
z-index: -1;
@apply rounded bg-gradient-to-r from-red-500 to-red-700;
}
&:hover {
&::before {
opacity: 1;
}
}
}

View File

@ -1,2 +0,0 @@
// @use "./markdown.scss" as *;
@use "./docs.scss";

View File

@ -1,2 +0,0 @@
// :root {}
// html.dark{}

13
docs/components.d.ts vendored
View File

@ -10,16 +10,29 @@ declare module '@vue/runtime-core' {
404: typeof import('./../packages/valaxy-theme-press/layouts/404.vue')['default']
AppLink: typeof import('./../packages/valaxy/client/components/AppLink.vue')['default']
Default: typeof import('./../packages/valaxy-theme-press/layouts/default.vue')['default']
Docs: typeof import('./../packages/valaxy-theme-press/layouts/docs.vue')['default']
DocsBoard: typeof import('./../packages/valaxy-theme-press/components/DocsBoard.vue')['default']
DocsHome: typeof import('./../packages/valaxy-theme-press/components/DocsHome.vue')['default']
Home: typeof import('./../packages/valaxy-theme-press/layouts/home.vue')['default']
Layout: typeof import('./../packages/valaxy-theme-press/layouts/layout.vue')['default']
Post: typeof import('./../packages/valaxy-theme-press/layouts/post.vue')['default']
PressArticle: typeof import('./../packages/valaxy-theme-press/components/PressArticle.vue')['default']
PressArticleCard: typeof import('./../packages/valaxy-theme-press/components/PressArticleCard.vue')['default']
PressAuthor: typeof import('./../packages/valaxy-theme-press/components/PressAuthor.vue')['default']
PressButton: typeof import('./../packages/valaxy-theme-press/components/PressButton.vue')['default']
PressCategories: typeof import('./../packages/valaxy-theme-press/components/PressCategories.vue')['default']
PressCategory: typeof import('./../packages/valaxy-theme-press/components/PressCategory.vue')['default']
PressDate: typeof import('./../packages/valaxy-theme-press/components/PressDate.vue')['default']
PressFeature: typeof import('./../packages/valaxy-theme-press/components/PressFeature.vue')['default']
PressFeatures: typeof import('./../packages/valaxy-theme-press/components/PressFeatures.vue')['default']
PressHeader: typeof import('./../packages/valaxy-theme-press/components/PressHeader.vue')['default']
PressHome: typeof import('./../packages/valaxy-theme-press/components/PressHome.vue')['default']
PressHomeFeatures: typeof import('./../packages/valaxy-theme-press/components/PressHomeFeatures.vue')['default']
PressHomeHero: typeof import('./../packages/valaxy-theme-press/components/PressHomeHero.vue')['default']
PressNav: typeof import('./../packages/valaxy-theme-press/components/PressNav.vue')['default']
PressNavBar: typeof import('./../packages/valaxy-theme-press/components/navbar/PressNavBar.vue')['default']
PressPostList: typeof import('./../packages/valaxy-theme-press/components/PressPostList.vue')['default']
PressSidebar: typeof import('./../packages/valaxy-theme-press/components/PressSidebar.vue')['default']
PressToggleLocale: typeof import('./../packages/valaxy-theme-press/components/PressToggleLocale.vue')['default']
README: typeof import('./../packages/valaxy/client/layouts/README.md')['default']
RouterLink: typeof import('vue-router')['RouterLink']

View File

@ -1,7 +1,6 @@
---
title: FAQ
title_zh: 常见问题
layout: docs
categories:
- Docs
- Dev

View File

@ -1,7 +1,6 @@
---
title: Participate in Development
title_zh: 参与开发
layout: docs
categories:
- Docs
- Dev

View File

@ -3,7 +3,6 @@ title: FAQ
categories:
- Docs
- Guide
layout: docs
end: false
---

View File

@ -4,7 +4,6 @@ title_zh: 配置
categories:
- Docs
- Guide
layout: docs
end: false
---

View File

@ -4,7 +4,6 @@ title: Container
categories:
- Docs
- Guide
layout: docs
end: false
---

View File

@ -3,7 +3,6 @@ title: 自定义扩展
categories:
- Docs
- Guide
layout: docs
end: false
---

View File

@ -4,7 +4,6 @@ title_zh: 亮点
categories:
- Docs
- Guide
layout: docs
end: false
---

View File

@ -4,7 +4,6 @@ title_zh: 开始
categories:
- Docs
- Guide
layout: docs
end: false
---

View File

@ -4,7 +4,6 @@ title_zh: 单页 i18n
categories:
- Docs
- Guide
layout: docs
---
::: tip

View File

@ -4,7 +4,6 @@ title_zh: 指南
categories:
- Docs
- Guide
layout: docs
end: false
---

View File

@ -4,7 +4,6 @@ title_zh: 第三方
categories:
- Docs
- Guide
layout: docs
end: false
aplayer: true
---

View File

@ -0,0 +1,30 @@
---
layout: home
title: Valaxy
titleTemplate: Next Generation Static Blog Framework
hero:
name: Valaxy
text: Next Generation Static Blog Framework
tagline: Simple, powerful, and performant. Meet the modern BLOG framework you've always wanted.
actions:
- theme: brand
text: Get Started
link: /guide/getting-started
- theme: alt
text: View GitHub
link: https://github.com/YunYouJun/valaxy
# todo, rewrite with valaxy
features:
- title: "Vite: The DX that can't be beat"
details: Feel the speed of Vite. Instant server start and lightning fast HMR that stays fast regardless of the app size.
- title: Designed to be simplicity first
details: With Markdown-centered content, it's built to help you focus on writing and deployed with minimum configuration.
- title: Power of Vue meets Markdown
details: Enhance your content with all the features of Vue in Markdown, while being able to customize your site with Vue.
- title: Fully static yet still dynamic
details: Go wild with true SSG + SPA architecture. Static on page load, but engage users with 100% interactivity from there.
---
<div m="t-8" class="text-center" text="4xl">WORK IN PROGRESS</div>

View File

@ -5,7 +5,6 @@ end: false
categories:
- Docs
- Theme
layout: docs
---
作为博客,用户通常会有评论的需求。

View File

@ -4,7 +4,6 @@ title_zh: 如何创建一个 Valaxy 主题
categories:
- Docs
- Theme
layout: docs
end: false
---
@ -55,6 +54,10 @@ export interface ValaxyPluginOptions {
}
```
## ValaxyMain
你可以从 `ValaxyMain``props` 中获取 `frontmatter``pageData`
## Third Plugin
- [关于评论](/docs/theme/comment)

View File

@ -55,7 +55,7 @@
"rimraf": "^3.0.2",
"simple-git-hooks": "^2.8.0",
"tsup": "^6.1.3",
"tsx": "^3.7.1",
"tsx": "^3.8.0",
"typescript": "^4.7.4",
"valaxy": "workspace:*",
"valaxy-theme-press": "workspace:*",

View File

@ -0,0 +1,8 @@
# valaxy-theme-press
This is a theme for valaxy docs.
## Reference
- [vitepress](https://vitepress.vuejs.org/)
- [nextjs](https://nextjs.org/)

View File

@ -0,0 +1,33 @@
<script lang="ts" setup>
import { computed } from 'vue'
import { useRouter } from 'vue-router'
const props = defineProps<{
theme: 'brand' | 'alt'
link: string
text: string
}>()
const router = useRouter()
const classes = computed(() => {
const arr = []
if (props.theme === 'brand')
arr.push('from-blue-500', 'to-blue-700')
else
arr.push('from-gray-600', 'to-stone-700')
return arr
})
</script>
<template>
<button
m="2"
:class="classes"
class="sese-btn btn" bg="gradient-to-r"
@click="router.push(link)"
>
{{ text }}
</button>
</template>

View File

@ -0,0 +1,50 @@
<script lang="ts" setup>
import type { Categories } from 'valaxy'
import { ref } from 'vue'
const props = withDefaults(defineProps<{
categories: Categories
/**
* 当前层级
*/
level?: number
displayCategory?: (category: string) => void
collapsable?: boolean
}>(), {
level: 0,
collapsable: true,
})
const collapsable = ref(props.collapsable)
</script>
<template>
<ul v-for="category, key in Object.fromEntries(categories)" :key="key" class="category-list" m="l-4">
<PressCategory :name="key.toString()" :category="category" :level="level + 1" :display-category="displayCategory" :collapsable="collapsable" />
</ul>
</template>
<style lang="scss">
.post-list-item {
a {
color: var(--va-c-text);
&:hover {
color: var(--va-c-primary);
}
}
}
.category-list-item {
.folder-action {
&:hover {
color: var(--va-c-primary);
}
}
.category-name {
&:hover {
color: var(--va-c-primary);
}
}
}
</style>

View File

@ -0,0 +1,52 @@
<script lang="ts" setup>
import { ref } from 'vue'
import type { Category, Post } from 'valaxy'
import { isParentCategory } from 'valaxy'
import { useI18n } from 'vue-i18n'
const props = withDefaults(defineProps<{
name: string
// to eliminate the warning
category: Category
level?: number
displayCategory?: (category: string) => void
/**
* collapse children
*/
collapsable?: boolean
}>(), {
collapsable: true,
})
const collapsable = ref(props.collapsable)
const { t, locale } = useI18n()
const getTitle = (post: Post | any) => {
const lang = locale.value === 'zh-CN' ? 'zh' : locale.value
return post[`title_${lang}`] ? post[`title_${lang}`] : post.title
}
</script>
<template>
<li v-if="category.total" class="category-list-item inline-flex items-center cursor-pointer">
<span class="folder-action inline-flex" @click="collapsable = !collapsable">
<div v-if="collapsable" i-ri-folder-add-line />
<div v-else style="color:var(--va-c-primary)" i-ri-folder-reduce-line /></span>
<span class="category-name" m="l-1" @click="displayCategory ? displayCategory(name) : null">
{{ name === 'Uncategorized' ? t('category.uncategorized') : name }} [{{ category.total }}]
</span>
</li>
<template v-if="!collapsable">
<ul v-if="!isParentCategory(category)">
<li v-for="post, i in category.posts" :key="i" class="post-list-item" m="l-4">
<router-link v-if="post.title" :to="post.path || ''" class="inline-flex items-center">
<div i-ri-file-text-line />
<span m="l-1" font="serif black">{{ getTitle(post) }}</span>
</router-link>
</li>
</ul>
<PressCategories v-else :categories="category.children" :display-category="displayCategory" :collapsable="collapsable" />
</template>
</template>

View File

@ -0,0 +1,61 @@
<script setup lang="ts">
import type { Feature } from '../types'
defineProps<{
feature: Feature
}>()
</script>
<template>
<article class="press-feature">
<div v-if="feature.icon" class="icon">
{{ feature.icon }}
</div>
<h2 class="title">
{{ feature.title }}
</h2>
<p class="details">
{{ feature.details }}
</p>
</article>
</template>
<style scoped>
.press-feature {
border: 1px solid var(--vp-c-bg-soft);
border-radius: 12px;
padding: 24px;
height: 100%;
background-color: var(--vp-c-bg-soft);
}
.icon {
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 20px;
border-radius: 6px;
background-color: var(--vp-c-gray-light-4);
width: 48px;
height: 48px;
font-size: 24px;
}
.dark .icon {
background-color: var(--vp-c-bg);
}
.title {
line-height: 24px;
font-size: 16px;
font-weight: 600;
}
.details {
padding-top: 8px;
line-height: 24px;
font-size: 14px;
font-weight: 500;
color: var(--vp-c-text-2);
}
</style>

View File

@ -0,0 +1,26 @@
<script lang="ts" setup>
import { computed } from 'vue'
import type { Feature } from '../types'
const props = defineProps<{
features: Feature[]
}>()
const grid = computed(() => {
const length = props.features.length
if (length <= 3)
return `grid-cols-1 sm:grid-cols-2 md:grid-cols-${length}`
else
return 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4'
})
</script>
<template>
<div class="press-features">
<div class="container grid" :class="[grid]">
<div v-for="feature in features" :key="feature.title" class="inline-grid">
<PressFeature :feature="feature" />
</div>
</div>
</div>
</template>

View File

@ -1,26 +0,0 @@
<script lang="ts" setup>
import { useConfig } from 'valaxy'
const config = useConfig()
</script>
<template>
<div class="pt-6 pb-8 space-y-2 md:space-y-5">
<h1
class="
text-3xl
leading-9
font-extrabold
text-gray-900
tracking-tight
sm:text-4xl sm:leading-10
md:text-6xl md:leading-14
"
>
{{ config.title }}
</h1>
<p class="text-lg leading-7 text-gray-500">
{{ config.subtitle }}
</p>
</div>
</template>

View File

@ -0,0 +1,21 @@
<template>
<div class="press-Home">
<slot name="home-hero-before" />
<PressHomeHero />
<slot name="home-hero-after" />
<slot name="home-features-before" />
<PressHomeFeatures />
<slot name="home-features-after" />
<slot>
<router-view />
</slot>
<p align="center">
<a href="https://sponsors.yunyoujun.cn">
<img src="https://sponsors.yunyoujun.cn/sponsors.svg">
</a>
</p>
</div>
</template>

View File

@ -0,0 +1,12 @@
<script setup lang="ts">
import { useFrontmatter } from 'valaxy'
const fm = useFrontmatter()
</script>
<template>
<PressFeatures
v-if="fm.features"
class="press-home-features"
:features="fm.features"
/>
</template>

View File

@ -1,12 +1,17 @@
<script lang="ts" setup>
import { useRouter } from 'vue-router'
import { useFrontmatter } from 'valaxy'
import PressButton from './PressButton.vue'
const router = useRouter()
const fm = useFrontmatter()
</script>
<template>
<h1 m="t-10" text="center">
<span text="8xl" font="black" class="gradient-text from-purple-800 to-blue-500" bg="gradient-to-r">Valaxy</span>
<span text="8xl" font="black" class="gradient-text from-purple-800 to-blue-500" bg="gradient-to-r">
{{ fm.title }}
</span>
<br>
<small opacity="75">LOGO NOT READY</small>
</h1>
@ -18,16 +23,14 @@ const router = useRouter()
</h1>
<div p="2" text="center">
<button class="sese-btn btn" bg="gradient-to-r" @click="router.push('/docs/guide/getting-started')">
Get Started
</button>
<PressButton
v-for="action in fm.hero.actions"
:key="action.link"
:theme="action.theme"
:link="action.link"
:text="action.text"
/>
</div>
<br>
<p align="center">
<a href="https://sponsors.yunyoujun.cn">
<img src="https://sponsors.yunyoujun.cn/sponsors.svg">
</a>
</p>
</template>

View File

@ -0,0 +1,42 @@
<script lang="ts" setup>
import { useCategory, usePageList } from 'valaxy'
const pages = usePageList()
const categories = useCategory('Docs', pages.value)
</script>
<template>
<div class="press-sidebar open shadow-lg">
<div text="left" m="2">
<PressCategories :categories="categories.children" :collapsable="false" />
</div>
</div>
</template>
<style lang="scss">
.press-sidebar {
position: fixed;
top: 0;
bottom: 0;
left: 0;
z-index: var(--pr-z-index-sidebar);
padding: 32px 32px 96px;
width: calc(100vw - 64px);
max-width: 320px;
background-color: var(--va-c-bg);
opacity: 0;
box-shadow: var(--vp-c-shadow-3);
overflow-x: hidden;
overflow-y: auto;
transform: translateX(-100%);
transition: opacity 0.5s, transform 0.25s ease;
&.open {
opacity: 1;
visibility: visible;
transform: translateX(0);
transition: opacity 0.25s,
transform 0.5s cubic-bezier(0.19, 1, 0.22, 1);
}
}
</style>

View File

@ -1,16 +1,22 @@
<script lang="ts" setup>
import type { PageData, Post } from 'valaxy'
import { useConfig } from 'valaxy'
import { useConfig, useSidebar } from 'valaxy'
defineProps<{
frontmatter: Post
data?: PageData
}>()
const config = useConfig()
const { hasSidebar } = useSidebar()
</script>
<template>
<main>
<main
class="press-main" :class="{
'has-sidebar': hasSidebar,
}"
>
<div w="full" flex="~">
<slot name="main">
<div class="content" flex="~ col grow" w="full" p="l-4 lt-md:0">
@ -43,3 +49,11 @@ const config = useConfig()
<slot name="aside" />
</main>
</template>
<style lang="scss">
.press-main {
&.has-sidebar {
padding-left: var(--pr-sidebar-width);
}
}
</style>

View File

@ -1,5 +1,7 @@
<template>
<Layout>
<PressSidebar />
<router-view />
</Layout>
</template>

View File

@ -1,11 +1,5 @@
<template>
<Layout>
<div class="divide-y divide-gray-200">
<PressHeader />
<slot>
<router-view />
</slot>
</div>
<PressHome />
</Layout>
</template>

View File

@ -1,10 +1,10 @@
<template>
<div class="antialiased">
<div class="max-w-3xl mx-auto px-4 sm:px-6 xl:max-w-5xl xl:px-0">
<div class="layout antialiased">
<div class="max-w-3xl mx-auto sm:px-6 xl:max-w-5xl xl:px-0">
<PressNav />
</div>
<main class="max-w-3xl mx-auto px-4 sm:px-6 xl:max-w-5xl xl:px-0">
<main class="max-w-3xl mx-auto sm:px-6 xl:max-w-5xl xl:px-0">
<slot>
<router-view v-slot="{ Component }">
<component :is="Component">

View File

@ -1,8 +0,0 @@
<template>
<PressPostList />
</template>
<route lang="yaml">
meta:
layout: home
</route>

View File

@ -0,0 +1,4 @@
:root {
--pr-z-index-sidebar: 10;
--pr-sidebar-width: 272px;
}

View File

@ -0,0 +1,16 @@
.gradient-text {
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.sese-btn {
position: relative;
z-index: 0;
@apply transition;
&:hover {
@apply shadow;
}
}

View File

@ -0,0 +1 @@
@use "./helper.scss";

View File

@ -0,0 +1,5 @@
export interface Feature {
icon?: string
title: string
details: string
}

View File

@ -1,3 +1,5 @@
export * from './home'
export namespace DocsTheme {
export type Config = ThemeConfig
export type Sidebar = any

View File

@ -69,7 +69,7 @@ const YunTwikoo = config.value.comment.waline.enable
</slot>
<slot name="aside">
<YunAside v-if="aside" :frontmatter="frontmatter" :data="data">
<YunAside v-if="aside">
<slot name="aside-custom" />
</YunAside>
</slot>

View File

@ -1,9 +1,10 @@
<script lang="ts" setup>
import { useI18n } from 'vue-i18n'
import type { PageData, Post } from 'valaxy'
import { useData, useFrontmatter } from 'valaxy'
import { useAppStore } from 'valaxy/client/stores/app'
defineProps<{ frontmatter: Post; data: PageData }>()
const frontmatter = useFrontmatter()
const data = useData()
const { t } = useI18n()
const app = useAppStore()
</script>

View File

@ -1,8 +1,8 @@
import { useRoute } from 'vue-router'
import { computed } from 'vue'
import { computed, inject } from 'vue'
import { isClient } from '@vueuse/core'
import type { Post } from '../../types'
import type { PageData, Post } from '../../types'
import { useConfig } from '../config'
export function useFrontmatter() {
@ -12,6 +12,15 @@ export function useFrontmatter() {
return frontmatter
}
/**
* inject pageData
* @returns
*/
export function useData(): PageData {
const value = inject<PageData>('pageData', {} as any)
return value
}
/**
* get full url
*/

View File

@ -48,7 +48,7 @@ export function usePostList(params: {
*/
export function usePageList() {
const router = useRouter()
return computed(() => {
return computed<Post[]>(() => {
const routes = router.getRoutes()
.map((i) => {
return Object.assign({ path: i.path, excerpt: i.meta.excerpt }, i.meta.frontmatter)

View File

@ -1,5 +1,6 @@
import { useFrontmatter } from 'valaxy'
import type { Ref } from 'vue'
import { onMounted, onUnmounted } from 'vue'
import { computed, onMounted, onUnmounted, ref } from 'vue'
export function useActiveSidebarLinks(container: Ref<HTMLElement>, marker: Ref<HTMLElement>) {
const onScroll = throttleAndDebounce(setActiveLink, 200)
@ -111,3 +112,37 @@ function throttleAndDebounce(fn: () => void, delay: number): () => void {
}
}
}
/**
* helper for sidebar
*/
export function useSidebar() {
const isOpen = ref(false)
const fm = useFrontmatter()
const hasSidebar = computed(() => {
return (
fm.value.sidebar !== false
&& fm.value.layout !== 'home'
)
})
function open() {
isOpen.value = true
}
function close() {
isOpen.value = false
}
function toggle() {
isOpen.value ? close() : open()
}
return {
isOpen,
hasSidebar,
open,
close,
toggle,
}
}

View File

@ -2,13 +2,13 @@
import valaxyConfig from '/@valaxyjs/config'
// @ts-expect-error virtual module @valaxyjs/context
import valaxyContext from '/@valaxyjs/context'
import type { ComputedRef, InjectionKey, Ref } from 'vue'
import type { ComputedRef, InjectionKey } from 'vue'
import { computed, inject, readonly, shallowRef } from 'vue'
// import type { RouteMeta } from 'vue-router'
// fix build caused by pnpm
// This is likely not portable. A type annotation is necessary.
// https://github.com/microsoft/TypeScript/issues/42873
import type { PageData, ValaxyConfig } from 'valaxy/types'
import type { ValaxyConfig } from 'valaxy/types'
/**
* parse valaxy config
@ -28,7 +28,6 @@ export const valaxyConfigSymbol: InjectionKey<ComputedRef<ValaxyConfig>> = Symbo
export const valaxyConfigRef = shallowRef<ValaxyConfig>(parse<ValaxyConfig>(valaxyConfig))
export const valaxyContextRef = shallowRef<ValaxyContext>(parse<ValaxyContext>(valaxyContext))
// export const valaxyDataRef = shallowRef<PageData>(parse(valaxyConfig))
// hmr
if (import.meta.hot) {
@ -73,8 +72,3 @@ export function useThemeConfig<T = Record<string, any>>() {
const config = useConfig<T>()
return computed(() => config!.value.themeConfig)
}
export interface ValaxyData<T = any> {
page: Ref<PageData>
theme: Ref<T>
}

View File

@ -168,6 +168,7 @@ export async function createMarkdownToVueRenderFn(
}
}
// provide load
const pageData: PageData = {
title: inferTitle(frontmatter, content),
titleTemplate: frontmatter.titleTemplate,
@ -242,13 +243,16 @@ function genPageDataCode(tags: string[], data: PageData) {
const isUsingTS = tags.findIndex(tag => scriptLangTsRE.test(tag)) > -1
const exportScript = `
import { provide } from 'vue'
const data = ${transformObject(data)}
export default {
name:'${data.relativePath}',
data() {
return {
frontmatter:${transformObject(data.frontmatter)},
data: ${transformObject(data)}
}
return { data, frontmatter: data.frontmatter }
},
setup() {
provide('pageData', data)
}
}`

View File

@ -11,10 +11,11 @@ import Layouts from 'vite-plugin-vue-layouts'
import Components from 'unplugin-vue-components/vite'
import VueI18n from '@intlify/vite-plugin-vue-i18n'
import dayjs from 'dayjs'
import type { ResolvedValaxyOptions, ValaxyPluginOptions, ValaxyServerOptions } from '../options'
import { setupMarkdownPlugins } from '../markdown'
// import { createMarkdownPlugin, excerpt_separator } from './markdown'
import { formatMdDate } from '../utils/date'
// import { formatMdDate } from '../utils/date'
import { createUnocssPlugin } from './unocss'
import { createConfigPlugin } from './extendConfig'
import { createClientSetupPlugin } from './setupClient'
@ -128,13 +129,30 @@ export async function ViteValaxyPlugins(
const { data, excerpt } = matter(md, { excerpt_separator: '<!-- more -->' })
// todo, optimize it to cache or on demand
await formatMdDate(
data,
path,
options.config.date.format,
options.config.lastUpdated,
)
// https://github.com/hannoeru/vite-plugin-pages/issues/257
// returned route not be awaited
// await formatMdDate(
// data,
// path,
// options.config.date.format,
// options.config.lastUpdated,
// )
const lastUpdated = options.config.lastUpdated
const format = options.config.date.format
if (!data.date)
data.date = fs.statSync(path).mtime
// format
data.date = dayjs(data.date).format(format)
if (lastUpdated) {
if (!data.updated)
data.updated = fs.statSync(path).ctime
data.updated = dayjs(data.updated).format(format)
}
// set route meta
route.meta = Object.assign(route.meta, {
frontmatter: Object.assign(defaultFrontmatter, data),
excerpt: excerpt ? mdIt.render(excerpt) : '',

View File

@ -8,7 +8,7 @@ import { getGitTimestamp } from './getGitTimestamp'
* @returns
*/
export async function getCreatedTime(file: string): Promise<Date | number> {
return await getGitTimestamp(file, 'created') || (await fs.stat(file)).ctime
return (await getGitTimestamp(file, 'created')) || (await fs.stat(file)).ctime
}
/**
@ -17,7 +17,7 @@ export async function getCreatedTime(file: string): Promise<Date | number> {
* @returns
*/
export async function getUpdatedTime(file: string): Promise<Date | number> {
return await getGitTimestamp(file, 'created') || (await fs.stat(file)).mtime
return (await getGitTimestamp(file, 'created')) || (await fs.stat(file)).mtime
}
export async function formatMdDate(data: any, path: string, format = 'YYYY-MM-DD HH:mm:ss', lastUpdated = true) {

View File

@ -80,7 +80,7 @@
"is-installed-globally": "^0.4.0",
"katex": "^0.16.0",
"kolorist": "^1.5.1",
"lru-cache": "^7.12.0",
"lru-cache": "^7.13.0",
"markdown-it": "^13.0.1",
"markdown-it-anchor": "^8.6.4",
"markdown-it-attrs": "^4.1.4",
@ -91,7 +91,7 @@
"markdown-it-task-lists": "^2.1.1",
"nprogress": "^0.2.0",
"open": "^8.4.0",
"pinia": "^2.0.15",
"pinia": "^2.0.16",
"sass": "^1.53.0",
"shiki": "^0.10.1",
"star-markdown-css": "^0.4.0",

View File

@ -16,7 +16,7 @@ importers:
rimraf: ^3.0.2
simple-git-hooks: ^2.8.0
tsup: ^6.1.3
tsx: ^3.7.1
tsx: ^3.8.0
typescript: ^4.7.4
valaxy: workspace:*
valaxy-theme-press: workspace:*
@ -37,7 +37,7 @@ importers:
rimraf: 3.0.2
simple-git-hooks: 2.8.0
tsup: 6.1.3_typescript@4.7.4
tsx: 3.7.1
tsx: 3.8.0
typescript: 4.7.4
valaxy: link:packages/valaxy
valaxy-theme-press: link:packages/valaxy-theme-press
@ -119,7 +119,7 @@ importers:
is-installed-globally: ^0.4.0
katex: ^0.16.0
kolorist: ^1.5.1
lru-cache: ^7.12.0
lru-cache: ^7.13.0
markdown-it: ^13.0.1
markdown-it-anchor: ^8.6.4
markdown-it-attrs: ^4.1.4
@ -130,7 +130,7 @@ importers:
markdown-it-task-lists: ^2.1.1
nprogress: ^0.2.0
open: ^8.4.0
pinia: ^2.0.15
pinia: ^2.0.16
sass: ^1.53.0
shiki: ^0.10.1
star-markdown-css: ^0.4.0
@ -167,7 +167,7 @@ importers:
is-installed-globally: 0.4.0
katex: 0.16.0
kolorist: 1.5.1
lru-cache: 7.12.0
lru-cache: 7.13.0
markdown-it: 13.0.1
markdown-it-anchor: 8.6.4_ea7kj7wzjkld5jo2noyjqxi764
markdown-it-attrs: 4.1.4_markdown-it@13.0.1
@ -178,7 +178,7 @@ importers:
markdown-it-task-lists: 2.1.1
nprogress: 0.2.0
open: 8.4.0
pinia: 2.0.15_vue@3.2.37
pinia: 2.0.16_vue@3.2.37
sass: 1.53.0
shiki: 0.10.1
star-markdown-css: 0.4.0
@ -1697,24 +1697,24 @@ packages:
- '@algolia/client-search'
dev: false
/@esbuild-kit/cjs-loader/2.3.0:
resolution: {integrity: sha512-KInrVt8wlKLhWy7+y4a+E+0uBJoWgdx6Xupy+rrF4MFHA/dEt22ACvvChOZSyiqtQieYPtbPkVYSjbC7mOrFVw==}
/@esbuild-kit/cjs-loader/2.3.1:
resolution: {integrity: sha512-ov6ALYD9xZSPoo5mmGOQtEC/b0xXeUlPy65p8aHMHLF4DfBEe8Y+iquH2lTDsy6Iskc1uMTadF+SVADTSTNJMA==}
dependencies:
'@esbuild-kit/core-utils': 2.0.2
'@esbuild-kit/core-utils': 2.1.0
get-tsconfig: 4.1.0
dev: true
/@esbuild-kit/core-utils/2.0.2:
resolution: {integrity: sha512-clNYQUsqtc36pzW5EufMsahcbLG45EaW3YDyf0DlaS0eCMkDXpxIlHwPC0rndUwG6Ytk9sMSD5k1qHbwYEC/OQ==}
/@esbuild-kit/core-utils/2.1.0:
resolution: {integrity: sha512-fZirrc2KjeTumVjE4bpleWOk2gD83b7WuGeQqOceKFQL+heNKKkNB5G5pekOUTLzfSBc0hP7hCSBoD9TuR0hLw==}
dependencies:
esbuild: 0.14.48
esbuild: 0.14.49
source-map-support: 0.5.21
dev: true
/@esbuild-kit/esm-loader/2.4.0:
resolution: {integrity: sha512-zS720jXh06nfg5yAzm6oob4sWN9VTP2E1SonhFgEb6zCBswa4S8fOQ/4Bksz1flDgn56NPqoTTDn2XmWRyMG9Q==}
/@esbuild-kit/esm-loader/2.4.1:
resolution: {integrity: sha512-6x44rygVfNODm27v0RW3wX5y61mqSrXDvB39G0nomgWWqxG3mjiKtPSwrFppdkrA39QIqDgVlD4gJmPOxnleSw==}
dependencies:
'@esbuild-kit/core-utils': 2.0.2
'@esbuild-kit/core-utils': 2.1.0
get-tsconfig: 4.1.0
dev: true
@ -2565,6 +2565,10 @@ packages:
resolution: {integrity: sha512-pF1G4wky+hkifDiZSWn8xfuLOJI1ZXtuambpBEYaf7Xaf6zC/pM29rvAGpd3qaGXnr4BAXU1Pxz/VfvBGwexGA==}
dev: false
/@vue/devtools-api/6.2.1:
resolution: {integrity: sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==}
dev: false
/@vue/reactivity-transform/3.2.33:
resolution: {integrity: sha512-4UL5KOIvSQb254aqenW4q34qMXbfZcmEsV/yVidLUgvwYQQ/D21bGX3DlgPUGI3c4C+iOnNmDCkIxkILoX/Pyw==}
dependencies:
@ -3744,6 +3748,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-android-64/0.14.49:
resolution: {integrity: sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
requiresBuild: true
dev: true
optional: true
/esbuild-android-arm64/0.14.48:
resolution: {integrity: sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g==}
engines: {node: '>=12'}
@ -3752,6 +3765,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-android-arm64/0.14.49:
resolution: {integrity: sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
/esbuild-darwin-64/0.14.48:
resolution: {integrity: sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA==}
engines: {node: '>=12'}
@ -3760,6 +3782,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-darwin-64/0.14.49:
resolution: {integrity: sha512-3rvqnBCtX9ywso5fCHixt2GBCUsogNp9DjGmvbBohh31Ces34BVzFltMSxJpacNki96+WIcX5s/vum+ckXiLYg==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/esbuild-darwin-arm64/0.14.48:
resolution: {integrity: sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA==}
engines: {node: '>=12'}
@ -3768,6 +3799,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-darwin-arm64/0.14.49:
resolution: {integrity: sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/esbuild-freebsd-64/0.14.48:
resolution: {integrity: sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA==}
engines: {node: '>=12'}
@ -3776,6 +3816,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-freebsd-64/0.14.49:
resolution: {integrity: sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/esbuild-freebsd-arm64/0.14.48:
resolution: {integrity: sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw==}
engines: {node: '>=12'}
@ -3784,6 +3833,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-freebsd-arm64/0.14.49:
resolution: {integrity: sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-32/0.14.48:
resolution: {integrity: sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ==}
engines: {node: '>=12'}
@ -3792,6 +3850,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-linux-32/0.14.49:
resolution: {integrity: sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-64/0.14.48:
resolution: {integrity: sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug==}
engines: {node: '>=12'}
@ -3800,6 +3867,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-linux-64/0.14.49:
resolution: {integrity: sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-arm/0.14.48:
resolution: {integrity: sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw==}
engines: {node: '>=12'}
@ -3808,6 +3884,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-linux-arm/0.14.49:
resolution: {integrity: sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-arm64/0.14.48:
resolution: {integrity: sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw==}
engines: {node: '>=12'}
@ -3816,6 +3901,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-linux-arm64/0.14.49:
resolution: {integrity: sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-mips64le/0.14.48:
resolution: {integrity: sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA==}
engines: {node: '>=12'}
@ -3824,6 +3918,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-linux-mips64le/0.14.49:
resolution: {integrity: sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-ppc64le/0.14.48:
resolution: {integrity: sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ==}
engines: {node: '>=12'}
@ -3832,6 +3935,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-linux-ppc64le/0.14.49:
resolution: {integrity: sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-riscv64/0.14.48:
resolution: {integrity: sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA==}
engines: {node: '>=12'}
@ -3840,6 +3952,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-linux-riscv64/0.14.49:
resolution: {integrity: sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-s390x/0.14.48:
resolution: {integrity: sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g==}
engines: {node: '>=12'}
@ -3848,6 +3969,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-linux-s390x/0.14.49:
resolution: {integrity: sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-netbsd-64/0.14.48:
resolution: {integrity: sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw==}
engines: {node: '>=12'}
@ -3856,6 +3986,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-netbsd-64/0.14.49:
resolution: {integrity: sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
requiresBuild: true
dev: true
optional: true
/esbuild-openbsd-64/0.14.48:
resolution: {integrity: sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA==}
engines: {node: '>=12'}
@ -3864,6 +4003,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-openbsd-64/0.14.49:
resolution: {integrity: sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
requiresBuild: true
dev: true
optional: true
/esbuild-sunos-64/0.14.48:
resolution: {integrity: sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA==}
engines: {node: '>=12'}
@ -3872,6 +4020,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-sunos-64/0.14.49:
resolution: {integrity: sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
requiresBuild: true
dev: true
optional: true
/esbuild-windows-32/0.14.48:
resolution: {integrity: sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg==}
engines: {node: '>=12'}
@ -3880,6 +4037,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-windows-32/0.14.49:
resolution: {integrity: sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/esbuild-windows-64/0.14.48:
resolution: {integrity: sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA==}
engines: {node: '>=12'}
@ -3888,6 +4054,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-windows-64/0.14.49:
resolution: {integrity: sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/esbuild-windows-arm64/0.14.48:
resolution: {integrity: sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==}
engines: {node: '>=12'}
@ -3896,6 +4071,15 @@ packages:
requiresBuild: true
optional: true
/esbuild-windows-arm64/0.14.49:
resolution: {integrity: sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/esbuild/0.14.48:
resolution: {integrity: sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==}
engines: {node: '>=12'}
@ -3923,6 +4107,34 @@ packages:
esbuild-windows-64: 0.14.48
esbuild-windows-arm64: 0.14.48
/esbuild/0.14.49:
resolution: {integrity: sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
esbuild-android-64: 0.14.49
esbuild-android-arm64: 0.14.49
esbuild-darwin-64: 0.14.49
esbuild-darwin-arm64: 0.14.49
esbuild-freebsd-64: 0.14.49
esbuild-freebsd-arm64: 0.14.49
esbuild-linux-32: 0.14.49
esbuild-linux-64: 0.14.49
esbuild-linux-arm: 0.14.49
esbuild-linux-arm64: 0.14.49
esbuild-linux-mips64le: 0.14.49
esbuild-linux-ppc64le: 0.14.49
esbuild-linux-riscv64: 0.14.49
esbuild-linux-s390x: 0.14.49
esbuild-netbsd-64: 0.14.49
esbuild-openbsd-64: 0.14.49
esbuild-sunos-64: 0.14.49
esbuild-windows-32: 0.14.49
esbuild-windows-64: 0.14.49
esbuild-windows-arm64: 0.14.49
dev: true
/escalade/3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'}
@ -5591,8 +5803,8 @@ packages:
yallist: 4.0.0
dev: true
/lru-cache/7.12.0:
resolution: {integrity: sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==}
/lru-cache/7.13.0:
resolution: {integrity: sha512-SNFKDOORR41fkWP3DXiIUvXvfzDRPg3bxD1+29iRyP2ZW+Njp2o6zhx9YkEpq1tbP0AEDNW2VBUedzDIxmNhdg==}
engines: {node: '>=12'}
dev: false
@ -6233,8 +6445,8 @@ packages:
hasBin: true
dev: true
/pinia/2.0.15_vue@3.2.37:
resolution: {integrity: sha512-qkIvXdGWMbnc3UG3l8rn9SV4nE2H4I2R/exZcdn/0pDzjaKQmMUsBXlIurfKu62VJsjETkqss46NP/c88NnjYQ==}
/pinia/2.0.16_vue@3.2.37:
resolution: {integrity: sha512-9/LMVO+/epny1NBfC77vnps4g3JRezxhhoF1xLUk8mZkUIxVnwfEAIRiAX8mYBTD/KCwZqnDMqXc8w3eU0FQGg==}
peerDependencies:
'@vue/composition-api': ^1.4.0
typescript: '>=4.4.4'
@ -6245,9 +6457,9 @@ packages:
typescript:
optional: true
dependencies:
'@vue/devtools-api': 6.2.0
'@vue/devtools-api': 6.2.1
vue: 3.2.37
vue-demi: 0.13.2_vue@3.2.37
vue-demi: 0.13.4_vue@3.2.37
dev: false
/pirates/4.0.5:
@ -7253,13 +7465,13 @@ packages:
typescript: 4.7.4
dev: true
/tsx/3.7.1:
resolution: {integrity: sha512-dwl1GBdkwVQ9zRxTmETGi+ck8pewNm2QXh+HK6jHxdHmeCjfCL+Db3b4VX/dOMDSS2hle1j5LzQoo8OpVXu6XQ==}
/tsx/3.8.0:
resolution: {integrity: sha512-PcvTwRXTm6hDWfPihA4n5WW/9SmgFNxKaDKqvLLG+FKNEPA4crsipChzC7PVozPtdOaMfR5QctDlkC/hKoIsxw==}
hasBin: true
dependencies:
'@esbuild-kit/cjs-loader': 2.3.0
'@esbuild-kit/core-utils': 2.0.2
'@esbuild-kit/esm-loader': 2.4.0
'@esbuild-kit/cjs-loader': 2.3.1
'@esbuild-kit/core-utils': 2.1.0
'@esbuild-kit/esm-loader': 2.4.1
optionalDependencies:
fsevents: 2.3.2
dev: true
@ -7765,6 +7977,7 @@ packages:
optional: true
dependencies:
vue: 3.2.37
dev: true
/vue-demi/0.13.4_vue@3.2.37:
resolution: {integrity: sha512-KP4lq9uSz0KZbaqCllRhnxMV3mYRsRWJfdsAhZyt5bV5O1RTpoeDptBRV9NOa/JgOpfaA9ane88VF7OjWNK/DA==}