@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,171 @@
|
|
|
1
|
+
// @oktis-works/cms - Wizard: entrevista de variáveis de ambiente
|
|
2
|
+
//
|
|
3
|
+
// Entrevista campo a campo das 47 variáveis do projeto (ENV_FIELDS é a fonte
|
|
4
|
+
// única de verdade — label, descrição, exemplo, tipo e validação vêm de lá).
|
|
5
|
+
// Regras, decididas com o usuário:
|
|
6
|
+
//
|
|
7
|
+
// • TODOS os campos aparecem em todas as sessões (nada de "só os vazios");
|
|
8
|
+
// • o valor atual é exibido (segredos mascarados) e Enter mantém;
|
|
9
|
+
// • nada é gravado pela metade: as respostas ficam num PLANO em memória e o
|
|
10
|
+
// `.env` só é salvo depois do resumo + confirmação finais;
|
|
11
|
+
// • Ctrl+C no meio descarta o plano inteiro — mesma filosofia do config;
|
|
12
|
+
// • o campo `when` é re-avaliado com as respostas já dadas: se a condição
|
|
13
|
+
// deixou de valer (ex.: STORAGE_DRIVER voltou pra local), os dependentes
|
|
14
|
+
// são pulados em vez de perguntar bobagem.
|
|
15
|
+
//
|
|
16
|
+
// A entrevista é usada como etapa dos fluxos guiados (dev/deploys) e como item
|
|
17
|
+
// de menu — nos fluxos o chamador oferece o "pular".
|
|
18
|
+
import { join } from 'node:path';
|
|
19
|
+
import { ENV_FIELDS, ENV_SECTIONS, fieldsForSection, sectionById, validateField, } from './env-schema.js';
|
|
20
|
+
import { loadEnvFile } from './env-file.js';
|
|
21
|
+
import { generateSecret, looksLikeSecret } from './guards.js';
|
|
22
|
+
import { maskValue } from './config-wizard.js';
|
|
23
|
+
import { style, symbol } from './prompt.js';
|
|
24
|
+
/**
|
|
25
|
+
* Roda a entrevista completa. `opts.skipOption` quando true adiciona a escolha
|
|
26
|
+
* "pular" no primeiro prompt (contexto de fluxo guiado).
|
|
27
|
+
*/
|
|
28
|
+
export async function runEnvInterview(deps, opts = {}) {
|
|
29
|
+
const { prompt, catalog, cwd } = deps;
|
|
30
|
+
const path = join(cwd, '.env');
|
|
31
|
+
const env = loadEnvFile(path);
|
|
32
|
+
const changed = new Set();
|
|
33
|
+
prompt.heading(`${catalog.envHeading} — .env`);
|
|
34
|
+
prompt.info(catalog.envIntro);
|
|
35
|
+
if (opts.skipOption) {
|
|
36
|
+
const pick = await prompt.select('env', [
|
|
37
|
+
{ value: 'run', label: 'Configure variables', hint: catalog.envSectionCount(ENV_FIELDS.length) },
|
|
38
|
+
{ value: 'skip', label: catalog.envSkipOption },
|
|
39
|
+
]);
|
|
40
|
+
if (pick === 'skip')
|
|
41
|
+
return { status: 'nothing', changed: [] };
|
|
42
|
+
}
|
|
43
|
+
const interrupted = { value: false };
|
|
44
|
+
const onInterrupt = () => {
|
|
45
|
+
interrupted.value = true;
|
|
46
|
+
};
|
|
47
|
+
process.once('SIGINT', onInterrupt);
|
|
48
|
+
try {
|
|
49
|
+
// respostas parciais alimentam o `when` dos próximos campos
|
|
50
|
+
const record = () => {
|
|
51
|
+
const out = env.toRecord();
|
|
52
|
+
for (const key of changed)
|
|
53
|
+
out[key] = env.get(key) ?? '';
|
|
54
|
+
return out;
|
|
55
|
+
};
|
|
56
|
+
for (const section of ENV_SECTIONS) {
|
|
57
|
+
if (interrupted.value)
|
|
58
|
+
break;
|
|
59
|
+
const fields = fieldsForSection(section.id, record());
|
|
60
|
+
if (fields.length === 0)
|
|
61
|
+
continue;
|
|
62
|
+
prompt.write(`\n${style.bold(` ── ${section.title} ── ${style.dim(section.hint)}`)}\n`);
|
|
63
|
+
prompt.info(catalog.envSectionCount(fields.length));
|
|
64
|
+
for (const field of fields) {
|
|
65
|
+
if (interrupted.value)
|
|
66
|
+
break;
|
|
67
|
+
await askField(prompt, catalog, env, changed, field, record);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (interrupted.value) {
|
|
71
|
+
prompt.warn(catalog.envCancelled);
|
|
72
|
+
return { status: 'cancelled', changed: [] };
|
|
73
|
+
}
|
|
74
|
+
if (changed.size === 0) {
|
|
75
|
+
prompt.info('no changes — file untouched.');
|
|
76
|
+
return { status: 'nothing', changed: [] };
|
|
77
|
+
}
|
|
78
|
+
// resumo antes de gravar — segredos sempre mascarados
|
|
79
|
+
prompt.heading(catalog.envSummaryTitle);
|
|
80
|
+
prompt.info(catalog.envSummaryPending(changed.size));
|
|
81
|
+
for (const key of changed) {
|
|
82
|
+
const field = ENV_FIELDS.find((candidate) => candidate.key === key);
|
|
83
|
+
const value = env.get(key) ?? '';
|
|
84
|
+
const shown = field?.type === 'secret' ? maskValue(value) : value;
|
|
85
|
+
prompt.write(` ${style.cyan(symbol.arrow)} ${key}=${shown}\n`);
|
|
86
|
+
}
|
|
87
|
+
const ok = await prompt.confirm(catalog.envConfirmSave(changed.size), { defaultValue: true });
|
|
88
|
+
if (!ok) {
|
|
89
|
+
prompt.warn(catalog.envDiscarded);
|
|
90
|
+
return { status: 'cancelled', changed: [] };
|
|
91
|
+
}
|
|
92
|
+
env.save(path);
|
|
93
|
+
prompt.success(catalog.envSaved(changed.size));
|
|
94
|
+
return { status: 'saved', changed: [...changed] };
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
process.removeListener('SIGINT', onInterrupt);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/** Pergunta um campo com descrição/exemplo/valor atual — Enter mantém. */
|
|
101
|
+
async function askField(prompt, catalog, env, changed, field, record) {
|
|
102
|
+
// o `when` pode ter mudado desde o início da seção (um campo alterou o
|
|
103
|
+
// registro) — reavalia antes de perguntar, senão sai pergunta bobagem
|
|
104
|
+
if (field.when && !field.when(record()))
|
|
105
|
+
return;
|
|
106
|
+
const current = env.get(field.key) ?? '';
|
|
107
|
+
prompt.write(`\n ${style.bold(field.key)}\n`);
|
|
108
|
+
prompt.write(` ${style.dim(symbol.bullet)} ${style.dim(field.label)}\n`);
|
|
109
|
+
prompt.write(` ${style.dim(symbol.bullet)} ${style.dim(field.description)}\n`);
|
|
110
|
+
if (field.example) {
|
|
111
|
+
prompt.write(` ${style.gray(` ex.: ${field.example}`)}\n`);
|
|
112
|
+
}
|
|
113
|
+
if (field.options && field.options.length > 0) {
|
|
114
|
+
prompt.write(` ${style.gray(` options: ${field.options.join(' | ')}`)}\n`);
|
|
115
|
+
}
|
|
116
|
+
// JWT_SECRET fraco/ausente: oferece um gerado (mesma ajuda do config wizard)
|
|
117
|
+
if (field.key === 'JWT_SECRET' && !looksLikeSecret(current)) {
|
|
118
|
+
const generate = await prompt.confirm(catalog.envJwtGenerate, { defaultValue: true });
|
|
119
|
+
if (generate) {
|
|
120
|
+
const secret = generateSecret(32);
|
|
121
|
+
env.set(field.key, secret);
|
|
122
|
+
changed.add(field.key);
|
|
123
|
+
prompt.success(catalog.envGenerated);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const shownCurrent = field.type === 'secret'
|
|
128
|
+
? current
|
|
129
|
+
? maskValue(current)
|
|
130
|
+
: catalog.envSecretNotSet
|
|
131
|
+
: current || catalog.envSecretNotSet;
|
|
132
|
+
const validate = (candidate) => validateField(field, candidate);
|
|
133
|
+
let value;
|
|
134
|
+
if (field.type === 'secret') {
|
|
135
|
+
value = await prompt.secret(`${field.key} — ${field.label}`, {
|
|
136
|
+
default: current,
|
|
137
|
+
placeholder: `${catalog.envKeepHint}: ${shownCurrent}`,
|
|
138
|
+
validate,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
const fallback = current || field.default || '';
|
|
143
|
+
value = await prompt.ask(`${field.key} — ${field.label}`, {
|
|
144
|
+
default: fallback,
|
|
145
|
+
placeholder: current
|
|
146
|
+
? `${catalog.envKeepHint}: ${current}`
|
|
147
|
+
: field.default
|
|
148
|
+
? `${field.default} (default)`
|
|
149
|
+
: undefined,
|
|
150
|
+
validate,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
if (value === current)
|
|
154
|
+
return;
|
|
155
|
+
// aceitar o default de uma chave AUSENTE não materializa a chave — o app já
|
|
156
|
+
// aplica esse default; gravar tudo a cada Enter enche o .env de ruído
|
|
157
|
+
const acceptedDefault = current === '' && value === (field.default ?? '');
|
|
158
|
+
if (acceptedDefault) {
|
|
159
|
+
prompt.info(catalog.envDefaultApplies(value));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
env.set(field.key, value);
|
|
163
|
+
changed.add(field.key);
|
|
164
|
+
const shown = field.type === 'secret' ? maskValue(value) : value;
|
|
165
|
+
prompt.success(`${field.key} → ${shown}`);
|
|
166
|
+
}
|
|
167
|
+
/** Seção do env-schema usada pela entrevista (para testes/docs). */
|
|
168
|
+
export function interviewSectionCount(sectionId) {
|
|
169
|
+
return sectionById(sectionId) ? fieldsForSection(sectionId, {}) : [];
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=wizard-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard-env.js","sourceRoot":"","sources":["../src/wizard-env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type WizardState } from './wizard-state.js';
|
|
2
|
+
import { type SpawnFn } from './wizard-run.js';
|
|
3
|
+
import { type Prompt } from './prompt.js';
|
|
4
|
+
import type { Catalog } from './wizard-i18n.js';
|
|
5
|
+
export interface FlowDeps {
|
|
6
|
+
prompt: Prompt;
|
|
7
|
+
catalog: Catalog;
|
|
8
|
+
cwd: string;
|
|
9
|
+
spawn?: SpawnFn;
|
|
10
|
+
stateFn?: () => WizardState;
|
|
11
|
+
}
|
|
12
|
+
export type FlowOutcome = 'done' | 'cancelled' | 'failed';
|
|
13
|
+
export declare function flowInit(deps: FlowDeps): Promise<FlowOutcome>;
|
|
14
|
+
export declare function flowDev(deps: FlowDeps): Promise<FlowOutcome>;
|
|
15
|
+
export declare const flowDeployBlueGreen: (deps: FlowDeps) => Promise<FlowOutcome>;
|
|
16
|
+
export declare const flowDeploySimple: (deps: FlowDeps) => Promise<FlowOutcome>;
|
|
17
|
+
export declare const flowDeployPm2: (deps: FlowDeps) => Promise<FlowOutcome>;
|
|
18
|
+
export declare function flowUpdate(deps: FlowDeps): Promise<FlowOutcome>;
|
|
19
|
+
//# sourceMappingURL=wizard-flows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard-flows.d.ts","sourceRoot":"","sources":["../src/wizard-flows.ts"],"names":[],"mappings":"AAaA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAiC,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,WAAW,CAAC;CAC7B;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AA0E1D,wBAAsB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAiCnE;AAMD,wBAAsB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAelE;AA4BD,eAAO,MAAM,mBAAmB,SAAU,QAAQ,KAAG,OAAO,CAAC,WAAW,CACb,CAAC;AAE5D,eAAO,MAAM,gBAAgB,SAAU,QAAQ,KAAG,OAAO,CAAC,WAAW,CACV,CAAC;AAE5D,eAAO,MAAM,aAAa,SAAU,QAAQ,KAAG,OAAO,CAAC,WAAW,CACb,CAAC;AAMtD,wBAAsB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAmBrE"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
// @oktis-works/cms - Wizard: fluxos guiados
|
|
2
|
+
//
|
|
3
|
+
// Seis trilhas passo-a-passo que ENCADEIAM os comandos reais via subprocesso:
|
|
4
|
+
// nada é reimplementado aqui — o wizard explica, pergunta, imprime a linha de
|
|
5
|
+
// automação e executa o mesmo `okcms ...` que você rodaria à mão.
|
|
6
|
+
//
|
|
7
|
+
// Padrão comum de todos os fluxos:
|
|
8
|
+
// intro → entrevista de env (pulável, dev/deploys) → pré-checagens →
|
|
9
|
+
// confirmação → execução (espelho + subprocesso) → em falha: doctor/retry/menu
|
|
10
|
+
//
|
|
11
|
+
// Comandos longos (dev/start) são marcados como `longRunning`: o Ctrl+C neles
|
|
12
|
+
// retorna ao wizard em vez de encerrar a sessão.
|
|
13
|
+
import { probeState } from './wizard-state.js';
|
|
14
|
+
import { runEnvInterview } from './wizard-env.js';
|
|
15
|
+
import { runCliCommand } from './wizard-run.js';
|
|
16
|
+
const stateOf = (deps) => deps.stateFn ? deps.stateFn() : probeState({ cwd: deps.cwd });
|
|
17
|
+
/** Entrevista de env comum aos fluxos dev/deploys (pulável). */
|
|
18
|
+
async function envStep(deps) {
|
|
19
|
+
const result = await runEnvInterview({ prompt: deps.prompt, catalog: deps.catalog, cwd: deps.cwd }, { skipOption: true });
|
|
20
|
+
if (result.status === 'cancelled') {
|
|
21
|
+
deps.prompt.warn(deps.catalog.stepCancelled);
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
if (result.status === 'nothing')
|
|
25
|
+
deps.prompt.info(deps.catalog.stepEnvSkip);
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
/** Pré-checagem dos deploys: apps locais seguram as portas dos containers. */
|
|
29
|
+
async function precheckDeploy(deps) {
|
|
30
|
+
const state = stateOf(deps);
|
|
31
|
+
if (!state.isProject) {
|
|
32
|
+
deps.prompt.error(deps.catalog.warnNoProject);
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
if (!state.dockerUp) {
|
|
36
|
+
deps.prompt.error(deps.catalog.statusDockerDown);
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
if (state.appsRunning) {
|
|
40
|
+
deps.prompt.warn(deps.catalog.stepAppsRunning);
|
|
41
|
+
const stop = await deps.prompt.confirm(deps.catalog.stepStopFirst, { defaultValue: true });
|
|
42
|
+
if (!stop) {
|
|
43
|
+
deps.prompt.warn(deps.catalog.stepCancelled);
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
const result = await runCliCommand('stop', [], { prompt: deps.prompt, spawn: deps.spawn, cwd: deps.cwd });
|
|
47
|
+
if (result.code !== 0)
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
deps.prompt.info(deps.catalog.stepPrecheck + ': ' + deps.catalog.statusInfraUp);
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
/** Em falha: doctor / retry / menu. Retorna 'retry' para repetir o passo. */
|
|
54
|
+
async function failureMenu(deps, retry) {
|
|
55
|
+
for (;;) {
|
|
56
|
+
const pick = await deps.prompt.select(deps.catalog.onFailure, [
|
|
57
|
+
{ value: 'doctor', label: deps.catalog.failDoctor },
|
|
58
|
+
{ value: 'retry', label: deps.catalog.failRetry },
|
|
59
|
+
{ value: 'menu', label: deps.catalog.failMenu },
|
|
60
|
+
]);
|
|
61
|
+
if (pick === 'menu')
|
|
62
|
+
return 'failed';
|
|
63
|
+
if (pick === 'doctor') {
|
|
64
|
+
await runCliCommand('doctor', [], { prompt: deps.prompt, spawn: deps.spawn, cwd: deps.cwd });
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const result = await retry();
|
|
68
|
+
if (result.code === 0)
|
|
69
|
+
return 'done';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async function confirmRun(deps, line) {
|
|
73
|
+
return deps.prompt.confirm(deps.catalog.stepConfirmRun(line), { defaultValue: true });
|
|
74
|
+
}
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
// Init
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
export async function flowInit(deps) {
|
|
79
|
+
const { prompt, catalog } = deps;
|
|
80
|
+
prompt.heading(catalog.stepIntro(catalog.flowInit));
|
|
81
|
+
prompt.info(catalog.initWhatItDoes);
|
|
82
|
+
const dir = await prompt.ask('Project directory', { default: '.' });
|
|
83
|
+
const lang = await prompt.select('Docs language', [
|
|
84
|
+
{ value: 'en', label: 'English', hint: 'default' },
|
|
85
|
+
{ value: 'pt', label: 'Português (Brasil)' },
|
|
86
|
+
]);
|
|
87
|
+
const install = await prompt.select('Install dependencies now?', [
|
|
88
|
+
{ value: true, label: 'Yes', hint: 'recommended' },
|
|
89
|
+
{ value: false, label: 'No' },
|
|
90
|
+
]);
|
|
91
|
+
const flags = [['lang', lang]];
|
|
92
|
+
if (!install)
|
|
93
|
+
flags.push(['no-install', 'true']);
|
|
94
|
+
const run = () => runCliCommand('init', flags, {
|
|
95
|
+
prompt,
|
|
96
|
+
spawn: deps.spawn,
|
|
97
|
+
cwd: deps.cwd,
|
|
98
|
+
positional: [dir],
|
|
99
|
+
longRunning: true,
|
|
100
|
+
});
|
|
101
|
+
if (!(await confirmRun(deps, `okcms init ${dir} --lang ${lang}${install ? '' : ' --no-install'}`))) {
|
|
102
|
+
prompt.warn(catalog.stepCancelled);
|
|
103
|
+
return 'cancelled';
|
|
104
|
+
}
|
|
105
|
+
const result = await run();
|
|
106
|
+
return result.code === 0 ? 'done' : failureMenu(deps, run);
|
|
107
|
+
}
|
|
108
|
+
// ---------------------------------------------------------------------------
|
|
109
|
+
// Dev
|
|
110
|
+
// ---------------------------------------------------------------------------
|
|
111
|
+
export async function flowDev(deps) {
|
|
112
|
+
const { prompt, catalog } = deps;
|
|
113
|
+
prompt.heading(catalog.stepIntro(catalog.flowDev));
|
|
114
|
+
prompt.info(catalog.devWhatItDoes);
|
|
115
|
+
if (!(await envStep(deps)))
|
|
116
|
+
return 'cancelled';
|
|
117
|
+
if (!(await confirmRun(deps, 'okcms dev'))) {
|
|
118
|
+
prompt.warn(catalog.stepCancelled);
|
|
119
|
+
return 'cancelled';
|
|
120
|
+
}
|
|
121
|
+
const run = () => runCliCommand('dev', [], { prompt, spawn: deps.spawn, cwd: deps.cwd, longRunning: true });
|
|
122
|
+
const result = await run();
|
|
123
|
+
return result.code === 0 ? 'done' : failureMenu(deps, run);
|
|
124
|
+
}
|
|
125
|
+
async function flowDeploy(deps, target, label) {
|
|
126
|
+
const { prompt, catalog } = deps;
|
|
127
|
+
prompt.heading(catalog.stepIntro(label));
|
|
128
|
+
prompt.info(catalog.deployTargetSummary(target));
|
|
129
|
+
if (!(await envStep(deps)))
|
|
130
|
+
return 'cancelled';
|
|
131
|
+
if (!(await precheckDeploy(deps)))
|
|
132
|
+
return 'cancelled';
|
|
133
|
+
const flags = [['target', target], ['yes', 'true']];
|
|
134
|
+
const run = () => runCliCommand('deploy', flags, { prompt, spawn: deps.spawn, cwd: deps.cwd });
|
|
135
|
+
if (!(await confirmRun(deps, `okcms deploy --target ${target} --yes`))) {
|
|
136
|
+
prompt.warn(catalog.stepCancelled);
|
|
137
|
+
return 'cancelled';
|
|
138
|
+
}
|
|
139
|
+
const result = await run();
|
|
140
|
+
return result.code === 0 ? 'done' : failureMenu(deps, run);
|
|
141
|
+
}
|
|
142
|
+
export const flowDeployBlueGreen = (deps) => flowDeploy(deps, 'blue-green', deps.catalog.flowDeployBg);
|
|
143
|
+
export const flowDeploySimple = (deps) => flowDeploy(deps, 'simple', deps.catalog.flowDeploySimple);
|
|
144
|
+
export const flowDeployPm2 = (deps) => flowDeploy(deps, 'pm2', deps.catalog.flowDeployPm2);
|
|
145
|
+
// ---------------------------------------------------------------------------
|
|
146
|
+
// Update
|
|
147
|
+
// ---------------------------------------------------------------------------
|
|
148
|
+
export async function flowUpdate(deps) {
|
|
149
|
+
const { prompt, catalog } = deps;
|
|
150
|
+
const state = stateOf(deps);
|
|
151
|
+
prompt.heading(catalog.stepIntro(catalog.flowUpdate));
|
|
152
|
+
prompt.info(catalog.updateSummary);
|
|
153
|
+
if (!state.isProject) {
|
|
154
|
+
prompt.error(catalog.warnNoProject);
|
|
155
|
+
return 'cancelled';
|
|
156
|
+
}
|
|
157
|
+
if (!(await confirmRun(deps, 'okcms update'))) {
|
|
158
|
+
prompt.warn(catalog.stepCancelled);
|
|
159
|
+
return 'cancelled';
|
|
160
|
+
}
|
|
161
|
+
const run = () => runCliCommand('update', [], { prompt, spawn: deps.spawn, cwd: deps.cwd, longRunning: true });
|
|
162
|
+
const result = await run();
|
|
163
|
+
return result.code === 0 ? 'done' : failureMenu(deps, run);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=wizard-flows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard-flows.js","sourceRoot":"","sources":["../src/wizard-flows.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
export type WizardLang = 'en' | 'pt';
|
|
2
|
+
export interface Catalog {
|
|
3
|
+
title: string;
|
|
4
|
+
langLabel: (current: WizardLang) => string;
|
|
5
|
+
pickLang: string;
|
|
6
|
+
suggestNone: string;
|
|
7
|
+
suggestInit: string;
|
|
8
|
+
suggestEnv: string;
|
|
9
|
+
suggestInfra: string;
|
|
10
|
+
suggestApps: string;
|
|
11
|
+
suggestDeploy: string;
|
|
12
|
+
menuFlows: string;
|
|
13
|
+
menuFlowsHint: string;
|
|
14
|
+
menuCommand: string;
|
|
15
|
+
menuCommandHint: string;
|
|
16
|
+
menuEnv: string;
|
|
17
|
+
menuEnvHint: string;
|
|
18
|
+
menuStatus: string;
|
|
19
|
+
menuStatusHint: string;
|
|
20
|
+
menuRefresh: string;
|
|
21
|
+
menuRefreshHint: string;
|
|
22
|
+
menuExit: string;
|
|
23
|
+
menuExitHint: string;
|
|
24
|
+
flowsHeading: string;
|
|
25
|
+
catalogHeading: string;
|
|
26
|
+
envHeading: string;
|
|
27
|
+
statusHeading: string;
|
|
28
|
+
languageHeading: string;
|
|
29
|
+
statusNoProject: string;
|
|
30
|
+
statusProject: (name: string) => string;
|
|
31
|
+
statusEnvComplete: string;
|
|
32
|
+
statusEnvIncomplete: (missing: number) => string;
|
|
33
|
+
statusDockerUp: string;
|
|
34
|
+
statusDockerDown: string;
|
|
35
|
+
statusInfraUp: string;
|
|
36
|
+
statusInfraDown: string;
|
|
37
|
+
statusAppsUp: (labels: string) => string;
|
|
38
|
+
statusAppsDown: string;
|
|
39
|
+
statusRefreshed: string;
|
|
40
|
+
mirrorLine: (command: string) => string;
|
|
41
|
+
running: (command: string) => string;
|
|
42
|
+
exitedZero: string;
|
|
43
|
+
exitedNonZero: (code: number) => string;
|
|
44
|
+
onFailure: string;
|
|
45
|
+
failDoctor: string;
|
|
46
|
+
failRetry: string;
|
|
47
|
+
failMenu: string;
|
|
48
|
+
longRunning: string;
|
|
49
|
+
interrupted: string;
|
|
50
|
+
envIntro: string;
|
|
51
|
+
envSkipOption: string;
|
|
52
|
+
envKeepHint: string;
|
|
53
|
+
envSectionCount: (count: number) => string;
|
|
54
|
+
envSecretNotSet: string;
|
|
55
|
+
envJwtGenerate: string;
|
|
56
|
+
envGenerated: string;
|
|
57
|
+
envSaved: (count: number) => string;
|
|
58
|
+
envDiscarded: string;
|
|
59
|
+
envDefaultApplies: (value: string) => string;
|
|
60
|
+
envSummaryTitle: string;
|
|
61
|
+
envSummaryPending: (count: number) => string;
|
|
62
|
+
envConfirmSave: (count: number) => string;
|
|
63
|
+
envCancelled: string;
|
|
64
|
+
envNoProject: string;
|
|
65
|
+
flowInit: string;
|
|
66
|
+
flowInitHint: string;
|
|
67
|
+
flowDev: string;
|
|
68
|
+
flowDevHint: string;
|
|
69
|
+
flowDeployBg: string;
|
|
70
|
+
flowDeployBgHint: string;
|
|
71
|
+
flowDeploySimple: string;
|
|
72
|
+
flowDeploySimpleHint: string;
|
|
73
|
+
flowDeployPm2: string;
|
|
74
|
+
flowDeployPm2Hint: string;
|
|
75
|
+
flowUpdate: string;
|
|
76
|
+
flowUpdateHint: string;
|
|
77
|
+
flowBack: string;
|
|
78
|
+
flowBackHint: string;
|
|
79
|
+
stepIntro: (flow: string) => string;
|
|
80
|
+
stepEnvAsk: string;
|
|
81
|
+
stepEnvSkip: string;
|
|
82
|
+
stepPrecheck: string;
|
|
83
|
+
stepAppsRunning: string;
|
|
84
|
+
stepStopFirst: string;
|
|
85
|
+
stepConfirmRun: (command: string) => string;
|
|
86
|
+
stepCancelled: string;
|
|
87
|
+
deployTargetSummary: (target: string) => string;
|
|
88
|
+
updateSummary: string;
|
|
89
|
+
initWhatItDoes: string;
|
|
90
|
+
devWhatItDoes: string;
|
|
91
|
+
catalogIntro: string;
|
|
92
|
+
catalogPickCommand: string;
|
|
93
|
+
catalogRequired: (flag: string, desc: string) => string;
|
|
94
|
+
catalogAddOptionals: string;
|
|
95
|
+
catalogPickOptional: string;
|
|
96
|
+
catalogValueFor: (flag: string, desc: string) => string;
|
|
97
|
+
catalogDanger: (name: string) => string;
|
|
98
|
+
catalogConfirmDanger: (command: string) => string;
|
|
99
|
+
catalogConfirmRun: (command: string) => string;
|
|
100
|
+
catalogDone: string;
|
|
101
|
+
warnNoProject: string;
|
|
102
|
+
bye: string;
|
|
103
|
+
}
|
|
104
|
+
export declare const CATALOGS: Record<WizardLang, Catalog>;
|
|
105
|
+
export declare const WIZARD_LANGS: WizardLang[];
|
|
106
|
+
/**
|
|
107
|
+
* Idioma inicial do wizard: sempre EN por padrão; se o projeto já tem docs em
|
|
108
|
+
* português, o wizard SUGERE pt na primeira interação (não força).
|
|
109
|
+
*/
|
|
110
|
+
export declare function initialLang(cwd: string): WizardLang;
|
|
111
|
+
export declare function catalogFor(lang: WizardLang): Catalog;
|
|
112
|
+
//# sourceMappingURL=wizard-i18n.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard-i18n.d.ts","sourceRoot":"","sources":["../src/wizard-i18n.ts"],"names":[],"mappings":"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"}
|