@adbayb/stack 2.7.0 → 2.9.0
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/README.md +22 -22
- package/configs/eslint/README.md +3 -3
- package/configs/eslint/presets/eslint.js +5 -0
- package/configs/eslint/presets/sonar.js +12 -38
- package/configs/eslint/presets/test.js +4 -1
- package/configs/prettier/README.md +5 -5
- package/configs/prettier/index.js +1 -1
- package/configs/typescript/README.md +3 -3
- package/dist/index.js +2 -4
- package/package.json +56 -54
- package/templates/multi-projects/examples/README.md +2 -2
- package/templates/multi-projects/examples/default/package.json.tmpl +1 -1
- package/templates/multi-projects/libraries/{{projectName}}/package.json.tmpl +20 -19
- package/templates/multi-projects/package.json.tmpl +9 -9
- package/templates/single-project/examples/README.md +2 -2
- package/templates/single-project/examples/default/package.json.tmpl +1 -1
- package/templates/single-project/package.json.tmpl +9 -9
- package/templates/single-project/{{projectName}}/package.json.tmpl +20 -19
package/README.md
CHANGED
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
|
|
10
10
|
`Stack` allows creating an NPM project in a **quick**, **easy** and **opinionated** way with:
|
|
11
11
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
12
|
+
- A unified monorepo-driven and git-driven approach for all kinds of projects (single-purpose library, multiple libraries, application(s), ...)
|
|
13
|
+
- Support for several application templates (for now, only a default template is available, but others can be added later)
|
|
14
|
+
- Standardized file structure including optional folder creation such as `examples`, `packages`, ...
|
|
15
|
+
- Enable all project lifecycle steps with commands from the setup, check, fix, build, and test to the versioning and release
|
|
16
|
+
- Built-in configuration preset setup (including Node/NPM runtime, Git ignore/hooks, [TypeScript](https://github.com/adbayb/stack/blob/main/stack/configs/typescript/), [ESLint](https://github.com/adbayb/stack/blob/main/stack/configs/eslint/), [Prettier](https://github.com/adbayb/stack/blob/main/stack/configs/prettier/), EditorConfig, Renovate, Changesets, and VSCode)
|
|
17
|
+
- A welcoming environment for users and contributors with the continuous integration setup, and the creation of `README.md`, `CONTRIBUTING.md`, and GitHub template files (including issue and pull request ones), ...
|
|
18
|
+
- An optimized development environment with command caching (no build needed if nothing changes)
|
|
19
19
|
|
|
20
20
|
<br>
|
|
21
21
|
|
|
@@ -63,27 +63,27 @@ stack release
|
|
|
63
63
|
|
|
64
64
|
### Available configurations
|
|
65
65
|
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
66
|
+
- [@adbayb/stack/eslint](https://github.com/adbayb/stack/blob/main/stack/configs/eslint/) to align logical and stylistic rules across projects.
|
|
67
|
+
- [@adbayb/stack/prettier](https://github.com/adbayb/stack/blob/main/stack/configs/prettier/) to align code formatting conventions across projects.
|
|
68
|
+
- [@adbayb/stack/typescript](https://github.com/adbayb/stack/blob/main/stack/configs/typescript/) to align type checking and processing across projects.
|
|
69
69
|
|
|
70
70
|
### Used technologies
|
|
71
71
|
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
-
|
|
72
|
+
- **Static code analysis**: ESLint, Prettier
|
|
73
|
+
- **Node package manager**: PNPM
|
|
74
|
+
- **Task orchestration**: Turborepo
|
|
75
|
+
- **Release**: Changesets
|
|
76
|
+
- **Testing**: Vitest
|
|
77
77
|
|
|
78
78
|
### Used conventions
|
|
79
79
|
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
-
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
80
|
+
- [Commits](https://www.conventionalcommits.org/)
|
|
81
|
+
- [Scripts](https://conventionalscripts.org/)
|
|
82
|
+
- [File Structure](https://nx.dev/concepts/decisions/folder-structure)
|
|
83
|
+
- Monorepo-first structure to:
|
|
84
|
+
- Keep a consistent file structure pattern across templates (ease template familiarity and onboarding).
|
|
85
|
+
- Ease examples setup.
|
|
86
|
+
- Not clutter the published package with development-related context, metadata, and artifacts.
|
|
87
87
|
|
|
88
88
|
<br>
|
|
89
89
|
|
package/configs/eslint/README.md
CHANGED
|
@@ -12,9 +12,9 @@ This package offers opinionated but extensible **[ESLint](https://eslint.org/)**
|
|
|
12
12
|
|
|
13
13
|
It allows to:
|
|
14
14
|
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
15
|
+
- Make collaboration across my projects effective (including onboarding with a consistent look and writing patterns).
|
|
16
|
+
- Include a minimum viable and required set of rules to foster maintainable, testable, secure, and green code over time.
|
|
17
|
+
- Accelerate development by reusing common configuration and convention defaults.
|
|
18
18
|
|
|
19
19
|
<br />
|
|
20
20
|
|
|
@@ -35,6 +35,7 @@ export const config = [
|
|
|
35
35
|
rules: {
|
|
36
36
|
"eqeqeq": "error",
|
|
37
37
|
"for-direction": "error",
|
|
38
|
+
"max-params": ["error", { max: 4 }],
|
|
38
39
|
"no-alert": "error",
|
|
39
40
|
"no-async-promise-executor": "error",
|
|
40
41
|
"no-case-declarations": "error",
|
|
@@ -53,11 +54,13 @@ export const config = [
|
|
|
53
54
|
"no-empty-pattern": "error",
|
|
54
55
|
"no-empty-static-block": "error",
|
|
55
56
|
"no-ex-assign": "error",
|
|
57
|
+
"no-extend-native": "error",
|
|
56
58
|
"no-extra-boolean-cast": "error",
|
|
57
59
|
"no-fallthrough": "error",
|
|
58
60
|
"no-global-assign": "error",
|
|
59
61
|
"no-invalid-regexp": "error",
|
|
60
62
|
"no-irregular-whitespace": "error",
|
|
63
|
+
"no-lonely-if": "error",
|
|
61
64
|
"no-loss-of-precision": "error",
|
|
62
65
|
"no-misleading-character-class": "error",
|
|
63
66
|
"no-nonoctal-decimal-escape": "error",
|
|
@@ -89,6 +92,7 @@ export const config = [
|
|
|
89
92
|
"no-unused-labels": "error",
|
|
90
93
|
"no-unused-private-class-members": "error",
|
|
91
94
|
"no-useless-backreference": "error",
|
|
95
|
+
"no-useless-call": "error",
|
|
92
96
|
"no-useless-catch": "error",
|
|
93
97
|
"no-useless-escape": "error",
|
|
94
98
|
"no-var": "error",
|
|
@@ -96,6 +100,7 @@ export const config = [
|
|
|
96
100
|
"object-shorthand": ["error", "always"],
|
|
97
101
|
"prefer-arrow-callback": ["error", { allowNamedFunctions: true }],
|
|
98
102
|
"prefer-const": "error",
|
|
103
|
+
"prefer-object-spread": "error",
|
|
99
104
|
"prefer-rest-params": "error",
|
|
100
105
|
"prefer-spread": "error",
|
|
101
106
|
"prefer-template": "error",
|
|
@@ -9,9 +9,6 @@ export const config = [
|
|
|
9
9
|
sonarjs: sonarjsPlugin,
|
|
10
10
|
},
|
|
11
11
|
rules: {
|
|
12
|
-
"sonarjs/alt-text": "error",
|
|
13
|
-
"sonarjs/anchor-has-content": "error",
|
|
14
|
-
"sonarjs/anchor-is-valid": "error",
|
|
15
12
|
"sonarjs/anchor-precedence": "error",
|
|
16
13
|
"sonarjs/arguments-order": "error",
|
|
17
14
|
"sonarjs/arguments-usage": "error",
|
|
@@ -35,7 +32,6 @@ export const config = [
|
|
|
35
32
|
"sonarjs/cors": "error",
|
|
36
33
|
"sonarjs/csrf": "error",
|
|
37
34
|
"sonarjs/cyclomatic-complexity": ["error", { threshold: 10 }], // Measure code testability (the more paths are, the more test cases need to be implemented)
|
|
38
|
-
"sonarjs/different-types-comparison": "error",
|
|
39
35
|
"sonarjs/disabled-auto-escaping": "error",
|
|
40
36
|
"sonarjs/disabled-resource-integrity": "error",
|
|
41
37
|
"sonarjs/duplicates-in-character-class": "error",
|
|
@@ -52,39 +48,35 @@ export const config = [
|
|
|
52
48
|
"sonarjs/for-loop-increment-sign": "error",
|
|
53
49
|
"sonarjs/frame-ancestors": "error",
|
|
54
50
|
"sonarjs/function-inside-loop": "error",
|
|
55
|
-
"sonarjs/function-name": "error",
|
|
56
51
|
"sonarjs/generator-without-yield": "error",
|
|
57
52
|
"sonarjs/hashing": "error",
|
|
58
53
|
"sonarjs/hidden-files": "error",
|
|
59
|
-
"sonarjs/html-has-lang": "error",
|
|
60
54
|
"sonarjs/in-operator-type-error": "error",
|
|
61
55
|
"sonarjs/inconsistent-function-call": "error",
|
|
62
56
|
"sonarjs/index-of-compare-to-positive-number": "error",
|
|
63
57
|
"sonarjs/insecure-cookie": "error",
|
|
64
58
|
"sonarjs/insecure-jwt-token": "error",
|
|
65
59
|
"sonarjs/inverted-assertion-arguments": "error",
|
|
66
|
-
"sonarjs/
|
|
60
|
+
"sonarjs/jsx-no-leaked-render": "error",
|
|
67
61
|
"sonarjs/label-position": "error",
|
|
68
62
|
"sonarjs/link-with-target-blank": "error",
|
|
63
|
+
"sonarjs/max-lines": ["error", { maximum: 1000 }],
|
|
64
|
+
"sonarjs/max-lines-per-function": ["error", { maximum: 200 }],
|
|
69
65
|
"sonarjs/max-switch-cases": "error",
|
|
70
|
-
"sonarjs/media-has-caption": "error",
|
|
71
66
|
"sonarjs/misplaced-loop-counter": "error",
|
|
72
|
-
"sonarjs/mouse-events-a11y": "error",
|
|
73
|
-
"sonarjs/new-cap": "error",
|
|
74
67
|
"sonarjs/new-operator-misuse": "error",
|
|
75
68
|
"sonarjs/no-all-duplicated-branches": "error",
|
|
76
69
|
"sonarjs/no-alphabetical-sort": "error",
|
|
77
70
|
"sonarjs/no-angular-bypass-sanitization": "error",
|
|
78
71
|
"sonarjs/no-array-delete": "error",
|
|
79
|
-
"sonarjs/no-array-index-key": "error",
|
|
80
72
|
"sonarjs/no-associative-arrays": "error",
|
|
81
73
|
"sonarjs/no-async-constructor": "error",
|
|
82
|
-
"sonarjs/no-base-to-string": "error",
|
|
83
74
|
"sonarjs/no-case-label-in-switch": "error",
|
|
84
75
|
"sonarjs/no-clear-text-protocols": "error",
|
|
85
76
|
"sonarjs/no-code-after-done": "error",
|
|
86
77
|
"sonarjs/no-collection-size-mischeck": "error",
|
|
87
78
|
"sonarjs/no-commented-code": "error",
|
|
79
|
+
"sonarjs/no-control-regex": "error",
|
|
88
80
|
"sonarjs/no-dead-store": "error",
|
|
89
81
|
"sonarjs/no-delete-var": "error",
|
|
90
82
|
"sonarjs/no-duplicate-in-composite": "error",
|
|
@@ -92,18 +84,21 @@ export const config = [
|
|
|
92
84
|
"sonarjs/no-element-overwrite": "error",
|
|
93
85
|
"sonarjs/no-empty-after-reluctant": "error",
|
|
94
86
|
"sonarjs/no-empty-alternatives": "error",
|
|
87
|
+
"sonarjs/no-empty-character-class": "error",
|
|
95
88
|
"sonarjs/no-empty-collection": "error",
|
|
96
89
|
"sonarjs/no-empty-group": "error",
|
|
97
90
|
"sonarjs/no-empty-test-file": "error",
|
|
98
91
|
"sonarjs/no-equals-in-for-termination": "error",
|
|
99
92
|
"sonarjs/no-exclusive-tests": "error",
|
|
100
|
-
"sonarjs/no-extend-native": "error",
|
|
101
93
|
"sonarjs/no-extra-arguments": "error",
|
|
94
|
+
"sonarjs/no-fallthrough": "error",
|
|
102
95
|
"sonarjs/no-global-this": "error",
|
|
103
96
|
"sonarjs/no-globals-shadowing": "error",
|
|
104
97
|
"sonarjs/no-gratuitous-expressions": "error",
|
|
105
|
-
"sonarjs/no-hardcoded-credentials": "error",
|
|
106
98
|
"sonarjs/no-hardcoded-ip": "error",
|
|
99
|
+
// eslint-disable-next-line sonarjs/no-hardcoded-passwords
|
|
100
|
+
"sonarjs/no-hardcoded-passwords": "error",
|
|
101
|
+
"sonarjs/no-hardcoded-secrets": "error",
|
|
107
102
|
"sonarjs/no-hook-setter-in-body": "error",
|
|
108
103
|
"sonarjs/no-identical-conditions": "error",
|
|
109
104
|
"sonarjs/no-identical-expressions": "error",
|
|
@@ -115,18 +110,17 @@ export const config = [
|
|
|
115
110
|
"sonarjs/no-in-misuse": "error",
|
|
116
111
|
"sonarjs/no-incomplete-assertions": "error",
|
|
117
112
|
"sonarjs/no-incorrect-string-concat": "error",
|
|
118
|
-
"sonarjs/no-infinite-loop": "error",
|
|
119
113
|
"sonarjs/no-internal-api-use": "error",
|
|
120
114
|
"sonarjs/no-intrusive-permissions": "error",
|
|
121
115
|
"sonarjs/no-invalid-await": "error",
|
|
116
|
+
"sonarjs/no-invalid-regexp": "error",
|
|
122
117
|
"sonarjs/no-invariant-returns": "error",
|
|
123
118
|
"sonarjs/no-inverted-boolean-check": "error",
|
|
124
119
|
"sonarjs/no-ip-forward": "error",
|
|
125
120
|
"sonarjs/no-labels": "error",
|
|
126
|
-
"sonarjs/no-lonely-if": "error",
|
|
127
121
|
"sonarjs/no-mime-sniff": "error",
|
|
128
122
|
"sonarjs/no-misleading-array-reverse": "error",
|
|
129
|
-
"sonarjs/no-
|
|
123
|
+
"sonarjs/no-misleading-character-class": "error",
|
|
130
124
|
"sonarjs/no-mixed-content": "error",
|
|
131
125
|
"sonarjs/no-nested-assignment": "error",
|
|
132
126
|
"sonarjs/no-nested-functions": "error",
|
|
@@ -141,10 +135,9 @@ export const config = [
|
|
|
141
135
|
"sonarjs/no-redundant-boolean": "error",
|
|
142
136
|
"sonarjs/no-redundant-jump": "error",
|
|
143
137
|
"sonarjs/no-referrer-policy": "error",
|
|
138
|
+
"sonarjs/no-regex-spaces": "error",
|
|
144
139
|
"sonarjs/no-same-argument-assert": "error",
|
|
145
140
|
"sonarjs/no-selector-parameter": "error",
|
|
146
|
-
"sonarjs/no-self-compare": "error",
|
|
147
|
-
"sonarjs/no-self-import": "error",
|
|
148
141
|
"sonarjs/no-small-switch": "error",
|
|
149
142
|
"sonarjs/no-table-as-layout": "error",
|
|
150
143
|
"sonarjs/no-undefined-argument": "error",
|
|
@@ -153,7 +146,6 @@ export const config = [
|
|
|
153
146
|
"sonarjs/no-unsafe-unzip": "error",
|
|
154
147
|
"sonarjs/no-unthrown-error": "error",
|
|
155
148
|
"sonarjs/no-unused-collection": "error",
|
|
156
|
-
"sonarjs/no-useless-call": "error",
|
|
157
149
|
"sonarjs/no-useless-increment": "error",
|
|
158
150
|
"sonarjs/no-useless-intersection": "error",
|
|
159
151
|
"sonarjs/no-useless-react-setstate": "error",
|
|
@@ -166,12 +158,8 @@ export const config = [
|
|
|
166
158
|
"sonarjs/os-command": "error",
|
|
167
159
|
"sonarjs/post-message": "error",
|
|
168
160
|
"sonarjs/prefer-default-last": "error",
|
|
169
|
-
"sonarjs/prefer-enum-initializers": "error",
|
|
170
|
-
"sonarjs/prefer-function-type": "error",
|
|
171
161
|
"sonarjs/prefer-immediate-return": "error",
|
|
172
|
-
"sonarjs/prefer-namespace-keyword": "error",
|
|
173
162
|
"sonarjs/prefer-object-literal": "error",
|
|
174
|
-
"sonarjs/prefer-object-spread": "error",
|
|
175
163
|
"sonarjs/prefer-promise-shorthand": "error",
|
|
176
164
|
"sonarjs/prefer-single-boolean-return": "error",
|
|
177
165
|
"sonarjs/prefer-type-guard": "error",
|
|
@@ -184,34 +172,20 @@ export const config = [
|
|
|
184
172
|
"sonarjs/session-regeneration": "error",
|
|
185
173
|
"sonarjs/single-char-in-character-classes": "error",
|
|
186
174
|
"sonarjs/single-character-alternation": "error",
|
|
187
|
-
"sonarjs/sonar-jsx-no-leaked-render": "error",
|
|
188
|
-
"sonarjs/sonar-max-lines": ["error", { maximum: 1000 }],
|
|
189
|
-
"sonarjs/sonar-max-lines-per-function": ["error", { maximum: 200 }],
|
|
190
|
-
"sonarjs/sonar-max-params": ["error", { max: 4 }],
|
|
191
|
-
"sonarjs/sonar-no-control-regex": "error",
|
|
192
|
-
"sonarjs/sonar-no-empty-character-class": "error",
|
|
193
|
-
"sonarjs/sonar-no-fallthrough": "error",
|
|
194
|
-
"sonarjs/sonar-no-invalid-regexp": "error",
|
|
195
|
-
"sonarjs/sonar-no-misleading-character-class": "error",
|
|
196
|
-
"sonarjs/sonar-no-regex-spaces": "error",
|
|
197
|
-
// "sonarjs/sonar-no-unused-class-component-methods": "error", // Disabled since it involves `eslint-plugin-react` activation
|
|
198
175
|
"sonarjs/sql-queries": "error",
|
|
199
176
|
"sonarjs/stable-tests": "error",
|
|
200
177
|
"sonarjs/stateful-regex": "error",
|
|
201
178
|
"sonarjs/strict-transport-security": "error",
|
|
202
179
|
"sonarjs/super-invocation": "error",
|
|
203
|
-
"sonarjs/switch-without-default": "error",
|
|
204
180
|
"sonarjs/table-header": "error",
|
|
205
181
|
"sonarjs/table-header-reference": "error",
|
|
206
182
|
"sonarjs/test-check-exception": "error",
|
|
207
183
|
"sonarjs/todo-tag": "warn",
|
|
208
184
|
"sonarjs/unicode-aware-regex": "error",
|
|
209
|
-
"sonarjs/unnecessary-character-escapes": "error",
|
|
210
185
|
"sonarjs/unused-named-groups": "error",
|
|
211
186
|
"sonarjs/unverified-certificate": "error",
|
|
212
187
|
"sonarjs/unverified-hostname": "error",
|
|
213
188
|
"sonarjs/updated-loop-counter": "error",
|
|
214
|
-
"sonarjs/use-isnan": "error",
|
|
215
189
|
"sonarjs/use-type-alias": "error",
|
|
216
190
|
"sonarjs/void-use": "error",
|
|
217
191
|
"sonarjs/weak-ssl": "error",
|
|
@@ -39,7 +39,10 @@ export const config = [
|
|
|
39
39
|
"vitest/prefer-equality-matcher": "error",
|
|
40
40
|
"vitest/prefer-hooks-in-order": "error",
|
|
41
41
|
"vitest/prefer-hooks-on-top": "error",
|
|
42
|
-
"vitest/prefer-lowercase-title":
|
|
42
|
+
"vitest/prefer-lowercase-title": [
|
|
43
|
+
"error",
|
|
44
|
+
{ ignore: ["describe"] },
|
|
45
|
+
],
|
|
43
46
|
"vitest/prefer-mock-promise-shorthand": "error",
|
|
44
47
|
"vitest/prefer-strict-equal": "error",
|
|
45
48
|
"vitest/prefer-to-be": "error",
|
|
@@ -12,9 +12,9 @@ This package offers opinionated but extensible **[Prettier](https://prettier.io/
|
|
|
12
12
|
|
|
13
13
|
It allows to:
|
|
14
14
|
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
15
|
+
- Make collaboration across my projects effective (including onboarding with a consistent look and writing patterns).
|
|
16
|
+
- Include a minimum viable and required set of rules to foster maintainable, testable, secure, and green code over time.
|
|
17
|
+
- Accelerate development by reusing common configuration and convention defaults.
|
|
18
18
|
|
|
19
19
|
<br />
|
|
20
20
|
|
|
@@ -52,8 +52,8 @@ Edit the root `package.json` file to include the following:
|
|
|
52
52
|
|
|
53
53
|
If you feel that tabbed indentation rendered on the GitHub web interface takes up too much (by default, most browsers display a tab character as 8 spaces), you can either:
|
|
54
54
|
|
|
55
|
-
-
|
|
56
|
-
-
|
|
55
|
+
- Edit your [GitHub profile appearance settings](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-user-account-settings/managing-your-tab-size-rendering-preference).
|
|
56
|
+
- Add (or update) a `.editorconfig` file at the root level to customize the tab size display on the GitHub interface.
|
|
57
57
|
|
|
58
58
|
```yaml
|
|
59
59
|
root = true
|
|
@@ -12,9 +12,9 @@ This package offers opinionated but extensible **[TypeScript](https://www.typesc
|
|
|
12
12
|
|
|
13
13
|
It allows to:
|
|
14
14
|
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
15
|
+
- Make collaboration across my projects effective (including onboarding with a consistent look and writing patterns).
|
|
16
|
+
- Include a minimum viable and required set of rules to foster maintainable, testable, secure, and green code over time.
|
|
17
|
+
- Accelerate development by reusing common configuration and convention defaults.
|
|
18
18
|
|
|
19
19
|
<br />
|
|
20
20
|
|
package/dist/index.js
CHANGED
|
@@ -186,7 +186,7 @@ const ESLINT_EXTENSIONS = [
|
|
|
186
186
|
"mdx"
|
|
187
187
|
];
|
|
188
188
|
|
|
189
|
-
var version = "2.
|
|
189
|
+
var version = "2.9.0";
|
|
190
190
|
|
|
191
191
|
const createWatchCommand = (program)=>{
|
|
192
192
|
program.command({
|
|
@@ -291,7 +291,6 @@ const fixLinter = eslint({
|
|
|
291
291
|
});
|
|
292
292
|
|
|
293
293
|
const PRETTIER_IGNORE_FILES = [
|
|
294
|
-
"CHANGELOG.md",
|
|
295
294
|
"pnpm-lock.yaml"
|
|
296
295
|
];
|
|
297
296
|
const fixFormatting = async (files)=>{
|
|
@@ -300,8 +299,7 @@ const fixFormatting = async (files)=>{
|
|
|
300
299
|
prettierFiles.push(`"**/!(${PRETTIER_IGNORE_FILES.join("|")})"`);
|
|
301
300
|
} else {
|
|
302
301
|
prettierFiles = files.filter((file)=>{
|
|
303
|
-
return !PRETTIER_IGNORE_FILES.some((filename)=>file.endsWith(filename))
|
|
304
|
-
file !== "README.md";
|
|
302
|
+
return !PRETTIER_IGNORE_FILES.some((filename)=>file.endsWith(filename));
|
|
305
303
|
});
|
|
306
304
|
if (prettierFiles.length === 0) return;
|
|
307
305
|
}
|
package/package.json
CHANGED
|
@@ -1,88 +1,90 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adbayb/stack",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.9.0",
|
|
4
4
|
"description": "My opinionated JavaScript-based toolchain",
|
|
5
|
-
"publishConfig": {
|
|
6
|
-
"access": "public"
|
|
7
|
-
},
|
|
8
|
-
"files": [
|
|
9
|
-
"bin",
|
|
10
|
-
"configs",
|
|
11
|
-
"dist",
|
|
12
|
-
"templates"
|
|
13
|
-
],
|
|
14
|
-
"bin": {
|
|
15
|
-
"stack": "./bin/index.js"
|
|
16
|
-
},
|
|
17
|
-
"type": "module",
|
|
18
|
-
"exports": {
|
|
19
|
-
".": {
|
|
20
|
-
"source": "./src/index.ts",
|
|
21
|
-
"default": "./dist/index.js"
|
|
22
|
-
},
|
|
23
|
-
"./eslint": "./configs/eslint/index.js",
|
|
24
|
-
"./prettier": "./configs/prettier/index.js",
|
|
25
|
-
"./typescript": "./configs/typescript/index.json"
|
|
26
|
-
},
|
|
27
5
|
"keywords": [
|
|
28
6
|
"stack",
|
|
29
7
|
"scripts",
|
|
30
8
|
"toolchain",
|
|
31
9
|
"development"
|
|
32
10
|
],
|
|
33
|
-
"author": {
|
|
34
|
-
"name": "Ayoub Adib",
|
|
35
|
-
"email": "adbayb@gmail.com",
|
|
36
|
-
"url": "https://twitter.com/adbayb"
|
|
37
|
-
},
|
|
38
11
|
"repository": {
|
|
39
12
|
"type": "git",
|
|
40
13
|
"url": "https://github.com/adbayb/stack.git",
|
|
41
14
|
"directory": "applications/stack"
|
|
42
15
|
},
|
|
43
16
|
"license": "MIT",
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
17
|
+
"author": {
|
|
18
|
+
"name": "Ayoub Adib",
|
|
19
|
+
"email": "adbayb@gmail.com",
|
|
20
|
+
"url": "https://twitter.com/adbayb"
|
|
47
21
|
},
|
|
22
|
+
"type": "module",
|
|
23
|
+
"exports": {
|
|
24
|
+
".": {
|
|
25
|
+
"source": "./src/index.ts",
|
|
26
|
+
"default": "./dist/index.js"
|
|
27
|
+
},
|
|
28
|
+
"./eslint": "./configs/eslint/index.js",
|
|
29
|
+
"./prettier": "./configs/prettier/index.js",
|
|
30
|
+
"./typescript": "./configs/typescript/index.json"
|
|
31
|
+
},
|
|
32
|
+
"bin": {
|
|
33
|
+
"stack": "./bin/index.js"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"bin",
|
|
37
|
+
"configs",
|
|
38
|
+
"dist",
|
|
39
|
+
"templates"
|
|
40
|
+
],
|
|
48
41
|
"dependencies": {
|
|
49
42
|
"@changesets/changelog-github": "^0.5.0",
|
|
50
|
-
"@changesets/cli": "^2.27.
|
|
51
|
-
"@commitlint/cli": "^19.
|
|
52
|
-
"@commitlint/config-conventional": "^19.
|
|
53
|
-
"@eslint/compat": "^1.2.
|
|
43
|
+
"@changesets/cli": "^2.27.10",
|
|
44
|
+
"@commitlint/cli": "^19.6.0",
|
|
45
|
+
"@commitlint/config-conventional": "^19.6.0",
|
|
46
|
+
"@eslint/compat": "^1.2.4",
|
|
54
47
|
"@eslint/eslintrc": "^3.2.0",
|
|
55
|
-
"@stylistic/eslint-plugin": "^2.
|
|
56
|
-
"@vitest/eslint-plugin": "^1.1.
|
|
48
|
+
"@stylistic/eslint-plugin": "^2.11.0",
|
|
49
|
+
"@vitest/eslint-plugin": "^1.1.14",
|
|
50
|
+
"eslint": "^9.16.0",
|
|
57
51
|
"eslint-config-prettier": "^9.1.0",
|
|
58
|
-
"eslint-import-resolver-typescript": "^3.
|
|
52
|
+
"eslint-import-resolver-typescript": "^3.7.0",
|
|
59
53
|
"eslint-plugin-depend": "^0.12.0",
|
|
60
|
-
"eslint-plugin-import-x": "^4.
|
|
54
|
+
"eslint-plugin-import-x": "^4.5.0",
|
|
61
55
|
"eslint-plugin-jest-formatting": "^3.1.0",
|
|
62
|
-
"eslint-plugin-jsdoc": "^50.
|
|
56
|
+
"eslint-plugin-jsdoc": "^50.6.0",
|
|
63
57
|
"eslint-plugin-mdx": "^3.1.5",
|
|
64
|
-
"eslint-plugin-n": "^17.
|
|
58
|
+
"eslint-plugin-n": "^17.14.0",
|
|
65
59
|
"eslint-plugin-prettier": "^5.2.1",
|
|
66
|
-
"eslint-plugin-react-hooks-extra": "^1.16.1",
|
|
67
|
-
"eslint-plugin-react-hooks": "^5.0.0",
|
|
68
|
-
"eslint-plugin-react-web-api": "^1.16.1",
|
|
69
60
|
"eslint-plugin-react": "^7.37.2",
|
|
70
|
-
"eslint-plugin-
|
|
71
|
-
"eslint-plugin-
|
|
72
|
-
"eslint-plugin-
|
|
73
|
-
"eslint": "^
|
|
61
|
+
"eslint-plugin-react-hooks": "^5.1.0",
|
|
62
|
+
"eslint-plugin-react-hooks-extra": "^1.18.0",
|
|
63
|
+
"eslint-plugin-react-web-api": "^1.18.0",
|
|
64
|
+
"eslint-plugin-sonarjs": "^3.0.1",
|
|
65
|
+
"eslint-plugin-sort-keys-custom-order": "^2.2.1",
|
|
66
|
+
"eslint-plugin-unicorn": "^56.0.1",
|
|
74
67
|
"fdir": "^6.4.2",
|
|
75
|
-
"globals": "^15.
|
|
76
|
-
"prettier": "^3.
|
|
68
|
+
"globals": "^15.13.0",
|
|
69
|
+
"prettier": "^3.4.2",
|
|
70
|
+
"prettier-plugin-packagejson": "^2.5.6",
|
|
77
71
|
"termost": "^1.4.0",
|
|
78
|
-
"turbo": "^2.3.
|
|
79
|
-
"typescript
|
|
80
|
-
"typescript": "^
|
|
72
|
+
"turbo": "^2.3.3",
|
|
73
|
+
"typescript": "^5.7.2",
|
|
74
|
+
"typescript-eslint": "^8.17.0"
|
|
75
|
+
},
|
|
76
|
+
"devDependencies": {
|
|
77
|
+
"@types/node": "22.10.1",
|
|
78
|
+
"quickbundle": "2.8.0"
|
|
79
|
+
},
|
|
80
|
+
"publishConfig": {
|
|
81
|
+
"access": "public",
|
|
82
|
+
"registry": "https://registry.npmjs.org"
|
|
81
83
|
},
|
|
82
84
|
"scripts": {
|
|
85
|
+
"build": "quickbundle build",
|
|
83
86
|
"prestart": "pnpm build",
|
|
84
87
|
"start": "./bin/index.js",
|
|
85
|
-
"build": "quickbundle build",
|
|
86
88
|
"watch": "quickbundle watch"
|
|
87
89
|
}
|
|
88
90
|
}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "{{projectName}}",
|
|
3
|
-
"description": "{{projectDescription}}",
|
|
4
3
|
"version": "0.0.0",
|
|
5
|
-
"
|
|
6
|
-
|
|
4
|
+
"description": "{{projectDescription}}",
|
|
5
|
+
"homepage": "https://github.com/{{repoId}}/tree/main/{{projectName}}#readme",
|
|
6
|
+
"bugs": "https://github.com/{{repoId}}/issues",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "{{projectUrl}}",
|
|
10
|
+
"directory": "libraries/{{projectName}}"
|
|
7
11
|
},
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"author": "Ayoub Adib <adbayb@gmail.com> (https://twitter.com/adbayb)",
|
|
11
14
|
"sideEffects": false,
|
|
12
15
|
"type": "module",
|
|
13
16
|
"exports": {
|
|
@@ -19,21 +22,19 @@
|
|
|
19
22
|
"default": "./dist/index.mjs"
|
|
20
23
|
}
|
|
21
24
|
},
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"homepage": "https://github.com/{{repoId}}/tree/main/{{projectName}}#readme",
|
|
26
|
-
"repository": {
|
|
27
|
-
"type": "git",
|
|
28
|
-
"url": "{{projectUrl}}",
|
|
29
|
-
"directory": "libraries/{{projectName}}"
|
|
30
|
-
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist"
|
|
27
|
+
],
|
|
31
28
|
"scripts": {
|
|
32
|
-
"
|
|
29
|
+
"build": "pnpm clean && quickbundle build",
|
|
33
30
|
"clean": "rm -rf dist",
|
|
31
|
+
"prepublishOnly": "pnpm build",
|
|
34
32
|
"start": "pnpm watch",
|
|
35
|
-
"
|
|
36
|
-
"watch": "quickbundle watch"
|
|
37
|
-
|
|
33
|
+
"test": "vitest",
|
|
34
|
+
"watch": "quickbundle watch"
|
|
35
|
+
},
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public",
|
|
38
|
+
"registry": "https://registry.npmjs.org"
|
|
38
39
|
}
|
|
39
40
|
}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "root",
|
|
3
|
-
"private": true,
|
|
4
3
|
"version": "0.0.0",
|
|
4
|
+
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"
|
|
8
|
-
"clean": "stack clean",
|
|
7
|
+
"build": "stack build",
|
|
9
8
|
"check": "stack check",
|
|
9
|
+
"clean": "stack clean",
|
|
10
10
|
"fix": "stack fix",
|
|
11
|
-
"
|
|
12
|
-
"build": "stack build",
|
|
13
|
-
"watch": "stack watch",
|
|
14
|
-
"test": "stack test",
|
|
11
|
+
"prepare": "stack install",
|
|
15
12
|
"release:log": "stack release --log",
|
|
13
|
+
"release:publish": "stack release --publish",
|
|
16
14
|
"release:version": "stack release --tag",
|
|
17
|
-
"
|
|
15
|
+
"start": "stack start",
|
|
16
|
+
"test": "stack test",
|
|
17
|
+
"watch": "stack watch"
|
|
18
18
|
},
|
|
19
19
|
"prettier": "@adbayb/stack/prettier",
|
|
20
20
|
"packageManager": "pnpm@{{npmVersion}}",
|
|
21
21
|
"engines": {
|
|
22
22
|
"node": ">=22.0.0",
|
|
23
|
-
"pnpm": ">=9.0.0",
|
|
24
23
|
"npm": "please-use-pnpm",
|
|
24
|
+
"pnpm": ">=9.0.0",
|
|
25
25
|
"yarn": "please-use-pnpm"
|
|
26
26
|
}
|
|
27
27
|
}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "root",
|
|
3
|
-
"private": true,
|
|
4
3
|
"version": "0.0.0",
|
|
4
|
+
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"
|
|
8
|
-
"clean": "stack clean",
|
|
7
|
+
"build": "stack build",
|
|
9
8
|
"check": "stack check",
|
|
9
|
+
"clean": "stack clean",
|
|
10
10
|
"fix": "stack fix",
|
|
11
|
-
"
|
|
12
|
-
"build": "stack build",
|
|
13
|
-
"watch": "stack watch",
|
|
14
|
-
"test": "stack test",
|
|
11
|
+
"prepare": "stack install",
|
|
15
12
|
"release:log": "stack release --log",
|
|
13
|
+
"release:publish": "stack release --publish",
|
|
16
14
|
"release:version": "stack release --tag",
|
|
17
|
-
"
|
|
15
|
+
"start": "stack start",
|
|
16
|
+
"test": "stack test",
|
|
17
|
+
"watch": "stack watch"
|
|
18
18
|
},
|
|
19
19
|
"prettier": "@adbayb/stack/prettier",
|
|
20
20
|
"packageManager": "pnpm@{{npmVersion}}",
|
|
21
21
|
"engines": {
|
|
22
22
|
"node": ">=22.0.0",
|
|
23
|
-
"pnpm": ">=9.0.0",
|
|
24
23
|
"npm": "please-use-pnpm",
|
|
24
|
+
"pnpm": ">=9.0.0",
|
|
25
25
|
"yarn": "please-use-pnpm"
|
|
26
26
|
}
|
|
27
27
|
}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "{{projectName}}",
|
|
3
|
-
"description": "{{projectDescription}}",
|
|
4
3
|
"version": "0.0.0",
|
|
5
|
-
"
|
|
6
|
-
|
|
4
|
+
"description": "{{projectDescription}}",
|
|
5
|
+
"homepage": "https://github.com/{{repoId}}/tree/main/{{projectName}}#readme",
|
|
6
|
+
"bugs": "https://github.com/{{repoId}}/issues",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "{{projectUrl}}",
|
|
10
|
+
"directory": "{{projectName}}"
|
|
7
11
|
},
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"author": "Ayoub Adib <adbayb@gmail.com> (https://twitter.com/adbayb)",
|
|
11
14
|
"sideEffects": false,
|
|
12
15
|
"type": "module",
|
|
13
16
|
"exports": {
|
|
@@ -19,21 +22,19 @@
|
|
|
19
22
|
"default": "./dist/index.mjs"
|
|
20
23
|
}
|
|
21
24
|
},
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"homepage": "https://github.com/{{repoId}}/tree/main/{{projectName}}#readme",
|
|
26
|
-
"repository": {
|
|
27
|
-
"type": "git",
|
|
28
|
-
"url": "{{projectUrl}}",
|
|
29
|
-
"directory": "{{projectName}}"
|
|
30
|
-
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist"
|
|
27
|
+
],
|
|
31
28
|
"scripts": {
|
|
32
|
-
"
|
|
29
|
+
"build": "pnpm clean && quickbundle build",
|
|
33
30
|
"clean": "rm -rf dist",
|
|
31
|
+
"prepublishOnly": "pnpm build",
|
|
34
32
|
"start": "pnpm watch",
|
|
35
|
-
"
|
|
36
|
-
"watch": "quickbundle watch"
|
|
37
|
-
|
|
33
|
+
"test": "vitest",
|
|
34
|
+
"watch": "quickbundle watch"
|
|
35
|
+
},
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public",
|
|
38
|
+
"registry": "https://registry.npmjs.org"
|
|
38
39
|
}
|
|
39
40
|
}
|