@rtorcato/js-tooling 1.0.9 ā 2.0.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 +2 -0
- package/dist/cli/index.js +11 -4
- package/package.json +196 -31
- package/tooling/commitlint/commitlint.mjs +26 -26
package/README.md
CHANGED
|
@@ -7,6 +7,8 @@ A comprehensive collection of JavaScript/TypeScript development tools and config
|
|
|
7
7
|
Install the package globally or use it directly with npx:
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
+
# Install globally
|
|
11
|
+
npm install -g @rtorcato/js-tooling
|
|
10
12
|
|
|
11
13
|
# Or use with npx
|
|
12
14
|
npx @rtorcato/js-tooling setup
|
package/dist/cli/index.js
CHANGED
|
@@ -44,8 +44,9 @@ program
|
|
|
44
44
|
try {
|
|
45
45
|
const fs = (await import('fs-extra')).default;
|
|
46
46
|
const path = (await import('node:path')).default;
|
|
47
|
-
// Get the package installation path
|
|
48
|
-
const
|
|
47
|
+
// Get the package installation path - CLI is in dist/cli/index.js, need to go up 3 levels
|
|
48
|
+
const cliFile = new URL(import.meta.url).pathname;
|
|
49
|
+
const packagePath = path.dirname(path.dirname(path.dirname(cliFile)));
|
|
49
50
|
const sourcePath = path.join(packagePath, source);
|
|
50
51
|
const targetPath = path.join(process.cwd(), target);
|
|
51
52
|
await fs.copy(sourcePath, targetPath);
|
|
@@ -64,12 +65,18 @@ program
|
|
|
64
65
|
.action(() => {
|
|
65
66
|
console.log(chalk.cyan('\nš ļø Available tooling configurations:\n'));
|
|
66
67
|
const configs = [
|
|
67
|
-
{
|
|
68
|
+
{
|
|
69
|
+
name: 'TypeScript',
|
|
70
|
+
desc: 'Base, React, Next.js, Node.js, Express configurations',
|
|
71
|
+
},
|
|
68
72
|
{ name: 'ESLint', desc: 'Base and Next.js ESLint configurations' },
|
|
69
73
|
{ name: 'Biome', desc: 'Fast formatter and linter configuration' },
|
|
70
74
|
{ name: 'Prettier', desc: 'Code formatter configuration' },
|
|
71
75
|
{ name: 'Vitest', desc: 'Testing framework configuration' },
|
|
72
|
-
{
|
|
76
|
+
{
|
|
77
|
+
name: 'Jest',
|
|
78
|
+
desc: 'Testing framework presets for browser and Node.js',
|
|
79
|
+
},
|
|
73
80
|
{ name: 'Playwright', desc: 'End-to-end testing configuration' },
|
|
74
81
|
{ name: 'Commitlint', desc: 'Conventional commit linting' },
|
|
75
82
|
{ name: 'Husky', desc: 'Git hooks for pre-commit validation' },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rtorcato/js-tooling",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "JavaScript and TypeScript tooling for Node.js, React, Next.js, and Vitest.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
"url": "https://github.com/rtorcato/js-tooling/issues"
|
|
21
21
|
},
|
|
22
22
|
"scripts": {
|
|
23
|
-
"build-dev": "rimraf ./dist && cross-env NODE_ENV=development node build.mjs &&
|
|
24
|
-
"build-prod": "rimraf ./dist && cross-env NODE_ENV=production node build.mjs &&
|
|
23
|
+
"build-dev": "rimraf ./dist && cross-env NODE_ENV=development node build.mjs && pnpm build-cli",
|
|
24
|
+
"build-prod": "rimraf ./dist && cross-env NODE_ENV=production node build.mjs && pnpm build-cli",
|
|
25
25
|
"build-cli": "rimraf ./dist/cli && tsc --project src/cli/tsconfig.json",
|
|
26
26
|
"prepublishOnly": "./scripts/fix-bins.sh",
|
|
27
27
|
"==================== Common ====================": "",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"check:fix": "pnpm exec biome check --config-path=tooling/biome/biome.json --fix src scripts",
|
|
31
31
|
"check": "pnpm exec biome check --config-path=tooling/biome/biome.json src scripts",
|
|
32
32
|
"prepare": "is-ci || husky",
|
|
33
|
-
"
|
|
33
|
+
"typecheck": "tsc --noEmit --project src/cli/tsconfig.json",
|
|
34
34
|
"test": "vitest",
|
|
35
35
|
"test:watch": "vitest --watch",
|
|
36
36
|
"coverage": "vitest run --coverage",
|
|
@@ -79,43 +79,37 @@
|
|
|
79
79
|
"./semantic-release/docker": "./tooling/semantic-release/docker.mjs"
|
|
80
80
|
},
|
|
81
81
|
"dependencies": {
|
|
82
|
+
"chalk": "^5.6.2",
|
|
83
|
+
"commander": "^14.0.1",
|
|
84
|
+
"fs-extra": "^11.3.2",
|
|
85
|
+
"inquirer": "^12.10.0"
|
|
86
|
+
},
|
|
87
|
+
"devDependencies": {
|
|
82
88
|
"@biomejs/biome": "^2.3.0",
|
|
83
89
|
"@commitlint/cli": "^20.1.0",
|
|
84
90
|
"@commitlint/config-conventional": "^20.0.0",
|
|
91
|
+
"@next/eslint-plugin-next": "^16.0.0",
|
|
85
92
|
"@playwright/test": "^1.56.1",
|
|
93
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
86
94
|
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
87
95
|
"@semantic-release/exec": "^7.1.0",
|
|
88
96
|
"@semantic-release/git": "^10.0.1",
|
|
97
|
+
"@semantic-release/github": "^12.0.0",
|
|
89
98
|
"@semantic-release/npm": "^13.1.1",
|
|
90
99
|
"@semantic-release/release-notes-generator": "^14.1.0",
|
|
91
100
|
"@total-typescript/ts-reset": "0.6.1",
|
|
101
|
+
"@types/fs-extra": "^11.0.4",
|
|
102
|
+
"@types/inquirer": "^9.0.9",
|
|
92
103
|
"@types/node": "^24.9.1",
|
|
93
104
|
"@typescript-eslint/eslint-plugin": "^8.46.2",
|
|
94
105
|
"@typescript-eslint/parser": "^8.46.2",
|
|
95
106
|
"@vitejs/plugin-react": "^5.1.0",
|
|
96
|
-
"chalk": "^5.6.2",
|
|
97
|
-
"commander": "^14.0.1",
|
|
98
107
|
"commitizen": "^4.3.1",
|
|
99
108
|
"conventional-changelog-conventionalcommits": "^9.1.0",
|
|
109
|
+
"cross-env": "^10.1.0",
|
|
100
110
|
"cz-conventional-changelog": "^3.3.0",
|
|
101
111
|
"esbuild": "^0.25.11",
|
|
102
112
|
"esbuild-node-externals": "^1.18.0",
|
|
103
|
-
"fs-extra": "^11.3.2",
|
|
104
|
-
"husky": "^9.1.7",
|
|
105
|
-
"inquirer": "^12.10.0",
|
|
106
|
-
"lint-staged": "^16.2.6",
|
|
107
|
-
"semantic-release": "^25.0.1",
|
|
108
|
-
"typescript": "^5.9.3",
|
|
109
|
-
"typescript-eslint": "latest",
|
|
110
|
-
"vitest": "4.0.3"
|
|
111
|
-
},
|
|
112
|
-
"devDependencies": {
|
|
113
|
-
"@next/eslint-plugin-next": "^16.0.0",
|
|
114
|
-
"@semantic-release/changelog": "^6.0.3",
|
|
115
|
-
"@semantic-release/github": "^12.0.0",
|
|
116
|
-
"@types/fs-extra": "^11.0.4",
|
|
117
|
-
"@types/inquirer": "^9.0.9",
|
|
118
|
-
"cross-env": "^10.1.0",
|
|
119
113
|
"eslint": "9.38.0",
|
|
120
114
|
"eslint-config-airbnb": "^19.0.4",
|
|
121
115
|
"eslint-config-prettier": "10.1.8",
|
|
@@ -126,25 +120,193 @@
|
|
|
126
120
|
"eslint-plugin-react": "^7.37.5",
|
|
127
121
|
"eslint-plugin-react-hooks": "^7.0.0",
|
|
128
122
|
"eslint-plugin-vitest": "0.5.4",
|
|
123
|
+
"husky": "^9.1.7",
|
|
129
124
|
"is-ci": "^4.1.0",
|
|
125
|
+
"lint-staged": "^16.2.6",
|
|
130
126
|
"prettier": "^3.6.2",
|
|
131
127
|
"prettier-plugin-tailwindcss": "^0.7.1",
|
|
132
128
|
"rimraf": "6.0.1",
|
|
129
|
+
"semantic-release": "^25.0.1",
|
|
133
130
|
"ts-jest": "^29.4.5",
|
|
134
|
-
"tsup": "8.5.0"
|
|
131
|
+
"tsup": "8.5.0",
|
|
132
|
+
"typescript": "^5.9.3",
|
|
133
|
+
"typescript-eslint": "latest",
|
|
134
|
+
"vitest": "4.0.3"
|
|
135
|
+
},
|
|
136
|
+
"peerDependencies": {
|
|
137
|
+
"@biomejs/biome": "^2.0.0",
|
|
138
|
+
"@commitlint/cli": "^20.0.0",
|
|
139
|
+
"@commitlint/config-conventional": "^20.0.0",
|
|
140
|
+
"@next/eslint-plugin-next": "^16.0.0",
|
|
141
|
+
"@playwright/test": "^1.50.0",
|
|
142
|
+
"@semantic-release/changelog": "^6.0.0",
|
|
143
|
+
"@semantic-release/commit-analyzer": "^13.0.0",
|
|
144
|
+
"@semantic-release/exec": "^7.0.0",
|
|
145
|
+
"@semantic-release/git": "^10.0.0",
|
|
146
|
+
"@semantic-release/github": "^12.0.0",
|
|
147
|
+
"@semantic-release/npm": "^13.0.0",
|
|
148
|
+
"@semantic-release/release-notes-generator": "^14.0.0",
|
|
149
|
+
"@total-typescript/ts-reset": "^0.6.0",
|
|
150
|
+
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
151
|
+
"@typescript-eslint/parser": "^8.0.0",
|
|
152
|
+
"@vitejs/plugin-react": "^5.0.0",
|
|
153
|
+
"commitizen": "^4.0.0",
|
|
154
|
+
"conventional-changelog-conventionalcommits": "^9.0.0",
|
|
155
|
+
"cz-conventional-changelog": "^3.0.0",
|
|
156
|
+
"esbuild": "^0.25.0",
|
|
157
|
+
"esbuild-node-externals": "^1.0.0",
|
|
158
|
+
"eslint": ">=9.0.0",
|
|
159
|
+
"eslint-config-airbnb": "^19.0.0",
|
|
160
|
+
"eslint-config-prettier": ">=10.0.0",
|
|
161
|
+
"eslint-config-turbo": "^2.0.0",
|
|
162
|
+
"eslint-plugin-import": "^2.0.0",
|
|
163
|
+
"eslint-plugin-jest": "^29.0.0",
|
|
164
|
+
"eslint-plugin-jsx-a11y": "^6.0.0",
|
|
165
|
+
"eslint-plugin-react": "^7.0.0",
|
|
166
|
+
"eslint-plugin-react-hooks": "^7.0.0",
|
|
167
|
+
"eslint-plugin-vitest": "^0.5.0",
|
|
168
|
+
"husky": "^9.0.0",
|
|
169
|
+
"lint-staged": ">=16.0.0",
|
|
170
|
+
"prettier": "^3.0.0",
|
|
171
|
+
"prettier-plugin-tailwindcss": "^0.7.0",
|
|
172
|
+
"semantic-release": "^25.0.0",
|
|
173
|
+
"ts-jest": "^29.0.0",
|
|
174
|
+
"tsup": "^8.0.0",
|
|
175
|
+
"typescript": ">=5.0.0",
|
|
176
|
+
"typescript-eslint": "*",
|
|
177
|
+
"vitest": ">=3.0.0"
|
|
178
|
+
},
|
|
179
|
+
"peerDependenciesMeta": {
|
|
180
|
+
"@biomejs/biome": {
|
|
181
|
+
"optional": true
|
|
182
|
+
},
|
|
183
|
+
"@commitlint/cli": {
|
|
184
|
+
"optional": true
|
|
185
|
+
},
|
|
186
|
+
"@commitlint/config-conventional": {
|
|
187
|
+
"optional": true
|
|
188
|
+
},
|
|
189
|
+
"@next/eslint-plugin-next": {
|
|
190
|
+
"optional": true
|
|
191
|
+
},
|
|
192
|
+
"@playwright/test": {
|
|
193
|
+
"optional": true
|
|
194
|
+
},
|
|
195
|
+
"@semantic-release/changelog": {
|
|
196
|
+
"optional": true
|
|
197
|
+
},
|
|
198
|
+
"@semantic-release/commit-analyzer": {
|
|
199
|
+
"optional": true
|
|
200
|
+
},
|
|
201
|
+
"@semantic-release/exec": {
|
|
202
|
+
"optional": true
|
|
203
|
+
},
|
|
204
|
+
"@semantic-release/git": {
|
|
205
|
+
"optional": true
|
|
206
|
+
},
|
|
207
|
+
"@semantic-release/github": {
|
|
208
|
+
"optional": true
|
|
209
|
+
},
|
|
210
|
+
"@semantic-release/npm": {
|
|
211
|
+
"optional": true
|
|
212
|
+
},
|
|
213
|
+
"@semantic-release/release-notes-generator": {
|
|
214
|
+
"optional": true
|
|
215
|
+
},
|
|
216
|
+
"@total-typescript/ts-reset": {
|
|
217
|
+
"optional": true
|
|
218
|
+
},
|
|
219
|
+
"@typescript-eslint/eslint-plugin": {
|
|
220
|
+
"optional": true
|
|
221
|
+
},
|
|
222
|
+
"@typescript-eslint/parser": {
|
|
223
|
+
"optional": true
|
|
224
|
+
},
|
|
225
|
+
"@vitejs/plugin-react": {
|
|
226
|
+
"optional": true
|
|
227
|
+
},
|
|
228
|
+
"commitizen": {
|
|
229
|
+
"optional": true
|
|
230
|
+
},
|
|
231
|
+
"conventional-changelog-conventionalcommits": {
|
|
232
|
+
"optional": true
|
|
233
|
+
},
|
|
234
|
+
"cz-conventional-changelog": {
|
|
235
|
+
"optional": true
|
|
236
|
+
},
|
|
237
|
+
"esbuild": {
|
|
238
|
+
"optional": true
|
|
239
|
+
},
|
|
240
|
+
"esbuild-node-externals": {
|
|
241
|
+
"optional": true
|
|
242
|
+
},
|
|
243
|
+
"eslint": {
|
|
244
|
+
"optional": true
|
|
245
|
+
},
|
|
246
|
+
"eslint-config-airbnb": {
|
|
247
|
+
"optional": true
|
|
248
|
+
},
|
|
249
|
+
"eslint-config-prettier": {
|
|
250
|
+
"optional": true
|
|
251
|
+
},
|
|
252
|
+
"eslint-config-turbo": {
|
|
253
|
+
"optional": true
|
|
254
|
+
},
|
|
255
|
+
"eslint-plugin-import": {
|
|
256
|
+
"optional": true
|
|
257
|
+
},
|
|
258
|
+
"eslint-plugin-jest": {
|
|
259
|
+
"optional": true
|
|
260
|
+
},
|
|
261
|
+
"eslint-plugin-jsx-a11y": {
|
|
262
|
+
"optional": true
|
|
263
|
+
},
|
|
264
|
+
"eslint-plugin-react": {
|
|
265
|
+
"optional": true
|
|
266
|
+
},
|
|
267
|
+
"eslint-plugin-react-hooks": {
|
|
268
|
+
"optional": true
|
|
269
|
+
},
|
|
270
|
+
"eslint-plugin-vitest": {
|
|
271
|
+
"optional": true
|
|
272
|
+
},
|
|
273
|
+
"husky": {
|
|
274
|
+
"optional": true
|
|
275
|
+
},
|
|
276
|
+
"lint-staged": {
|
|
277
|
+
"optional": true
|
|
278
|
+
},
|
|
279
|
+
"prettier": {
|
|
280
|
+
"optional": true
|
|
281
|
+
},
|
|
282
|
+
"prettier-plugin-tailwindcss": {
|
|
283
|
+
"optional": true
|
|
284
|
+
},
|
|
285
|
+
"semantic-release": {
|
|
286
|
+
"optional": true
|
|
287
|
+
},
|
|
288
|
+
"ts-jest": {
|
|
289
|
+
"optional": true
|
|
290
|
+
},
|
|
291
|
+
"tsup": {
|
|
292
|
+
"optional": true
|
|
293
|
+
},
|
|
294
|
+
"typescript": {
|
|
295
|
+
"optional": true
|
|
296
|
+
},
|
|
297
|
+
"typescript-eslint": {
|
|
298
|
+
"optional": true
|
|
299
|
+
},
|
|
300
|
+
"vitest": {
|
|
301
|
+
"optional": true
|
|
302
|
+
}
|
|
135
303
|
},
|
|
136
304
|
"lint-staged": {
|
|
137
305
|
"*.{js,ts,json,md}": [
|
|
138
|
-
"pnpm exec biome lint",
|
|
139
|
-
"pnpm exec biome format"
|
|
140
|
-
"git add"
|
|
306
|
+
"pnpm exec biome lint --config-path=tooling/biome/biome.json",
|
|
307
|
+
"pnpm exec biome format --config-path=tooling/biome/biome.json --write"
|
|
141
308
|
]
|
|
142
309
|
},
|
|
143
|
-
"husky": {
|
|
144
|
-
"hooks": {
|
|
145
|
-
"pre-commit": "lint-staged"
|
|
146
|
-
}
|
|
147
|
-
},
|
|
148
310
|
"bin": {
|
|
149
311
|
"js-tooling": "./dist/cli/index.js",
|
|
150
312
|
"commitmessage": "scripts/commitmessage.sh",
|
|
@@ -157,5 +319,8 @@
|
|
|
157
319
|
},
|
|
158
320
|
"publishConfig": {
|
|
159
321
|
"access": "public"
|
|
322
|
+
},
|
|
323
|
+
"engines": {
|
|
324
|
+
"node": ">=22"
|
|
160
325
|
}
|
|
161
326
|
}
|
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
export default {
|
|
2
|
-
extends: [
|
|
3
|
-
ignores: [(commit) => commit.includes(
|
|
2
|
+
extends: ["@commitlint/config-conventional"],
|
|
3
|
+
ignores: [(commit) => commit.includes("[skip ci]")],
|
|
4
4
|
rules: {
|
|
5
5
|
// Enforce strict type validation
|
|
6
|
-
|
|
6
|
+
"type-enum": [
|
|
7
7
|
2,
|
|
8
|
-
|
|
8
|
+
"always",
|
|
9
9
|
[
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
10
|
+
"build",
|
|
11
|
+
"chore",
|
|
12
|
+
"ci",
|
|
13
|
+
"docs",
|
|
14
|
+
"feat",
|
|
15
|
+
"fix",
|
|
16
|
+
"perf",
|
|
17
|
+
"refactor",
|
|
18
|
+
"revert",
|
|
19
|
+
"style",
|
|
20
|
+
"test",
|
|
21
21
|
],
|
|
22
22
|
],
|
|
23
|
-
// Enforce length limits
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
// Enforce length limits (strict)
|
|
24
|
+
"header-max-length": [2, "always", 50],
|
|
25
|
+
"body-max-line-length": [2, "always", 72],
|
|
26
|
+
"footer-max-line-length": [2, "always", 72],
|
|
27
27
|
// Enforce case rules (allow common patterns)
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
"subject-case": [0], // Disable case enforcement to allow flexibility
|
|
29
|
+
"type-case": [2, "always", "lower-case"],
|
|
30
30
|
// Enforce required elements
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
"type-empty": [2, "never"],
|
|
32
|
+
"subject-empty": [2, "never"],
|
|
33
33
|
// Enforce punctuation rules
|
|
34
|
-
|
|
34
|
+
"subject-full-stop": [2, "never", "."],
|
|
35
35
|
// Enforce scope rules (optional but recommended)
|
|
36
|
-
|
|
36
|
+
"scope-case": [2, "always", "lower-case"],
|
|
37
37
|
},
|
|
38
|
-
}
|
|
38
|
+
};
|