-
Notifications
You must be signed in to change notification settings - Fork 0
/
folderStructure.mjs
100 lines (88 loc) · 2.5 KB
/
folderStructure.mjs
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
// @ts-check
import { createFolderStructure } from "eslint-plugin-project-structure";
export const folderStructureConfig = createFolderStructure({
structure: [
{ name: "*" },
{
name: "src",
children: [
{ ruleId: "hooks_folder" },
{ ruleId: "examples_folder" },
{ name: "features", ruleId: "components_folder" },
],
},
],
rules: {
hook_folder: {
name: "use{PascalCase}",
children: [
{ ruleId: "hooks_folder" },
// This rule will only be considered when the final nesting of the hooks_folder rule occurs.
{ name: "hooks", children: [{ name: "use{PascalCase}(.test)?.ts" }] },
{ name: "{folderName}(.(test|api|types|consts))?.ts" },
],
},
hooks_folder: {
name: "hooks",
folderRecursionLimit: 2,
children: [
{ ruleId: "hook_folder" },
{ name: "use{PascalCase}(.test)?.ts" },
],
},
component_folder: {
name: "{PascalCase}",
children: [
{ ruleId: "components_folder" },
{ ruleId: "hooks_folder" },
{ name: "{folderName}.(api|types|consts).ts" },
{ name: "{FolderName}(.test)?.tsx" },
],
},
components_folder: {
name: "components",
children: [
{ ruleId: "component_folder" },
{ name: "{PascalCase}(.test)?.tsx" },
],
},
onlyFilesExample_folder: {
name: "onlyFilesExample",
children: [{ name: "{camelCase}.ts" }],
},
onlyFoldersExample_folder: {
name: "onlyFoldersExample",
children: [
{ name: "{camelCase}", children: [{ name: "{camelCase}.ts" }] },
],
},
extensionsExample_folder: {
name: "extensionsExample",
children: [{ name: "{SNAKE_CASE}.(svg|jpg|png|ico)" }],
},
enforceExistenceExample_folder: {
name: "enforceExistenceExample",
children: [
{ name: "stories", children: [{ name: "{camelCase}.stories.tsx" }] },
{ name: "{PascalCase}.test.tsx" },
{
name: "{PascalCase}.tsx",
enforceExistence: [
"stories/{nodeName}.stories.tsx",
"{NodeName}.test.tsx",
],
},
],
},
examples_folder: {
name: "examples",
children: [
{ ruleId: "enforceExistenceExample_folder" },
{ ruleId: "extensionsExample_folder" },
{ ruleId: "onlyFilesExample_folder" },
{ ruleId: "onlyFoldersExample_folder" },
{ name: "{camelCase}Example.(ts|tsx)" },
],
},
},
});