1
This commit is contained in:
43
docs/.vitepress/cache/deps/_metadata.json
vendored
Normal file
43
docs/.vitepress/cache/deps/_metadata.json
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"hash": "0daa58b8",
|
||||
"configHash": "a23338b4",
|
||||
"lockfileHash": "179ea88f",
|
||||
"browserHash": "6f87fcc3",
|
||||
"optimized": {
|
||||
"vue": {
|
||||
"src": "../../../../node_modules/vue/dist/vue.runtime.esm-bundler.js",
|
||||
"file": "vue.js",
|
||||
"fileHash": "69e73e5b",
|
||||
"needsInterop": false
|
||||
},
|
||||
"vitepress > @vue/devtools-api": {
|
||||
"src": "../../../../node_modules/vitepress/node_modules/@vue/devtools-api/dist/index.js",
|
||||
"file": "vitepress___@vue_devtools-api.js",
|
||||
"fileHash": "9a76c491",
|
||||
"needsInterop": false
|
||||
},
|
||||
"vitepress > @vueuse/core": {
|
||||
"src": "../../../../node_modules/@vueuse/core/index.mjs",
|
||||
"file": "vitepress___@vueuse_core.js",
|
||||
"fileHash": "4bc31a77",
|
||||
"needsInterop": false
|
||||
},
|
||||
"pinia": {
|
||||
"src": "../../../../node_modules/pinia/dist/pinia.mjs",
|
||||
"file": "pinia.js",
|
||||
"fileHash": "3af78da8",
|
||||
"needsInterop": false
|
||||
},
|
||||
"pinia-plugin-persistedstate": {
|
||||
"src": "../../../../node_modules/pinia-plugin-persistedstate/dist/index.js",
|
||||
"file": "pinia-plugin-persistedstate.js",
|
||||
"fileHash": "d77b5825",
|
||||
"needsInterop": false
|
||||
}
|
||||
},
|
||||
"chunks": {
|
||||
"chunk-SNNOYR6U": {
|
||||
"file": "chunk-SNNOYR6U.js"
|
||||
}
|
||||
}
|
||||
}
|
||||
137
docs/.vitepress/cache/deps/pinia-plugin-persistedstate.js
vendored
Normal file
137
docs/.vitepress/cache/deps/pinia-plugin-persistedstate.js
vendored
Normal file
@@ -0,0 +1,137 @@
|
||||
// node_modules/pinia-plugin-persistedstate/dist/index.js
|
||||
function isObject(v) {
|
||||
return typeof v === "object" && v !== null;
|
||||
}
|
||||
function normalizeOptions(options, factoryOptions) {
|
||||
options = isObject(options) ? options : /* @__PURE__ */ Object.create(null);
|
||||
return new Proxy(options, {
|
||||
get(target, key, receiver) {
|
||||
if (key === "key")
|
||||
return Reflect.get(target, key, receiver);
|
||||
return Reflect.get(target, key, receiver) || Reflect.get(factoryOptions, key, receiver);
|
||||
}
|
||||
});
|
||||
}
|
||||
function get(state, path) {
|
||||
return path.reduce((obj, p) => {
|
||||
return obj == null ? void 0 : obj[p];
|
||||
}, state);
|
||||
}
|
||||
function set(state, path, val) {
|
||||
return path.slice(0, -1).reduce((obj, p) => {
|
||||
if (/^(__proto__)$/.test(p))
|
||||
return {};
|
||||
else return obj[p] = obj[p] || {};
|
||||
}, state)[path[path.length - 1]] = val, state;
|
||||
}
|
||||
function pick(baseState, paths) {
|
||||
return paths.reduce((substate, path) => {
|
||||
const pathArray = path.split(".");
|
||||
return set(substate, pathArray, get(baseState, pathArray));
|
||||
}, {});
|
||||
}
|
||||
function parsePersistence(factoryOptions, store) {
|
||||
return (o) => {
|
||||
var _a;
|
||||
try {
|
||||
const {
|
||||
storage = localStorage,
|
||||
beforeRestore = void 0,
|
||||
afterRestore = void 0,
|
||||
serializer = {
|
||||
serialize: JSON.stringify,
|
||||
deserialize: JSON.parse
|
||||
},
|
||||
key = store.$id,
|
||||
paths = null,
|
||||
debug = false
|
||||
} = o;
|
||||
return {
|
||||
storage,
|
||||
beforeRestore,
|
||||
afterRestore,
|
||||
serializer,
|
||||
key: ((_a = factoryOptions.key) != null ? _a : (k) => k)(typeof key == "string" ? key : key(store.$id)),
|
||||
paths,
|
||||
debug
|
||||
};
|
||||
} catch (e) {
|
||||
if (o.debug)
|
||||
console.error("[pinia-plugin-persistedstate]", e);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
}
|
||||
function hydrateStore(store, { storage, serializer, key, debug }) {
|
||||
try {
|
||||
const fromStorage = storage == null ? void 0 : storage.getItem(key);
|
||||
if (fromStorage)
|
||||
store.$patch(serializer == null ? void 0 : serializer.deserialize(fromStorage));
|
||||
} catch (e) {
|
||||
if (debug)
|
||||
console.error("[pinia-plugin-persistedstate]", e);
|
||||
}
|
||||
}
|
||||
function persistState(state, { storage, serializer, key, paths, debug }) {
|
||||
try {
|
||||
const toStore = Array.isArray(paths) ? pick(state, paths) : state;
|
||||
storage.setItem(key, serializer.serialize(toStore));
|
||||
} catch (e) {
|
||||
if (debug)
|
||||
console.error("[pinia-plugin-persistedstate]", e);
|
||||
}
|
||||
}
|
||||
function createPersistedState(factoryOptions = {}) {
|
||||
return (context) => {
|
||||
const { auto = false } = factoryOptions;
|
||||
const {
|
||||
options: { persist = auto },
|
||||
store,
|
||||
pinia
|
||||
} = context;
|
||||
if (!persist)
|
||||
return;
|
||||
if (!(store.$id in pinia.state.value)) {
|
||||
const original_store = pinia._s.get(store.$id.replace("__hot:", ""));
|
||||
if (original_store)
|
||||
Promise.resolve().then(() => original_store.$persist());
|
||||
return;
|
||||
}
|
||||
const persistences = (Array.isArray(persist) ? persist.map((p) => normalizeOptions(p, factoryOptions)) : [normalizeOptions(persist, factoryOptions)]).map(parsePersistence(factoryOptions, store)).filter(Boolean);
|
||||
store.$persist = () => {
|
||||
persistences.forEach((persistence) => {
|
||||
persistState(store.$state, persistence);
|
||||
});
|
||||
};
|
||||
store.$hydrate = ({ runHooks = true } = {}) => {
|
||||
persistences.forEach((persistence) => {
|
||||
const { beforeRestore, afterRestore } = persistence;
|
||||
if (runHooks)
|
||||
beforeRestore == null ? void 0 : beforeRestore(context);
|
||||
hydrateStore(store, persistence);
|
||||
if (runHooks)
|
||||
afterRestore == null ? void 0 : afterRestore(context);
|
||||
});
|
||||
};
|
||||
persistences.forEach((persistence) => {
|
||||
const { beforeRestore, afterRestore } = persistence;
|
||||
beforeRestore == null ? void 0 : beforeRestore(context);
|
||||
hydrateStore(store, persistence);
|
||||
afterRestore == null ? void 0 : afterRestore(context);
|
||||
store.$subscribe(
|
||||
(_mutation, state) => {
|
||||
persistState(state, persistence);
|
||||
},
|
||||
{
|
||||
detached: true
|
||||
}
|
||||
);
|
||||
});
|
||||
};
|
||||
}
|
||||
var src_default = createPersistedState();
|
||||
export {
|
||||
createPersistedState,
|
||||
src_default as default
|
||||
};
|
||||
//# sourceMappingURL=pinia-plugin-persistedstate.js.map
|
||||
7
docs/.vitepress/cache/deps/pinia-plugin-persistedstate.js.map
vendored
Normal file
7
docs/.vitepress/cache/deps/pinia-plugin-persistedstate.js.map
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../../../node_modules/pinia-plugin-persistedstate/dist/index.js"],
|
||||
"sourcesContent": ["// src/normalize.ts\nfunction isObject(v) {\n return typeof v === \"object\" && v !== null;\n}\nfunction normalizeOptions(options, factoryOptions) {\n options = isObject(options) ? options : /* @__PURE__ */ Object.create(null);\n return new Proxy(options, {\n get(target, key, receiver) {\n if (key === \"key\")\n return Reflect.get(target, key, receiver);\n return Reflect.get(target, key, receiver) || Reflect.get(factoryOptions, key, receiver);\n }\n });\n}\n\n// src/pick.ts\nfunction get(state, path) {\n return path.reduce((obj, p) => {\n return obj == null ? void 0 : obj[p];\n }, state);\n}\nfunction set(state, path, val) {\n return path.slice(0, -1).reduce((obj, p) => {\n if (/^(__proto__)$/.test(p))\n return {};\n else return obj[p] = obj[p] || {};\n }, state)[path[path.length - 1]] = val, state;\n}\nfunction pick(baseState, paths) {\n return paths.reduce((substate, path) => {\n const pathArray = path.split(\".\");\n return set(substate, pathArray, get(baseState, pathArray));\n }, {});\n}\n\n// src/plugin.ts\nfunction parsePersistence(factoryOptions, store) {\n return (o) => {\n var _a;\n try {\n const {\n storage = localStorage,\n beforeRestore = void 0,\n afterRestore = void 0,\n serializer = {\n serialize: JSON.stringify,\n deserialize: JSON.parse\n },\n key = store.$id,\n paths = null,\n debug = false\n } = o;\n return {\n storage,\n beforeRestore,\n afterRestore,\n serializer,\n key: ((_a = factoryOptions.key) != null ? _a : (k) => k)(typeof key == \"string\" ? key : key(store.$id)),\n paths,\n debug\n };\n } catch (e) {\n if (o.debug)\n console.error(\"[pinia-plugin-persistedstate]\", e);\n return null;\n }\n };\n}\nfunction hydrateStore(store, { storage, serializer, key, debug }) {\n try {\n const fromStorage = storage == null ? void 0 : storage.getItem(key);\n if (fromStorage)\n store.$patch(serializer == null ? void 0 : serializer.deserialize(fromStorage));\n } catch (e) {\n if (debug)\n console.error(\"[pinia-plugin-persistedstate]\", e);\n }\n}\nfunction persistState(state, { storage, serializer, key, paths, debug }) {\n try {\n const toStore = Array.isArray(paths) ? pick(state, paths) : state;\n storage.setItem(key, serializer.serialize(toStore));\n } catch (e) {\n if (debug)\n console.error(\"[pinia-plugin-persistedstate]\", e);\n }\n}\nfunction createPersistedState(factoryOptions = {}) {\n return (context) => {\n const { auto = false } = factoryOptions;\n const {\n options: { persist = auto },\n store,\n pinia\n } = context;\n if (!persist)\n return;\n if (!(store.$id in pinia.state.value)) {\n const original_store = pinia._s.get(store.$id.replace(\"__hot:\", \"\"));\n if (original_store)\n Promise.resolve().then(() => original_store.$persist());\n return;\n }\n const persistences = (Array.isArray(persist) ? persist.map((p) => normalizeOptions(p, factoryOptions)) : [normalizeOptions(persist, factoryOptions)]).map(parsePersistence(factoryOptions, store)).filter(Boolean);\n store.$persist = () => {\n persistences.forEach((persistence) => {\n persistState(store.$state, persistence);\n });\n };\n store.$hydrate = ({ runHooks = true } = {}) => {\n persistences.forEach((persistence) => {\n const { beforeRestore, afterRestore } = persistence;\n if (runHooks)\n beforeRestore == null ? void 0 : beforeRestore(context);\n hydrateStore(store, persistence);\n if (runHooks)\n afterRestore == null ? void 0 : afterRestore(context);\n });\n };\n persistences.forEach((persistence) => {\n const { beforeRestore, afterRestore } = persistence;\n beforeRestore == null ? void 0 : beforeRestore(context);\n hydrateStore(store, persistence);\n afterRestore == null ? void 0 : afterRestore(context);\n store.$subscribe(\n (_mutation, state) => {\n persistState(state, persistence);\n },\n {\n detached: true\n }\n );\n });\n };\n}\n\n// src/index.ts\nvar src_default = createPersistedState();\nexport {\n createPersistedState,\n src_default as default\n};\n"],
|
||||
"mappings": "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",
|
||||
"names": []
|
||||
}
|
||||
1715
docs/.vitepress/cache/deps/pinia.js
vendored
Normal file
1715
docs/.vitepress/cache/deps/pinia.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
7
docs/.vitepress/cache/deps/pinia.js.map
vendored
Normal file
7
docs/.vitepress/cache/deps/pinia.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -12,6 +12,7 @@ import TaoXin from './components/TaoXin.vue'
|
||||
import Cafe from './components/Cafe.vue'
|
||||
import Settings from './components/Settings.vue'
|
||||
import DocSidebar from './components/DocSidebar.vue'
|
||||
import sidebarData from './data/sidebar.json'
|
||||
|
||||
const { frontmatter } = useData()
|
||||
const settingsStore = useSettingsStore()
|
||||
@@ -23,6 +24,13 @@ const isHome = computed(() => frontmatter.value.home === true)
|
||||
const blurAmount = computed(() => settingsStore.theme.blurAmount ?? 20)
|
||||
const backgroundColor = computed(() => settingsStore.theme.backgroundColor ?? 'rgba(30, 30, 30, 0.7)')
|
||||
|
||||
const navItems = computed(() => {
|
||||
return sidebarData.map(group => ({
|
||||
text: group.title,
|
||||
link: group.path
|
||||
}))
|
||||
})
|
||||
|
||||
const handleResize = () => {
|
||||
settingsStore.setMobile(isMobileDevice())
|
||||
}
|
||||
@@ -69,8 +77,14 @@ onUnmounted(() => {
|
||||
<a href="/" class="logo">乌仿镇</a>
|
||||
<nav class="doc-nav">
|
||||
<a href="/" class="nav-link">首页</a>
|
||||
<a href="/java/" class="nav-link">Java</a>
|
||||
<a href="/vue/" class="nav-link">Vue</a>
|
||||
<a
|
||||
v-for="item in navItems"
|
||||
:key="item.link"
|
||||
:href="item.link"
|
||||
class="nav-link"
|
||||
>
|
||||
{{ item.text }}
|
||||
</a>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
|
||||
@@ -1,41 +1,20 @@
|
||||
<script setup lang="ts">
|
||||
import { computed } from 'vue'
|
||||
import { useData } from 'vitepress'
|
||||
import sidebarData from '../data/sidebar.json'
|
||||
|
||||
const { page } = useData()
|
||||
|
||||
const sidebarItems = {
|
||||
'/java/': [
|
||||
{ text: '概述', link: '/java/' },
|
||||
{ text: '基础语法', link: '/java/basic' },
|
||||
{ text: '面向对象', link: '/java/oop' },
|
||||
{ text: '集合框架', link: '/java/collection' },
|
||||
{ text: '多线程', link: '/java/thread' }
|
||||
],
|
||||
'/vue/': [
|
||||
{ text: '概述', link: '/vue/' },
|
||||
{ text: 'Vue3基础', link: '/vue/basic' },
|
||||
{ text: '组件开发', link: '/vue/component' },
|
||||
{ text: '组合式API', link: '/vue/composition' },
|
||||
{ text: '状态管理', link: '/vue/pinia' }
|
||||
]
|
||||
}
|
||||
|
||||
function getCurrentSidebar() {
|
||||
const currentSidebar = computed(() => {
|
||||
const path = page.value.relativePath
|
||||
for (const [prefix, items] of Object.entries(sidebarItems)) {
|
||||
if (path.startsWith(prefix.replace(/^\//, ''))) {
|
||||
return { title: prefix === '/java/' ? 'Java 笔记' : 'Vue 笔记', items }
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
const currentSidebar = getCurrentSidebar()
|
||||
const pathPrefix = path.split('/')[0]
|
||||
return sidebarData.find(group => group.path === `/${pathPrefix}/`)
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="sidebar" v-if="currentSidebar">
|
||||
<h2 class="sidebar-title">{{ currentSidebar.title }}</h2>
|
||||
<h2 class="sidebar-title">{{ currentSidebar.title }} 笔记</h2>
|
||||
<ul class="sidebar-list">
|
||||
<li v-for="item in currentSidebar.items" :key="item.link">
|
||||
<a :href="item.link" class="sidebar-link">{{ item.text }}</a>
|
||||
|
||||
11
docs/.vitepress/theme/data/sidebar.d.ts
vendored
Normal file
11
docs/.vitepress/theme/data/sidebar.d.ts
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
declare module '*.json' {
|
||||
const value: {
|
||||
title: string
|
||||
path: string
|
||||
items: {
|
||||
text: string
|
||||
link: string
|
||||
}[]
|
||||
}[]
|
||||
export default value
|
||||
}
|
||||
64
docs/.vitepress/theme/data/sidebar.json
Normal file
64
docs/.vitepress/theme/data/sidebar.json
Normal file
@@ -0,0 +1,64 @@
|
||||
[
|
||||
{
|
||||
"title": "java",
|
||||
"path": "/java/",
|
||||
"items": [
|
||||
{
|
||||
"text": "概述",
|
||||
"link": "/java/"
|
||||
},
|
||||
{
|
||||
"text": "Java基础语法",
|
||||
"link": "/java/basic"
|
||||
},
|
||||
{
|
||||
"text": "集合框架",
|
||||
"link": "/java/collection"
|
||||
},
|
||||
{
|
||||
"text": "面向对象编程",
|
||||
"link": "/java/oop"
|
||||
},
|
||||
{
|
||||
"text": "多线程编程",
|
||||
"link": "/java/thread"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "vue",
|
||||
"path": "/vue/",
|
||||
"items": [
|
||||
{
|
||||
"text": "概述",
|
||||
"link": "/vue/"
|
||||
},
|
||||
{
|
||||
"text": "Vue3基础",
|
||||
"link": "/vue/basic"
|
||||
},
|
||||
{
|
||||
"text": "组件开发",
|
||||
"link": "/vue/component"
|
||||
},
|
||||
{
|
||||
"text": "组合式API",
|
||||
"link": "/vue/composition"
|
||||
},
|
||||
{
|
||||
"text": "状态管理",
|
||||
"link": "/vue/pinia"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "杂谈",
|
||||
"path": "/杂谈/",
|
||||
"items": [
|
||||
{
|
||||
"text": "概述",
|
||||
"link": "/杂谈/"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,2 @@
|
||||
# 123
|
||||
1231
|
||||
@@ -12,14 +12,11 @@ interface SidebarItem {
|
||||
}
|
||||
|
||||
interface SidebarGroup {
|
||||
text: string
|
||||
title: string
|
||||
path: string
|
||||
items: SidebarItem[]
|
||||
}
|
||||
|
||||
interface SidebarConfig {
|
||||
[path: string]: SidebarGroup[]
|
||||
}
|
||||
|
||||
function getTitleFromFile(filePath: string): string {
|
||||
const content = fs.readFileSync(filePath, 'utf-8')
|
||||
|
||||
@@ -57,8 +54,8 @@ function getSidebarOrder(filePath: string, fileName: string): number {
|
||||
return 999
|
||||
}
|
||||
|
||||
function generateSidebar(): SidebarConfig {
|
||||
const sidebar: SidebarConfig = {}
|
||||
function generateSidebar(): SidebarGroup[] {
|
||||
const sidebar: SidebarGroup[] = []
|
||||
|
||||
const entries = fs.readdirSync(docsDir, { withFileTypes: true })
|
||||
|
||||
@@ -94,78 +91,30 @@ function generateSidebar(): SidebarConfig {
|
||||
}
|
||||
})
|
||||
|
||||
const dirName = entry.name.charAt(0).toUpperCase() + entry.name.slice(1)
|
||||
|
||||
sidebar[`/${entry.name}/`] = [
|
||||
{
|
||||
text: `${dirName} 笔记`,
|
||||
sidebar.push({
|
||||
title: entry.name,
|
||||
path: `/${entry.name}/`,
|
||||
items
|
||||
}
|
||||
]
|
||||
})
|
||||
}
|
||||
|
||||
return sidebar
|
||||
}
|
||||
|
||||
function generateNav(sidebar: SidebarConfig) {
|
||||
return Object.keys(sidebar).map(p => {
|
||||
const name = p.replace(/\//g, '').charAt(0).toUpperCase() + p.replace(/\//g, '').slice(1)
|
||||
return {
|
||||
text: name,
|
||||
link: p
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function formatObject(obj: unknown, indent: number = 0): string {
|
||||
const spaces = ' '.repeat(indent)
|
||||
const innerSpaces = ' '.repeat(indent + 2)
|
||||
|
||||
if (Array.isArray(obj)) {
|
||||
if (obj.length === 0) return '[]'
|
||||
const items = obj.map(item => formatObject(item, indent + 2))
|
||||
return `[\n${items.map(i => innerSpaces + i).join(',\n')}\n${spaces}]`
|
||||
}
|
||||
|
||||
if (typeof obj === 'object' && obj !== null) {
|
||||
const entries = Object.entries(obj)
|
||||
if (entries.length === 0) return '{}'
|
||||
const items = entries.map(([key, value]) => {
|
||||
const formattedValue = formatObject(value, indent + 2)
|
||||
return `${innerSpaces}'${key}': ${formattedValue}`
|
||||
})
|
||||
return `{\n${items.join(',\n')}\n${spaces}}`
|
||||
}
|
||||
|
||||
if (typeof obj === 'string') {
|
||||
return `'${obj}'`
|
||||
}
|
||||
|
||||
return String(obj)
|
||||
}
|
||||
|
||||
function updateConfig() {
|
||||
const sidebar = generateSidebar()
|
||||
const nav = generateNav(sidebar)
|
||||
|
||||
const configPath = path.resolve(__dirname, '../docs/.vitepress/config.mts')
|
||||
let config = fs.readFileSync(configPath, 'utf-8')
|
||||
const outputPath = path.resolve(__dirname, '../docs/.vitepress/theme/data/sidebar.json')
|
||||
const outputDir = path.dirname(outputPath)
|
||||
|
||||
const sidebarStr = formatObject(sidebar, 4)
|
||||
const navStr = formatObject(nav, 4)
|
||||
if (!fs.existsSync(outputDir)) {
|
||||
fs.mkdirSync(outputDir, { recursive: true })
|
||||
}
|
||||
|
||||
const sidebarRegex = /sidebar:\s*\{\s*\n\s*\}/
|
||||
const navRegex = /nav:\s*\[\s*\n\s*\]/
|
||||
fs.writeFileSync(outputPath, JSON.stringify(sidebar, null, 2))
|
||||
|
||||
config = config.replace(sidebarRegex, `sidebar: ${sidebarStr}`)
|
||||
config = config.replace(navRegex, `nav: ${navStr}`)
|
||||
|
||||
fs.writeFileSync(configPath, config)
|
||||
|
||||
console.log('Sidebar config updated:')
|
||||
console.log('Sidebar JSON generated:')
|
||||
console.log(JSON.stringify(sidebar, null, 2))
|
||||
console.log('\nNav config updated:')
|
||||
console.log(JSON.stringify(nav, null, 2))
|
||||
}
|
||||
|
||||
updateConfig()
|
||||
|
||||
Reference in New Issue
Block a user