-
Notifications
You must be signed in to change notification settings - Fork 0
/
vite.config.js
154 lines (128 loc) · 3.41 KB
/
vite.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
// @ts-check
import { existsSync } from 'fs'
import { defineConfig } from 'vite'
import { watch } from 'chokidar'
/** Returns the posix-normalized path from the given path. */
export const normalize = (/** @type {string} */ path, /** @type {boolean} */ trim = false) => {
const segments = path.split('\\')
if (trim && segments.at(-1) === '') segments.pop()
return segments.join('/')
}
export const trimTrailingSlash = (/** @type {string} */ path) => path[path.length - 1] === '/' ? path.slice(0, -1) : path
const stats = {
configResolved: { run: 0, set: new Set },
resolveId: { run: 0, set: new Set },
load: { run: 0, set: new Set },
transform: { run: 0, set: new Set },
buildEnd: { run: 0, set: new Set },
closeBundle: { run: 0, set: new Set },
}
console.log('value of process.cwd()')
console.log(' ', [ process.cwd() ])
const test = {}
export default defineConfig({
root: 'src',
plugins: [
{
name: '@example/test',
configResolved(config) {
++stats.configResolved.run
const root = config.root
console.log('config as raw path:')
try {
console.log(' ', [ root ])
console.log(' ', 'exists', existsSync(root))
} catch (error) {
console.log(' ', 'threw an error')
console.log(' ', error)
}
console.log('config as url path:')
try {
console.log(' ', new URL(root, 'file:'))
console.log(' ', 'exists', existsSync(new URL('//' + root, 'file:')))
} catch (error) {
console.log('threw an error')
console.error(error)
}
stats.configResolved.set.add(root)
return new Promise(
(resolve) => {
const manifest = {}
const watcher = watch(root, {
persistent: false,
ignored: [
'**/node_modules/**',
'**/.git/**',
],
ignoreInitial: false,
ignorePermissionErrors: true,
disableGlobbing: true,
})
watcher.on('all', (event, path, stats) => {
path = normalize(path, true)
manifest[path] = manifest[path] || {}
switch (event) {
case 'add':
manifest[path].type = 'file'
manifest[path].size = stats.size
manifest[path].time = stats.mtimeMs
break
case 'addDir':
manifest[path].type = 'dir'
manifest[path].size = stats.size
manifest[path].time = stats.mtimeMs
break
case 'change':
manifest[path].size = stats.size
manifest[path].time = stats.mtimeMs
break
case 'unlink':
case 'unlinkDir':
delete manifest[path]
break
}
})
watcher.on('ready', () => {
console.log('watcher:ready')
console.table(manifest)
resolve()
})
}
)
},
resolveId(importee) {
++stats.resolveId.run
stats.resolveId.set.add(importee)
return undefined
},
load(importee) {
++stats.load.run
stats.load.set.add(importee)
return undefined
},
transform(_code, importee) {
++stats.transform.run
stats.transform.set.add(importee)
return undefined
},
buildEnd() {
++stats.buildEnd.run
},
closeBundle() {
++stats.closeBundle.run
// print results of tests
console.table(
Object.entries(stats).reduce(
(result, [name, data]) => Object.assign(result, {
[name]: {
'# times run': data.run,
'all results': [ ...data.set ]
},
}),
Object.create(null)
)
)
},
}
]
})