rxn-ui 0.4.4 → 0.4.6
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/cli/index.mjs +100 -91
- package/package.json +1 -1
package/cli/index.mjs
CHANGED
|
@@ -1,91 +1,100 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import fs from 'node:fs'
|
|
4
|
-
import path from 'node:path'
|
|
5
|
-
import process from 'node:process'
|
|
6
|
-
import { fileURLToPath } from 'node:url'
|
|
7
|
-
|
|
8
|
-
const __filename = fileURLToPath(import.meta.url) // Получаем абсолютный путь к текущему файлу (аналог __filename)
|
|
9
|
-
const __dirname = path.dirname(__filename) // Получаем директорию текущего файла (аналог __dirname)
|
|
10
|
-
|
|
11
|
-
const COMPONENTS_DIR = path.join(__dirname, '..', 'src', 'components') // Путь к компонентам внутри пакета
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const hasSrc = fs.existsSync(path.join(cwd, 'src'))
|
|
28
|
-
return {
|
|
29
|
-
components: hasSrc ? 'src/shared/components' : 'components',
|
|
30
|
-
styles: hasSrc ? 'src/app/styles' : 'styles',
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import fs from 'node:fs'
|
|
4
|
+
import path from 'node:path'
|
|
5
|
+
import process from 'node:process'
|
|
6
|
+
import { fileURLToPath } from 'node:url'
|
|
7
|
+
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url) // Получаем абсолютный путь к текущему файлу (аналог __filename)
|
|
9
|
+
const __dirname = path.dirname(__filename) // Получаем директорию текущего файла (аналог __dirname)
|
|
10
|
+
|
|
11
|
+
const COMPONENTS_DIR = path.join(__dirname, '..', 'src', 'components') // Путь к компонентам внутри пакета
|
|
12
|
+
const STYLES_DIR = path.join(__dirname, '..', 'src', 'styles') // Путь к стилям внутри пакета
|
|
13
|
+
const REGISTRY_JSON = path.join(__dirname, 'registry.json') // Путь к файлу registry.json
|
|
14
|
+
|
|
15
|
+
const cwd = process.env.INIT_CWD || process.cwd() // Текущая директория, где пользователь запустил CLI
|
|
16
|
+
|
|
17
|
+
function readRegistry() {
|
|
18
|
+
if (!fs.existsSync(REGISTRY_JSON)) {
|
|
19
|
+
// Проверяем, существует ли registry.json
|
|
20
|
+
console.error('Registry not found')
|
|
21
|
+
process.exit(1)
|
|
22
|
+
}
|
|
23
|
+
return JSON.parse(fs.readFileSync(REGISTRY_JSON, 'utf8'))
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function detectProject() {
|
|
27
|
+
const hasSrc = fs.existsSync(path.join(cwd, 'src'))
|
|
28
|
+
return {
|
|
29
|
+
components: hasSrc ? 'src/shared/components' : 'components',
|
|
30
|
+
styles: hasSrc ? 'src/app/styles' : 'styles',
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function copyFiles(srcDir, destDir, files) {
|
|
35
|
+
// Копирует указанные файлы из srcDir в destDir (только отсутствующие)
|
|
36
|
+
fs.mkdirSync(destDir, { recursive: true })
|
|
37
|
+
for (const file of files) {
|
|
38
|
+
const s = path.join(srcDir, file)
|
|
39
|
+
const d = path.join(destDir, file)
|
|
40
|
+
if (fs.existsSync(s) && !fs.existsSync(d)) {
|
|
41
|
+
fs.copyFileSync(s, d)
|
|
42
|
+
console.log('add', path.relative(cwd, d))
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function init() {
|
|
48
|
+
const configPath = path.join(cwd, 'rxn-ui.json') // Путь к конфигурационному файлу
|
|
49
|
+
if (fs.existsSync(configPath)) {
|
|
50
|
+
console.log('✔ already initialized')
|
|
51
|
+
return
|
|
52
|
+
}
|
|
53
|
+
const config = detectProject()
|
|
54
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2)) // Сохраняем конфиг в файл
|
|
55
|
+
console.log('✔ rxn-ui initialized')
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function add(name) {
|
|
59
|
+
const registry = readRegistry() // Читаем registry.json
|
|
60
|
+
const entry = registry[name] // Получаем запись компонента по имени
|
|
61
|
+
|
|
62
|
+
if (!entry) {
|
|
63
|
+
// Если компонент не найден
|
|
64
|
+
console.error('Component not found:', name)
|
|
65
|
+
process.exit(1)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const configPath = path.join(cwd, 'rxn-ui.json') // Путь к конфигу
|
|
69
|
+
if (!fs.existsSync(configPath)) {
|
|
70
|
+
console.log('You should initialize...\n npx rxn-ui init')
|
|
71
|
+
process.exit(1)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'))
|
|
75
|
+
|
|
76
|
+
// Копируем компонент
|
|
77
|
+
const src = path.join(COMPONENTS_DIR, name)
|
|
78
|
+
const dest = path.join(cwd, config.components, name)
|
|
79
|
+
copyFiles(src, dest, entry.files)
|
|
80
|
+
|
|
81
|
+
// Копируем стили
|
|
82
|
+
const stylesDest = path.join(cwd, config.styles)
|
|
83
|
+
copyFiles(STYLES_DIR, stylesDest, fs.readdirSync(STYLES_DIR))
|
|
84
|
+
|
|
85
|
+
console.log(`\n✔ ${name} added`)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const [cmd, arg] = process.argv.slice(2) // Получаем аргументы командной строки
|
|
89
|
+
|
|
90
|
+
if (cmd === 'init') init()
|
|
91
|
+
else if (cmd === 'add') add(arg)
|
|
92
|
+
else {
|
|
93
|
+
console.log(`
|
|
94
|
+
rxn-ui
|
|
95
|
+
|
|
96
|
+
Usage:
|
|
97
|
+
npx rxn-ui init
|
|
98
|
+
npx rxn-ui add button-base
|
|
99
|
+
`)
|
|
100
|
+
}
|