@vv0rkz/js-template 1.6.4 → 1.8.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/bin/cli.js CHANGED
@@ -1,196 +1,227 @@
1
- #!/usr/bin/env node
2
- import { spawnSync } from 'child_process'
3
- import { platform } from 'os'
4
- import { dirname, join } from 'path'
5
- import { fileURLToPath } from 'url'
6
-
7
- const __dirname = dirname(fileURLToPath(import.meta.url))
8
- const toolsDir = join(__dirname, '../tools-gh')
9
-
10
- const args = process.argv.slice(2)
11
- const command = args[0]
12
- const commandArgs = args.slice(1)
13
-
14
- // Для Windows npx должен быть npx.cmd без shell
15
- const isWin = platform() === 'win32'
16
- const npxCmd = isWin ? 'npx.cmd' : 'npx'
17
- const ghCmd = isWin ? 'gh.exe' : 'gh'
18
-
19
- const commands = {
20
- init: () => {
21
- const initScript = join(__dirname, 'init.js')
22
- spawnSync('node', [initScript], { stdio: 'inherit' })
23
- },
24
-
25
- 'init-readme': () => {
26
- spawnSync('node', [join(toolsDir, 'init-readme.js')], { stdio: 'inherit' })
27
- },
28
-
29
- 'setup-labels': () => {
30
- spawnSync('node', [join(toolsDir, 'setup-labels.js')], { stdio: 'inherit' })
31
- },
32
-
33
- changelog: () => {
34
- // БЕЗ shell: true
35
- spawnSync(npxCmd, ['changelogen', ...commandArgs], { stdio: 'inherit' })
36
- },
37
-
38
- release: () => {
39
- spawnSync('node', [join(toolsDir, 'release.js')], { stdio: 'inherit' })
40
- },
41
-
42
- 'update-readme': () => {
43
- spawnSync('node', [join(toolsDir, 'update-readme.js')], { stdio: 'inherit' })
44
- },
45
-
46
- 'push-release': () => {
47
- spawnSync('node', [join(toolsDir, 'push-release-to-main.js')], { stdio: 'inherit' })
48
- },
49
-
50
- bugs: () => {
51
- // БЕЗ shell: true — убирает warning
52
- spawnSync(ghCmd, ['issue', 'list', '--label', 'bug', '--state', 'open'], { stdio: 'inherit' })
53
- },
54
-
55
- 'create-bug': () => {
56
- if (commandArgs.length === 0) {
57
- spawnSync('node', [join(toolsDir, 'create-bug.js')], { stdio: 'inherit' })
58
- } else {
59
- const title = commandArgs.join(' ')
60
- // БЕЗ shell: true — теперь пробелы работают!
61
- spawnSync(ghCmd, ['issue', 'create', '--label', 'bug', '--title', title], { stdio: 'inherit' })
62
- }
63
- },
64
-
65
- tasks: () => {
66
- // БЕЗ shell: true
67
- spawnSync(ghCmd, ['issue', 'list', '--label', 'task', '--state', 'open'], { stdio: 'inherit' })
68
- },
69
-
70
- 'create-task': () => {
71
- if (commandArgs.length === 0) {
72
- spawnSync('node', [join(toolsDir, 'create-task.js')], { stdio: 'inherit' })
73
- } else {
74
- const title = commandArgs.join(' ')
75
- // БЕЗ shell: true — теперь пробелы работают!
76
- spawnSync(ghCmd, ['issue', 'create', '--label', 'task', '--title', title], { stdio: 'inherit' })
77
- }
78
- },
79
-
80
- 'create-refactor': () => {
81
- const args = process.argv.slice(3)
82
- spawnSync('node', [join(toolsDir, 'create-refactor.js'), ...args], { stdio: 'inherit' })
83
- },
84
-
85
- refactors: () => {
86
- spawnSync(ghCmd, ['issue', 'list', '--label', 'refactor'], { stdio: 'inherit' })
87
- },
88
-
89
- 'create-perf': () => {
90
- const args = process.argv.slice(3)
91
- spawnSync('node', [join(toolsDir, 'create-perf.js'), ...args], { stdio: 'inherit' })
92
- },
93
-
94
- perfs: () => {
95
- spawnSync(ghCmd, ['issue', 'list', '--label', 'perf'], { stdio: 'inherit' })
96
- },
97
-
98
- 'all-issues': () => {
99
- // БЕЗ shell: true
100
- spawnSync(ghCmd, ['issue', 'list', '--state', 'open'], { stdio: 'inherit' })
101
- },
102
- 'pr-list': () => {
103
- console.log('📋 Список Pull Requests...\n')
104
- spawnSync('gh', ['pr', 'list'], { stdio: 'inherit' })
105
- },
106
-
107
- 'pr-view': () => {
108
- const prNumber = process.argv[3]
109
- if (!prNumber) {
110
- console.log(' Укажи номер PR: npm run _ pr-view 5')
111
- process.exit(1)
112
- }
113
- console.log(`👀 Просмотр PR #${prNumber}...\n`)
114
- spawnSync('gh', ['pr', 'view', prNumber], { stdio: 'inherit' })
115
- },
116
-
117
- 'pr-view-web': () => {
118
- const prNumber = process.argv[3]
119
- if (!prNumber) {
120
- console.log('❌ Укажи номер PR: npm run _ pr-view-web 5')
121
- process.exit(1)
122
- }
123
- console.log(`🌐 Открываю PR #${prNumber} в браузере...`)
124
- spawnSync('gh', ['pr', 'view', prNumber, '--web'], { stdio: 'inherit' })
125
- },
126
-
127
- 'pr-merge': () => {
128
- const prNumber = process.argv[3]
129
- if (!prNumber) {
130
- console.log('❌ Укажи номер PR: npm run _ pr-merge 5')
131
- process.exit(1)
132
- }
133
- console.log(`🔀 Мерджу PR #${prNumber}...\n`)
134
- spawnSync('gh', ['pr', 'merge', prNumber, '--merge'], { stdio: 'inherit' })
135
- console.log('\n✅ PR смерджен!')
136
- },
137
-
138
- 'pr-close': () => {
139
- const prNumber = process.argv[3]
140
- if (!prNumber) {
141
- console.log('❌ Укажи номер PR: npm run _ pr-close 5')
142
- process.exit(1)
143
- }
144
- console.log(`❌ Закрываю PR #${prNumber}...\n`)
145
- spawnSync('gh', ['pr', 'close', prNumber], { stdio: 'inherit' })
146
- console.log('\n✅ PR закрыт!')
147
- },
148
- }
149
-
150
- if (commands[command]) {
151
- commands[command]()
152
- } else {
153
- console.log(`
154
- JS Template CLI
155
-
156
- Использование: npm run _ <команда> [аргументы]
157
-
158
- 📋 ПРОЕКТ:
159
- init Инициализация проекта
160
- init-readme Создать стартовый README.md
161
- setup-labels Настроить GitHub labels
162
-
163
- 🔧 РАЗРАБОТКА:
164
- update-readme Обновить README с версией
165
- release Полный релиз (проверка + changelog + README)
166
- push-release Создать PR и смерджить в main
167
-
168
- 📝 ISSUES:
169
- tasks Список задач (фичи)
170
- create-task [название] Создать задачу
171
- bugs Список багов
172
- create-bug [название] Создать баг
173
- refactors Список рефакторингов
174
- create-refactor [название] Создать рефакторинг
175
- perfs Список оптимизаций
176
- create-perf [название] Создать оптимизацию
177
- all-issues Все issues
178
-
179
- 🔀 PULL REQUESTS:
180
- pr-list Показать все PR
181
- pr-view <number> Посмотреть PR в терминале
182
- pr-view-web <number> Открыть PR в браузере
183
- pr-merge <number> Смерджить PR
184
- pr-close <number> Закрыть PR без merge
185
-
186
- 📚 ПРИМЕРЫ:
187
- npm run _ init
188
- npm run _ init-readme
189
- npm run _ feat "Добавить темную тему"
190
- npm run _ release
191
- npm run _ pr-list
192
- npm run _ pr-merge 5
193
-
194
- `)
195
- process.exit(command ? 1 : 0)
196
- }
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from 'child_process'
3
+ import { platform } from 'os'
4
+ import { dirname, join } from 'path'
5
+ import { fileURLToPath } from 'url'
6
+
7
+ const __dirname = dirname(fileURLToPath(import.meta.url))
8
+ const toolsDir = join(__dirname, '../tools-gh')
9
+
10
+ const args = process.argv.slice(2)
11
+ const command = args[0]
12
+ const commandArgs = args.slice(1)
13
+
14
+ const isWin = platform() === 'win32'
15
+ const npxCmd = isWin ? 'npx.cmd' : 'npx'
16
+ const ghCmd = isWin ? 'gh.exe' : 'gh'
17
+
18
+ const commands = {
19
+ init: () => {
20
+ const initScript = join(__dirname, 'init.js')
21
+ spawnSync('node', [initScript], { stdio: 'inherit' })
22
+ },
23
+
24
+ 'init-readme': () => {
25
+ spawnSync('node', [join(toolsDir, 'init-readme.js')], { stdio: 'inherit' })
26
+ },
27
+
28
+ 'setup-labels': () => {
29
+ spawnSync('node', [join(toolsDir, 'setup-labels.js')], { stdio: 'inherit' })
30
+ },
31
+
32
+ changelog: () => {
33
+ spawnSync(npxCmd, ['changelogen', ...commandArgs], { stdio: 'inherit' })
34
+ },
35
+
36
+ release: () => {
37
+ spawnSync('node', [join(toolsDir, 'release.js')], { stdio: 'inherit' })
38
+ },
39
+
40
+ 'update-readme': () => {
41
+ spawnSync('node', [join(toolsDir, 'update-readme.js')], { stdio: 'inherit' })
42
+ },
43
+
44
+ 'push-release': () => {
45
+ spawnSync('node', [join(toolsDir, 'push-release-to-main.js')], { stdio: 'inherit' })
46
+ },
47
+
48
+ bugs: () => {
49
+ spawnSync(ghCmd, ['issue', 'list', '--label', 'bug', '--state', 'open'], { stdio: 'inherit' })
50
+ },
51
+
52
+ 'create-bug': () => {
53
+ if (commandArgs.length === 0) {
54
+ spawnSync('node', [join(toolsDir, 'create-bug.js')], { stdio: 'inherit' })
55
+ } else {
56
+ const title = commandArgs.join(' ')
57
+ spawnSync(ghCmd, ['issue', 'create', '--label', 'bug', '--title', title], { stdio: 'inherit' })
58
+ }
59
+ },
60
+
61
+ tasks: () => {
62
+ spawnSync(ghCmd, ['issue', 'list', '--label', 'task', '--state', 'open'], { stdio: 'inherit' })
63
+ },
64
+
65
+ 'create-task': () => {
66
+ if (commandArgs.length === 0) {
67
+ spawnSync('node', [join(toolsDir, 'create-task.js')], { stdio: 'inherit' })
68
+ } else {
69
+ const title = commandArgs.join(' ')
70
+ spawnSync(ghCmd, ['issue', 'create', '--label', 'task', '--title', title], { stdio: 'inherit' })
71
+ }
72
+ },
73
+
74
+ 'create-refactor': () => {
75
+ const args = process.argv.slice(3)
76
+ spawnSync('node', [join(toolsDir, 'create-refactor.js'), ...args], { stdio: 'inherit' })
77
+ },
78
+
79
+ refactors: () => {
80
+ spawnSync(ghCmd, ['issue', 'list', '--label', 'refactor'], { stdio: 'inherit' })
81
+ },
82
+
83
+ 'create-perf': () => {
84
+ const args = process.argv.slice(3)
85
+ spawnSync('node', [join(toolsDir, 'create-perf.js'), ...args], { stdio: 'inherit' })
86
+ },
87
+
88
+ perfs: () => {
89
+ spawnSync(ghCmd, ['issue', 'list', '--label', 'perf'], { stdio: 'inherit' })
90
+ },
91
+
92
+ 'all-issues': () => {
93
+ spawnSync(ghCmd, ['issue', 'list', '--state', 'open'], { stdio: 'inherit' })
94
+ },
95
+
96
+ 'report-issue': () => {
97
+ spawnSync('node', [join(toolsDir, 'report-issue.js'), ...commandArgs], { stdio: 'inherit' })
98
+ },
99
+
100
+ 'setup-deps': () => {
101
+ spawnSync('node', [join(toolsDir, 'setup-deps.js')], { stdio: 'inherit' })
102
+ },
103
+
104
+ upgrade: () => {
105
+ spawnSync('node', [join(toolsDir, 'upgrade.js')], { stdio: 'inherit' })
106
+ },
107
+
108
+ apply: () => {
109
+ console.log('⚙️ Применение jst.config.js...\n')
110
+ spawnSync('node', [join(toolsDir, 'setup-labels.js')], { stdio: 'inherit' })
111
+ spawnSync('node', [join(toolsDir, 'setup-deps.js')], { stdio: 'inherit' })
112
+ console.log('\n✅ Конфиг применён!')
113
+ },
114
+
115
+ 'pr-list': () => {
116
+ console.log('📋 Список Pull Requests...\n')
117
+ spawnSync(ghCmd, ['pr', 'list'], { stdio: 'inherit' })
118
+ },
119
+
120
+ 'pr-view': () => {
121
+ const prNumber = process.argv[3]
122
+ if (!prNumber) {
123
+ console.log('❌ Укажи номер PR: npm run _ pr-view 5')
124
+ process.exit(1)
125
+ }
126
+ console.log(`👀 Просмотр PR #${prNumber}...\n`)
127
+ spawnSync(ghCmd, ['pr', 'view', prNumber], { stdio: 'inherit' })
128
+ },
129
+
130
+ 'pr-view-web': () => {
131
+ const prNumber = process.argv[3]
132
+ if (!prNumber) {
133
+ console.log('❌ Укажи номер PR: npm run _ pr-view-web 5')
134
+ process.exit(1)
135
+ }
136
+ console.log(`🌐 Открываю PR #${prNumber} в браузере...`)
137
+ spawnSync(ghCmd, ['pr', 'view', prNumber, '--web'], { stdio: 'inherit' })
138
+ },
139
+
140
+ 'pr-merge': () => {
141
+ const prNumber = process.argv[3]
142
+ if (!prNumber) {
143
+ console.log('❌ Укажи номер PR: npm run _ pr-merge 5')
144
+ process.exit(1)
145
+ }
146
+ console.log(`🔀 Мерджу PR #${prNumber}...\n`)
147
+ spawnSync(ghCmd, ['pr', 'merge', prNumber, '--merge'], { stdio: 'inherit' })
148
+ console.log('\n✅ PR смерджен!')
149
+ },
150
+
151
+ 'pr-close': () => {
152
+ const prNumber = process.argv[3]
153
+ if (!prNumber) {
154
+ console.log('❌ Укажи номер PR: npm run _ pr-close 5')
155
+ process.exit(1)
156
+ }
157
+ console.log(`❌ Закрываю PR #${prNumber}...\n`)
158
+ spawnSync(ghCmd, ['pr', 'close', prNumber], { stdio: 'inherit' })
159
+ console.log('\n✅ PR закрыт!')
160
+ },
161
+ }
162
+
163
+ if (commands[command]) {
164
+ commands[command]()
165
+ } else {
166
+ console.log(`
167
+ ⚡ JS Template CLI
168
+
169
+ Использование: npm run _ <команда> [аргументы]
170
+
171
+ 📋 ПРОЕКТ:
172
+ init Инициализация нового проекта
173
+ upgrade Обновить конфиги после npm update
174
+ apply Применить изменения из jst.config.js
175
+ init-readme Создать стартовый README.md
176
+ setup-labels Настроить GitHub labels
177
+ setup-deps Настроить dependabot/renovate
178
+
179
+ 🔧 РАЗРАБОТКА:
180
+ update-readme Обновить README с версией
181
+ release Полный релиз (changelog + README)
182
+ push-release Создать PR и смерджить в main
183
+
184
+ 📝 ISSUES (текущий проект):
185
+ tasks Список задач (фичи)
186
+ create-task [название] Создать задачу
187
+ bugs Список багов
188
+ create-bug [название] Создать баг
189
+ refactors Список рефакторингов
190
+ create-refactor [название] Создать рефакторинг
191
+ perfs Список оптимизаций
192
+ create-perf [название] Создать оптимизацию
193
+ all-issues Все issues
194
+
195
+ 📮 ISSUES (jst инструмент):
196
+ report-issue [описание] Сообщить о проблеме в js-template
197
+
198
+ 🔀 PULL REQUESTS:
199
+ pr-list Показать все PR
200
+ pr-view <number> Посмотреть PR в терминале
201
+ pr-view-web <number> Открыть PR в браузере
202
+ pr-merge <number> Смерджить PR
203
+ pr-close <number> Закрыть PR без merge
204
+
205
+ ⚙️ КОНФИГУРАЦИЯ:
206
+ jst.config.js Настройки веток, labels, коммитов, релизов
207
+
208
+ 📝 ФОРМАТ КОММИТОВ:
209
+ feat: #9 описание Фича (ссылка на issue)
210
+ feat(scope): #9 описание Фича со scope
211
+ feat: close #9 описание Фича + закрыть issue
212
+ fix: #10 описание Фикс (ссылка на issue)
213
+ fix(scope): close #10 описание Фикс + scope + закрыть
214
+ refactor: описание Рефакторинг (без issue)
215
+ refactor(utils): описание Рефакторинг со scope
216
+ chore(release): v1.2.0 Авто-релиз
217
+
218
+ 📚 ПРИМЕРЫ:
219
+ npm run _ init
220
+ npm run _ create-task "Добавить темную тему"
221
+ npm run _ release
222
+ npm run _ report-issue "Баг в release команде"
223
+ npm run _ pr-list
224
+
225
+ `)
226
+ process.exit(command ? 1 : 0)
227
+ }