From bdb7180d9284636d2cc07b25ec29b79f71f5a2fe Mon Sep 17 00:00:00 2001 From: "S.Gromov" Date: Tue, 27 Jan 2026 12:33:11 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BE=D0=B1?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5,=20=D1=88?= =?UTF-8?q?=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=20zustand-store,=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлено автоматическое обновление со спиннером (ora) - Новый шаблон zustand-store - Документация (FEATURES.md, LICENSE, README) --- .../{{name.camelCase}}Store/index.ts | 2 + .../{{name.camelCase}}Store.ts | 27 ++ .../{{name.camelCase}}Store.type.ts | 9 + LICENSE | 21 ++ README.md | 29 +- docs/ru/FEATURES.md | 52 +++ package-lock.json | 296 +++++++++++++++++- package.json | 15 +- src/args.ts | 40 ++- src/cli.ts | 53 ++-- src/output.ts | 56 +--- src/types.ts | 5 +- src/update.ts | 225 +++++++++++++ src/validation.ts | 19 +- 14 files changed, 725 insertions(+), 124 deletions(-) create mode 100644 .templates/zustand-store/{{name.camelCase}}Store/index.ts create mode 100644 .templates/zustand-store/{{name.camelCase}}Store/{{name.camelCase}}Store.ts create mode 100644 .templates/zustand-store/{{name.camelCase}}Store/{{name.camelCase}}Store.type.ts create mode 100644 LICENSE create mode 100644 docs/ru/FEATURES.md create mode 100644 src/update.ts diff --git a/.templates/zustand-store/{{name.camelCase}}Store/index.ts b/.templates/zustand-store/{{name.camelCase}}Store/index.ts new file mode 100644 index 0000000..3c4fbcb --- /dev/null +++ b/.templates/zustand-store/{{name.camelCase}}Store/index.ts @@ -0,0 +1,2 @@ +export * from './{{name.camelCase}}Store.type'; +export * from './{{name.camelCase}}Store'; diff --git a/.templates/zustand-store/{{name.camelCase}}Store/{{name.camelCase}}Store.ts b/.templates/zustand-store/{{name.camelCase}}Store/{{name.camelCase}}Store.ts new file mode 100644 index 0000000..3da6b26 --- /dev/null +++ b/.templates/zustand-store/{{name.camelCase}}Store/{{name.camelCase}}Store.ts @@ -0,0 +1,27 @@ +import { create } from 'zustand'; +import { devtools, persist } from 'zustand/middleware'; +import { immer } from 'zustand/middleware/immer'; +import type { {{name.pascalCase}}State, {{name.pascalCase}}Store } from './{{name.camelCase}}Store.type'; + +export const defaultInitState: {{name.pascalCase}}State = { + deviceId: null, +}; + +const setDeviceId = (state: {{name.pascalCase}}Store, deviceId: string) => { + state.deviceId = deviceId; +}; + +export const use{{name.pascalCase}}Store = create<{{name.pascalCase}}Store>()( + devtools( + persist( + immer<{{name.pascalCase}}Store>((set) => ({ + ...defaultInitState, + setDeviceId: (deviceId) => set((state) => setDeviceId(state, deviceId)), + })), + { + name: '{{name.kebabCase}}-storage', + } + ), + { name: '{{name.pascalCase}}Store' } + ) +); diff --git a/.templates/zustand-store/{{name.camelCase}}Store/{{name.camelCase}}Store.type.ts b/.templates/zustand-store/{{name.camelCase}}Store/{{name.camelCase}}Store.type.ts new file mode 100644 index 0000000..3de8278 --- /dev/null +++ b/.templates/zustand-store/{{name.camelCase}}Store/{{name.camelCase}}Store.type.ts @@ -0,0 +1,9 @@ +export type {{name.pascalCase}}State = { + deviceId: string | null; +}; + +export type {{name.pascalCase}}Actions = { + setDeviceId: (deviceId: string) => void; +}; + +export type {{name.pascalCase}}Store = {{name.pascalCase}}State & {{name.pascalCase}}Actions; diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e22316b --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Gromlab + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index b7e56f7..bbe9419 100644 --- a/README.md +++ b/README.md @@ -2,23 +2,34 @@ CLI-утилита для генерации файлов из шаблонов. +## Установка + +Глобально: + +```bash +npm i -g @gromlab/create +``` +При запуске CLI проверяет доступность новой версии. Если вы выбираете «нет», +повторный запрос появится через 24 часа. Чтобы пропустить проверку, используйте +флаг `--skip-update`. + + ## Использование ```bash -npx @gromlab/create <шаблон> <имя> [опции] +npx @gromlab/create <шаблон> <имя> [путь] [опции] ``` +Если `[путь]` не указан, файлы создаются в директории, где запущен CLI. + ## Пример ```bash # Создать компонент из шаблона npx @gromlab/create component Button -# Указать папку вывода -npx @gromlab/create component Button --out src/components - -# Превью без записи -npx @gromlab/create component Button --dry-run +# Указать папку вывода позиционно +npx @gromlab/create component Button src/components ``` ## Шаблоны @@ -43,12 +54,12 @@ npx @gromlab/create component Button --dry-run - `{{name.kebab}}` — kebab-case - `{{name.snake}}` — snake_case +Переменная `name` задается только позиционным аргументом `<имя>`. Использование `--name` запрещено. + ## Опции | Опция | Описание | |-------|----------| -| `--out <путь>` | Папка вывода (по умолчанию: `.`) | -| `--templates <путь>` | Папка шаблонов (по умолчанию: `.templates`) | | `--overwrite` | Перезаписать существующие файлы | -| `--dry-run` | Показать результат без записи | +| `--skip-update` | Не проверять обновления CLI | | `--<переменная> <значение>` | Произвольная переменная шаблона | diff --git a/docs/ru/FEATURES.md b/docs/ru/FEATURES.md new file mode 100644 index 0000000..3d39164 --- /dev/null +++ b/docs/ru/FEATURES.md @@ -0,0 +1,52 @@ +# Возможности CLI + +Ниже перечислены текущие возможности `@gromlab/create`. + +## Основные + +- Генерация файлов и папок по шаблонам из каталога `.templates/`. +- Обязательный позиционный аргумент `<имя>` (переменная `name`). +- Опциональный позиционный `[путь]` — папка вывода (по умолчанию текущая директория). +- Произвольные переменные шаблонов через `-- `. +- Подстановка переменных в **содержимом** файлов и **путях**. + +## Модификаторы переменных + +Поддерживаются модификаторы для `{{var}}`: +- `{{name.pascalCase}}` +- `{{name.camelCase}}` +- `{{name.snakeCase}}` +- `{{name.kebabCase}}` +- `{{name.screamingSnakeCase}}` +- `{{name.upperCase}}` +- `{{name.lowerCase}}` +- `{{name.upperCaseAll}}` +- `{{name.lowerCaseAll}}` + +## Режимы и защита от перезаписи + +- `--overwrite` — разрешает перезапись существующих файлов. +- Проверка коллизий файлов и существующих директорий (с понятными ошибками/предупреждениями). + +## Отчёт и визуализация + +- Печать итогового отчёта: имя, путь(и), дерево файлов, список переменных. + +## Диагностика и подсказки + +- Подробные ошибки валидации аргументов. +- Список доступных шаблонов, если запрошенный не найден. +- Подсказки для недостающих переменных. +- `-h`/`--help` — вывод справки. +- `--skip-update` — запуск без проверки обновлений. + +## Обновления CLI + +- При запуске (не через `npx`) проверяется доступность новой версии в npm. +- Если пользователь отвечает «нет», повторный запрос появится через 24 часа. +- В неинтерактивном режиме (без TTY) запрос не показывается. + +## Бины + +- Основной бин: `gromlab-create`. +- Дополнительный алиас: `create`. diff --git a/package-lock.json b/package-lock.json index 5867f50..c7b8bd3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,21 +1,24 @@ { "name": "@gromlab/create", - "version": "0.1.0", + "version": "0.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@gromlab/create", - "version": "0.1.0", + "version": "0.1.1", + "license": "MIT", "dependencies": { "archy": "^1.0.0", "boxen": "^5.1.2", "chalk": "^4.1.2", "change-case-all": "^2.1.0", "directory-tree": "^3.5.2", - "figures": "^3.2.0" + "figures": "^3.2.0", + "ora": "^5.4.1" }, "bin": { + "create": "dist/cli.js", "gromlab-create": "dist/cli.js" }, "devDependencies": { @@ -89,6 +92,37 @@ "node": ">=6" } }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "node_modules/boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -111,6 +145,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -169,6 +227,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -306,6 +397,18 @@ "node": ">=4.0.0" } }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/directory-tree": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/directory-tree/-/directory-tree-3.6.0.tgz", @@ -373,6 +476,32 @@ "node": ">=8" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -382,12 +511,110 @@ "node": ">=8" } }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "license": "MIT" }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/reduce-flatten": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", @@ -397,12 +624,60 @@ "node": ">=6" } }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, "node_modules/sponge-case": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/sponge-case/-/sponge-case-2.0.3.tgz", "integrity": "sha512-i4h9ZGRfxV6Xw3mpZSFOfbXjf0cQcYmssGWutgNIfFZ2VM+YIWfD71N/kjjwK6X/AAHzBr+rciEcn/L34S8TGw==", "license": "MIT" }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -537,6 +812,21 @@ "dev": true, "license": "MIT" }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", diff --git a/package.json b/package.json index 09ed8e3..cb3d23e 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,22 @@ { "name": "@gromlab/create", - "version": "0.1.0", + "version": "0.1.1", "description": "Template-based file generator CLI", + "license": "MIT", + "publishConfig": { + "access": "public" + }, "bin": { - "gromlab-create": "dist/cli.js" + "gromlab-create": "dist/cli.js", + "create": "dist/cli.js" }, "main": "dist/cli.js", "files": [ "dist" ], "scripts": { - "build": "tsc -p tsconfig.json", + "clear": "node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\"", + "build": "npm run clear && tsc -p tsconfig.json", "dev": "tsc -p tsconfig.json -w", "prepare": "npm run build" }, @@ -20,7 +26,8 @@ "chalk": "^4.1.2", "change-case-all": "^2.1.0", "directory-tree": "^3.5.2", - "figures": "^3.2.0" + "figures": "^3.2.0", + "ora": "^5.4.1" }, "devDependencies": { "@types/archy": "^0.0.31", diff --git a/src/args.ts b/src/args.ts index 6aa1836..9e38f48 100644 --- a/src/args.ts +++ b/src/args.ts @@ -3,22 +3,22 @@ import { ParsedArgs } from './types'; export function printHelp() { const lines = [ 'Использование:', - ' npx @gromlab/create