@lbruton/specflow 3.5.0 → 3.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/migration.js +43 -5
- package/dist/core/migration.js.map +1 -1
- package/package.json +1 -1
package/dist/core/migration.js
CHANGED
|
@@ -61,8 +61,8 @@ export async function migrateToDocVault(projectPath, config) {
|
|
|
61
61
|
if (!(await dirHasFiles(srcPath))) {
|
|
62
62
|
continue;
|
|
63
63
|
}
|
|
64
|
-
// Safety: never overwrite existing content
|
|
65
|
-
if (await
|
|
64
|
+
// Safety: never overwrite existing content (ignore scaffolding artifacts)
|
|
65
|
+
if (await dirHasMeaningfulContent(destPath)) {
|
|
66
66
|
const msg = `Skipping ${srcDir}/ — destination already has content: ${destPath}`;
|
|
67
67
|
console.error(`[migration] ${msg}`);
|
|
68
68
|
result.skippedDirs.push(srcDir);
|
|
@@ -84,13 +84,51 @@ export async function migrateToDocVault(projectPath, config) {
|
|
|
84
84
|
return result;
|
|
85
85
|
}
|
|
86
86
|
/**
|
|
87
|
-
* Check whether a directory exists and contains at least one
|
|
87
|
+
* Check whether a directory exists and contains at least one regular file
|
|
88
|
+
* (recursively). Empty subdirectories (e.g., scaffolded by WorkspaceInitializer)
|
|
89
|
+
* do not count as "content" — only actual files do.
|
|
88
90
|
*/
|
|
89
91
|
async function dirHasFiles(dirPath) {
|
|
90
92
|
try {
|
|
91
93
|
await access(dirPath, constants.F_OK);
|
|
92
|
-
const entries = await readdir(dirPath);
|
|
93
|
-
|
|
94
|
+
const entries = await readdir(dirPath, { withFileTypes: true });
|
|
95
|
+
for (const entry of entries) {
|
|
96
|
+
if (entry.isFile())
|
|
97
|
+
return true;
|
|
98
|
+
if (entry.isDirectory()) {
|
|
99
|
+
if (await dirHasFiles(join(dirPath, entry.name)))
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Scaffolding artifacts that don't count as "existing content" when deciding
|
|
111
|
+
* whether to skip migration for a destination directory.
|
|
112
|
+
*/
|
|
113
|
+
const SCAFFOLDING_ARTIFACTS = new Set(['_Index.md', '.DS_Store']);
|
|
114
|
+
/**
|
|
115
|
+
* Check whether a destination directory has meaningful content beyond
|
|
116
|
+
* scaffolding artifacts (_Index.md, .DS_Store) and empty subdirectories.
|
|
117
|
+
* Used for destination checks only — source checks use dirHasFiles().
|
|
118
|
+
*/
|
|
119
|
+
async function dirHasMeaningfulContent(dirPath) {
|
|
120
|
+
try {
|
|
121
|
+
await access(dirPath, constants.F_OK);
|
|
122
|
+
const entries = await readdir(dirPath, { withFileTypes: true });
|
|
123
|
+
for (const entry of entries) {
|
|
124
|
+
if (entry.isFile() && !SCAFFOLDING_ARTIFACTS.has(entry.name))
|
|
125
|
+
return true;
|
|
126
|
+
if (entry.isDirectory()) {
|
|
127
|
+
if (await dirHasMeaningfulContent(join(dirPath, entry.name)))
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return false;
|
|
94
132
|
}
|
|
95
133
|
catch {
|
|
96
134
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/core/migration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAQxD;;;;;GAKG;AACH,MAAM,aAAa,GAA2B;IAC5C,UAAU,EAAE,UAAU;IACtB,OAAO,EAAE,OAAO;IAChB,gBAAgB,EAAE,WAAW;IAC7B,WAAW,EAAE,WAAW;IACxB,SAAS,EAAE,SAAS;CACrB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAmB,EACnB,OAAuB;IAEvB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAEjD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,MAAsB;IAEtB,MAAM,MAAM,GAAoB;QAC9B,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,EAAE;QACf,MAAM,EAAE,EAAE;KACX,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAEjD,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAEpD,IAAI,CAAC;YACH,2CAA2C;YAC3C,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBAClC,SAAS;YACX,CAAC;YAED,
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/core/migration.ts"],"names":[],"mappings":"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"}
|