Skip to content

Commit 8b1c763

Browse files
committed
feat(cli): ignore all hidden files
1 parent ca1c325 commit 8b1c763

File tree

5 files changed

+84
-29
lines changed

5 files changed

+84
-29
lines changed

cli/command-check.spec.ts

Lines changed: 60 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,29 +53,14 @@ describe("check command", () => {
5353
docs: {
5454
assets: {
5555
images: {
56-
"bg.png": imageFile(),
5756
"foo.png": imageFile(),
58-
"foo2.png": imageFile(),
59-
"foo3.png": imageFile(),
60-
"foo4.png": imageFile(),
61-
"foo5.png": imageFile(),
62-
"foo6.png": imageFile(),
6357
},
6458
},
6559
css: {
6660
"slides.css": slideCssFile(),
6761
},
6862
markdown: {
6963
"01-getting-started.md": "![](./assets/images/foo.png)",
70-
"02-html-images.md":
71-
'<!-- .slide: data-background="./assets/images/bg.png" -->\n' +
72-
'<img src="./assets/images/foo2.png"/>\n' +
73-
'<img class="tc-bg" src="./assets/images/foo3.png"/>\n' +
74-
'<div>\n' +
75-
' <img src="./assets/images/foo4.png" />\n' +
76-
'</div>\n' +
77-
'<img src="./assets/images/foo5.png"/><img src="./assets/images/foo6.png"/>\n'
78-
,
7964
"99-lab-getting-started.md": labSlideFile({
8065
title: "Getting started",
8166
cmd: "Go to 01-getting-started",
@@ -84,7 +69,6 @@ describe("check command", () => {
8469
scripts: {
8570
"slides.js": slideJsFile([
8671
"01-getting-started.md",
87-
"02-html-images.md",
8872
"99-lab-getting-started.md",
8973
]),
9074
},
@@ -226,8 +210,14 @@ describe("check command", () => {
226210
docs: {
227211
assets: {
228212
images: {
213+
"bg.png": imageFile(),
229214
"intro.png": imageFile(),
230215
"logo-sfeir-blanc.png": imageFile(),
216+
"foo2.png": imageFile(),
217+
"foo3.png": imageFile(),
218+
"foo4.png": imageFile(),
219+
"foo5.png": imageFile(),
220+
"foo6.png": imageFile(),
231221
speakers: {
232222
"CMA.jpg": imageFile(),
233223
"the-conf.svg": imageFile(),
@@ -265,11 +255,21 @@ describe("check command", () => {
265255
266256
![](./assets/images/intro.png)
267257
`,
258+
"02-html-images.md":
259+
'<!-- .slide: data-background="./assets/images/bg.png" -->\n' +
260+
'<img src="./assets/images/foo2.png"/>\n' +
261+
'<img class="tc-bg" src="./assets/images/foo3.png"/>\n' +
262+
'<div>\n' +
263+
' <img src="./assets/images/foo4.png" />\n' +
264+
'</div>\n' +
265+
'<img src="./assets/images/foo5.png"/><img src="./assets/images/foo6.png"/>\n'
266+
,
268267
},
269268
scripts: {
270269
"slides.js": slideJsFile([
271270
"00-speaker-cma.md",
272271
"01-getting-started.md",
272+
"02-html-images.md"
273273
]),
274274
},
275275
...web_modules(),
@@ -283,6 +283,50 @@ describe("check command", () => {
283283
console.error(getErrors());
284284
expect(getErrors()).toHaveLength(0);
285285
});
286+
287+
288+
it("should ignore hidden files", async () => {
289+
const rootDir = buildProject({
290+
...configFile({ stepCommandPrefix: "npm run " }),
291+
'.DS_Store': '',
292+
'Thumbs.db': '',
293+
docs: {
294+
'.DS_Store': '',
295+
'Thumbs.db': '',
296+
assets: {
297+
'.DS_Store': '',
298+
'Thumbs.db': '',
299+
images: {
300+
'.hidden-image.png': imageFile(),
301+
'.DS_Store': '',
302+
'Thumbs.db': '',
303+
}
304+
},
305+
css: {
306+
"slides.css": slideCssFile(),
307+
},
308+
markdown: {
309+
'.hidden-slide.md': '',
310+
'Thumbs.db': '',
311+
'.DS_Store': '',
312+
},
313+
scripts: {
314+
"slides.js": slideJsFile(),
315+
},
316+
...web_modules(),
317+
},
318+
steps: {
319+
'.DS_Store': '',
320+
'Thumbs.db': '',
321+
'.hidden-slide.md': '',
322+
"package.json": packageJsonFile(),
323+
},
324+
});
325+
326+
await checkCommandInternal({ type: "check", rootDir });
327+
console.error(getErrors());
328+
expect(getErrors()).toHaveLength(0);
329+
});
286330
});
287331

288332
describe("invalid projects", () => {

cli/command/check/check-root-dir.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1+
import { isDirectory, readdirSync } from "../../utils/fs.utils";
12
import { CheckCommand } from "../../cli";
23
import { check } from "../../utils/assert.utils";
3-
import fs from "node:fs";
4-
import { isDirectory } from "../../utils/fs.utils";
54

65
export function checkRootDir(command: CheckCommand) {
76
check(
@@ -35,5 +34,5 @@ export function checkRootDir(command: CheckCommand) {
3534
}
3635

3736
function readRootDir(command: CheckCommand) {
38-
return fs.readdirSync(command.rootDir);
37+
return readdirSync(command.rootDir);
3938
}

cli/utils/fs.utils.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import fs from "node:fs";
1+
import fs, { PathLike } from "node:fs";
22
import path from "node:path";
33

44
export function isDirectory(dir: string, file?: string): boolean {
@@ -12,3 +12,16 @@ export function isDirectory(dir: string, file?: string): boolean {
1212
return false;
1313
}
1414
}
15+
16+
export function readdirSync(pathLike: PathLike,
17+
options?:
18+
| {
19+
encoding: BufferEncoding | null;
20+
withFileTypes?: false | undefined;
21+
recursive?: boolean | undefined;
22+
}
23+
| BufferEncoding
24+
| null,
25+
): string[] {
26+
return fs.readdirSync(pathLike, options).filter(file => !file.startsWith('.') && file !== 'Thumbs.db')
27+
}

cli/utils/labs.utils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { isDirectory, readdirSync } from "./fs.utils";
12
import {
23
labPackageJsonPath,
34
labReadmePath,
@@ -7,7 +8,6 @@ import {
78
} from "./path.utils";
89
import { ConfigJson } from "./config.utils";
910
import fs from "node:fs";
10-
import { isDirectory } from "./fs.utils";
1111
import { isNotDefined } from "./fp.utils";
1212

1313
export function isStepDirectoryExists(stepDirPath: string) {
@@ -88,7 +88,7 @@ export function getLabCommandTarget(labCommandRow: string, config: ConfigJson) {
8888
}
8989

9090
export function getAllLabsFromFs(rootDir: string, config: ConfigJson) {
91-
return fs.readdirSync(labsPath(rootDir), { encoding: "utf-8" })
91+
return readdirSync(labsPath(rootDir), { encoding: "utf-8" })
9292
.filter((filePath) => !config.ignoreStepsDirectories.includes(filePath))
9393
.filter(
9494
(filePath) => isDirectory(labsPath(rootDir), filePath),

cli/utils/slide.utils.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import {
66
docsPath,
77
slidePath,
88
} from "./path.utils";
9+
import { isDirectory, readdirSync } from "./fs.utils";
910
import { ConfigJson } from "./config.utils";
1011
import fs from "node:fs";
1112
import { isDefinedAndNotEmpty } from "./fp.utils";
12-
import { isDirectory } from "./fs.utils";
1313
import path from "node:path";
1414

1515
export interface SlideEntry {
@@ -33,11 +33,10 @@ export async function getSlideFilesFromSlidesJs(
3333
export function getSlideFilesFromFs(
3434
rootDir: string,
3535
): FilePath[] {
36-
return fs
37-
.readdirSync(path.resolve(docsMarkdownPath(rootDir)), {
38-
encoding: "utf-8",
39-
recursive: true,
40-
})
36+
return readdirSync(path.resolve(docsMarkdownPath(rootDir)), {
37+
encoding: "utf-8",
38+
recursive: true,
39+
})
4140
.filter((path) => path.endsWith(".md"));
4241
}
4342

@@ -134,7 +133,7 @@ export function getImagesPathFromSlides(
134133
export function getImagesPathFromFs(
135134
rootDir: string,
136135
): string[] {
137-
return fs.readdirSync(docsImagesPath(rootDir), {
136+
return readdirSync(docsImagesPath(rootDir), {
138137
encoding: "utf-8",
139138
recursive: true,
140139
}).filter((imagePath) => !isDirectory(docsImagesPath(rootDir), imagePath))

0 commit comments

Comments
 (0)