Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 15c9696

Browse files
committed
perf: move away from fs-extra
1 parent 8ebaf83 commit 15c9696

File tree

21 files changed

+50
-56
lines changed

21 files changed

+50
-56
lines changed

docs/package.json

-2
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,9 @@
1919
"@slidev/client": "workspace:*",
2020
"@slidev/parser": "workspace:*",
2121
"@slidev/types": "workspace:*",
22-
"@types/fs-extra": "catalog:",
2322
"@types/node": "catalog:",
2423
"@unocss/reset": "catalog:",
2524
"fast-glob": "catalog:",
26-
"fs-extra": "catalog:",
2725
"gray-matter": "catalog:",
2826
"markdown-it": "catalog:",
2927
"shiki": "catalog:",

package.json

-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
"@types/connect": "catalog:",
4040
"@types/debug": "catalog:",
4141
"@types/file-saver": "catalog:",
42-
"@types/fs-extra": "catalog:",
4342
"@types/js-yaml": "catalog:",
4443
"@types/katex": "catalog:",
4544
"@types/markdown-it": "catalog:",

packages/client/state/drawings.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// @ts-expect-error - virtual module
12
import serverDrawingState from 'server-reactive:drawings?diff'
23
import { createSyncState } from './syncState'
34

packages/client/state/shared.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// @ts-expect-error - virtual module
12
import serverState from 'server-reactive:nav'
23
import { createSyncState } from './syncState'
34

packages/client/state/snapshot.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// @ts-expect-error - virtual module
12
import serverSnapshotState from 'server-reactive:snapshots?diff'
23
import { createSyncState } from './syncState'
34

packages/create-app/build.mjs

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
import { existsSync } from 'node:fs'
2+
import fs from 'node:fs/promises'
13
import { dirname, resolve } from 'node:path'
24
import { fileURLToPath } from 'node:url'
3-
import fs from 'fs-extra'
45

56
const __dirname = fileURLToPath(new URL('.', import.meta.url))
67
const __templateDir = resolve(__dirname, 'template')
78
const __pagesDir = resolve(__templateDir, 'pages')
89

9-
const shouldCreatePagesDict = () => !fs.existsSync(__pagesDir)
10+
const shouldCreatePagesDict = () => !existsSync(__pagesDir)
1011

1112
// key: copy to (relative ./)
1213
// value: origin (relative ./template)
@@ -24,11 +25,11 @@ async function main() {
2425
Object.keys(needCopyFiles).map(async (relativeTargetPath) => {
2526
const sourcePath = resolve(__templateDir, needCopyFiles[relativeTargetPath])
2627
const targetPath = resolve(__templateDir, relativeTargetPath)
27-
if (fs.existsSync(targetPath))
28-
await fs.rm(targetPath)
28+
if (existsSync(targetPath))
29+
await fs.rm(targetPath, { recursive: true, force: true })
2930

30-
await fs.ensureDir(dirname(targetPath))
31-
await fs.copy(sourcePath, targetPath)
31+
await fs.mkdir(dirname(targetPath), { recursive: true })
32+
await fs.copyFile(sourcePath, targetPath)
3233
}),
3334
)
3435
// eslint-disable-next-line no-console

packages/slidev/node/cli.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ import type { ResolvedSlidevOptions, SlidevConfig, SlidevData } from '@slidev/ty
22
import type { LogLevel, ViteDevServer } from 'vite'
33
import type { Argv } from 'yargs'
44
import { exec } from 'node:child_process'
5+
import fs from 'node:fs/promises'
56
import os from 'node:os'
67
import path from 'node:path'
78
import process from 'node:process'
89
import * as readline from 'node:readline'
910
import { verifyConfig } from '@slidev/parser'
1011
import { blue, bold, cyan, cyanBright, dim, gray, green, underline, yellow } from 'ansis'
1112
import equal from 'fast-deep-equal'
12-
import fs from 'fs-extra'
1313
import { getPort } from 'get-port-please'
1414
import openBrowser from 'open'
1515
import yargs from 'yargs'
@@ -420,9 +420,13 @@ cli.command(
420420
}
421421
const [name, root] = (await resolveTheme(themeRaw, entry)) as [string, string]
422422

423-
await fs.copy(root, path.resolve(dir), {
424-
filter: i => !/node_modules|.git/.test(path.relative(root, i)),
425-
})
423+
await fs.cp(
424+
root,
425+
path.resolve(dir),
426+
{
427+
filter: i => !/node_modules|.git/.test(path.relative(root, i)),
428+
},
429+
)
426430

427431
const dirPath = `./${dir}`
428432
const firstSlide = data.entry.slides[0]

packages/slidev/node/commands/build.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import type { BuildArgs, ResolvedSlidevOptions } from '@slidev/types'
22
import type { InlineConfig, ResolvedConfig } from 'vite'
3+
import { existsSync } from 'node:fs'
4+
import fs from 'node:fs/promises'
35
import http from 'node:http'
46
import { resolve } from 'node:path'
57
import connect from 'connect'
6-
import fs from 'fs-extra'
78
import sirv from 'sirv'
89
import { build as viteBuild } from 'vite'
910
import { resolveViteConfigs } from './shared'
@@ -16,7 +17,7 @@ export async function build(
1617
const indexPath = resolve(options.userRoot, 'index.html')
1718

1819
let originalIndexHTML: string | undefined
19-
if (fs.existsSync(indexPath))
20+
if (existsSync(indexPath))
2021
originalIndexHTML = await fs.readFile(indexPath, 'utf-8')
2122

2223
await fs.writeFile(indexPath, options.utils.indexHtml, 'utf-8')
@@ -57,7 +58,7 @@ export async function build(
5758
await fs.copyFile(resolve(outDir, 'index.html'), resolve(outDir, '404.html'))
5859
// _redirects for SPA
5960
const redirectsPath = resolve(outDir, '_redirects')
60-
if (!fs.existsSync(redirectsPath))
61+
if (!existsSync(redirectsPath))
6162
await fs.writeFile(redirectsPath, `${config.base}* ${config.base}index.html 200\n`, 'utf-8')
6263

6364
if ([true, 'true', 'auto'].includes(options.data.config.download)) {

packages/slidev/node/commands/export.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import type { ExportArgs, ResolvedSlidevOptions, SlideInfo, TocItem } from '@slidev/types'
22
import { Buffer } from 'node:buffer'
3+
import fs from 'node:fs/promises'
34
import path from 'node:path'
45
import process from 'node:process'
56
import { clearUndefined, slash } from '@antfu/utils'
67
import { outlinePdfFactory } from '@lillallol/outline-pdf'
78
import { parseRangeString } from '@slidev/parser/core'
89
import { blue, cyan, dim, green, yellow } from 'ansis'
910
import { Presets, SingleBar } from 'cli-progress'
10-
import fs from 'fs-extra'
1111
import { resolve } from 'mlly'
1212
import * as pdfLib from 'pdf-lib'
1313
import { PDFDocument } from 'pdf-lib'
@@ -393,7 +393,8 @@ export async function exportSlides({
393393
async function genPagePngOnePiece(writeToDisk: boolean) {
394394
const result: ExportPngResult[] = []
395395
await go('print')
396-
await fs.emptyDir(output)
396+
await fs.rm(output, { force: true, recursive: true })
397+
await fs.mkdir(output, { recursive: true })
397398
const slideContainers = page.locator('.print-slide-container')
398399
const count = await slideContainers.count()
399400
for (let i = 0; i < count; i++) {

packages/slidev/node/integrations/addons.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
import fs from 'node:fs/promises'
12
import { resolve } from 'node:path'
2-
import fs from 'fs-extra'
33
import { satisfies } from 'semver'
44
import { version } from '../../package.json'
55
import { createResolver, getRoots } from '../resolver'
@@ -15,7 +15,7 @@ export async function resolveAddons(addonsInConfig: string[]) {
1515
if (!pkgRoot)
1616
return
1717
resolved.push(pkgRoot)
18-
const { slidev = {}, engines = {} } = await fs.readJSON(resolve(pkgRoot, 'package.json'))
18+
const { slidev = {}, engines = {} } = JSON.parse(await fs.readFile(resolve(pkgRoot, 'package.json'), 'utf-8'))
1919

2020
if (engines.slidev && !satisfies(version, engines.slidev, { includePrerelease: true }))
2121
throw new Error(`[slidev] addon "${name}" requires Slidev version range "${engines.slidev}" but found "${version}"`)

packages/slidev/node/integrations/drawings.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import type { ResolvedSlidevOptions } from '@slidev/types'
2+
import { existsSync } from 'node:fs'
3+
import fs from 'node:fs/promises'
24
import { basename, dirname, join, resolve } from 'node:path'
35
import fg from 'fast-glob'
4-
import fs from 'fs-extra'
56

67
function resolveDrawingsDir(options: ResolvedSlidevOptions): string | undefined {
78
return options.data.config.drawings.persist
@@ -14,7 +15,7 @@ function resolveDrawingsDir(options: ResolvedSlidevOptions): string | undefined
1415

1516
export async function loadDrawings(options: ResolvedSlidevOptions) {
1617
const dir = resolveDrawingsDir(options)
17-
if (!dir || !fs.existsSync(dir))
18+
if (!dir || !existsSync(dir))
1819
return {}
1920

2021
const files = await fg('*.svg', {
@@ -46,7 +47,7 @@ export async function writeDrawings(options: ResolvedSlidevOptions, drawing: Rec
4647
const height = Math.round(width / options.data.config.aspectRatio)
4748
const SVG_HEAD = `<svg width="${width}" height="${height}" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">`
4849

49-
await fs.ensureDir(dir)
50+
await fs.mkdir(dir, { recursive: true })
5051

5152
return Promise.all(
5253
Object.entries(drawing).map(async ([key, value]) => {

packages/slidev/node/integrations/snapshots.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { ResolvedSlidevOptions } from '@slidev/types'
2+
import { existsSync } from 'node:fs'
3+
import fs from 'node:fs/promises'
24
import { dirname, join, resolve } from 'node:path'
3-
import fs from 'fs-extra'
45

56
function resolveSnapshotsDir(options: ResolvedSlidevOptions): string {
67
return resolve(dirname(options.entry), '.slidev/snapshots')
@@ -9,7 +10,7 @@ function resolveSnapshotsDir(options: ResolvedSlidevOptions): string {
910
export async function loadSnapshots(options: ResolvedSlidevOptions) {
1011
const dir = resolveSnapshotsDir(options)
1112
const file = join(dir, 'snapshots.json')
12-
if (!dir || !fs.existsSync(file))
13+
if (!dir || !existsSync(file))
1314
return {}
1415

1516
return JSON.parse(await fs.readFile(file, 'utf8'))
@@ -20,7 +21,7 @@ export async function writeSnapshots(options: ResolvedSlidevOptions, data: Recor
2021
if (!dir)
2122
return
2223

23-
await fs.ensureDir(dir)
24+
await fs.mkdir(dir, { recursive: true })
2425
// TODO: write as each image file
2526
await fs.writeFile(join(dir, 'snapshots.json'), JSON.stringify(data, null, 2), 'utf-8')
2627
}

packages/slidev/node/integrations/themes.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { SlidevThemeMeta } from '@slidev/types'
2+
import { existsSync } from 'node:fs'
3+
import fs from 'node:fs/promises'
24
import { join } from 'node:path'
3-
import fs from 'fs-extra'
45
import { satisfies } from 'semver'
56
import { version } from '../../package.json'
67
import { createResolver } from '../resolver'
@@ -18,10 +19,10 @@ export const resolveTheme = createResolver('theme', officialThemes)
1819

1920
export async function getThemeMeta(name: string, root: string) {
2021
const path = join(root, 'package.json')
21-
if (!fs.existsSync(path))
22+
if (!existsSync(path))
2223
return {}
2324

24-
const { slidev = {}, engines = {} } = await fs.readJSON(path)
25+
const { slidev = {}, engines = {} } = JSON.parse(await fs.readFile(path, 'utf-8'))
2526

2627
if (engines.slidev && !satisfies(version, engines.slidev, { includePrerelease: true }))
2728
throw new Error(`[slidev] theme "${name}" requires Slidev version range "${engines.slidev}" but found "${version}"`)

packages/slidev/node/setups/load.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { Awaitable } from '@antfu/utils'
2+
import { existsSync } from 'node:fs'
23
import { resolve } from 'node:path'
34
import { deepMergeWithArray } from '@antfu/utils'
4-
import fs from 'fs-extra'
55
import { loadModule } from '../utils'
66

77
export async function loadSetups<F extends (...args: any) => any>(
@@ -13,7 +13,7 @@ export async function loadSetups<F extends (...args: any) => any>(
1313
const returns: Awaited<ReturnType<F>>[] = []
1414
for (const root of roots) {
1515
const path = resolve(root, 'setup', filename)
16-
if (fs.existsSync(path)) {
16+
if (existsSync(path)) {
1717
const { default: setup } = await loadModule(path) as { default: F }
1818
const ret = await setup(...args)
1919
if (ret)

packages/slidev/node/syntax/markdown-it/markdown-it-v-drag.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import type MagicString from 'magic-string-stack'
22
import type MarkdownIt from 'markdown-it'
3-
import type { Token } from 'markdown-it'
43
import { SourceMapConsumer } from 'source-map-js'
54

5+
type Token = ReturnType<MarkdownIt['parseInline']>[number]
6+
67
const dragComponentRegex = /<(v-?drag-?\w*)([\s>])/i
78
const dragDirectiveRegex = /(?<![</\w])v-drag(=".*?")?/i
89

packages/slidev/node/syntax/transform/snippet.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
// Ported from https://github.com/vuejs/vitepress/blob/main/src/node/markdown/plugins/snippet.ts
22

33
import type { MarkdownTransformContext } from '@slidev/types'
4+
import fs from 'node:fs'
45
import path from 'node:path'
56
import { slash } from '@antfu/utils'
6-
import fs from 'fs-extra'
77
import lz from 'lz-string'
88
import { monacoWriterWhitelist } from '../../vite/monacoWrite'
99

packages/slidev/node/utils.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import type { ResolvedFontOptions, SlideInfo } from '@slidev/types'
2-
import type { Token } from 'markdown-it'
2+
import type MarkdownIt from 'markdown-it'
33
import type { Connect } from 'vite'
44
import { fileURLToPath } from 'node:url'
55
import { createJiti } from 'jiti'
66
import YAML from 'yaml'
77

8+
type Token = ReturnType<MarkdownIt['parseInline']>[number]
9+
810
type Jiti = ReturnType<typeof createJiti>
911
let jiti: Jiti | undefined
1012
export function loadModule<T = unknown>(absolutePath: string): Promise<T> {

packages/slidev/package.json

-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@
7171
"debug": "catalog:",
7272
"fast-deep-equal": "catalog:",
7373
"fast-glob": "catalog:",
74-
"fs-extra": "catalog:",
7574
"get-port-please": "catalog:",
7675
"global-directory": "catalog:",
7776
"htmlparser2": "catalog:",

packages/vscode/scripts/publish.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
import fs from 'node:fs/promises'
12
import process from 'node:process'
2-
import fs from 'fs-extra'
33
import { x } from 'tinyexec'
44

55
async function publish() {

pnpm-lock.yaml

+2-18
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)