kaven-cli 0.4.0-alpha.1 → 0.4.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 +147 -84
- package/README.pt-BR.md +334 -0
- package/dist/commands/config/features.js +1 -34
- package/dist/commands/config/index.js +1 -34
- package/dist/commands/index.js +1 -0
- package/dist/commands/init/index.js +4 -37
- package/dist/commands/marketplace/browse.js +1 -34
- package/dist/commands/module/activate.js +7 -5
- package/dist/commands/module/publish.js +2 -35
- package/dist/commands/upgrade/index.js +6 -39
- package/dist/core/AuthService.js +2 -34
- package/dist/core/CacheManager.js +3 -0
- package/dist/core/ConfigManager.js +8 -7
- package/dist/core/ErrorRecovery.js +1 -0
- package/dist/core/LicenseService.js +3 -38
- package/dist/core/ModuleDoctor.js +3 -0
- package/dist/core/ModuleInstaller.js +5 -36
- package/dist/core/ProjectInitializer.js +26 -5
- package/dist/core/RegistryResolver.js +3 -2
- package/dist/core/SchemaActivator.js +21 -8
- package/dist/core/ScriptRunner.js +3 -2
- package/dist/core/index.js +1 -0
- package/dist/index.js +12 -7
- package/dist/infrastructure/Container.js +2 -4
- package/dist/infrastructure/MarketplaceClient.js +5 -3
- package/dist/infrastructure/TelemetryBuffer.js +3 -1
- package/dist/infrastructure/TransactionalFileSystem.js +4 -1
- package/dist/infrastructure/errors.js +2 -0
- package/dist/infrastructure/index.js +1 -0
- package/package.json +10 -3
- package/dist/commands/modules/add.js +0 -53
- package/dist/commands/modules/list.js +0 -40
- package/dist/commands/modules/remove.js +0 -54
- package/dist/core/api/KavenApiClient.js +0 -61
- package/dist/core/auth/AuthManager.js +0 -91
- package/dist/core/modules/Injector.js +0 -86
- package/dist/core/modules/ModuleInstaller.js +0 -63
- package/dist/core/modules/ModuleManager.js +0 -59
- package/dist/core/modules/ModuleRemover.js +0 -60
- package/dist/lib/config.js +0 -66
- package/dist/lib/errors.js +0 -32
- package/dist/lib/logger.js +0 -70
- package/dist/types/module.js +0 -49
package/README.pt-BR.md
ADDED
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
# Kaven CLI
|
|
2
|
+
|
|
3
|
+
> 📖 English version: [README.md](./README.md)
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/kaven-cli)
|
|
6
|
+
[](https://www.npmjs.com/package/kaven-cli)
|
|
7
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
8
|
+
[](https://nodejs.org)
|
|
9
|
+
[](https://github.com/kaven-co/kaven-cli/actions/workflows/ci.yml)
|
|
10
|
+
|
|
11
|
+
A CLI oficial do [Kaven](https://kaven.site) — boilerplate enterprise-grade para SaaS.
|
|
12
|
+
Bootstrap de projetos, gerenciamento de módulos e integração com o Kaven Marketplace diretamente pelo terminal.
|
|
13
|
+
|
|
14
|
+
O Kaven é um projeto brasileiro. O boilerplate comprime de 3-6 meses para dias o trabalho de infraestrutura base de um SaaS (auth, multi-tenancy, pagamentos, design system).
|
|
15
|
+
|
|
16
|
+
> **Alpha:** APIs e comandos podem mudar antes da v1.0.0.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Instalação
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install -g kaven-cli@alpha
|
|
24
|
+
# ou
|
|
25
|
+
pnpm add -g kaven-cli@alpha
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Requisitos:** Node.js >= 20, pnpm (necessário para o `kaven init`)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Início Rápido
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# 1. Bootstrap de um novo projeto
|
|
36
|
+
kaven init meu-saas
|
|
37
|
+
|
|
38
|
+
# 2. Autenticar com o marketplace
|
|
39
|
+
kaven auth login
|
|
40
|
+
|
|
41
|
+
# 3. Explorar módulos disponíveis
|
|
42
|
+
kaven marketplace browse
|
|
43
|
+
|
|
44
|
+
# 4. Instalar um módulo
|
|
45
|
+
kaven marketplace install payments
|
|
46
|
+
|
|
47
|
+
# 5. Verificar saúde do projeto
|
|
48
|
+
kaven module doctor
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Referência de Comandos
|
|
54
|
+
|
|
55
|
+
### `kaven init [nome-do-projeto]`
|
|
56
|
+
|
|
57
|
+
Cria um novo projeto Kaven a partir do template oficial.
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
Opções:
|
|
61
|
+
--defaults Pular prompts interativos, usar valores padrão
|
|
62
|
+
--skip-install Pular o pnpm install após o setup
|
|
63
|
+
--skip-git Pular git init e commit inicial
|
|
64
|
+
--force Sobrescrever diretório existente
|
|
65
|
+
--with-squad Inicializar squad AIOX no projeto
|
|
66
|
+
|
|
67
|
+
Exemplos:
|
|
68
|
+
kaven init meu-app
|
|
69
|
+
kaven init meu-app --defaults
|
|
70
|
+
kaven init meu-app --skip-git --skip-install
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
### `kaven auth`
|
|
76
|
+
|
|
77
|
+
Gerenciar autenticação com o Kaven Marketplace.
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
Subcomandos:
|
|
81
|
+
login Iniciar fluxo de device code (RFC 8628) — abre o navegador para confirmar
|
|
82
|
+
logout Encerrar a sessão local
|
|
83
|
+
whoami Exibir informações do usuário autenticado
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
### `kaven marketplace`
|
|
89
|
+
|
|
90
|
+
Explorar e instalar módulos do Kaven Marketplace.
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
Subcomandos:
|
|
94
|
+
list Listar módulos disponíveis
|
|
95
|
+
install Baixar e aplicar um módulo no projeto atual
|
|
96
|
+
browse Navegador interativo (TUI)
|
|
97
|
+
|
|
98
|
+
Opções (list):
|
|
99
|
+
--category <cat> Filtrar por categoria
|
|
100
|
+
--sort <campo> newest (padrão) | popular | name
|
|
101
|
+
--page <n> Número da página
|
|
102
|
+
--limit <n> Resultados por página (máx 100)
|
|
103
|
+
--json Saída em JSON bruto
|
|
104
|
+
|
|
105
|
+
Opções (install):
|
|
106
|
+
--version <ver> Instalar uma versão específica
|
|
107
|
+
--force Pular confirmação de sobrescrita
|
|
108
|
+
--skip-env Pular injeção no .env
|
|
109
|
+
--env-file <path> Caminho do .env alvo
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### `kaven module`
|
|
115
|
+
|
|
116
|
+
Gerenciar módulos instalados no projeto atual.
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
Subcomandos:
|
|
120
|
+
doctor Executar health checks no projeto e nos módulos instalados
|
|
121
|
+
add Instalar um módulo a partir de um manifest local
|
|
122
|
+
remove Desinstalar um módulo instalado
|
|
123
|
+
publish Publicar um módulo no marketplace
|
|
124
|
+
|
|
125
|
+
Opções (doctor):
|
|
126
|
+
--fix Corrigir problemas automaticamente (pnpm install, prisma generate, env vars)
|
|
127
|
+
--json Saída em JSON legível por máquina
|
|
128
|
+
|
|
129
|
+
Exit codes (doctor):
|
|
130
|
+
0 Todos os checks passaram
|
|
131
|
+
1 Um ou mais erros encontrados
|
|
132
|
+
2 Apenas avisos (sem erros)
|
|
133
|
+
|
|
134
|
+
Opções (publish):
|
|
135
|
+
--dry-run Validar e empacotar sem fazer upload
|
|
136
|
+
--changelog <msg> Notas de release para esta versão
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
> `kaven doctor` é um alias para `kaven module doctor`.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
### `kaven upgrade`
|
|
144
|
+
|
|
145
|
+
Fazer upgrade da licença via checkout Paddle.
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
Opções:
|
|
149
|
+
--no-browser Imprimir URL do checkout em vez de abrir o navegador
|
|
150
|
+
|
|
151
|
+
Comportamento:
|
|
152
|
+
Abre o checkout Paddle no navegador → aguarda confirmação de pagamento (a cada 5s, máx 10 min)
|
|
153
|
+
→ atualiza a licença local em caso de sucesso
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
### `kaven license`
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
Subcomandos:
|
|
162
|
+
status Exibir tier e validade da licença atual
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
### `kaven cache`
|
|
168
|
+
|
|
169
|
+
Gerenciar o cache local de respostas da API (`~/.kaven/cache`, máx 50 MB).
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
Subcomandos:
|
|
173
|
+
status Exibir estatísticas do cache (tamanho, entradas, idade)
|
|
174
|
+
clear Apagar todos os dados em cache
|
|
175
|
+
|
|
176
|
+
TTLs do cache:
|
|
177
|
+
Listagem de módulos 24 horas
|
|
178
|
+
Manifests de módulos 7 dias
|
|
179
|
+
Status da licença 1 hora
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
### `kaven telemetry`
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
Subcomandos:
|
|
188
|
+
view Exibir eventos de telemetria locais recentes
|
|
189
|
+
-l, --limit <n> Número de eventos (padrão: 10)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
### `kaven config`
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
Subcomandos:
|
|
198
|
+
set <chave> <valor> Definir um valor de configuração
|
|
199
|
+
get <chave> Ler um valor de configuração
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
### `kaven init-ci`
|
|
205
|
+
|
|
206
|
+
Inicializa configuração de CI/CD no projeto atual. Gera workflows do GitHub Actions configurados para projetos Kaven.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Configuração
|
|
211
|
+
|
|
212
|
+
Toda a configuração fica em `~/.kaven/`:
|
|
213
|
+
|
|
214
|
+
```
|
|
215
|
+
~/.kaven/
|
|
216
|
+
auth.json Tokens de autenticação (chmod 600)
|
|
217
|
+
config.json Configuração da CLI
|
|
218
|
+
license.json Chave e tier da licença
|
|
219
|
+
signing-key.json Chave Ed25519 para módulos (chmod 600)
|
|
220
|
+
cache/ Cache de respostas da API (máx 50 MB)
|
|
221
|
+
telemetry.log Eventos de telemetria locais
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Variáveis de Ambiente
|
|
225
|
+
|
|
226
|
+
| Variável | Descrição |
|
|
227
|
+
|----------|-----------|
|
|
228
|
+
| `KAVEN_API_URL` | Sobrescrever a URL da API do marketplace |
|
|
229
|
+
| `KAVEN_DEBUG=1` | Ativar saída de debug detalhada |
|
|
230
|
+
| `KAVEN_OFFLINE=1` | Usar apenas dados em cache, sem requisições de rede |
|
|
231
|
+
| `KAVEN_TELEMETRY=0` | Desativar telemetria completamente |
|
|
232
|
+
|
|
233
|
+
### Sobrescrever a URL da API (config file)
|
|
234
|
+
|
|
235
|
+
```json
|
|
236
|
+
// ~/.kaven/config.json
|
|
237
|
+
{
|
|
238
|
+
"apiUrl": "https://api.seu-kaven.com"
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Modo Debug
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
KAVEN_DEBUG=1 kaven marketplace list
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Modo Offline
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
KAVEN_OFFLINE=1 kaven marketplace list
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Troubleshooting
|
|
257
|
+
|
|
258
|
+
**Erro "Not authenticated"**
|
|
259
|
+
```bash
|
|
260
|
+
kaven auth login
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
**"module.json not found" ao publicar**
|
|
264
|
+
|
|
265
|
+
Execute `kaven module publish` de dentro do diretório do módulo (o que contém o `module.json`).
|
|
266
|
+
|
|
267
|
+
**pnpm install falha no `kaven init`**
|
|
268
|
+
```bash
|
|
269
|
+
npm install -g pnpm # instalar pnpm globalmente
|
|
270
|
+
# ou pular e instalar depois:
|
|
271
|
+
kaven init meu-app --skip-install
|
|
272
|
+
cd meu-app && pnpm install
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Prisma client desatualizado**
|
|
276
|
+
```bash
|
|
277
|
+
kaven module doctor --fix
|
|
278
|
+
# ou manualmente:
|
|
279
|
+
npx prisma generate
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
**Problemas de cache**
|
|
283
|
+
```bash
|
|
284
|
+
kaven cache clear
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
**Permission denied em `~/.kaven/`**
|
|
288
|
+
```bash
|
|
289
|
+
chmod 700 ~/.kaven
|
|
290
|
+
chmod 600 ~/.kaven/auth.json ~/.kaven/signing-key.json
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## Contribuindo
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
git clone https://github.com/kaven-co/kaven-cli
|
|
299
|
+
cd kaven-cli
|
|
300
|
+
pnpm install
|
|
301
|
+
pnpm test # 310 testes
|
|
302
|
+
pnpm run typecheck
|
|
303
|
+
pnpm run lint
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
**Convenção de commits:** este repositório usa [Conventional Commits](https://www.conventionalcommits.org/).
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
feat: adicionar flag --with-squad ao kaven init
|
|
310
|
+
fix: corrigir corrupção de cache em escritas concorrentes
|
|
311
|
+
docs: atualizar seção de troubleshooting
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
**Fluxo de release:**
|
|
315
|
+
1. Abrir um PR contra `main`
|
|
316
|
+
2. CI deve estar verde (lint + typecheck + testes + build)
|
|
317
|
+
3. Merge → Semantic Release faz o bump de versão automaticamente e publica no npm (tag `@alpha`)
|
|
318
|
+
|
|
319
|
+
Tipos que disparam release: `feat` (minor), `fix` / `perf` / `refactor` (patch), `BREAKING CHANGE` (major).
|
|
320
|
+
Tipos que **não** disparam release: `chore`, `docs`, `test`, `style`, `ci`.
|
|
321
|
+
|
|
322
|
+
Consulte [`docs/releasing.md`](./docs/releasing.md) para a documentação completa do pipeline de release.
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## Licença
|
|
327
|
+
|
|
328
|
+
Apache 2.0 — veja [LICENSE](LICENSE)
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
Documentação: https://docs.kaven.site/cli
|
|
333
|
+
GitHub: https://github.com/kaven-co/kaven-cli
|
|
334
|
+
npm: https://www.npmjs.com/package/kaven-cli
|
|
@@ -1,37 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
@@ -945,7 +912,7 @@ async function applyTierDirect(tier, outputPath) {
|
|
|
945
912
|
// Interactive TUI mode
|
|
946
913
|
// ---------------------------------------------------------------------------
|
|
947
914
|
async function runInteractive(outputPath) {
|
|
948
|
-
const { select, confirm } = await
|
|
915
|
+
const { select, confirm } = await import("@inquirer/prompts");
|
|
949
916
|
// checkbox está disponível em runtime via @inquirer/prompts mas a definição de tipos
|
|
950
917
|
// não resolve @inquirer/checkbox no node_modules direto (pacote linkado via pnpm store).
|
|
951
918
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
@@ -1,37 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
@@ -113,7 +80,7 @@ async function configView(options) {
|
|
|
113
80
|
* C2.4: Config reset — Reset to defaults
|
|
114
81
|
*/
|
|
115
82
|
async function configReset() {
|
|
116
|
-
const { confirm } = await
|
|
83
|
+
const { confirm } = await import("@inquirer/prompts");
|
|
117
84
|
const confirmed = await confirm({
|
|
118
85
|
message: "Are you sure you want to reset config to defaults?",
|
|
119
86
|
default: false,
|
package/dist/commands/index.js
CHANGED
|
@@ -1,37 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
@@ -45,7 +12,7 @@ const ProjectInitializer_1 = require("../../core/ProjectInitializer");
|
|
|
45
12
|
const ConfigManager_1 = require("../../core/ConfigManager");
|
|
46
13
|
async function promptAnswers(projectName) {
|
|
47
14
|
// Dynamic import to keep startup fast and avoid issues if not installed
|
|
48
|
-
const { input, select } = await
|
|
15
|
+
const { input, select } = await import("@inquirer/prompts");
|
|
49
16
|
// Load defaults from config if available
|
|
50
17
|
await ConfigManager_1.configManager.initialize();
|
|
51
18
|
const existingDefaults = ConfigManager_1.configManager.getAll().projectDefaults || {};
|
|
@@ -83,7 +50,7 @@ async function initProject(projectName, options) {
|
|
|
83
50
|
resolvedName = "my-kaven-app";
|
|
84
51
|
}
|
|
85
52
|
else {
|
|
86
|
-
const { input } = await
|
|
53
|
+
const { input } = await import("@inquirer/prompts");
|
|
87
54
|
resolvedName = await input({
|
|
88
55
|
message: "Project name:",
|
|
89
56
|
default: "my-kaven-app",
|
|
@@ -126,7 +93,7 @@ async function initProject(projectName, options) {
|
|
|
126
93
|
// Clone template
|
|
127
94
|
const cloneSpinner = (0, ora_1.default)("Cloning kaven-template...").start();
|
|
128
95
|
try {
|
|
129
|
-
await initializer.cloneTemplate(targetDir);
|
|
96
|
+
await initializer.cloneTemplate(targetDir, options.template);
|
|
130
97
|
cloneSpinner.succeed("Template cloned successfully");
|
|
131
98
|
}
|
|
132
99
|
catch (error) {
|
|
@@ -207,7 +174,7 @@ async function initProject(projectName, options) {
|
|
|
207
174
|
console.log(chalk_1.default.cyan(" npx prisma migrate dev"));
|
|
208
175
|
console.log(chalk_1.default.cyan(" pnpm dev"));
|
|
209
176
|
console.log();
|
|
210
|
-
console.log(chalk_1.default.gray("For more help, visit: https://docs.kaven.
|
|
177
|
+
console.log(chalk_1.default.gray("For more help, visit: https://docs.kaven.site/getting-started"));
|
|
211
178
|
if (options.withSquad) {
|
|
212
179
|
console.log();
|
|
213
180
|
console.log(chalk_1.default.bold("AIOX Squad next step:"));
|
|
@@ -1,37 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
@@ -68,7 +35,7 @@ async function marketplaceBrowse() {
|
|
|
68
35
|
selectedModule: null,
|
|
69
36
|
screen: "categories",
|
|
70
37
|
};
|
|
71
|
-
const { select } = await
|
|
38
|
+
const { select } = await import("@inquirer/prompts");
|
|
72
39
|
while (state.screen !== "exit") {
|
|
73
40
|
if (state.screen === "categories") {
|
|
74
41
|
// Step 1: Category selection
|
|
@@ -8,6 +8,7 @@ exports.moduleDeactivate = moduleDeactivate;
|
|
|
8
8
|
exports.moduleListActivation = moduleListActivation;
|
|
9
9
|
const chalk_1 = __importDefault(require("chalk"));
|
|
10
10
|
const ora_1 = __importDefault(require("ora"));
|
|
11
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
12
|
const SchemaActivator_1 = require("../../core/SchemaActivator");
|
|
12
13
|
const TelemetryBuffer_1 = require("../../infrastructure/TelemetryBuffer");
|
|
13
14
|
// ============================================================
|
|
@@ -16,10 +17,11 @@ const TelemetryBuffer_1 = require("../../infrastructure/TelemetryBuffer");
|
|
|
16
17
|
function findModuleDef(moduleId) {
|
|
17
18
|
return SchemaActivator_1.KAVEN_MODULES.find((m) => m.id === moduleId.toLowerCase());
|
|
18
19
|
}
|
|
19
|
-
function assertSchemaExists(exists) {
|
|
20
|
+
function assertSchemaExists(exists, root) {
|
|
20
21
|
if (!exists) {
|
|
21
|
-
|
|
22
|
-
console.error(chalk_1.default.
|
|
22
|
+
const fullPath = node_path_1.default.join(root, "packages", "database", "prisma", "schema.extended.prisma");
|
|
23
|
+
console.error(chalk_1.default.red(`\nErro: Schema não encontrado em: ${fullPath}`));
|
|
24
|
+
console.error(chalk_1.default.gray("Certifique-se de que o caminho fornecido é a raiz de um projeto Kaven válido."));
|
|
23
25
|
process.exit(1);
|
|
24
26
|
}
|
|
25
27
|
}
|
|
@@ -37,7 +39,7 @@ async function moduleActivate(moduleName, projectRoot) {
|
|
|
37
39
|
// 1. Validar que o schema existe
|
|
38
40
|
const exists = await activator.exists();
|
|
39
41
|
spinner.stop();
|
|
40
|
-
assertSchemaExists(exists);
|
|
42
|
+
assertSchemaExists(exists, root);
|
|
41
43
|
// 2. Validar que o módulo é conhecido
|
|
42
44
|
const def = findModuleDef(moduleName);
|
|
43
45
|
if (!def) {
|
|
@@ -100,7 +102,7 @@ async function moduleDeactivate(moduleName, projectRoot) {
|
|
|
100
102
|
// 1. Validar que o schema existe
|
|
101
103
|
const exists = await activator.exists();
|
|
102
104
|
spinner.stop();
|
|
103
|
-
assertSchemaExists(exists);
|
|
105
|
+
assertSchemaExists(exists, root);
|
|
104
106
|
// 2. Validar módulo
|
|
105
107
|
const def = findModuleDef(moduleName);
|
|
106
108
|
if (!def) {
|
|
@@ -1,37 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
@@ -95,7 +62,7 @@ async function sha256File(filePath) {
|
|
|
95
62
|
}
|
|
96
63
|
/** Create tar.gz archive of current directory, excluding common noise. */
|
|
97
64
|
async function createTarball(sourceDir, outputPath) {
|
|
98
|
-
const tar = await
|
|
65
|
+
const tar = await import("tar");
|
|
99
66
|
await tar.create({
|
|
100
67
|
gzip: true,
|
|
101
68
|
file: outputPath,
|
|
@@ -281,7 +248,7 @@ async function modulePublish(options) {
|
|
|
281
248
|
await fs_extra_1.default.remove(tarballPath).catch(() => { });
|
|
282
249
|
console.log();
|
|
283
250
|
console.log(chalk_1.default.green(`✅ Published ${moduleJson.name} v${moduleJson.version} to the Kaven Marketplace!`));
|
|
284
|
-
console.log(chalk_1.default.gray(`View your module at: https://marketplace.kaven.
|
|
251
|
+
console.log(chalk_1.default.gray(`View your module at: https://marketplace.kaven.site/modules/${moduleJson.slug}`));
|
|
285
252
|
// Show next steps
|
|
286
253
|
console.log();
|
|
287
254
|
console.log(chalk_1.default.bold("Next steps:"));
|