@oktis-works/cms 0.1.14 → 0.2.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.
Files changed (65) hide show
  1. package/dist/assets.d.ts +94 -0
  2. package/dist/assets.d.ts.map +1 -0
  3. package/dist/assets.js +671 -0
  4. package/dist/assets.js.map +1 -0
  5. package/dist/bluegreen.d.ts +121 -0
  6. package/dist/bluegreen.d.ts.map +1 -0
  7. package/dist/bluegreen.js +393 -0
  8. package/dist/bluegreen.js.map +1 -0
  9. package/dist/commands.d.ts +6 -0
  10. package/dist/commands.d.ts.map +1 -1
  11. package/dist/commands.js +116 -61
  12. package/dist/commands.js.map +1 -1
  13. package/dist/config-wizard.d.ts +39 -0
  14. package/dist/config-wizard.d.ts.map +1 -0
  15. package/dist/config-wizard.js +308 -0
  16. package/dist/config-wizard.js.map +1 -0
  17. package/dist/docker.d.ts +148 -0
  18. package/dist/docker.d.ts.map +1 -0
  19. package/dist/docker.js +324 -0
  20. package/dist/docker.js.map +1 -0
  21. package/dist/doctor.d.ts +2 -0
  22. package/dist/doctor.d.ts.map +1 -1
  23. package/dist/doctor.js +51 -0
  24. package/dist/doctor.js.map +1 -1
  25. package/dist/env-file.d.ts +45 -0
  26. package/dist/env-file.d.ts.map +1 -0
  27. package/dist/env-file.js +200 -0
  28. package/dist/env-file.js.map +1 -0
  29. package/dist/env-schema.d.ts +28 -0
  30. package/dist/env-schema.d.ts.map +1 -0
  31. package/dist/env-schema.js +497 -0
  32. package/dist/env-schema.js.map +1 -0
  33. package/dist/guards.d.ts +40 -0
  34. package/dist/guards.d.ts.map +1 -0
  35. package/dist/guards.js +159 -0
  36. package/dist/guards.js.map +1 -0
  37. package/dist/parser.d.ts.map +1 -1
  38. package/dist/parser.js +12 -3
  39. package/dist/parser.js.map +1 -1
  40. package/dist/project-config.js +2 -2
  41. package/dist/prompt.d.ts +81 -0
  42. package/dist/prompt.d.ts.map +1 -0
  43. package/dist/prompt.js +379 -0
  44. package/dist/prompt.js.map +1 -0
  45. package/dist/redeploy.d.ts +109 -0
  46. package/dist/redeploy.d.ts.map +1 -0
  47. package/dist/redeploy.js +363 -0
  48. package/dist/redeploy.js.map +1 -0
  49. package/dist/scaffold-docs.d.ts +25 -6
  50. package/dist/scaffold-docs.d.ts.map +1 -1
  51. package/dist/scaffold-docs.js +711 -33
  52. package/dist/scaffold-docs.js.map +1 -1
  53. package/dist/scaffold.d.ts +17 -1
  54. package/dist/scaffold.d.ts.map +1 -1
  55. package/dist/scaffold.js +77 -14
  56. package/dist/scaffold.js.map +1 -1
  57. package/dist/theme-build.d.ts +35 -0
  58. package/dist/theme-build.d.ts.map +1 -0
  59. package/dist/theme-build.js +86 -0
  60. package/dist/theme-build.js.map +1 -0
  61. package/dist/update.d.ts +51 -0
  62. package/dist/update.d.ts.map +1 -0
  63. package/dist/update.js +210 -0
  64. package/dist/update.js.map +1 -0
  65. package/package.json +7 -7
package/dist/docker.js ADDED
@@ -0,0 +1,324 @@
1
+ // @oktis-works/cms - Camada Docker/Compose da CLI
2
+ //
3
+ // Toda a execução passa por um `Runner` injetável. Isso não é "teste por
4
+ // teste": blue/green tem passos que NÃO podem ser re-executados às cegas
5
+ // (migrar duas vezes, derrubar a lane certa), então os testes precisam
6
+ // inspecionar exatamente qual comando foi montado — e um runner falso é a
7
+ // única forma de fazer isso sem subir containers.
8
+ //
9
+ // Superfície de rede desta camada: `docker` e `docker compose` no socket
10
+ // local. Nenhuma URL é aberta aqui (o `bun add` do update fica isolado em
11
+ // `guards.ts` + allowlist do registry).
12
+ import { spawnSync } from 'node:child_process';
13
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
14
+ import { dirname, join } from 'node:path';
15
+ import { DEPLOY_PATHS, renderUpstreams, portsFromEnv } from './assets.js';
16
+ function format(command, args) {
17
+ return [command, ...args].join(' ');
18
+ }
19
+ export const defaultRunner = (command, args, opts = {}) => {
20
+ const result = spawnSync(command, args, {
21
+ cwd: opts.cwd,
22
+ env: opts.env ?? process.env,
23
+ encoding: 'utf-8',
24
+ timeout: opts.timeoutMs,
25
+ stdio: opts.inherit ? 'inherit' : 'pipe',
26
+ maxBuffer: 32 * 1024 * 1024,
27
+ });
28
+ return {
29
+ ok: result.status === 0 && !result.error,
30
+ code: result.status,
31
+ stdout: result.stdout ?? '',
32
+ stderr: result.error ? `${result.stderr ?? ''}\n${result.error.message}` : (result.stderr ?? ''),
33
+ command: format(command, args),
34
+ };
35
+ };
36
+ /** Comando que falhou por timeout (o spawnSync devolve error, não mensagem legível). */
37
+ export function failure(command, args, reason) {
38
+ return { ok: false, code: null, stdout: '', stderr: reason, command: format(command, args) };
39
+ }
40
+ // ---------------------------------------------------------------------------
41
+ // Disponibilidade
42
+ // ---------------------------------------------------------------------------
43
+ export function dockerAvailable(runner = defaultRunner) {
44
+ return runner('docker', ['version', '--format', '{{.Server.Version}}'], { timeoutMs: 15_000 }).ok;
45
+ }
46
+ /**
47
+ * `docker compose` (v2, plugin) — o `docker-compose` legado (v1, Python) não
48
+ * é suportado: os arquivos usam `x-` extensions, `name:` e healthcheck
49
+ * `condition`, que só o v2 entende.
50
+ */
51
+ export function composeAvailable(runner = defaultRunner) {
52
+ const result = runner('docker', ['compose', 'version', '--short'], { timeoutMs: 15_000 });
53
+ if (!result.ok)
54
+ return { ok: false, version: '' };
55
+ return { ok: true, version: result.stdout.trim() };
56
+ }
57
+ const SERVICE_KEYS = ['container_name', 'okcms.role', 'okcms.lane'];
58
+ /**
59
+ * Parser por indentação — não um YAML completo.
60
+ *
61
+ * O compose que a CLI lê é gerada por ela mesma; um parser de verdade
62
+ * (js-yaml) seria uma dependência nova num pacote que hoje não tem nenhuma,
63
+ * para extrair três campos. A restrição (chave em `services:` com indent 2,
64
+ * campos com indent maior) é verificada pelos testes contra o arquivo real.
65
+ */
66
+ export function parseComposeServices(yaml) {
67
+ const services = [];
68
+ const lines = yaml.split(/\r?\n/);
69
+ let inServices = false;
70
+ let current = null;
71
+ for (const line of lines) {
72
+ if (/^services:\s*$/.test(line)) {
73
+ inServices = true;
74
+ continue;
75
+ }
76
+ // fim do bloco services: chave de nível 0 (networks:, volumes:, x-*)
77
+ if (inServices && /^[A-Za-z_-][\w-]*:\s*$/.test(line)) {
78
+ if (current)
79
+ services.push(current);
80
+ current = null;
81
+ inServices = false;
82
+ continue;
83
+ }
84
+ if (!inServices)
85
+ continue;
86
+ const serviceMatch = /^ {2}([A-Za-z0-9][\w.-]*):\s*$/.exec(line);
87
+ if (serviceMatch) {
88
+ if (current)
89
+ services.push(current);
90
+ current = {
91
+ name: serviceMatch[1],
92
+ containerName: '',
93
+ role: 'unknown',
94
+ lane: null,
95
+ };
96
+ continue;
97
+ }
98
+ if (!current)
99
+ continue;
100
+ for (const key of SERVICE_KEYS) {
101
+ const match = new RegExp(`^\\s+${key.replace('.', '\\.')}:\\s*(\\S+)\\s*$`).exec(line);
102
+ if (!match)
103
+ continue;
104
+ const value = match[1].replace(/^["']|["']$/g, '');
105
+ if (key === 'container_name')
106
+ current.containerName = value;
107
+ else if (key === 'okcms.role')
108
+ current.role = value;
109
+ else
110
+ current.lane = value;
111
+ }
112
+ }
113
+ if (current)
114
+ services.push(current);
115
+ return services;
116
+ }
117
+ export function classifyServices(services, lane) {
118
+ return {
119
+ edge: services.filter((service) => service.role === 'edge' && service.lane === lane),
120
+ worker: services.filter((service) => service.role === 'worker' && service.lane === lane),
121
+ untouched: services.filter((service) => service.role === 'data' || service.role === 'proxy'),
122
+ };
123
+ }
124
+ // ---------------------------------------------------------------------------
125
+ // Compose
126
+ // ---------------------------------------------------------------------------
127
+ export const INFRA_PROJECT = 'okcms';
128
+ export const infraProject = () => INFRA_PROJECT;
129
+ export const laneProject = (lane) => `okcms-${lane}`;
130
+ export const otherLane = (lane) => (lane === 'blue' ? 'green' : 'blue');
131
+ export const COMPOSE_INFRA_FILE = 'docker-compose.infra.yml';
132
+ export const COMPOSE_DEPLOY_FILE = 'docker-compose.deploy.yml';
133
+ /** `docker compose -p <projeto> -f <arquivo> ...` — a única forma montada aqui. */
134
+ export function composeArgs(call) {
135
+ const args = ['compose'];
136
+ if (call.project)
137
+ args.push('-p', call.project);
138
+ if (call.file)
139
+ args.push('-f', call.file);
140
+ args.push(...call.args);
141
+ return args;
142
+ }
143
+ export function runCompose(cwd, call, runner = defaultRunner) {
144
+ return runner('docker', composeArgs(call), {
145
+ cwd,
146
+ inherit: call.inherit ?? false,
147
+ timeoutMs: call.timeoutMs,
148
+ });
149
+ }
150
+ export const infraCompose = (cwd, args, runner, inherit) => runCompose(cwd, { project: INFRA_PROJECT, file: COMPOSE_INFRA_FILE, args, inherit }, runner);
151
+ export const laneCompose = (cwd, lane, args, runner, inherit) => runCompose(cwd, { project: laneProject(lane), file: COMPOSE_DEPLOY_FILE, args, inherit }, runner);
152
+ /**
153
+ * `okcms-net` é declarada como `external: true` no compose das lanes — se ela
154
+ * não existir, o `up` falha com um erro obscuro. Criar antes torna o fluxo
155
+ * independente da ordem em que o operador rodou a infra.
156
+ */
157
+ export function ensureNetwork(cwd, runner = defaultRunner) {
158
+ const inspect = runner('docker', ['network', 'inspect', 'okcms-net'], { timeoutMs: 15_000 });
159
+ if (inspect.ok)
160
+ return inspect;
161
+ return runner('docker', ['network', 'create', '--driver', 'bridge', 'okcms-net'], {
162
+ cwd,
163
+ timeoutMs: 30_000,
164
+ });
165
+ }
166
+ // ---------------------------------------------------------------------------
167
+ // Estado da lane
168
+ // ---------------------------------------------------------------------------
169
+ export const LANE_STATE_PATH = '.deploy/state.json';
170
+ export function readLaneState(cwd) {
171
+ const path = join(cwd, LANE_STATE_PATH);
172
+ if (!existsSync(path))
173
+ return null;
174
+ try {
175
+ const parsed = JSON.parse(readFileSync(path, 'utf-8'));
176
+ if (parsed.lane !== 'blue' && parsed.lane !== 'green')
177
+ return null;
178
+ return parsed;
179
+ }
180
+ catch {
181
+ // arquivo corrompido não pode derrubar o deploy: o fallback é o docker
182
+ return null;
183
+ }
184
+ }
185
+ export function writeLaneState(cwd, state) {
186
+ const path = join(cwd, LANE_STATE_PATH);
187
+ mkdirSync(dirname(path), { recursive: true });
188
+ writeFileSync(path, `${JSON.stringify(state, null, 2)}\n`, 'utf-8');
189
+ }
190
+ export function pushLaneState(previous, lane, version) {
191
+ const now = new Date().toISOString();
192
+ const history = [...(previous?.history ?? [])];
193
+ if (previous)
194
+ history.push({ lane: previous.lane, version: previous.version, at: previous.at });
195
+ return {
196
+ lane,
197
+ previousLane: previous?.lane ?? null,
198
+ version,
199
+ at: now,
200
+ // histórico é diagnóstico, não log infinito
201
+ history: history.slice(-20),
202
+ };
203
+ }
204
+ /**
205
+ * Containers de uma lane com `okcms.role=edge` em execução.
206
+ * Usado quando não há `.deploy/state.json` (primeira execução / clone limpo).
207
+ */
208
+ export function edgeContainers(runner, lane) {
209
+ const result = runner('docker', [
210
+ 'ps',
211
+ '--filter', `label=okcms.lane=${lane}`,
212
+ '--filter', 'label=okcms.role=edge',
213
+ '--format', '{{.Names}}',
214
+ ], { timeoutMs: 15_000 });
215
+ if (!result.ok)
216
+ return [];
217
+ return result.stdout.split('\n').map((line) => line.trim()).filter(Boolean);
218
+ }
219
+ /** Estado do file é a fonte de verdade; o docker é o fallback. */
220
+ export function detectActiveLane(cwd, runner = defaultRunner) {
221
+ const state = readLaneState(cwd);
222
+ if (state)
223
+ return state.lane;
224
+ if (edgeContainers(runner, 'blue').length > 0)
225
+ return 'blue';
226
+ if (edgeContainers(runner, 'green').length > 0)
227
+ return 'green';
228
+ return null;
229
+ }
230
+ export const STOPPED = { exists: false, running: false, health: null };
231
+ export function inspectContainer(runner, name) {
232
+ const result = runner('docker', [
233
+ 'inspect',
234
+ '--format',
235
+ '{{.State.Status}}|{{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}',
236
+ name,
237
+ ], { timeoutMs: 15_000 });
238
+ if (!result.ok)
239
+ return STOPPED;
240
+ const [status, health] = result.stdout.trim().split('|');
241
+ return {
242
+ exists: true,
243
+ running: status === 'running',
244
+ health: health ?? 'none',
245
+ };
246
+ }
247
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
248
+ /** Aguarda um predicado sobre o estado do container; false = timeout. */
249
+ export async function waitForContainer(runner, name, predicate, opts = {}) {
250
+ const timeoutMs = opts.timeoutMs ?? 120_000;
251
+ const intervalMs = opts.intervalMs ?? 2_000;
252
+ const started = Date.now();
253
+ for (;;) {
254
+ const state = inspectContainer(runner, name);
255
+ if (predicate(state))
256
+ return true;
257
+ const elapsed = Date.now() - started;
258
+ if (elapsed >= timeoutMs)
259
+ return false;
260
+ opts.onTick?.(elapsed);
261
+ await sleep(Math.min(intervalMs, timeoutMs - elapsed));
262
+ }
263
+ }
264
+ /** Container destruído ou sem healthcheck = "não está servindo". */
265
+ export const isServing = (state) => state.running && state.health !== 'unhealthy';
266
+ /**
267
+ * Pronto para receber tráfego: rodando e (quando tem healthcheck) healthy.
268
+ * `none` = serviço sem healthcheck definido — não dá para esperar mais nada.
269
+ */
270
+ export const isHealthy = (state) => state.running && (state.health === 'healthy' || state.health === 'none');
271
+ export const isStopped = (state) => !state.running;
272
+ /**
273
+ * Espera ativa: o processo saiu da lista (`docker ps` não o mostra mais).
274
+ * `docker stop` já bloqueia até o `stop_grace_period`, então isto é um
275
+ * cinto e suspensório para o caso de o dreno estourar o tempo.
276
+ */
277
+ export const waitStopped = (runner, name, opts = {}) => waitForContainer(runner, name, isStopped, { timeoutMs: 60_000, ...opts });
278
+ // ---------------------------------------------------------------------------
279
+ // Upstreams do proxy
280
+ // ---------------------------------------------------------------------------
281
+ export function upstreamsPath(cwd) {
282
+ return join(cwd, DEPLOY_PATHS.nginxUpstreams);
283
+ }
284
+ /** Grava os upstreams apontando para `lane` e devolve o texto. */
285
+ export function writeUpstreams(cwd, lane, record = {}) {
286
+ const ports = portsFromEnv(record);
287
+ const content = renderUpstreams(lane, ports);
288
+ const path = upstreamsPath(cwd);
289
+ mkdirSync(dirname(path), { recursive: true });
290
+ writeFileSync(path, content, 'utf-8');
291
+ return content;
292
+ }
293
+ /** Lane que os upstreams atuais apontam — usada em doctor/rollback. */
294
+ export function readUpstreamsLane(cwd) {
295
+ const path = upstreamsPath(cwd);
296
+ if (!existsSync(path))
297
+ return null;
298
+ const text = readFileSync(path, 'utf-8');
299
+ if (/okcms-(?:api|web|admin)-blue\b/.test(text))
300
+ return 'blue';
301
+ if (/okcms-(?:api|web|admin)-green\b/.test(text))
302
+ return 'green';
303
+ return null;
304
+ }
305
+ export const PROXY_CONTAINER = 'okcms-proxy';
306
+ export function proxyRunning(runner = defaultRunner) {
307
+ return inspectContainer(runner, PROXY_CONTAINER).running;
308
+ }
309
+ /**
310
+ * `nginx -s reload` é o coração do swap: re-lê a configuração nova com as
311
+ * conexões existentes vivas. Nunca `restart` — isso derrubaria o proxy (e o
312
+ * TLS/rotas junto) no meio do deploy.
313
+ */
314
+ export function reloadProxy(cwd, runner = defaultRunner) {
315
+ return runner('docker', ['exec', PROXY_CONTAINER, 'nginx', '-s', 'reload'], {
316
+ cwd,
317
+ timeoutMs: 30_000,
318
+ });
319
+ }
320
+ /** Sobrescrita total da config do proxy (só quando `reload` falha). */
321
+ export function restartProxy(cwd, runner = defaultRunner) {
322
+ return runner('docker', ['restart', PROXY_CONTAINER], { cwd, timeoutMs: 60_000 });
323
+ }
324
+ //# sourceMappingURL=docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../src/docker.ts"],"names":[],"mappings":"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"}
package/dist/doctor.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { Runner } from './docker.js';
1
2
  export interface CheckResult {
2
3
  name: string;
3
4
  ok: boolean;
@@ -18,5 +19,6 @@ export interface DoctorEnv {
18
19
  export declare function runDoctorChecks(opts?: {
19
20
  tcpProbe?: typeof checkTcp;
20
21
  env?: DoctorEnv;
22
+ runner?: Runner;
21
23
  }): Promise<CheckResult[]>;
22
24
  //# sourceMappingURL=doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAcrG;AAeD,8CAA8C;AAC9C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAYvF;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,eAAe,CACnC,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAE,SAAS,CAAA;CAAO,GACzD,OAAO,CAAC,WAAW,EAAE,CAAC,CA0ExB"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAcrG;AAeD,8CAA8C;AAC9C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAYvF;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,eAAe,CACnC,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1E,OAAO,CAAC,WAAW,EAAE,CAAC,CAkIxB"}
package/dist/doctor.js CHANGED
@@ -113,6 +113,57 @@ export async function runDoctorChecks(opts = {}) {
113
113
  detail: configPath,
114
114
  required: true,
115
115
  });
116
+ // --- Deploy blue/green ---------------------------------------------------
117
+ // Nada aqui é `required: true`: projeto rodando local (`okcms start`) não
118
+ // precisa de Docker. O que importa é DIZER ao operador por que o deploy
119
+ // não vai funcionar, em vez de ele descobrir no meio de um swap.
120
+ //
121
+ // O módulo entra por dynamic import porque `env-schema` importa este
122
+ // arquivo — carregar os templates de deploy em `okcms config` seria peso
123
+ // morto em todo start de wizard.
124
+ const docker = await import('./docker.js');
125
+ const runner = opts.runner ?? docker.defaultRunner;
126
+ const dockerOk = docker.dockerAvailable(runner);
127
+ results.push({
128
+ name: 'docker',
129
+ ok: dockerOk,
130
+ detail: dockerOk
131
+ ? 'daemon acessível'
132
+ : 'ausente ou parado — só afeta `okcms update --mode deploy`',
133
+ required: false,
134
+ });
135
+ const compose = docker.composeAvailable(runner);
136
+ results.push({
137
+ name: 'compose',
138
+ ok: compose.ok,
139
+ detail: compose.ok
140
+ ? `plugin v2 (${compose.version || 'ok'})`
141
+ : 'plugin v2 ausente — `docker compose version` falhou (legado v1 não serve)',
142
+ required: false,
143
+ });
144
+ // Lane ativa: o estado salvo em .deploy/state.json, senão quem está no ar.
145
+ const lane = dockerOk ? docker.detectActiveLane(cwd, runner) : null;
146
+ results.push({
147
+ name: 'lane',
148
+ ok: dockerOk,
149
+ detail: !dockerOk
150
+ ? 'docker indisponível'
151
+ : lane
152
+ ? `lane ${lane} ativa (rollback: ${docker.otherLane(lane)})`
153
+ : 'nenhuma lane no ar — primeiro deploy',
154
+ required: false,
155
+ });
156
+ const proxy = dockerOk && docker.proxyRunning(runner);
157
+ results.push({
158
+ name: 'proxy',
159
+ ok: proxy || lane === null,
160
+ detail: proxy
161
+ ? 'okcms-proxy no ar'
162
+ : lane === null
163
+ ? 'ainda não implantado em Docker (uso local não precisa)'
164
+ : 'okcms-proxy parado com lane ativa — site inacessível',
165
+ required: false,
166
+ });
116
167
  return results;
117
168
  }
118
169
  //# sourceMappingURL=doctor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export interface EnvLine {
2
+ /** `assign` = KEY=value; `raw` = comentário, linha em branco ou lixo. */
3
+ kind: 'assign' | 'raw';
4
+ raw: string;
5
+ key?: string;
6
+ value?: string;
7
+ /** Prefixo antes da chave (` ` ou `export `). */
8
+ prefix?: string;
9
+ /** Separador ao redor do `=` (ex.: `=`, ` = `). */
10
+ sep?: string;
11
+ /** Comentario final da linha, já sem a `#` (ex.: ` # nota`). */
12
+ suffix?: string;
13
+ }
14
+ /**
15
+ * Volta a serializar um valor para o formato dotenv: cru quando não ambíguo,
16
+ * com aspas duplas quando contém espaço, `#`, aspas ou expansão de variável.
17
+ */
18
+ export declare function serializeEnvValue(value: string): string;
19
+ export declare class EnvFile {
20
+ lines: EnvLine[];
21
+ readonly path: string | null;
22
+ constructor(text?: string, path?: string | null);
23
+ /** Linhas exatamente como estão no disco. */
24
+ toString(): string;
25
+ get(key: string): string | undefined;
26
+ /** Valor bruto (com aspas/comentário removidos apenas das pontas). */
27
+ has(key: string): boolean;
28
+ keys(): string[];
29
+ /** Todas as chaves → valor (sem aspas). */
30
+ toRecord(): Record<string, string>;
31
+ /**
32
+ * Define/insere uma chave. Na substituição preserva prefixo, separador e
33
+ * comentário final — é o que faz o wizard não "sujar" o arquivo.
34
+ */
35
+ set(key: string, value: string): boolean;
36
+ /** Remove a linha de uma chave (mantém comentários em volta). */
37
+ delete(key: string): boolean;
38
+ /** Cria a chave abaixo do último comentário de uma seção (`# --- Foo ---`). */
39
+ setInSection(key: string, value: string, sectionHint: string): boolean;
40
+ save(path?: string | null, mode?: number): void;
41
+ }
42
+ export declare function parseEnv(text: string): EnvFile;
43
+ /** Lê `.env` (ou `.env.example` como fallback) — nunca lança se não existe. */
44
+ export declare function loadEnvFile(path: string): EnvFile;
45
+ //# sourceMappingURL=env-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-file.d.ts","sourceRoot":"","sources":["../src/env-file.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,OAAO;IACtB,yEAAyE;IACzE,IAAI,EAAE,QAAQ,GAAG,KAAK,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA+CD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,qBAAa,OAAO;IAClB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEjB,IAAI,SAAK,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW;IAOjD,6CAA6C;IAC7C,QAAQ,IAAI,MAAM;IAIlB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAMpC,sEAAsE;IACtE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,IAAI,IAAI,MAAM,EAAE;IAQhB,2CAA2C;IAC3C,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQlC;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IA2BxC,iEAAiE;IACjE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAM5B,+EAA+E;IAC/E,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IA2BtE,IAAI,CAAC,IAAI,gBAAY,EAAE,IAAI,SAAQ,GAAG,IAAI;CAW3C;AAWD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGjD"}