Skip to content

Commit d3af79e

Browse files
authored
fix: rename.stripBase with parent relative path (#247)
1 parent 8b3f810 commit d3af79e

6 files changed

Lines changed: 58 additions & 2 deletions

File tree

.changeset/heavy-candies-post.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
'vite-plugin-static-copy': patch
3+
---
4+
5+
Fix `rename.stripBase` to work correctly with `../` paths
6+
7+
Previously, `stripBase` counted `..` as directory segments, causing incorrect output paths when copying from parent directories.
8+
9+
```js
10+
{ src: '../../src/pages/**/*.html', dest: 'dist/', rename: { stripBase: 2 } }
11+
```
12+
13+
**Before**: `dist/src/pages/events/test.html`
14+
**After**: `dist/events/test.html`
15+
16+
```js
17+
{ src: '../../src/pages/**/*.html', dest: 'dist/', rename: { stripBase: true } }
18+
```
19+
20+
**Before**: `dist/src/pages/events/test.html`
21+
**After**: `dist/test.html`

src/options.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,12 @@ export type Target = {
6363
* ```js
6464
* // Copies src/pages/events/test.html to dist/events/test.html
6565
* { src: 'src/pages/**\/*.html', dest: 'dist/', rename: { stripBase: 2 } }
66+
* // Copies ../../src/pages/events/test.html to dist/events/test.html
67+
* { src: '../../src/pages/**\/*.html', dest: 'dist/', rename: { stripBase: 2 } }
6668
* // Copies src/pages/events/test.html to dist/test.html
6769
* { src: 'src/pages/**\/*.html', dest: 'dist/', rename: { stripBase: true } }
70+
* // Copies ../../src/pages/events/test.html to dist/test.html
71+
* { src: '../../src/pages/**\/*.html', dest: 'dist/', rename: { stripBase: true } }
6872
* // Copies src/pages/events/test.html to dist/src/pages/events/test2.html
6973
* { src: 'src/pages/**\/*.html', dest: 'dist/', rename: (name, ext) => `${name}2.${ext}` }
7074
* // Copies src/pages/events/test.html to dist/pages/events/test.html

src/utils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,11 +244,11 @@ export const collectCopyTargets = async (
244244

245245
const { base, dir } = path.parse(relativeMatchedPath)
246246

247+
const dirClean = dir.replace(/^(?:\.\.\/)+/, '')
247248
let destDir: string
248249
if (!dir) {
249250
destDir = dest
250251
} else {
251-
const dirClean = dir.replace(/^(?:\.\.\/)+/, '')
252252
const destClean = `${dest}/${dirClean}`.replace(/^\/+|\/+$/g, '')
253253
destDir = destClean
254254
}
@@ -258,7 +258,7 @@ export const collectCopyTargets = async (
258258
dest: path.join(
259259
destDir,
260260
rename
261-
? await renameTarget(base, rename, absoluteMatchedPath, dir)
261+
? await renameTarget(base, rename, absoluteMatchedPath, dirClean)
262262
: base,
263263
),
264264
transform,

test/fixtures/vite.config.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,16 @@ export default defineConfig({
200200
},
201201
{ src: 'eexist/**/*', dest: 'eexist', rename: { stripBase: 1 } },
202202
{ src: 'eexist/**/*', dest: 'Eexist', rename: { stripBase: 1 } },
203+
{
204+
src: '../fixtures2/**/*.txt',
205+
dest: 'fixture21',
206+
rename: { stripBase: true },
207+
},
208+
{
209+
src: '../fixtures2/**/*.txt',
210+
dest: 'fixture22',
211+
rename: { stripBase: 1 },
212+
},
203213
],
204214
}),
205215
viteStaticCopy({

test/fixtures2/nested/qux.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
qux

test/testcases.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,26 @@ export const testcases: Record<string, Testcase[]> = {
212212
src: './to-flat/deep/b.txt',
213213
dest: '/fixture20/b.txt',
214214
},
215+
{
216+
name: 'parent dir stripBase true flattens (1)',
217+
src: '../fixtures2/baz.txt',
218+
dest: '/fixture21/baz.txt',
219+
},
220+
{
221+
name: 'parent dir stripBase true flattens (2)',
222+
src: '../fixtures2/nested/qux.txt',
223+
dest: '/fixture21/qux.txt',
224+
},
225+
{
226+
name: 'parent dir stripBase 1 (1)',
227+
src: '../fixtures2/baz.txt',
228+
dest: '/fixture22/baz.txt',
229+
},
230+
{
231+
name: 'parent dir stripBase 1 (2)',
232+
src: '../fixtures2/nested/qux.txt',
233+
dest: '/fixture22/nested/qux.txt',
234+
},
215235
{
216236
name: 'parallel copy to same dir (1)',
217237
src: './eexist/a/1.txt',

0 commit comments

Comments
 (0)