@programinglive/commiter 1.2.12 โ†’ 1.2.17

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/index.js CHANGED
@@ -1,199 +1,199 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Commiter - Commit convention tooling for standard-version releases
5
- *
6
- * This package helps enforce conventional commits and automate releases
7
- * with beautiful changelogs featuring icons for each commit type.
8
- */
9
-
10
- const { execSync } = require('child_process');
11
- const fs = require('fs');
12
- const path = require('path');
13
-
14
- function ensureSafeTestScript(scripts = {}) {
15
- const defaultFailingTestScript = 'echo "Error: no test specified" && exit 1';
16
- if (!scripts.test || scripts.test === defaultFailingTestScript) {
17
- scripts.test = 'echo "No tests specified"';
18
- }
19
- return scripts;
20
- }
21
-
22
- function copyRecursiveSync(src, dest) {
23
- const exists = fs.existsSync(src);
24
- const stats = exists && fs.statSync(src);
25
- const isDirectory = exists && stats.isDirectory();
26
-
27
- if (isDirectory) {
28
- if (!fs.existsSync(dest)) {
29
- fs.mkdirSync(dest);
30
- }
31
- fs.readdirSync(src).forEach((childItemName) => {
32
- copyRecursiveSync(path.join(src, childItemName), path.join(dest, childItemName));
33
- });
34
- } else {
35
- fs.copyFileSync(src, dest);
36
- }
37
- }
38
-
39
- function setupCommiter() {
40
- console.log('๐Ÿš€ Setting up Commiter...\n');
41
-
42
- // Check if package.json exists
43
- if (!fs.existsSync('package.json')) {
44
- console.error('โŒ Error: package.json not found. Please run this in a Node.js project directory.');
45
- process.exit(1);
46
- }
47
-
48
- try {
49
- // Install dependencies
50
- console.log('๐Ÿ“ฆ Installing dependencies...');
51
- execSync('npm install --save-dev standard-version @commitlint/cli @commitlint/config-conventional husky', {
52
- stdio: 'inherit'
53
- });
54
-
55
- // Read package.json
56
- const packageJsonPath = path.join(process.cwd(), 'package.json');
57
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
58
-
59
- packageJson.scripts = ensureSafeTestScript(packageJson.scripts || {});
60
- // Add scripts
61
- packageJson.scripts.prepare = 'husky';
62
- packageJson.scripts.release = 'node scripts/release.cjs';
63
- packageJson.scripts['release:major'] = 'node scripts/release.cjs major';
64
- packageJson.scripts['release:minor'] = 'node scripts/release.cjs minor';
65
- packageJson.scripts['release:patch'] = 'node scripts/release.cjs patch';
66
- packageJson.scripts['release:first'] = 'node scripts/release.cjs --first-release';
67
-
68
- // Add standard-version config
69
- packageJson['standard-version'] = {
70
- releaseCommitMessageFormat: 'chore(release): {{currentTag}} ๐Ÿš€',
71
- types: [
72
- { type: 'feat', section: 'โœจ Features' },
73
- { type: 'fix', section: '๐Ÿ› Bug Fixes' },
74
- { type: 'perf', section: 'โšก Performance' },
75
- { type: 'refactor', section: 'โ™ป๏ธ Refactors' },
76
- { type: 'docs', section: '๐Ÿ“ Documentation' },
77
- { type: 'style', section: '๐Ÿ’„ Styles' },
78
- { type: 'test', section: 'โœ… Tests' },
79
- { type: 'build', section: '๐Ÿ—๏ธ Build System' },
80
- { type: 'ci', section: '๐Ÿ‘ท Continuous Integration' },
81
- { type: 'chore', section: '๐Ÿงน Chores' },
82
- { type: 'revert', section: 'โช Reverts' }
83
- ]
84
- };
85
-
86
- // Write updated package.json
87
- fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
88
-
89
- // Create release helper script
90
- console.log('๐Ÿ› ๏ธ Creating release helper script...');
91
- const releaseScriptDir = path.join(process.cwd(), 'scripts');
92
- if (!fs.existsSync(releaseScriptDir)) {
93
- fs.mkdirSync(releaseScriptDir, { recursive: true });
94
- }
95
-
96
- const releaseScriptPath = path.join(releaseScriptDir, 'release.cjs');
97
- const releaseScriptSource = path.join(__dirname, 'scripts', 'release.cjs');
98
- fs.copyFileSync(releaseScriptSource, releaseScriptPath);
99
-
100
- // Copy update-release-notes.js
101
- const updateNotesSource = path.join(__dirname, 'scripts', 'update-release-notes.cjs');
102
- const updateNotesDest = path.join(releaseScriptDir, 'update-release-notes.cjs');
103
- if (fs.existsSync(updateNotesSource)) {
104
- fs.copyFileSync(updateNotesSource, updateNotesDest);
105
- }
106
-
107
- // Copy preload directory
108
- const preloadSource = path.join(__dirname, 'scripts', 'preload');
109
- const preloadDest = path.join(releaseScriptDir, 'preload');
110
- if (fs.existsSync(preloadSource)) {
111
- copyRecursiveSync(preloadSource, preloadDest);
112
- }
113
- try {
114
- fs.chmodSync(releaseScriptPath, 0o755);
115
- } catch (error) {
116
- // Ignore chmod errors on non-POSIX systems
117
- }
118
-
119
- // Determine commitlint config format based on project module type
120
- const isEsmProject = packageJson.type === 'module';
121
- const commitlintConfigFile = isEsmProject ? 'commitlint.config.js' : 'commitlint.config.cjs';
122
- const commitlintConfigContent = isEsmProject
123
- ? `export default {
124
- extends: ['@commitlint/config-conventional'],
125
- ignores: [(message) => message.startsWith('chore(release):')]
126
- }\n`
127
- : `module.exports = {
128
- extends: ['@commitlint/config-conventional'],
129
- ignores: [(message) => message.startsWith('chore(release):')]
130
- }\n`;
131
-
132
- const legacyCommitlintConfigFile = isEsmProject ? 'commitlint.config.cjs' : 'commitlint.config.js';
133
- if (fs.existsSync(legacyCommitlintConfigFile)) {
134
- fs.rmSync(legacyCommitlintConfigFile);
135
- }
136
-
137
- console.log(`โš™๏ธ Creating commitlint config (${commitlintConfigFile})...`);
138
- fs.writeFileSync(commitlintConfigFile, commitlintConfigContent);
139
-
140
- // Initialize Husky
141
- console.log('๐Ÿถ Setting up Husky...');
142
- execSync('npx husky init', { stdio: 'inherit' });
143
-
144
- // Create commit-msg hook
145
- const huskyDir = path.join(process.cwd(), '.husky');
146
- if (!fs.existsSync(huskyDir)) {
147
- fs.mkdirSync(huskyDir, { recursive: true });
148
- }
149
-
150
- const commitMsgHook = `#!/usr/bin/env sh
151
-
152
- npx --no -- commitlint --edit "$1"
153
- `;
154
- fs.writeFileSync(path.join(huskyDir, 'commit-msg'), commitMsgHook);
155
- fs.chmodSync(path.join(huskyDir, 'commit-msg'), 0o755);
156
-
157
- // Create pre-commit hook (tests run only during release)
158
- const preCommitHook = `#!/usr/bin/env sh
159
- # Pre-commit hook - tests are run only during release
160
- `;
161
- fs.writeFileSync(path.join(huskyDir, 'pre-commit'), preCommitHook);
162
- fs.chmodSync(path.join(huskyDir, 'pre-commit'), 0o755);
163
-
164
- // Update .gitignore
165
- const gitignorePath = path.join(process.cwd(), '.gitignore');
166
- let gitignoreContent = '';
167
- if (fs.existsSync(gitignorePath)) {
168
- gitignoreContent = fs.readFileSync(gitignorePath, 'utf8');
169
- }
170
-
171
- if (!gitignoreContent.includes('node_modules')) {
172
- console.log('๐Ÿ“ Updating .gitignore...');
173
- fs.appendFileSync(gitignorePath, '\nnode_modules\n');
174
- }
175
-
176
- console.log('\nโœ… Commiter setup complete!\n');
177
- console.log('๐Ÿ“š Available commands:');
178
- console.log(' npm run release major - Create a major release (1.0.0 โ†’ 2.0.0)');
179
- console.log(' npm run release minor - Create a minor release (1.0.0 โ†’ 1.1.0)');
180
- console.log(' npm run release patch - Create a patch release (1.0.0 โ†’ 1.0.1)');
181
- console.log(' npm run release - Auto-detect version bump');
182
- console.log(' npm run release:first - Initialize the first release at 0.0.1');
183
- console.log(' npm run release -- --first - Alternative first release flag (0.0.1 start)');
184
- console.log(' npm run release -- --prerelease beta - Create a beta prerelease\n');
185
- console.log('๐ŸŽฏ Commit format: type(scope): subject');
186
- console.log(' Example: feat(auth): add user login\n');
187
-
188
- } catch (error) {
189
- console.error('โŒ Error during setup:', error.message);
190
- process.exit(1);
191
- }
192
- }
193
-
194
- // Run setup if called directly
195
- if (require.main === module) {
196
- setupCommiter();
197
- }
198
-
199
- module.exports = { setupCommiter, ensureSafeTestScript };
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Commiter - Commit convention tooling for standard-version releases
5
+ *
6
+ * This package helps enforce conventional commits and automate releases
7
+ * with beautiful changelogs featuring icons for each commit type.
8
+ */
9
+
10
+ const { execSync } = require('child_process');
11
+ const fs = require('fs');
12
+ const path = require('path');
13
+
14
+ function ensureSafeTestScript(scripts = {}) {
15
+ const defaultFailingTestScript = 'echo "Error: no test specified" && exit 1';
16
+ if (!scripts.test || scripts.test === defaultFailingTestScript) {
17
+ scripts.test = 'echo "No tests specified"';
18
+ }
19
+ return scripts;
20
+ }
21
+
22
+ function copyRecursiveSync(src, dest) {
23
+ const exists = fs.existsSync(src);
24
+ const stats = exists && fs.statSync(src);
25
+ const isDirectory = exists && stats.isDirectory();
26
+
27
+ if (isDirectory) {
28
+ if (!fs.existsSync(dest)) {
29
+ fs.mkdirSync(dest);
30
+ }
31
+ fs.readdirSync(src).forEach((childItemName) => {
32
+ copyRecursiveSync(path.join(src, childItemName), path.join(dest, childItemName));
33
+ });
34
+ } else {
35
+ fs.copyFileSync(src, dest);
36
+ }
37
+ }
38
+
39
+ function setupCommiter() {
40
+ console.log('๐Ÿš€ Setting up Commiter...\n');
41
+
42
+ // Check if package.json exists
43
+ if (!fs.existsSync('package.json')) {
44
+ console.error('โŒ Error: package.json not found. Please run this in a Node.js project directory.');
45
+ process.exit(1);
46
+ }
47
+
48
+ try {
49
+ // Install dependencies
50
+ console.log('๐Ÿ“ฆ Installing dependencies...');
51
+ execSync('npm install --save-dev standard-version @commitlint/cli @commitlint/config-conventional husky', {
52
+ stdio: 'inherit'
53
+ });
54
+
55
+ // Read package.json
56
+ const packageJsonPath = path.join(process.cwd(), 'package.json');
57
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
58
+
59
+ packageJson.scripts = ensureSafeTestScript(packageJson.scripts || {});
60
+ // Add scripts
61
+ packageJson.scripts.prepare = 'husky';
62
+ packageJson.scripts.release = 'node scripts/release.cjs';
63
+ packageJson.scripts['release:major'] = 'node scripts/release.cjs major';
64
+ packageJson.scripts['release:minor'] = 'node scripts/release.cjs minor';
65
+ packageJson.scripts['release:patch'] = 'node scripts/release.cjs patch';
66
+ packageJson.scripts['release:first'] = 'node scripts/release.cjs --first-release';
67
+
68
+ // Add standard-version config
69
+ packageJson['standard-version'] = {
70
+ releaseCommitMessageFormat: 'chore(release): {{currentTag}} ๐Ÿš€',
71
+ types: [
72
+ { type: 'feat', section: 'โœจ Features' },
73
+ { type: 'fix', section: '๐Ÿ› Bug Fixes' },
74
+ { type: 'perf', section: 'โšก Performance' },
75
+ { type: 'refactor', section: 'โ™ป๏ธ Refactors' },
76
+ { type: 'docs', section: '๐Ÿ“ Documentation' },
77
+ { type: 'style', section: '๐Ÿ’„ Styles' },
78
+ { type: 'test', section: 'โœ… Tests' },
79
+ { type: 'build', section: '๐Ÿ—๏ธ Build System' },
80
+ { type: 'ci', section: '๐Ÿ‘ท Continuous Integration' },
81
+ { type: 'chore', section: '๐Ÿงน Chores' },
82
+ { type: 'revert', section: 'โช Reverts' }
83
+ ]
84
+ };
85
+
86
+ // Write updated package.json
87
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
88
+
89
+ // Create release helper script
90
+ console.log('๐Ÿ› ๏ธ Creating release helper script...');
91
+ const releaseScriptDir = path.join(process.cwd(), 'scripts');
92
+ if (!fs.existsSync(releaseScriptDir)) {
93
+ fs.mkdirSync(releaseScriptDir, { recursive: true });
94
+ }
95
+
96
+ const releaseScriptPath = path.join(releaseScriptDir, 'release.cjs');
97
+ const releaseScriptSource = path.join(__dirname, 'scripts', 'release.cjs');
98
+ fs.copyFileSync(releaseScriptSource, releaseScriptPath);
99
+
100
+ // Copy update-release-notes.js
101
+ const updateNotesSource = path.join(__dirname, 'scripts', 'update-release-notes.cjs');
102
+ const updateNotesDest = path.join(releaseScriptDir, 'update-release-notes.cjs');
103
+ if (fs.existsSync(updateNotesSource)) {
104
+ fs.copyFileSync(updateNotesSource, updateNotesDest);
105
+ }
106
+
107
+ // Copy preload directory
108
+ const preloadSource = path.join(__dirname, 'scripts', 'preload');
109
+ const preloadDest = path.join(releaseScriptDir, 'preload');
110
+ if (fs.existsSync(preloadSource)) {
111
+ copyRecursiveSync(preloadSource, preloadDest);
112
+ }
113
+ try {
114
+ fs.chmodSync(releaseScriptPath, 0o755);
115
+ } catch (error) {
116
+ // Ignore chmod errors on non-POSIX systems
117
+ }
118
+
119
+ // Determine commitlint config format based on project module type
120
+ const isEsmProject = packageJson.type === 'module';
121
+ const commitlintConfigFile = isEsmProject ? 'commitlint.config.js' : 'commitlint.config.cjs';
122
+ const commitlintConfigContent = isEsmProject
123
+ ? `export default {
124
+ extends: ['@commitlint/config-conventional'],
125
+ ignores: [(message) => message.startsWith('chore(release):')]
126
+ }\n`
127
+ : `module.exports = {
128
+ extends: ['@commitlint/config-conventional'],
129
+ ignores: [(message) => message.startsWith('chore(release):')]
130
+ }\n`;
131
+
132
+ const legacyCommitlintConfigFile = isEsmProject ? 'commitlint.config.cjs' : 'commitlint.config.js';
133
+ if (fs.existsSync(legacyCommitlintConfigFile)) {
134
+ fs.rmSync(legacyCommitlintConfigFile);
135
+ }
136
+
137
+ console.log(`โš™๏ธ Creating commitlint config (${commitlintConfigFile})...`);
138
+ fs.writeFileSync(commitlintConfigFile, commitlintConfigContent);
139
+
140
+ // Initialize Husky
141
+ console.log('๐Ÿถ Setting up Husky...');
142
+ execSync('npx husky init', { stdio: 'inherit' });
143
+
144
+ // Create commit-msg hook
145
+ const huskyDir = path.join(process.cwd(), '.husky');
146
+ if (!fs.existsSync(huskyDir)) {
147
+ fs.mkdirSync(huskyDir, { recursive: true });
148
+ }
149
+
150
+ const commitMsgHook = `#!/usr/bin/env sh
151
+
152
+ npx --no -- commitlint --edit "$1"
153
+ `;
154
+ fs.writeFileSync(path.join(huskyDir, 'commit-msg'), commitMsgHook);
155
+ fs.chmodSync(path.join(huskyDir, 'commit-msg'), 0o755);
156
+
157
+ // Create pre-commit hook (tests run only during release)
158
+ const preCommitHook = `#!/usr/bin/env sh
159
+ # Pre-commit hook - tests are run only during release
160
+ `;
161
+ fs.writeFileSync(path.join(huskyDir, 'pre-commit'), preCommitHook);
162
+ fs.chmodSync(path.join(huskyDir, 'pre-commit'), 0o755);
163
+
164
+ // Update .gitignore
165
+ const gitignorePath = path.join(process.cwd(), '.gitignore');
166
+ let gitignoreContent = '';
167
+ if (fs.existsSync(gitignorePath)) {
168
+ gitignoreContent = fs.readFileSync(gitignorePath, 'utf8');
169
+ }
170
+
171
+ if (!gitignoreContent.includes('node_modules')) {
172
+ console.log('๐Ÿ“ Updating .gitignore...');
173
+ fs.appendFileSync(gitignorePath, '\nnode_modules\n');
174
+ }
175
+
176
+ console.log('\nโœ… Commiter setup complete!\n');
177
+ console.log('๐Ÿ“š Available commands:');
178
+ console.log(' npm run release major - Create a major release (1.0.0 โ†’ 2.0.0)');
179
+ console.log(' npm run release minor - Create a minor release (1.0.0 โ†’ 1.1.0)');
180
+ console.log(' npm run release patch - Create a patch release (1.0.0 โ†’ 1.0.1)');
181
+ console.log(' npm run release - Auto-detect version bump');
182
+ console.log(' npm run release:first - Initialize the first release at 0.0.1');
183
+ console.log(' npm run release -- --first - Alternative first release flag (0.0.1 start)');
184
+ console.log(' npm run release -- --prerelease beta - Create a beta prerelease\n');
185
+ console.log('๐ŸŽฏ Commit format: type(scope): subject');
186
+ console.log(' Example: feat(auth): add user login\n');
187
+
188
+ } catch (error) {
189
+ console.error('โŒ Error during setup:', error.message);
190
+ process.exit(1);
191
+ }
192
+ }
193
+
194
+ // Run setup if called directly
195
+ if (require.main === module) {
196
+ setupCommiter();
197
+ }
198
+
199
+ module.exports = { setupCommiter, ensureSafeTestScript };
package/netlify.toml CHANGED
@@ -1,2 +1,2 @@
1
- [build]
2
- publish = "web"
1
+ [build]
2
+ publish = "web"
package/package.json CHANGED
@@ -1,96 +1,96 @@
1
- {
2
- "name": "@programinglive/commiter",
3
- "version": "1.2.12",
4
- "description": "Commiter keeps repositories release-ready by enforcing conventional commits, generating icon-rich changelog entries, and orchestrating semantic version bumps without manual toil. It bootstraps Husky hooks, commitlint rules, and release scripts that inspect history, detect framework-specific test commands, run them automatically, tag git releases, coordinate npm publishing, surface release metrics, enforce project-specific checks, and give maintainers observability across distributed teams. Plus!",
5
- "main": "index.js",
6
- "bin": {
7
- "commiter": "index.js"
8
- },
9
- "scripts": {
10
- "test": "node --test",
11
- "prepare": "husky",
12
- "release": "node scripts/release.cjs",
13
- "release:major": "node scripts/release.cjs major",
14
- "release:minor": "node scripts/release.cjs minor",
15
- "release:patch": "node scripts/release.cjs patch",
16
- "release:first": "node scripts/release.cjs --first-release",
17
- "web": "npx serve web"
18
- },
19
- "keywords": [
20
- "commit",
21
- "conventional-commits",
22
- "standard-version",
23
- "changelog",
24
- "versioning",
25
- "semantic-release",
26
- "git-hooks",
27
- "husky",
28
- "commitlint"
29
- ],
30
- "author": "Programming Live",
31
- "license": "MIT",
32
- "repository": {
33
- "type": "git",
34
- "url": "git+https://github.com/programinglive/commiter.git"
35
- },
36
- "bugs": {
37
- "url": "https://github.com/programinglive/commiter/issues"
38
- },
39
- "homepage": "https://commiter.programinglive.com",
40
- "type": "commonjs",
41
- "standard-version": {
42
- "releaseCommitMessageFormat": "chore(release): {{currentTag}} ๐Ÿš€",
43
- "types": [
44
- {
45
- "type": "feat",
46
- "section": "โœจ Features"
47
- },
48
- {
49
- "type": "fix",
50
- "section": "๐Ÿ› Bug Fixes"
51
- },
52
- {
53
- "type": "perf",
54
- "section": "โšก Performance"
55
- },
56
- {
57
- "type": "refactor",
58
- "section": "โ™ป๏ธ Refactors"
59
- },
60
- {
61
- "type": "docs",
62
- "section": "๐Ÿ“ Documentation"
63
- },
64
- {
65
- "type": "style",
66
- "section": "๐Ÿ’„ Styles"
67
- },
68
- {
69
- "type": "test",
70
- "section": "โœ… Tests"
71
- },
72
- {
73
- "type": "build",
74
- "section": "๐Ÿ—๏ธ Build System"
75
- },
76
- {
77
- "type": "ci",
78
- "section": "๐Ÿ‘ท Continuous Integration"
79
- },
80
- {
81
- "type": "chore",
82
- "section": "๐Ÿงน Chores"
83
- },
84
- {
85
- "type": "revert",
86
- "section": "โช Reverts"
87
- }
88
- ]
89
- },
90
- "devDependencies": {
91
- "@commitlint/cli": "^20.1.0",
92
- "@commitlint/config-conventional": "^20.0.0",
93
- "husky": "^9.1.7",
94
- "standard-version": "^9.5.0"
95
- }
96
- }
1
+ {
2
+ "name": "@programinglive/commiter",
3
+ "version": "1.2.17",
4
+ "description": "Commiter keeps repositories release-ready by enforcing conventional commits, generating icon-rich changelog entries, and orchestrating semantic version bumps without manual toil. It bootstraps Husky hooks, commitlint rules, and release scripts that inspect history, detect framework-specific test commands, run them automatically, tag git releases, coordinate npm publishing, surface release metrics, enforce project-specific checks, and give maintainers observability across distributed teams. Plus!",
5
+ "main": "index.js",
6
+ "bin": {
7
+ "commiter": "index.js"
8
+ },
9
+ "scripts": {
10
+ "test": "node --test",
11
+ "prepare": "husky",
12
+ "release": "node scripts/release.cjs",
13
+ "release:major": "node scripts/release.cjs major",
14
+ "release:minor": "node scripts/release.cjs minor",
15
+ "release:patch": "node scripts/release.cjs patch",
16
+ "release:first": "node scripts/release.cjs --first-release",
17
+ "web": "npx serve web"
18
+ },
19
+ "keywords": [
20
+ "commit",
21
+ "conventional-commits",
22
+ "standard-version",
23
+ "changelog",
24
+ "versioning",
25
+ "semantic-release",
26
+ "git-hooks",
27
+ "husky",
28
+ "commitlint"
29
+ ],
30
+ "author": "Programming Live",
31
+ "license": "MIT",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/programinglive/commiter.git"
35
+ },
36
+ "bugs": {
37
+ "url": "https://github.com/programinglive/commiter/issues"
38
+ },
39
+ "homepage": "https://commiter.programinglive.com",
40
+ "type": "commonjs",
41
+ "standard-version": {
42
+ "releaseCommitMessageFormat": "chore(release): {{currentTag}} ๐Ÿš€",
43
+ "types": [
44
+ {
45
+ "type": "feat",
46
+ "section": "โœจ Features"
47
+ },
48
+ {
49
+ "type": "fix",
50
+ "section": "๐Ÿ› Bug Fixes"
51
+ },
52
+ {
53
+ "type": "perf",
54
+ "section": "โšก Performance"
55
+ },
56
+ {
57
+ "type": "refactor",
58
+ "section": "โ™ป๏ธ Refactors"
59
+ },
60
+ {
61
+ "type": "docs",
62
+ "section": "๐Ÿ“ Documentation"
63
+ },
64
+ {
65
+ "type": "style",
66
+ "section": "๐Ÿ’„ Styles"
67
+ },
68
+ {
69
+ "type": "test",
70
+ "section": "โœ… Tests"
71
+ },
72
+ {
73
+ "type": "build",
74
+ "section": "๐Ÿ—๏ธ Build System"
75
+ },
76
+ {
77
+ "type": "ci",
78
+ "section": "๐Ÿ‘ท Continuous Integration"
79
+ },
80
+ {
81
+ "type": "chore",
82
+ "section": "๐Ÿงน Chores"
83
+ },
84
+ {
85
+ "type": "revert",
86
+ "section": "โช Reverts"
87
+ }
88
+ ]
89
+ },
90
+ "devDependencies": {
91
+ "@commitlint/cli": "^20.1.0",
92
+ "@commitlint/config-conventional": "^20.0.0",
93
+ "husky": "^9.1.7",
94
+ "standard-version": "^9.5.0"
95
+ }
96
+ }