@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 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 packagePath = path.dirname(path.dirname(new URL(import.meta.url).pathname));
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
- { name: 'TypeScript', desc: 'Base, React, Next.js, Node.js, Express configurations' },
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
- { name: 'Jest', desc: 'Testing framework presets for browser and Node.js' },
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": "1.0.9",
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 && tsc --emitDeclarationOnly --project tsconfig.build.json && pnpm build-cli",
24
- "build-prod": "rimraf ./dist && cross-env NODE_ENV=production node build.mjs && tsc --emitDeclarationOnly --project tsconfig.build.json && pnpm build-cli",
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
- "typecheck1": "tsc --noEmit",
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: ['@commitlint/config-conventional'],
3
- ignores: [(commit) => commit.includes('[skip ci]')],
2
+ extends: ["@commitlint/config-conventional"],
3
+ ignores: [(commit) => commit.includes("[skip ci]")],
4
4
  rules: {
5
5
  // Enforce strict type validation
6
- 'type-enum': [
6
+ "type-enum": [
7
7
  2,
8
- 'always',
8
+ "always",
9
9
  [
10
- 'build',
11
- 'chore',
12
- 'ci',
13
- 'docs',
14
- 'feat',
15
- 'fix',
16
- 'perf',
17
- 'refactor',
18
- 'revert',
19
- 'style',
20
- 'test',
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
- 'header-max-length': [2, 'always', 72],
25
- 'body-max-line-length': [2, 'always', 100],
26
- 'footer-max-line-length': [2, 'always', 100],
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
- 'subject-case': [0], // Disable case enforcement to allow flexibility
29
- 'type-case': [2, 'always', 'lower-case'],
28
+ "subject-case": [0], // Disable case enforcement to allow flexibility
29
+ "type-case": [2, "always", "lower-case"],
30
30
  // Enforce required elements
31
- 'type-empty': [2, 'never'],
32
- 'subject-empty': [2, 'never'],
31
+ "type-empty": [2, "never"],
32
+ "subject-empty": [2, "never"],
33
33
  // Enforce punctuation rules
34
- 'subject-full-stop': [2, 'never', '.'],
34
+ "subject-full-stop": [2, "never", "."],
35
35
  // Enforce scope rules (optional but recommended)
36
- 'scope-case': [2, 'always', 'lower-case'],
36
+ "scope-case": [2, "always", "lower-case"],
37
37
  },
38
- }
38
+ };