From 9737e9810c03396752b442f982fd5fe08657854d Mon Sep 17 00:00:00 2001 From: pengzhanbo Date: Fri, 4 Nov 2022 21:07:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E6=9E=84=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + .../plugin-baidu-tongji/tsconfig.build.json | 3 +- .../plugin-blog-data/src/client/config.ts | 1 - packages/plugin-blog-data/src/node/index.ts | 2 +- packages/plugin-blog-data/src/node/plugin.ts | 9 +++ .../plugin-windicss/src/client/config.vite.ts | 1 + packages/plugin-windicss/src/node/plugin.ts | 5 +- .../plugin-windicss/src/node/windicss.d.ts | 22 +++--- packages/theme/package.json | 5 +- .../src/client/components/Navbar/index.vue | 4 + .../theme/src/client/composables/index.ts | 4 + .../src/client/composables/useDarkMode.ts | 72 ++++++++++++++++++ .../useResolveRouteWithRedirect.ts | 28 +++++++ .../client/composables/useScrollPromise.ts | 22 ++++++ .../src/client/composables/useThemeData.ts | 14 ++++ packages/theme/src/client/config.ts | 6 ++ packages/theme/src/client/layouts/Layout.vue | 13 +++- packages/theme/src/client/styles/index.scss | 0 packages/theme/src/client/windi.config.ts | 73 +++++++++++++++++++ packages/theme/src/node/plugins.ts | 5 ++ packages/theme/src/shared/options/index.ts | 36 +++++++++ packages/theme/src/shared/options/locale.ts | 6 +- pnpm-lock.yaml | 12 +++ tsconfig.base.json | 42 +---------- 24 files changed, 329 insertions(+), 57 deletions(-) create mode 100644 packages/theme/src/client/components/Navbar/index.vue create mode 100644 packages/theme/src/client/composables/index.ts create mode 100644 packages/theme/src/client/composables/useDarkMode.ts create mode 100644 packages/theme/src/client/composables/useResolveRouteWithRedirect.ts create mode 100644 packages/theme/src/client/composables/useScrollPromise.ts create mode 100644 packages/theme/src/client/composables/useThemeData.ts create mode 100644 packages/theme/src/client/styles/index.scss create mode 100644 packages/theme/src/client/windi.config.ts diff --git a/package.json b/package.json index c7c304ec..305d3c75 100644 --- a/package.json +++ b/package.json @@ -76,6 +76,7 @@ "sort-package-json": "^2.0.0", "taze": "^0.8.2", "ts-node": "^10.9.1", + "tsconfig-vuepress": "^4.0.0", "typescript": "^4.8.4", "vite": "^3.1.8" }, diff --git a/packages/plugin-baidu-tongji/tsconfig.build.json b/packages/plugin-baidu-tongji/tsconfig.build.json index 3395ea55..9a9c1efa 100644 --- a/packages/plugin-baidu-tongji/tsconfig.build.json +++ b/packages/plugin-baidu-tongji/tsconfig.build.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.base.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./lib" + "outDir": "./lib", + "composite": true }, "include": ["./src"], "files": [] diff --git a/packages/plugin-blog-data/src/client/config.ts b/packages/plugin-blog-data/src/client/config.ts index 27063fc9..97d99d32 100644 --- a/packages/plugin-blog-data/src/client/config.ts +++ b/packages/plugin-blog-data/src/client/config.ts @@ -4,7 +4,6 @@ import { useBlogPostData } from './composables/index.js' export default defineClientConfig({ enhance({ app }) { - // provide theme data & theme locale data const blogPostData = useBlogPostData() // setup devtools in dev mode diff --git a/packages/plugin-blog-data/src/node/index.ts b/packages/plugin-blog-data/src/node/index.ts index 312eda7b..289ed329 100644 --- a/packages/plugin-blog-data/src/node/index.ts +++ b/packages/plugin-blog-data/src/node/index.ts @@ -1,6 +1,6 @@ import { blogDataPlugin } from './plugin.js' export * from '../shared/index.js' -export * from './plugin.js' +export { blogDataPlugin } export default blogDataPlugin diff --git a/packages/plugin-blog-data/src/node/plugin.ts b/packages/plugin-blog-data/src/node/plugin.ts index 8348d0b8..38d1694c 100644 --- a/packages/plugin-blog-data/src/node/plugin.ts +++ b/packages/plugin-blog-data/src/node/plugin.ts @@ -41,6 +41,15 @@ export const blogDataPlugin = ({ return { name: '@vuepress-plume/vuepress-plugin-blog-data', clientConfigFile: path.resolve(__dirname, '../client/config.js'), + extendsPage(page) { + if ( + page.filePathRelative && + options.exclude.every((filter) => filter(page.filePathRelative!)) && + options.include.some((filter) => filter(page.filePathRelative!)) + ) { + ;(page.data as any).isBlogPost = true + } + }, onPrepared: async (app) => await preparedBlogData(app, options), onWatched(app, watchers) { const watcher = chokidar.watch('pages/**/*', { diff --git a/packages/plugin-windicss/src/client/config.vite.ts b/packages/plugin-windicss/src/client/config.vite.ts index 0bf9dc52..6558b17a 100644 --- a/packages/plugin-windicss/src/client/config.vite.ts +++ b/packages/plugin-windicss/src/client/config.vite.ts @@ -1,5 +1,6 @@ import { defineClientConfig } from '@vuepress/client' +// import 'virtual:windi-devtools' import 'virtual:windi.css' export default defineClientConfig({}) diff --git a/packages/plugin-windicss/src/node/plugin.ts b/packages/plugin-windicss/src/node/plugin.ts index 8d23f8f3..eaa87e17 100644 --- a/packages/plugin-windicss/src/node/plugin.ts +++ b/packages/plugin-windicss/src/node/plugin.ts @@ -14,7 +14,10 @@ export const windiCSSPlugin = (options?: WindiCSSOptions | string): Plugin => { let userOptions: UserOptions | undefined let utilsOptions: WindiPluginUtilsOptions | undefined if (typeof options === 'string') { - userOptions = { config: options } + userOptions = { + config: options, + include: ['**/.vuepress/**/*.{vue,jsx,tsx}', '**/*.md'], + } } else { options = options || {} userOptions = options.userOptions diff --git a/packages/plugin-windicss/src/node/windicss.d.ts b/packages/plugin-windicss/src/node/windicss.d.ts index 1e309ec4..50c54b58 100644 --- a/packages/plugin-windicss/src/node/windicss.d.ts +++ b/packages/plugin-windicss/src/node/windicss.d.ts @@ -1,17 +1,17 @@ -declare module 'windicss-webpack-plugin' { - const result: any +// declare module 'windicss-webpack-plugin' { +// const result: any - export default result -} +// export default result +// } -declare module 'vite-plugin-windicss' { - const result: any +// declare module 'vite-plugin-windicss' { +// const result: any - type UserOptions = any +// type UserOptions = any - type WindiPluginUtilsOptions = any +// type WindiPluginUtilsOptions = any - export default result +// export default result - export { UserOptions, WindiPluginUtilsOptions } -} +// export { UserOptions, WindiPluginUtilsOptions } +// } diff --git a/packages/theme/package.json b/packages/theme/package.json index 23348b79..68606795 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -39,6 +39,7 @@ "@vuepress-plume/vuepress-plugin-blog-data": "workspace:*", "@vuepress-plume/vuepress-plugin-caniuse": "workspace:*", "@vuepress-plume/vuepress-plugin-copy-code": "workspace:*", + "@vuepress-plume/vuepress-plugin-windicss": "workspace:*", "@vuepress/client": "2.0.0-beta.51", "@vuepress/core": "2.0.0-beta.51", "@vuepress/plugin-active-header-links": "2.0.0-beta.51", @@ -55,6 +56,7 @@ "@vuepress/plugin-toc": "2.0.0-beta.51", "@vuepress/shared": "2.0.0-beta.51", "@vuepress/utils": "2.0.0-beta.51", + "@vueuse/core": "^9.3.0", "date-fns": "^2.29.3", "nanoid": "^4.0.0", "ts-debounce": "^4.0.0", @@ -63,6 +65,7 @@ "vuepress-plugin-comment2": "2.0.0-beta.110", "vuepress-plugin-md-enhance": "2.0.0-beta.110", "vuepress-plugin-seo2": "2.0.0-beta.110", - "vuepress-plugin-sitemap2": "2.0.0-beta.110" + "vuepress-plugin-sitemap2": "2.0.0-beta.110", + "windicss": "^3.5.6" } } diff --git a/packages/theme/src/client/components/Navbar/index.vue b/packages/theme/src/client/components/Navbar/index.vue new file mode 100644 index 00000000..6f0ce0e1 --- /dev/null +++ b/packages/theme/src/client/components/Navbar/index.vue @@ -0,0 +1,4 @@ + + diff --git a/packages/theme/src/client/composables/index.ts b/packages/theme/src/client/composables/index.ts new file mode 100644 index 00000000..7021f731 --- /dev/null +++ b/packages/theme/src/client/composables/index.ts @@ -0,0 +1,4 @@ +export * from './useDarkMode.js' +export * from './useScrollPromise.js' +export * from './useThemeData.js' +export * from './useResolveRouteWithRedirect.js' diff --git a/packages/theme/src/client/composables/useDarkMode.ts b/packages/theme/src/client/composables/useDarkMode.ts new file mode 100644 index 00000000..97d049fe --- /dev/null +++ b/packages/theme/src/client/composables/useDarkMode.ts @@ -0,0 +1,72 @@ +import { usePreferredDark, useStorage } from '@vueuse/core' +import { computed, inject, onMounted, onUnmounted, provide, watch } from 'vue' +import type { InjectionKey, WritableComputedRef } from 'vue' +import { useThemeLocaleData } from './useThemeData.js' + +export type DarkModeRef = WritableComputedRef + +export const darkModeSymbol: InjectionKey = Symbol( + __VUEPRESS_DEV__ ? 'darkMode' : '' +) + +/** + * Inject dark mode global computed + */ +export const useDarkMode = (): DarkModeRef => { + const isDarkMode = inject(darkModeSymbol) + if (!isDarkMode) { + throw new Error('useDarkMode() is called without provider.') + } + return isDarkMode +} + +/** + * Create dark mode ref and provide as global computed in setup + */ +export const setupDarkMode = (): void => { + const themeLocale = useThemeLocaleData() + const isDarkPreferred = usePreferredDark() + const darkStorage = useStorage( + 'vuepress-color-scheme', + themeLocale.value.colorMode + ) + + const isDarkMode = computed({ + get() { + // disable color mode switching + if (!themeLocale.value.colorModeSwitch) { + return themeLocale.value.colorMode === 'dark' + } + // auto detected from prefers-color-scheme + if (darkStorage.value === 'auto') { + return isDarkPreferred.value + } + // storage value + return darkStorage.value === 'dark' + }, + set(val) { + if (val === isDarkPreferred.value) { + darkStorage.value = 'auto' + } else { + darkStorage.value = val ? 'dark' : 'light' + } + }, + }) + provide(darkModeSymbol, isDarkMode) + + updateHtmlDarkClass(isDarkMode) +} + +export const updateHtmlDarkClass = (isDarkMode: DarkModeRef): void => { + const update = (value = isDarkMode.value): void => { + // set `class="dark"` on `` element + const htmlEl = window?.document.querySelector('html') + htmlEl?.classList.toggle('dark', value) + } + + onMounted(() => { + watch(isDarkMode, update, { immediate: true }) + }) + + onUnmounted(() => update()) +} diff --git a/packages/theme/src/client/composables/useResolveRouteWithRedirect.ts b/packages/theme/src/client/composables/useResolveRouteWithRedirect.ts new file mode 100644 index 00000000..297b0e95 --- /dev/null +++ b/packages/theme/src/client/composables/useResolveRouteWithRedirect.ts @@ -0,0 +1,28 @@ +import { isFunction, isString } from '@vuepress/shared' +import { useRouter } from 'vue-router' +import type { Router } from 'vue-router' + +/** + * Resolve a route with redirection + */ +export const useResolveRouteWithRedirect = ( + ...args: Parameters +): ReturnType => { + const router = useRouter() + const route = router.resolve(...args) + const lastMatched = route.matched[route.matched.length - 1] + if (!lastMatched?.redirect) { + return route + } + const { redirect } = lastMatched + const resolvedRedirect = isFunction(redirect) ? redirect(route) : redirect + const resolvedRedirectObj = isString(resolvedRedirect) + ? { path: resolvedRedirect } + : resolvedRedirect + return useResolveRouteWithRedirect({ + hash: route.hash, + query: route.query, + params: route.params, + ...resolvedRedirectObj, + }) +} diff --git a/packages/theme/src/client/composables/useScrollPromise.ts b/packages/theme/src/client/composables/useScrollPromise.ts new file mode 100644 index 00000000..0405f8c7 --- /dev/null +++ b/packages/theme/src/client/composables/useScrollPromise.ts @@ -0,0 +1,22 @@ +export interface ScrollPromise { + wait(): Promise | null + pending: () => void + resolve: () => void +} + +let promise: Promise | null = null +let promiseResolve: (() => void) | null = null + +const scrollPromise: ScrollPromise = { + wait: () => promise, + pending: () => { + promise = new Promise((resolve) => (promiseResolve = resolve)) + }, + resolve: () => { + promiseResolve?.() + promise = null + promiseResolve = null + }, +} + +export const useScrollPromise = (): ScrollPromise => scrollPromise diff --git a/packages/theme/src/client/composables/useThemeData.ts b/packages/theme/src/client/composables/useThemeData.ts new file mode 100644 index 00000000..59e41440 --- /dev/null +++ b/packages/theme/src/client/composables/useThemeData.ts @@ -0,0 +1,14 @@ +import { + useThemeData as _useThemeData, + useThemeLocaleData as _useThemeLocaleData, +} from '@vuepress/plugin-theme-data/client' +import type { + ThemeDataRef, + ThemeLocaleDataRef, +} from '@vuepress/plugin-theme-data/client' +import type { PlumeThemeData } from '../../shared/index.js' + +export const useThemeData = (): ThemeDataRef => + _useThemeData() +export const useThemeLocaleData = (): ThemeLocaleDataRef => + _useThemeLocaleData() diff --git a/packages/theme/src/client/config.ts b/packages/theme/src/client/config.ts index dc4e4d21..a3fc2b3e 100644 --- a/packages/theme/src/client/config.ts +++ b/packages/theme/src/client/config.ts @@ -1,8 +1,14 @@ import { defineClientConfig } from '@vuepress/client' +import { setupDarkMode } from './composables/index.js' import Layout from './layouts/Layout.vue' import NotFound from './layouts/NotFound.vue' +import './styles/index.scss' + export default defineClientConfig({ + setup() { + setupDarkMode() + }, layouts: { Layout, NotFound, diff --git a/packages/theme/src/client/layouts/Layout.vue b/packages/theme/src/client/layouts/Layout.vue index 167e2c32..4fb39628 100644 --- a/packages/theme/src/client/layouts/Layout.vue +++ b/packages/theme/src/client/layouts/Layout.vue @@ -1,3 +1,14 @@ + diff --git a/packages/theme/src/client/styles/index.scss b/packages/theme/src/client/styles/index.scss new file mode 100644 index 00000000..e69de29b diff --git a/packages/theme/src/client/windi.config.ts b/packages/theme/src/client/windi.config.ts new file mode 100644 index 00000000..58a7b703 --- /dev/null +++ b/packages/theme/src/client/windi.config.ts @@ -0,0 +1,73 @@ +import { getDirname, path } from '@vuepress/utils' +import { defineConfig } from 'windicss/helpers' +import typography from 'windicss/plugin/typography' + +const __dirname = getDirname(import.meta.url) + +export default defineConfig({ + darkMode: 'class', + // attributify: true, + plugins: [(typography as any)()], + theme: { + extend: { + textColor: '#2c3e50', + fontFamily: { + sans: [ + 'ui-sans-serif', + '-apple-system', + 'BlinkMackSystemFont', + '"Segoe UI"', + 'Roboto', + 'Oxygen', + 'Ubuntu', + 'Cantarell', + '"Fira Sans"', + '"Droid Sans"', + '"Helvetica Neue"', + 'sans-serif', + '"Apple Color Emoji"', + '"Segoe UI Emoji"', + '"Segoe UI Symbol"', + '"Noto Color Emoji"', + ], + mono: [ + 'Consolas', + 'Monaco', + 'ui-monospace', + 'SFMono-Regular', + 'Menlo', + '"Andale Mono"', + '"Ubuntu Mono"', + 'monospace', + ], + }, + typography: { + DEFAULT: { + css: { + color: '#2c3e50', + a: { + color: 'red', + }, + h1: { color: 'inherit' }, + h2: { color: 'inherit' }, + h3: { color: 'inherit' }, + h4: { color: 'inherit' }, + h5: { color: 'inherit' }, + h6: { color: 'inherit' }, + b: { color: 'inherit' }, + em: { color: 'inherit' }, + strong: { color: 'inherit' }, + blockquote: { color: 'inherit' }, + }, + }, + }, + }, + }, + extract: { + include: [ + path.resolve(__dirname, '{components,layouts}/**/*'), + path.resolve(process.cwd(), '**/.vuepress/{components,layouts}/*'), + path.resolve(process.cwd(), '**/*.md'), + ], + }, +}) diff --git a/packages/theme/src/node/plugins.ts b/packages/theme/src/node/plugins.ts index 4ce3adb9..dcdcf661 100644 --- a/packages/theme/src/node/plugins.ts +++ b/packages/theme/src/node/plugins.ts @@ -3,6 +3,7 @@ import { baiduTongjiPlugin } from '@vuepress-plume/vuepress-plugin-baidu-tongji' import { blogDataPlugin } from '@vuepress-plume/vuepress-plugin-blog-data' import { caniusePlugin } from '@vuepress-plume/vuepress-plugin-caniuse' import { copyCodePlugin } from '@vuepress-plume/vuepress-plugin-copy-code' +import { windiCSSPlugin } from '@vuepress-plume/vuepress-plugin-windicss' import type { App, PluginConfig } from '@vuepress/core' import { activeHeaderLinksPlugin } from '@vuepress/plugin-active-header-links' import { docsearchPlugin } from '@vuepress/plugin-docsearch' @@ -14,6 +15,7 @@ import { palettePlugin } from '@vuepress/plugin-palette' import { prismjsPlugin } from '@vuepress/plugin-prismjs' import { searchPlugin } from '@vuepress/plugin-search' import { themeDataPlugin } from '@vuepress/plugin-theme-data' +import { getDirname, path } from '@vuepress/utils' import { commentPlugin } from 'vuepress-plugin-comment2' import { mdEnhancePlugin } from 'vuepress-plugin-md-enhance' import { seoPlugin } from 'vuepress-plugin-seo2' @@ -24,6 +26,8 @@ import type { } from '../shared/index.js' import autoFrontmatter from './autoFrontmatter.js' +const __dirname = getDirname(import.meta.url) + export const setupPlugins = ( app: App, options: PlumeThemePluginOptions, @@ -33,6 +37,7 @@ export const setupPlugins = ( return [ palettePlugin({ preset: 'sass' }), + windiCSSPlugin(path.resolve(__dirname, '../client/windi.config.js')), themeDataPlugin({ themeData: localeOptions }), autoFrontmatterPlugin(autoFrontmatter(app, localeOptions)), blogDataPlugin({ diff --git a/packages/theme/src/shared/options/index.ts b/packages/theme/src/shared/options/index.ts index 940940d0..588243bc 100644 --- a/packages/theme/src/shared/options/index.ts +++ b/packages/theme/src/shared/options/index.ts @@ -7,6 +7,42 @@ export interface PlumeThemeOptions extends PlumeThemeLocaleOptions { * 对主题内部使用的插件进行配置 */ themePlugins?: PlumeThemePluginOptions + + /** + * 是否仅使用博客功能 + * + * @default false + */ + onlyBlog?: boolean + + blog?: { + /** + * blog 文章读取目录 + * + * @default './' 即 vuepress 配置的 source 目录 + */ + dir?: string + + /** + * 在 `blog.dir` 目录中,通过 glob string 配置包含文件 + * + * @default - ['**\*.md'] + */ + include?: string[] + + /** + * 在 `blog.dir` 目录中,通过 glob string 配置排除的文件 + * + * _README.md 文件一般作为主页或者某个目录下的主页,不应该被读取为 blog文章_ + * + * @default - ['.vuepress/', 'node_modules/', '{README,index}.md'] + */ + exclude?: string[] + } + + notes?: { + dir?: string + } } export type PlumeThemeLocaleOptions = PlumeThemeData diff --git a/packages/theme/src/shared/options/locale.ts b/packages/theme/src/shared/options/locale.ts index 2132ecfb..dba9f9f7 100644 --- a/packages/theme/src/shared/options/locale.ts +++ b/packages/theme/src/shared/options/locale.ts @@ -71,9 +71,11 @@ export interface PlumeThemeLocaleData extends LocaleData { */ logoDark?: string /** - * 是否启用深色模式 + * 是否启用深色模式切换按钮 */ - darkMode?: boolean + colorModeSwitch?: boolean + + colorMode?: 'auto' | 'light' | 'dark' toggleDarkMode?: string diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 58a1d7e4..9efacbd0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,6 +33,7 @@ importers: sort-package-json: ^2.0.0 taze: ^0.8.2 ts-node: ^10.9.1 + tsconfig-vuepress: ^4.0.0 typescript: ^4.8.4 vite: ^3.1.8 devDependencies: @@ -65,6 +66,7 @@ importers: sort-package-json: 2.0.0 taze: 0.8.2 ts-node: 10.9.1_5ra3kupzwcghzakkfdrtyjk72u + tsconfig-vuepress: 4.0.0 typescript: 4.8.4 vite: 3.1.8 @@ -255,6 +257,7 @@ importers: '@vuepress-plume/vuepress-plugin-blog-data': workspace:* '@vuepress-plume/vuepress-plugin-caniuse': workspace:* '@vuepress-plume/vuepress-plugin-copy-code': workspace:* + '@vuepress-plume/vuepress-plugin-windicss': workspace:* '@vuepress/client': 2.0.0-beta.51 '@vuepress/core': 2.0.0-beta.51 '@vuepress/plugin-active-header-links': 2.0.0-beta.51 @@ -271,6 +274,7 @@ importers: '@vuepress/plugin-toc': 2.0.0-beta.51 '@vuepress/shared': 2.0.0-beta.51 '@vuepress/utils': 2.0.0-beta.51 + '@vueuse/core': ^9.3.0 date-fns: ^2.29.3 nanoid: ^4.0.0 ts-debounce: ^4.0.0 @@ -280,6 +284,7 @@ importers: vuepress-plugin-md-enhance: 2.0.0-beta.110 vuepress-plugin-seo2: 2.0.0-beta.110 vuepress-plugin-sitemap2: 2.0.0-beta.110 + windicss: ^3.5.6 dependencies: '@types/lodash.merge': 4.6.7 '@vuepress-plume/vuepress-plugin-auto-frontmatter': link:../plugin-auto-frontmatter @@ -287,6 +292,7 @@ importers: '@vuepress-plume/vuepress-plugin-blog-data': link:../plugin-blog-data '@vuepress-plume/vuepress-plugin-caniuse': link:../plugin-caniuse '@vuepress-plume/vuepress-plugin-copy-code': link:../plugin-copy-code + '@vuepress-plume/vuepress-plugin-windicss': link:../plugin-windicss '@vuepress/client': 2.0.0-beta.51 '@vuepress/core': 2.0.0-beta.51 '@vuepress/plugin-active-header-links': 2.0.0-beta.51 @@ -303,6 +309,7 @@ importers: '@vuepress/plugin-toc': 2.0.0-beta.51 '@vuepress/shared': 2.0.0-beta.51 '@vuepress/utils': 2.0.0-beta.51 + '@vueuse/core': 9.3.0_vue@3.2.41 date-fns: 2.29.3 nanoid: 4.0.0 ts-debounce: 4.0.0 @@ -312,6 +319,7 @@ importers: vuepress-plugin-md-enhance: 2.0.0-beta.110 vuepress-plugin-seo2: 2.0.0-beta.110 vuepress-plugin-sitemap2: 2.0.0-beta.110 + windicss: 3.5.6 packages/theme-back: specifiers: @@ -14322,6 +14330,10 @@ packages: strip-bom: 3.0.0 dev: true + /tsconfig-vuepress/4.0.0: + resolution: {integrity: sha512-bhujOtmpGdclg92bBrc+Y4L+emxN7jldlmogfT0ks9TmBzcEmzCAiphYRZ+J4idyDyLL+O7Kd9w4nOkUFtOoZA==} + dev: true + /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} diff --git a/tsconfig.base.json b/tsconfig.base.json index 8ecec5a4..7dbe13db 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,47 +1,13 @@ { + "extends": "tsconfig-vuepress/base.json", "compilerOptions": { - "composite": true, "allowSyntheticDefaultImports": true, "lib": ["DOM", "ES2020"], - "module": "esnext", + "module": "ESNext", "moduleResolution": "NodeNext", "noEmitOnError": true, - "esModuleInterop": true, + "noImplicitAny": false, "skipLibCheck": true, - "target": "ES2020", - "allowJs": false, - "allowUmdGlobalAccess": false, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "checkJs": false, - "declaration": true, - "declarationMap": false, - "exactOptionalPropertyTypes": false, - "forceConsistentCasingInFileNames": true, - "importsNotUsedAsValues": "error", - "newLine": "lf", - "noFallthroughCasesInSwitch": false, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noImplicitUseStrict": false, - "noPropertyAccessFromIndexSignature": false, - "noStrictGenericChecks": false, - "noUncheckedIndexedAccess": false, - "noUnusedLocals": false, - "noUnusedParameters": false, - "preserveValueImports": false, - "removeComments": false, - "resolveJsonModule": true, - "sourceMap": false, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "stripInternal": true, - "useUnknownInCatchVariables": true + "target": "ES2020" } }