@oktis-works/cms 0.6.5 → 0.7.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/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +11 -0
- package/dist/commands.js.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/parser.d.ts +5 -0
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +8 -1
- package/dist/parser.js.map +1 -1
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +29 -9
- package/dist/prompt.js.map +1 -1
- package/dist/scaffold-docs.d.ts.map +1 -1
- package/dist/scaffold-docs.js +2 -0
- package/dist/scaffold-docs.js.map +1 -1
- package/dist/wizard-env.d.ts +24 -0
- package/dist/wizard-env.d.ts.map +1 -0
- package/dist/wizard-env.js +171 -0
- package/dist/wizard-env.js.map +1 -0
- package/dist/wizard-flows.d.ts +19 -0
- package/dist/wizard-flows.d.ts.map +1 -0
- package/dist/wizard-flows.js +165 -0
- package/dist/wizard-flows.js.map +1 -0
- package/dist/wizard-i18n.d.ts +112 -0
- package/dist/wizard-i18n.d.ts.map +1 -0
- package/dist/wizard-i18n.js +232 -0
- package/dist/wizard-i18n.js.map +1 -0
- package/dist/wizard-run.d.ts +39 -0
- package/dist/wizard-run.d.ts.map +1 -0
- package/dist/wizard-run.js +121 -0
- package/dist/wizard-run.js.map +1 -0
- package/dist/wizard-state.d.ts +30 -0
- package/dist/wizard-state.d.ts.map +1 -0
- package/dist/wizard-state.js +69 -0
- package/dist/wizard-state.js.map +1 -0
- package/dist/wizard.d.ts +16 -0
- package/dist/wizard.d.ts.map +1 -0
- package/dist/wizard.js +304 -0
- package/dist/wizard.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
// @oktis-works/cms - Wizard i18n: catálogo de mensagens plugável (en/pt)
|
|
2
|
+
//
|
|
3
|
+
// O wizard começa em inglês e permite trocar o idioma durante a sessão. O
|
|
4
|
+
// catálogo é um DICIONÁRIO plugável: adicionar um idioma novo = acrescentar um
|
|
5
|
+
// objeto `Catalog` em `CATALOGS` (o tipo força preencher toda a UI — um campo
|
|
6
|
+
// esquecido é erro de compilação, não texto vazio em produção).
|
|
7
|
+
//
|
|
8
|
+
// Comandos e nomes de flags NUNCA são traduzidos: a sintaxe que o usuário copia
|
|
9
|
+
// pra automação é sempre a real (`okcms deploy --target blue-green`).
|
|
10
|
+
import { detectProjectDocsLang } from './scaffold-docs.js';
|
|
11
|
+
const en = {
|
|
12
|
+
title: 'OKCMS wizard',
|
|
13
|
+
langLabel: (current) => `language: ${current}`,
|
|
14
|
+
pickLang: 'Interface language',
|
|
15
|
+
suggestNone: 'what would you like to do?',
|
|
16
|
+
suggestInit: 'no project here yet — start with a new project',
|
|
17
|
+
suggestEnv: 'next step: complete the environment variables (.env)',
|
|
18
|
+
suggestInfra: 'next step: start the infrastructure (Postgres + Redis)',
|
|
19
|
+
suggestApps: 'next step: start the apps (okcms start)',
|
|
20
|
+
suggestDeploy: 'apps are running locally — deploy when ready',
|
|
21
|
+
menuFlows: 'Guided flows',
|
|
22
|
+
menuFlowsHint: 'init · dev · deploy blue-green/simple/pm2 · update',
|
|
23
|
+
menuCommand: 'Run a command',
|
|
24
|
+
menuCommandHint: 'all {n} CLI commands, grouped — dangerous ones marked',
|
|
25
|
+
menuEnv: 'Configure .env',
|
|
26
|
+
menuEnvHint: 'field-by-field interview for all 47 variables',
|
|
27
|
+
menuStatus: 'Project status',
|
|
28
|
+
menuStatusHint: 'docker, infrastructure, apps, environment',
|
|
29
|
+
menuRefresh: 'Refresh status',
|
|
30
|
+
menuRefreshHint: 're-probe docker/apps/.env',
|
|
31
|
+
menuExit: 'Exit',
|
|
32
|
+
menuExitHint: 'back to the shell',
|
|
33
|
+
flowsHeading: 'Guided flows',
|
|
34
|
+
catalogHeading: 'Commands',
|
|
35
|
+
envHeading: 'Environment variables',
|
|
36
|
+
statusHeading: 'Project status',
|
|
37
|
+
languageHeading: 'Language',
|
|
38
|
+
statusNoProject: 'no OkCMS project in this directory (run okcms init)',
|
|
39
|
+
statusProject: (name) => `project: ${name}`,
|
|
40
|
+
statusEnvComplete: '.env: complete',
|
|
41
|
+
statusEnvIncomplete: (missing) => `.env: ${missing} required variable(s) missing`,
|
|
42
|
+
statusDockerUp: 'docker: up',
|
|
43
|
+
statusDockerDown: 'docker: not available',
|
|
44
|
+
statusInfraUp: 'infrastructure: running (Postgres + Redis)',
|
|
45
|
+
statusInfraDown: 'infrastructure: not running',
|
|
46
|
+
statusAppsUp: (labels) => `apps: running (${labels})`,
|
|
47
|
+
statusAppsDown: 'apps: not running',
|
|
48
|
+
statusRefreshed: 'status refreshed',
|
|
49
|
+
mirrorLine: (command) => `$ ${command}`,
|
|
50
|
+
running: (command) => `running: ${command}`,
|
|
51
|
+
exitedZero: 'finished with success',
|
|
52
|
+
exitedNonZero: (code) => `exited with code ${code}`,
|
|
53
|
+
onFailure: 'command failed — what now?',
|
|
54
|
+
failDoctor: 'Run diagnostics (okcms doctor)',
|
|
55
|
+
failRetry: 'Retry the same command',
|
|
56
|
+
failMenu: 'Back to the menu',
|
|
57
|
+
longRunning: 'long-running command — press Ctrl+C to stop it and return to the wizard',
|
|
58
|
+
interrupted: 'interrupted — returned to the wizard',
|
|
59
|
+
envIntro: 'Enter keeps the current value · empty input keeps it too · Ctrl+C cancels everything',
|
|
60
|
+
envSkipOption: 'Skip — use the current .env as-is',
|
|
61
|
+
envKeepHint: 'current',
|
|
62
|
+
envSectionCount: (count) => `${count} field(s) in this section`,
|
|
63
|
+
envSecretNotSet: '(not set)',
|
|
64
|
+
envJwtGenerate: 'JWT_SECRET is missing or a placeholder — generate a strong one?',
|
|
65
|
+
envGenerated: 'JWT_SECRET generated (48 hex, 32 bytes)',
|
|
66
|
+
envSaved: (count) => `${count} key(s) saved to .env (permission 600)`,
|
|
67
|
+
envDiscarded: 'discarded — nothing was saved',
|
|
68
|
+
envDefaultApplies: (value) => `not set — the default (${value}) applies`,
|
|
69
|
+
envSummaryTitle: 'Review before saving',
|
|
70
|
+
envSummaryPending: (count) => `${count} pending change(s)`,
|
|
71
|
+
envConfirmSave: (count) => `Save ${count} change(s) to .env?`,
|
|
72
|
+
envCancelled: 'cancelled — nothing was saved',
|
|
73
|
+
envNoProject: 'no .env to edit — run okcms init (or okcms dev) first',
|
|
74
|
+
flowInit: 'New project',
|
|
75
|
+
flowInitHint: 'scaffold a fresh OkCMS project from zero',
|
|
76
|
+
flowDev: 'Local development',
|
|
77
|
+
flowDevHint: 'env → infra → migrations → first admin → apps',
|
|
78
|
+
flowDeployBg: 'Deploy: blue/green',
|
|
79
|
+
flowDeployBgHint: 'zero-downtime lanes behind the proxy',
|
|
80
|
+
flowDeploySimple: 'Deploy: simple',
|
|
81
|
+
flowDeploySimpleHint: 'plain containers (okcms-api/web/admin)',
|
|
82
|
+
flowDeployPm2: 'Deploy: PM2',
|
|
83
|
+
flowDeployPm2Hint: 'process manager on the host',
|
|
84
|
+
flowUpdate: 'Update',
|
|
85
|
+
flowUpdateHint: 'packages + migrations + redeploy',
|
|
86
|
+
flowBack: 'Back',
|
|
87
|
+
flowBackHint: 'return to the main menu',
|
|
88
|
+
stepIntro: (flow) => `Flow: ${flow}`,
|
|
89
|
+
stepEnvAsk: 'Configure environment variables first?',
|
|
90
|
+
stepEnvSkip: 'using the current .env',
|
|
91
|
+
stepPrecheck: 'pre-checks',
|
|
92
|
+
stepAppsRunning: 'local apps are running — they hold the ports the containers need',
|
|
93
|
+
stepStopFirst: 'stop them now (okcms stop)?',
|
|
94
|
+
stepConfirmRun: (command) => `Run ${command}?`,
|
|
95
|
+
stepCancelled: 'cancelled — nothing was executed',
|
|
96
|
+
deployTargetSummary: (target) => `deploy target: ${target}`,
|
|
97
|
+
updateSummary: 'update = download packages → apply migrations → redeploy (blue/green, simple or PM2)',
|
|
98
|
+
initWhatItDoes: 'init scaffolds the project: apps, .env.example, okcms.config.json, docs (README/PLUGIN/THEME) and dependency install',
|
|
99
|
+
devWhatItDoes: 'dev prepares everything and runs locally: .env → Docker infra (Postgres/Redis) → migrations → first admin user → API + Admin + Web',
|
|
100
|
+
catalogIntro: 'Every command here prints its CLI line first — copy it for scripts/CI',
|
|
101
|
+
catalogPickCommand: 'Command',
|
|
102
|
+
catalogRequired: (flag, desc) => `${flag} — ${desc}`,
|
|
103
|
+
catalogAddOptionals: 'Add optional flags?',
|
|
104
|
+
catalogPickOptional: 'Optional flag (choose "run" to execute)',
|
|
105
|
+
catalogValueFor: (flag, desc) => `Value for ${flag} (${desc})`,
|
|
106
|
+
catalogDanger: (name) => `${name} — DESTRUCTIVE`,
|
|
107
|
+
catalogConfirmDanger: (command) => `${command}\nThis command can destroy data. Run it anyway?`,
|
|
108
|
+
catalogConfirmRun: (command) => `Run ${command}?`,
|
|
109
|
+
catalogDone: 'command finished',
|
|
110
|
+
warnNoProject: 'this command expects an OkCMS project (okcms.config.json / .env)',
|
|
111
|
+
bye: 'bye',
|
|
112
|
+
};
|
|
113
|
+
const pt = {
|
|
114
|
+
title: 'OKCMS wizard',
|
|
115
|
+
langLabel: (current) => `idioma: ${current}`,
|
|
116
|
+
pickLang: 'Idioma da interface',
|
|
117
|
+
suggestNone: 'o que você quer fazer?',
|
|
118
|
+
suggestInit: 'não há projeto aqui ainda — comece criando um projeto',
|
|
119
|
+
suggestEnv: 'próximo passo: completar as variáveis de ambiente (.env)',
|
|
120
|
+
suggestInfra: 'próximo passo: subir a infraestrutura (Postgres + Redis)',
|
|
121
|
+
suggestApps: 'próximo passo: subir os apps (okcms start)',
|
|
122
|
+
suggestDeploy: 'apps rodando localmente — deploy quando quiser',
|
|
123
|
+
menuFlows: 'Fluxos guiados',
|
|
124
|
+
menuFlowsHint: 'init · dev · deploy blue-green/simple/pm2 · update',
|
|
125
|
+
menuCommand: 'Rodar um comando',
|
|
126
|
+
menuCommandHint: 'todos os {n} comandos do CLI, agrupados — destrutivos marcados',
|
|
127
|
+
menuEnv: 'Configurar .env',
|
|
128
|
+
menuEnvHint: 'entrevista campo a campo das 47 variáveis',
|
|
129
|
+
menuStatus: 'Status do projeto',
|
|
130
|
+
menuStatusHint: 'docker, infraestrutura, apps, ambiente',
|
|
131
|
+
menuRefresh: 'Atualizar status',
|
|
132
|
+
menuRefreshHint: 're-sondear docker/apps/.env',
|
|
133
|
+
menuExit: 'Sair',
|
|
134
|
+
menuExitHint: 'voltar ao shell',
|
|
135
|
+
flowsHeading: 'Fluxos guiados',
|
|
136
|
+
catalogHeading: 'Comandos',
|
|
137
|
+
envHeading: 'Variáveis de ambiente',
|
|
138
|
+
statusHeading: 'Status do projeto',
|
|
139
|
+
languageHeading: 'Idioma',
|
|
140
|
+
statusNoProject: 'nenhum projeto OkCMS neste diretório (rode okcms init)',
|
|
141
|
+
statusProject: (name) => `projeto: ${name}`,
|
|
142
|
+
statusEnvComplete: '.env: completo',
|
|
143
|
+
statusEnvIncomplete: (missing) => `.env: ${missing} variável(is) obrigatória(s) faltando`,
|
|
144
|
+
statusDockerUp: 'docker: disponível',
|
|
145
|
+
statusDockerDown: 'docker: indisponível',
|
|
146
|
+
statusInfraUp: 'infraestrutura: rodando (Postgres + Redis)',
|
|
147
|
+
statusInfraDown: 'infraestrutura: não está rodando',
|
|
148
|
+
statusAppsUp: (labels) => `apps: rodando (${labels})`,
|
|
149
|
+
statusAppsDown: 'apps: não estão rodando',
|
|
150
|
+
statusRefreshed: 'status atualizado',
|
|
151
|
+
mirrorLine: (command) => `$ ${command}`,
|
|
152
|
+
running: (command) => `executando: ${command}`,
|
|
153
|
+
exitedZero: 'finalizou com sucesso',
|
|
154
|
+
exitedNonZero: (code) => `saiu com código ${code}`,
|
|
155
|
+
onFailure: 'o comando falhou — e agora?',
|
|
156
|
+
failDoctor: 'Rodar diagnóstico (okcms doctor)',
|
|
157
|
+
failRetry: 'Tentar de novo o mesmo comando',
|
|
158
|
+
failMenu: 'Voltar ao menu',
|
|
159
|
+
longRunning: 'comando de longa duração — Ctrl+C para voltar ao wizard',
|
|
160
|
+
interrupted: 'interrompido — voltando ao wizard',
|
|
161
|
+
envIntro: 'Enter mantém o valor atual · vazio também mantém · Ctrl+C cancela tudo',
|
|
162
|
+
envSkipOption: 'Pular — usar o .env atual como está',
|
|
163
|
+
envKeepHint: 'atual',
|
|
164
|
+
envSectionCount: (count) => `${count} campo(s) nesta seção`,
|
|
165
|
+
envSecretNotSet: '(não definido)',
|
|
166
|
+
envJwtGenerate: 'JWT_SECRET ausente ou placeholder — gerar um forte?',
|
|
167
|
+
envGenerated: 'JWT_SECRET gerado (48 hex, 32 bytes)',
|
|
168
|
+
envSaved: (count) => `${count} chave(s) salva(s) no .env (permissão 600)`,
|
|
169
|
+
envDiscarded: 'descartado — nada foi salvo',
|
|
170
|
+
envDefaultApplies: (value) => `não definido — o default (${value}) vale`,
|
|
171
|
+
envSummaryTitle: 'Confira antes de salvar',
|
|
172
|
+
envSummaryPending: (count) => `${count} alteração(ões) pendente(s)`,
|
|
173
|
+
envConfirmSave: (count) => `Salvar ${count} alteração(ões) no .env?`,
|
|
174
|
+
envCancelled: 'cancelado — nada foi salvo',
|
|
175
|
+
envNoProject: 'não há .env para editar — rode okcms init (ou okcms dev) primeiro',
|
|
176
|
+
flowInit: 'Projeto novo',
|
|
177
|
+
flowInitHint: 'criar um projeto OkCMS do zero',
|
|
178
|
+
flowDev: 'Desenvolvimento local',
|
|
179
|
+
flowDevHint: 'env → infra → migrations → primeiro admin → apps',
|
|
180
|
+
flowDeployBg: 'Deploy: blue/green',
|
|
181
|
+
flowDeployBgHint: 'lanes sem downtime atrás do proxy',
|
|
182
|
+
flowDeploySimple: 'Deploy: simple',
|
|
183
|
+
flowDeploySimpleHint: 'containers diretos (okcms-api/web/admin)',
|
|
184
|
+
flowDeployPm2: 'Deploy: PM2',
|
|
185
|
+
flowDeployPm2Hint: 'process manager no host',
|
|
186
|
+
flowUpdate: 'Atualizar',
|
|
187
|
+
flowUpdateHint: 'pacotes + migrations + redeploy',
|
|
188
|
+
flowBack: 'Voltar',
|
|
189
|
+
flowBackHint: 'menu principal',
|
|
190
|
+
stepIntro: (flow) => `Fluxo: ${flow}`,
|
|
191
|
+
stepEnvAsk: 'Configurar as variáveis de ambiente primeiro?',
|
|
192
|
+
stepEnvSkip: 'usando o .env atual',
|
|
193
|
+
stepPrecheck: 'pré-checagens',
|
|
194
|
+
stepAppsRunning: 'apps locais estão rodando — eles ocupam as portas que os containers precisam',
|
|
195
|
+
stepStopFirst: 'parar agora (okcms stop)?',
|
|
196
|
+
stepConfirmRun: (command) => `Rodar ${command}?`,
|
|
197
|
+
stepCancelled: 'cancelado — nada foi executado',
|
|
198
|
+
deployTargetSummary: (target) => `alvo do deploy: ${target}`,
|
|
199
|
+
updateSummary: 'update = baixar pacotes → aplicar migrations → redesploy (blue/green, simple ou PM2)',
|
|
200
|
+
initWhatItDoes: 'init cria o projeto: apps, .env.example, okcms.config.json, docs (README/PLUGIN/THEME) e instala as dependências',
|
|
201
|
+
devWhatItDoes: 'dev prepara tudo e roda local: .env → infra Docker (Postgres/Redis) → migrations → primeiro admin → API + Admin + Web',
|
|
202
|
+
catalogIntro: 'Todo comando aqui imprime a linha de CLI primeiro — copie pra automação/CI',
|
|
203
|
+
catalogPickCommand: 'Comando',
|
|
204
|
+
catalogRequired: (flag, desc) => `${flag} — ${desc}`,
|
|
205
|
+
catalogAddOptionals: 'Adicionar flags opcionais?',
|
|
206
|
+
catalogPickOptional: 'Flag opcional (escolha "executar" para rodar)',
|
|
207
|
+
catalogValueFor: (flag, desc) => `Valor para ${flag} (${desc})`,
|
|
208
|
+
catalogDanger: (name) => `${name} — DESTRUTIVO`,
|
|
209
|
+
catalogConfirmDanger: (command) => `${command}\nEste comando pode destruir dados. Rodar mesmo assim?`,
|
|
210
|
+
catalogConfirmRun: (command) => `Rodar ${command}?`,
|
|
211
|
+
catalogDone: 'comando finalizado',
|
|
212
|
+
warnNoProject: 'este comando espera um projeto OkCMS (okcms.config.json / .env)',
|
|
213
|
+
bye: 'até mais',
|
|
214
|
+
};
|
|
215
|
+
export const CATALOGS = { en, pt };
|
|
216
|
+
export const WIZARD_LANGS = ['en', 'pt'];
|
|
217
|
+
/**
|
|
218
|
+
* Idioma inicial do wizard: sempre EN por padrão; se o projeto já tem docs em
|
|
219
|
+
* português, o wizard SUGERE pt na primeira interação (não força).
|
|
220
|
+
*/
|
|
221
|
+
export function initialLang(cwd) {
|
|
222
|
+
try {
|
|
223
|
+
return detectProjectDocsLang(cwd) === 'pt' ? 'pt' : 'en';
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
return 'en';
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
export function catalogFor(lang) {
|
|
230
|
+
return CATALOGS[lang] ?? CATALOGS.en;
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=wizard-i18n.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard-i18n.js","sourceRoot":"","sources":["../src/wizard-i18n.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type Prompt } from './prompt.js';
|
|
2
|
+
export interface RunResult {
|
|
3
|
+
code: number;
|
|
4
|
+
/** true quando o filho foi encerrado por sinal (Ctrl+C). */
|
|
5
|
+
interrupted: boolean;
|
|
6
|
+
}
|
|
7
|
+
/** Assinatura de spawn — injetável nos testes. */
|
|
8
|
+
export type SpawnFn = (command: string, args: string[], cwd?: string) => Promise<RunResult>;
|
|
9
|
+
/**
|
|
10
|
+
* Resolve o executável + script do CLI atual. Preferências:
|
|
11
|
+
* 1. `process.argv[1]` — quando o usuário rodou `okcms`/`bunx`, é o entry
|
|
12
|
+
* real (dev usa src/index.ts, build usa dist/index.js);
|
|
13
|
+
* 2. dist vizinho deste módulo — fallback defensivo.
|
|
14
|
+
* O intérprete é `process.execPath` (bun) — mesmo runtime, zero PATH.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveCliInvocation(): {
|
|
17
|
+
command: string;
|
|
18
|
+
script: string;
|
|
19
|
+
};
|
|
20
|
+
export declare const defaultSpawn: SpawnFn;
|
|
21
|
+
/** `['dev', ['--yes']]` → `okcms dev --yes` (a linha de automação). */
|
|
22
|
+
export declare function formatCommand(command: string, flags: Array<[string, string]>, positional?: string[]): string;
|
|
23
|
+
/** Mesma conversão de `formatCommand`, mas como argv para o spawn. */
|
|
24
|
+
export declare function flagsToArgv(flags: Array<[string, string]>): string[];
|
|
25
|
+
export interface RunCliOptions {
|
|
26
|
+
prompt: Prompt;
|
|
27
|
+
spawn?: SpawnFn;
|
|
28
|
+
cwd?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Imprime o espelho (`$ okcms ...`), executa como filho com stdio herdado e
|
|
32
|
+
* devolve o resultado. `longRunning` muda o aviso: o comando vai bloquear
|
|
33
|
+
* (dev/start) e o Ctrl+C retorna ao wizard, não mata a sessão.
|
|
34
|
+
*/
|
|
35
|
+
export declare function runCliCommand(command: string, flags: Array<[string, string]>, opts: RunCliOptions & {
|
|
36
|
+
longRunning?: boolean;
|
|
37
|
+
positional?: string[];
|
|
38
|
+
}): Promise<RunResult>;
|
|
39
|
+
//# sourceMappingURL=wizard-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard-run.d.ts","sourceRoot":"","sources":["../src/wizard-run.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,kDAAkD;AAClD,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAE5F;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAc1E;AAED,eAAO,MAAM,YAAY,EAAE,OAqBvB,CAAC;AAEL,uEAAuE;AACvE,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC9B,UAAU,GAAE,MAAM,EAAO,GACxB,MAAM,CAQR;AAWD,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,CASpE;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC9B,IAAI,EAAE,aAAa,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACrE,OAAO,CAAC,SAAS,CAAC,CAsBpB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// @oktis-works/cms - Wizard: executor de comandos via subprocesso
|
|
2
|
+
//
|
|
3
|
+
// O wizard NUNCA chama handlers in-process: cada ação spawna o próprio bin do
|
|
4
|
+
// CLI (`okcms <comando>`) com stdio herdado. Isso dá três coisas que importam:
|
|
5
|
+
//
|
|
6
|
+
// 1. isolamento total de estado — o `okcms dev` roda exatamente como roda
|
|
7
|
+
// no seu terminal, sem "meio ambiente envenenado" pelo wizard;
|
|
8
|
+
// 2. espelho de automação — a linha `$ okcms ...` impressa ANTES do spawn é
|
|
9
|
+
// literalmente a linha que roda; copiar é reaproveitar em CI/script;
|
|
10
|
+
// 3. Ctrl+C limpo — o sinal vai pro filho; o wizard percebe o exit 130 e
|
|
11
|
+
// volta pro menu em vez de morrer junto.
|
|
12
|
+
//
|
|
13
|
+
// O bin é resolvido uma vez (argv[1] do processo atual ou o dist do package);
|
|
14
|
+
// os testes injetam um runner falso e nunca spawnam de verdade.
|
|
15
|
+
import { spawn } from 'node:child_process';
|
|
16
|
+
import { existsSync } from 'node:fs';
|
|
17
|
+
import { dirname, join, resolve } from 'node:path';
|
|
18
|
+
import { fileURLToPath } from 'node:url';
|
|
19
|
+
import { style, symbol } from './prompt.js';
|
|
20
|
+
/**
|
|
21
|
+
* Resolve o executável + script do CLI atual. Preferências:
|
|
22
|
+
* 1. `process.argv[1]` — quando o usuário rodou `okcms`/`bunx`, é o entry
|
|
23
|
+
* real (dev usa src/index.ts, build usa dist/index.js);
|
|
24
|
+
* 2. dist vizinho deste módulo — fallback defensivo.
|
|
25
|
+
* O intérprete é `process.execPath` (bun) — mesmo runtime, zero PATH.
|
|
26
|
+
*/
|
|
27
|
+
export function resolveCliInvocation() {
|
|
28
|
+
const argv1 = process.argv[1];
|
|
29
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
30
|
+
const candidates = [argv1, join(here, 'index.js'), join(here, 'index.ts')].filter((candidate) => typeof candidate === 'string' && candidate.length > 0);
|
|
31
|
+
for (const candidate of candidates) {
|
|
32
|
+
const abs = resolve(candidate);
|
|
33
|
+
if (existsSync(abs))
|
|
34
|
+
return { command: process.execPath, script: abs };
|
|
35
|
+
}
|
|
36
|
+
// última tentativa: argv[1] mesmo sem existsSync (bins symlinkados)
|
|
37
|
+
if (argv1)
|
|
38
|
+
return { command: process.execPath, script: resolve(argv1) };
|
|
39
|
+
throw new Error('cannot resolve the okcms entry point to spawn');
|
|
40
|
+
}
|
|
41
|
+
export const defaultSpawn = (command, args, cwd) => new Promise((resolvePromise) => {
|
|
42
|
+
const child = spawn(command, args, { stdio: 'inherit', cwd });
|
|
43
|
+
let interrupted = false;
|
|
44
|
+
const onSigint = () => {
|
|
45
|
+
interrupted = true;
|
|
46
|
+
};
|
|
47
|
+
// o wizard vive: quem decide parar é o filho (recebe o mesmo SIGINT do
|
|
48
|
+
// terminal em foreground). Sem isto, o Ctrl+C mataria os dois.
|
|
49
|
+
process.once('SIGINT', onSigint);
|
|
50
|
+
child.on('error', () => {
|
|
51
|
+
process.removeListener('SIGINT', onSigint);
|
|
52
|
+
resolvePromise({ code: 127, interrupted: false });
|
|
53
|
+
});
|
|
54
|
+
child.on('close', (code, signal) => {
|
|
55
|
+
process.removeListener('SIGINT', onSigint);
|
|
56
|
+
const bySignal = signal === 'SIGINT' || signal === 'SIGTERM';
|
|
57
|
+
resolvePromise({ code: code ?? (bySignal ? 130 : 1), interrupted: interrupted || bySignal });
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
/** `['dev', ['--yes']]` → `okcms dev --yes` (a linha de automação). */
|
|
61
|
+
export function formatCommand(command, flags, positional = []) {
|
|
62
|
+
const parts = [`okcms`, command, ...positional];
|
|
63
|
+
for (const [name, value] of flags) {
|
|
64
|
+
for (const item of splitRepeatable(value)) {
|
|
65
|
+
parts.push(item === 'true' ? `--${name}` : `--${name} ${item}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return parts.join(' ');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Flags repetíveis (`--set A=1 --set B=2`) chegam acumuladas com `\n` — o
|
|
72
|
+
* parser faz isso de propósito. Na linha de automação e no spawn elas voltam a
|
|
73
|
+
* ser ocorrências separadas.
|
|
74
|
+
*/
|
|
75
|
+
function splitRepeatable(value) {
|
|
76
|
+
return value.includes('\n') ? value.split('\n').filter(Boolean) : [value];
|
|
77
|
+
}
|
|
78
|
+
/** Mesma conversão de `formatCommand`, mas como argv para o spawn. */
|
|
79
|
+
export function flagsToArgv(flags) {
|
|
80
|
+
const argv = [];
|
|
81
|
+
for (const [name, value] of flags) {
|
|
82
|
+
for (const item of splitRepeatable(value)) {
|
|
83
|
+
if (item === 'true')
|
|
84
|
+
argv.push(`--${name}`);
|
|
85
|
+
else
|
|
86
|
+
argv.push(`--${name}`, item);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return argv;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Imprime o espelho (`$ okcms ...`), executa como filho com stdio herdado e
|
|
93
|
+
* devolve o resultado. `longRunning` muda o aviso: o comando vai bloquear
|
|
94
|
+
* (dev/start) e o Ctrl+C retorna ao wizard, não mata a sessão.
|
|
95
|
+
*/
|
|
96
|
+
export async function runCliCommand(command, flags, opts) {
|
|
97
|
+
const { prompt } = opts;
|
|
98
|
+
const spawnFn = opts.spawn ?? defaultSpawn;
|
|
99
|
+
const positional = opts.positional ?? [];
|
|
100
|
+
const line = formatCommand(command, flags, positional);
|
|
101
|
+
prompt.write(` ${style.dim(symbol.arrow)} ${style.cyan(promptMirror(line))}\n`);
|
|
102
|
+
if (opts.longRunning)
|
|
103
|
+
prompt.info('long-running command — Ctrl+C returns to the wizard');
|
|
104
|
+
const { command: exe, script } = resolveCliInvocation();
|
|
105
|
+
const args = [script, command, ...positional, ...flagsToArgv(flags)];
|
|
106
|
+
const result = await spawnFn(exe, args, opts.cwd);
|
|
107
|
+
if (result.interrupted) {
|
|
108
|
+
prompt.warn('interrupted — back to the wizard');
|
|
109
|
+
}
|
|
110
|
+
else if (result.code === 0) {
|
|
111
|
+
prompt.success('finished with success');
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
prompt.error(`exited with code ${result.code}`);
|
|
115
|
+
}
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
function promptMirror(line) {
|
|
119
|
+
return `$ ${line}`;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=wizard-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard-run.js","sourceRoot":"","sources":["../src/wizard-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Runner } from './docker.js';
|
|
2
|
+
export interface WizardStateDeps {
|
|
3
|
+
cwd: string;
|
|
4
|
+
runner?: Runner;
|
|
5
|
+
/** Sobrescreve a leitura de processos (testes). */
|
|
6
|
+
appsFn?: (cwd: string) => Array<{
|
|
7
|
+
label: string;
|
|
8
|
+
alive: boolean;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
export interface WizardState {
|
|
12
|
+
/** há okcms.config.json ou .env — "é um projeto OkCMS". */
|
|
13
|
+
isProject: boolean;
|
|
14
|
+
/** todas as variáveis obrigatórias do schema têm valor. */
|
|
15
|
+
envComplete: boolean;
|
|
16
|
+
/** quantas obrigatórias faltam (0 quando completo). */
|
|
17
|
+
envMissing: number;
|
|
18
|
+
dockerUp: boolean;
|
|
19
|
+
infraRunning: boolean;
|
|
20
|
+
appsRunning: boolean;
|
|
21
|
+
appsLabels: string[];
|
|
22
|
+
}
|
|
23
|
+
export type Suggestion = 'init' | 'env' | 'infra' | 'apps' | 'deploy' | 'none';
|
|
24
|
+
export declare function probeState(deps: WizardStateDeps): WizardState;
|
|
25
|
+
/**
|
|
26
|
+
* Próximo passo lógico — ordem de importância: projeto novo → env incompleto →
|
|
27
|
+
* infra parada → apps parados → pronto pra deploy.
|
|
28
|
+
*/
|
|
29
|
+
export declare function suggestNext(state: WizardState): Suggestion;
|
|
30
|
+
//# sourceMappingURL=wizard-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard-state.d.ts","sourceRoot":"","sources":["../src/wizard-state.ts"],"names":[],"mappings":"AAeA,OAAO,EAAoD,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAE5F,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,SAAS,EAAE,OAAO,CAAC;IACnB,2DAA2D;IAC3D,WAAW,EAAE,OAAO,CAAC;IACrB,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE/E,wBAAgB,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,CAyC7D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,CAM1D"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// @oktis-works/cms - Wizard: sondagem de estado do projeto
|
|
2
|
+
//
|
|
3
|
+
// Checagem leve e SOMENTE LEITURA que roda no boot do wizard (e no "Refresh")
|
|
4
|
+
// pra adaptar o menu: banner de próximo passo lógico, itens indisponíveis e
|
|
5
|
+
// pré-checagens dos fluxos de deploy. Nada aqui cria arquivo, container ou
|
|
6
|
+
// processo — o pior caso é o wizard demorar ~200ms no boot.
|
|
7
|
+
//
|
|
8
|
+
// Tudo que depende de ambiente externo (docker, processos) vem injetado, então
|
|
9
|
+
// os testes nunca tocam docker de verdade.
|
|
10
|
+
import { existsSync } from 'node:fs';
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
import { ENV_FIELDS } from './env-schema.js';
|
|
13
|
+
import { loadEnvFile } from './env-file.js';
|
|
14
|
+
import { statusAll } from './runtime-state.js';
|
|
15
|
+
import { defaultRunner, dockerAvailable, inspectContainer } from './docker.js';
|
|
16
|
+
export function probeState(deps) {
|
|
17
|
+
const { cwd } = deps;
|
|
18
|
+
const runner = deps.runner ?? defaultRunner;
|
|
19
|
+
const appsFn = deps.appsFn ?? ((dir) => statusAll(dir));
|
|
20
|
+
const isProject = existsSync(join(cwd, 'okcms.config.json')) || existsSync(join(cwd, '.env'));
|
|
21
|
+
let envComplete = false;
|
|
22
|
+
let envMissing = ENV_FIELDS.filter((field) => field.required === true).length;
|
|
23
|
+
if (isProject) {
|
|
24
|
+
const record = loadEnvFile(join(cwd, '.env')).toRecord();
|
|
25
|
+
const missing = ENV_FIELDS.filter((field) => {
|
|
26
|
+
if (field.required !== true)
|
|
27
|
+
return false;
|
|
28
|
+
if (field.when && !field.when(record))
|
|
29
|
+
return false;
|
|
30
|
+
return !(record[field.key] ?? '').trim().length;
|
|
31
|
+
});
|
|
32
|
+
envMissing = missing.length;
|
|
33
|
+
envComplete = missing.length === 0;
|
|
34
|
+
}
|
|
35
|
+
const dockerUp = dockerAvailable(runner);
|
|
36
|
+
let infraRunning = false;
|
|
37
|
+
if (dockerUp) {
|
|
38
|
+
const postgres = inspectContainer(runner, 'okcms-postgres');
|
|
39
|
+
const redis = inspectContainer(runner, 'okcms-redis');
|
|
40
|
+
infraRunning = postgres.running || redis.running;
|
|
41
|
+
}
|
|
42
|
+
const apps = isProject ? appsFn(cwd) : [];
|
|
43
|
+
const aliveApps = apps.filter((app) => app.alive);
|
|
44
|
+
return {
|
|
45
|
+
isProject,
|
|
46
|
+
envComplete,
|
|
47
|
+
envMissing,
|
|
48
|
+
dockerUp,
|
|
49
|
+
infraRunning,
|
|
50
|
+
appsRunning: aliveApps.length > 0,
|
|
51
|
+
appsLabels: aliveApps.map((app) => app.label),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Próximo passo lógico — ordem de importância: projeto novo → env incompleto →
|
|
56
|
+
* infra parada → apps parados → pronto pra deploy.
|
|
57
|
+
*/
|
|
58
|
+
export function suggestNext(state) {
|
|
59
|
+
if (!state.isProject)
|
|
60
|
+
return 'init';
|
|
61
|
+
if (!state.envComplete)
|
|
62
|
+
return 'env';
|
|
63
|
+
if (state.dockerUp && !state.infraRunning)
|
|
64
|
+
return 'infra';
|
|
65
|
+
if (!state.appsRunning)
|
|
66
|
+
return 'apps';
|
|
67
|
+
return state.infraRunning ? 'deploy' : 'none';
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=wizard-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard-state.js","sourceRoot":"","sources":["../src/wizard-state.ts"],"names":[],"mappings":"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"}
|
package/dist/wizard.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type PromptIO } from './prompt.js';
|
|
2
|
+
import { type WizardLang } from './wizard-i18n.js';
|
|
3
|
+
import { type WizardState } from './wizard-state.js';
|
|
4
|
+
import { type SpawnFn } from './wizard-run.js';
|
|
5
|
+
export interface WizardOptions {
|
|
6
|
+
cwd?: string;
|
|
7
|
+
io?: Partial<PromptIO>;
|
|
8
|
+
lang?: WizardLang;
|
|
9
|
+
spawn?: SpawnFn;
|
|
10
|
+
/** Sonda de estado injetável (testes nunca tocam docker). */
|
|
11
|
+
stateFn?: () => WizardState;
|
|
12
|
+
}
|
|
13
|
+
export declare function runWizard(opts?: WizardOptions): Promise<number>;
|
|
14
|
+
/** Total de comandos registrados (usado pelo banner de documentação). */
|
|
15
|
+
export declare const wizardCommandCount: () => number;
|
|
16
|
+
//# sourceMappingURL=wizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"AAcA,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAyC,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAA2B,KAAK,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AAE/F,OAAO,EAAgC,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAY7E,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,WAAW,CAAC;CAC7B;AAyBD,wBAAsB,SAAS,CAAC,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsEzE;AAoPD,yEAAyE;AACzE,eAAO,MAAM,kBAAkB,QAAO,MAAyB,CAAC"}
|