Skip to content

Commit a6e700c

Browse files
authored
fix(collapseSamePrefixes): missing collapse when prefix did not match from beginning (unplugin#563)
Fixes unplugin#546
1 parent a495847 commit a6e700c

File tree

8 files changed

+62
-29
lines changed

8 files changed

+62
-29
lines changed

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
{
2-
"typescript.tsdk": "node_modules/typescript/lib"
2+
"typescript.tsdk": "node_modules/typescript/lib",
3+
"prettier.enable": false
34
}

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,12 @@ Components({
338338

339339
// Allow subdirectories as namespace prefix for components.
340340
directoryAsNamespace: false,
341-
// Subdirectory paths for ignoring namespace prefixes
341+
342+
// Collapse same prefixes (camel-sensitive) of folders and components
343+
// to prevent duplication inside namespaced component name.
344+
// works when `directoryAsNamespace: true`
345+
collapseSamePrefixes: false,
346+
// Subdirectory paths for ignoring namespace prefixes.
342347
// works when `directoryAsNamespace: true`
343348
globalNamespaces: [],
344349

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<script>
2+
export default {
3+
name: 'CollapseFolderAndComponentFromRoot',
4+
}
5+
</script>
6+
7+
<template>
8+
<h3>CollapseFolderAndComponentFromRoot Component: <code>collapse/collapseFolder/CollapseFolderAndComponentFromRoot.vue</code></h3>
9+
</template>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<script>
2+
export default {
3+
name: 'FolderAndComponentPartially',
4+
}
5+
</script>
6+
7+
<template>
8+
<h3>FolderAndComponentPartially Component: <code>collapse/collapseFolder/FolderAndComponentPartially.vue</code></h3>
9+
</template>

examples/vite-vue3/src/components/collapse/collapseFolderAnd/CollapseFolderAndComponentPrefixes.vue

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/core/utils.ts

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -156,18 +156,24 @@ export function getNameFromFilePath(filePath: string, options: ResolvedOptions):
156156
const collapsed: string[] = []
157157

158158
for (const fileOrFolderName of namespaced) {
159-
const collapsedFilename = collapsed.join('')
160-
if (
161-
collapsedFilename
162-
&& fileOrFolderName.toLowerCase().startsWith(collapsedFilename.toLowerCase())
163-
) {
164-
const collapseSamePrefix = fileOrFolderName.slice(collapsedFilename.length)
165-
166-
collapsed.push(collapseSamePrefix)
167-
continue
159+
let cumulativePrefix = ''
160+
let didCollapse = false
161+
162+
for (const parentFolder of [...collapsed].reverse()) {
163+
cumulativePrefix = `${capitalize(parentFolder)}${cumulativePrefix}`
164+
165+
if (pascalCase(fileOrFolderName).startsWith(pascalCase(cumulativePrefix))) {
166+
const collapseSamePrefix = fileOrFolderName.slice(cumulativePrefix.length)
167+
168+
collapsed.push(collapseSamePrefix)
169+
170+
didCollapse = true
171+
break
172+
}
168173
}
169174

170-
collapsed.push(fileOrFolderName)
175+
if (!didCollapse)
176+
collapsed.push(fileOrFolderName)
171177
}
172178

173179
namespaced = collapsed

src/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,8 @@ export interface Options {
103103
directoryAsNamespace?: boolean
104104

105105
/**
106-
* Collapse same prefixes (case-insensitive) of folders and components
107-
* to prevent duplication inside namespaced component name
106+
* Collapse same prefixes (camel-sensitive) of folders and components
107+
* to prevent duplication inside namespaced component name.
108108
*
109109
* Works when `directoryAsNamespace: true`
110110
* @default false

test/__snapshots__/search.test.ts.snap

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@ exports[`search > should with namespace & collapse 1`] = `
1111
"from": "src/components/book/index.vue",
1212
},
1313
{
14-
"as": "CollapseFolderAndComponentPrefixes",
15-
"from": "src/components/collapse/collapseFolderAnd/CollapseFolderAndComponentPrefixes.vue",
14+
"as": "CollapseFolderAndComponentFromRoot",
15+
"from": "src/components/collapse/collapseFolder/CollapseFolderAndComponentFromRoot.vue",
16+
},
17+
{
18+
"as": "CollapseFolderAndComponentPartially",
19+
"from": "src/components/collapse/collapseFolder/FolderAndComponentPartially.vue",
1620
},
1721
{
1822
"as": "ComponentA",
@@ -60,8 +64,12 @@ exports[`search > should with namespace 1`] = `
6064
"from": "src/components/book/index.vue",
6165
},
6266
{
63-
"as": "CollapseCollapseFolderAndCollapseFolderAndComponentPrefixes",
64-
"from": "src/components/collapse/collapseFolderAnd/CollapseFolderAndComponentPrefixes.vue",
67+
"as": "CollapseCollapseFolderCollapseFolderAndComponentFromRoot",
68+
"from": "src/components/collapse/collapseFolder/CollapseFolderAndComponentFromRoot.vue",
69+
},
70+
{
71+
"as": "CollapseCollapseFolderFolderAndComponentPartially",
72+
"from": "src/components/collapse/collapseFolder/FolderAndComponentPartially.vue",
6573
},
6674
{
6775
"as": "ComponentA",
@@ -117,8 +125,8 @@ exports[`search > should work 1`] = `
117125
"from": "src/components/ui/nested/checkbox.vue",
118126
},
119127
{
120-
"as": "CollapseFolderAndComponentPrefixes",
121-
"from": "src/components/collapse/collapseFolderAnd/CollapseFolderAndComponentPrefixes.vue",
128+
"as": "CollapseFolderAndComponentFromRoot",
129+
"from": "src/components/collapse/collapseFolder/CollapseFolderAndComponentFromRoot.vue",
122130
},
123131
{
124132
"as": "ComponentA",
@@ -140,6 +148,10 @@ exports[`search > should work 1`] = `
140148
"as": "ComponentD",
141149
"from": "src/components/ComponentD.vue",
142150
},
151+
{
152+
"as": "FolderAndComponentPartially",
153+
"from": "src/components/collapse/collapseFolder/FolderAndComponentPartially.vue",
154+
},
143155
{
144156
"as": "Recursive",
145157
"from": "src/components/Recursive.vue",

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy