@oktis-works/cms 0.2.0 → 0.2.1
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 +42 -0
- package/dist/commands.js.map +1 -1
- package/dist/deploy.d.ts +20 -0
- package/dist/deploy.d.ts.map +1 -0
- package/dist/deploy.js +304 -0
- package/dist/deploy.js.map +1 -0
- package/dist/docs-updater.d.ts +10 -0
- package/dist/docs-updater.d.ts.map +1 -0
- package/dist/docs-updater.js +45 -0
- package/dist/docs-updater.js.map +1 -0
- package/dist/history.d.ts +48 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +104 -0
- package/dist/history.js.map +1 -0
- package/dist/rollback.d.ts +15 -0
- package/dist/rollback.d.ts.map +1 -0
- package/dist/rollback.js +170 -0
- package/dist/rollback.js.map +1 -0
- package/dist/scaffold-docs.d.ts +5 -0
- package/dist/scaffold-docs.d.ts.map +1 -1
- package/dist/scaffold-docs.js +17 -0
- package/dist/scaffold-docs.js.map +1 -1
- package/dist/update.d.ts +1 -0
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +66 -3
- package/dist/update.js.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-updater.js","sourceRoot":"","sources":["../src/docs-updater.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,EAAE;AACF,qEAAqE;AACrE,6DAA6D;AAE7D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE/F,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAU,CAAC;AAG5E,+DAA+D;AAC/D,SAAS,IAAI,CAAC,OAAe;IAC3B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,oFAAoF;AACpF,SAAS,aAAa,CACpB,GAAW,EACX,IAAoB,EACpB,SAAwC,EACxC,IAAiB;IAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7B,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAEjC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC,CAAC,2BAA2B;IACpE,CAAC;IAED,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpF,IAAI,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChF,IAAI,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE7E,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export type HistoryMode = 'download' | 'deploy' | 'pm2';
|
|
2
|
+
export interface HistoryEntry {
|
|
3
|
+
id: number;
|
|
4
|
+
/** Modo da operação. */
|
|
5
|
+
mode: HistoryMode;
|
|
6
|
+
/** Timestamp ISO da operação. */
|
|
7
|
+
at: string;
|
|
8
|
+
/** Versão da CLI que executou. */
|
|
9
|
+
cliVersion: string;
|
|
10
|
+
/** Pacotes atualizados (apenas modo download/deploy). */
|
|
11
|
+
packages?: Array<{
|
|
12
|
+
name: string;
|
|
13
|
+
from: string;
|
|
14
|
+
to: string;
|
|
15
|
+
}>;
|
|
16
|
+
/** Lane ativa após deploy (apenas modo deploy). */
|
|
17
|
+
lane?: 'blue' | 'green';
|
|
18
|
+
/** Lane anterior (para rollback de lane). */
|
|
19
|
+
previousLane?: 'blue' | 'green' | null;
|
|
20
|
+
/** Mensagem descritiva. */
|
|
21
|
+
message: string;
|
|
22
|
+
/** Snapshot do package.json (apenas modo download). */
|
|
23
|
+
packageJsonSnapshot?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface HistoryState {
|
|
26
|
+
entries: HistoryEntry[];
|
|
27
|
+
/** Próximo ID incremental. */
|
|
28
|
+
nextId: number;
|
|
29
|
+
}
|
|
30
|
+
/** Caminho absoluto do arquivo de histórico. */
|
|
31
|
+
export declare function historyPath(cwd: string): string;
|
|
32
|
+
/** Lê o estado do histórico. */
|
|
33
|
+
export declare function readHistory(cwd: string): HistoryState;
|
|
34
|
+
/** Grava o estado do histórico (atômico via writeFileSync). */
|
|
35
|
+
export declare function writeHistory(cwd: string, state: HistoryState): void;
|
|
36
|
+
/** Adiciona uma entrada ao histórico e retorna a entrada criada. */
|
|
37
|
+
export declare function addHistoryEntry(cwd: string, entry: Omit<HistoryEntry, 'id'>, cliVersion: string): HistoryEntry;
|
|
38
|
+
/** Lista entradas (mais recentes primeiro). */
|
|
39
|
+
export declare function listHistory(cwd: string): HistoryEntry[];
|
|
40
|
+
/** Busca entrada por ID. */
|
|
41
|
+
export declare function getHistoryEntry(cwd: string, id: number): HistoryEntry | null;
|
|
42
|
+
/** Remove entrada por ID (útil para limpar). */
|
|
43
|
+
export declare function removeHistoryEntry(cwd: string, id: number): boolean;
|
|
44
|
+
/** Limpa todo o histórico. */
|
|
45
|
+
export declare function clearHistory(cwd: string): void;
|
|
46
|
+
/** Formata uma entrada para exibição no terminal. */
|
|
47
|
+
export declare function formatHistoryEntry(entry: HistoryEntry): string;
|
|
48
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,wBAAwB;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACvC,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD,gDAAgD;AAChD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,gCAAgC;AAChC,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAYrD;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAInE;AAED,oEAAoE;AACpE,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAC/B,UAAU,EAAE,MAAM,GACjB,YAAY,CAYd;AAED,+CAA+C;AAC/C,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,EAAE,CAGvD;AAED,4BAA4B;AAC5B,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAG5E;AAED,gDAAgD;AAChD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAOnE;AAED,8BAA8B;AAC9B,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,qDAAqD;AACrD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAuB9D"}
|
package/dist/history.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// @oktis-works/cms - Sistema de histórico e rollback unificado
|
|
2
|
+
//
|
|
3
|
+
// O estado persiste em `.deploy/update-history.json` (para updates de pacotes)
|
|
4
|
+
// e em `.deploy/state.json` (para deploys blue/green).
|
|
5
|
+
// Ambos expõem a mesma API: lista, detalhe, rollback para índice.
|
|
6
|
+
//
|
|
7
|
+
// Entradas de histórico cobrem:
|
|
8
|
+
// - update:download (pacotes @oktis-works/*)
|
|
9
|
+
// - update:deploy (blue/green + pacotes)
|
|
10
|
+
// - deploy:pm2 (ecosystem pm2)
|
|
11
|
+
// - deploy:docker (alias para update:deploy)
|
|
12
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
13
|
+
import { join, dirname } from 'node:path';
|
|
14
|
+
const HISTORY_DIR = '.deploy';
|
|
15
|
+
const HISTORY_FILE = 'update-history.json';
|
|
16
|
+
/** Caminho absoluto do arquivo de histórico. */
|
|
17
|
+
export function historyPath(cwd) {
|
|
18
|
+
return join(cwd, HISTORY_DIR, HISTORY_FILE);
|
|
19
|
+
}
|
|
20
|
+
/** Lê o estado do histórico. */
|
|
21
|
+
export function readHistory(cwd) {
|
|
22
|
+
const path = historyPath(cwd);
|
|
23
|
+
if (!existsSync(path))
|
|
24
|
+
return { entries: [], nextId: 1 };
|
|
25
|
+
try {
|
|
26
|
+
const raw = readFileSync(path, 'utf-8');
|
|
27
|
+
const parsed = JSON.parse(raw);
|
|
28
|
+
if (!Array.isArray(parsed.entries))
|
|
29
|
+
return { entries: [], nextId: 1 };
|
|
30
|
+
if (typeof parsed.nextId !== 'number')
|
|
31
|
+
parsed.nextId = parsed.entries.length + 1;
|
|
32
|
+
return parsed;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return { entries: [], nextId: 1 };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Grava o estado do histórico (atômico via writeFileSync). */
|
|
39
|
+
export function writeHistory(cwd, state) {
|
|
40
|
+
const path = historyPath(cwd);
|
|
41
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
42
|
+
writeFileSync(path, `${JSON.stringify(state, null, 2)}\n`, 'utf-8');
|
|
43
|
+
}
|
|
44
|
+
/** Adiciona uma entrada ao histórico e retorna a entrada criada. */
|
|
45
|
+
export function addHistoryEntry(cwd, entry, cliVersion) {
|
|
46
|
+
const state = readHistory(cwd);
|
|
47
|
+
const newEntry = {
|
|
48
|
+
...entry,
|
|
49
|
+
id: state.nextId++,
|
|
50
|
+
cliVersion,
|
|
51
|
+
};
|
|
52
|
+
state.entries.push(newEntry);
|
|
53
|
+
// Mantém apenas os últimos 50 (diagnóstico, não log infinito)
|
|
54
|
+
if (state.entries.length > 50)
|
|
55
|
+
state.entries = state.entries.slice(-50);
|
|
56
|
+
writeHistory(cwd, state);
|
|
57
|
+
return newEntry;
|
|
58
|
+
}
|
|
59
|
+
/** Lista entradas (mais recentes primeiro). */
|
|
60
|
+
export function listHistory(cwd) {
|
|
61
|
+
const state = readHistory(cwd);
|
|
62
|
+
return [...state.entries].reverse();
|
|
63
|
+
}
|
|
64
|
+
/** Busca entrada por ID. */
|
|
65
|
+
export function getHistoryEntry(cwd, id) {
|
|
66
|
+
const state = readHistory(cwd);
|
|
67
|
+
return state.entries.find((e) => e.id === id) ?? null;
|
|
68
|
+
}
|
|
69
|
+
/** Remove entrada por ID (útil para limpar). */
|
|
70
|
+
export function removeHistoryEntry(cwd, id) {
|
|
71
|
+
const state = readHistory(cwd);
|
|
72
|
+
const idx = state.entries.findIndex((e) => e.id === id);
|
|
73
|
+
if (idx === -1)
|
|
74
|
+
return false;
|
|
75
|
+
state.entries.splice(idx, 1);
|
|
76
|
+
writeHistory(cwd, state);
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
/** Limpa todo o histórico. */
|
|
80
|
+
export function clearHistory(cwd) {
|
|
81
|
+
writeHistory(cwd, { entries: [], nextId: 1 });
|
|
82
|
+
}
|
|
83
|
+
/** Formata uma entrada para exibição no terminal. */
|
|
84
|
+
export function formatHistoryEntry(entry) {
|
|
85
|
+
const modeLabel = {
|
|
86
|
+
download: 'download',
|
|
87
|
+
deploy: 'deploy (blue/green)',
|
|
88
|
+
pm2: 'deploy (pm2)',
|
|
89
|
+
}[entry.mode];
|
|
90
|
+
const lines = [
|
|
91
|
+
` ${entry.id}. [${modeLabel}] ${entry.at}`,
|
|
92
|
+
` CLI: ${entry.cliVersion} · ${entry.message}`,
|
|
93
|
+
];
|
|
94
|
+
if (entry.packages && entry.packages.length > 0) {
|
|
95
|
+
for (const p of entry.packages) {
|
|
96
|
+
lines.push(` @oktis-works/${p.name}: ${p.from} → ${p.to}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (entry.lane) {
|
|
100
|
+
lines.push(` lane: ${entry.lane}${entry.previousLane ? ` (era ${entry.previousLane})` : ''}`);
|
|
101
|
+
}
|
|
102
|
+
return lines.join('\n');
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Prompt } from './prompt.js';
|
|
2
|
+
import { defaultRunner } from './docker.js';
|
|
3
|
+
export interface RollbackOptions {
|
|
4
|
+
cwd?: string;
|
|
5
|
+
/** ID da entrada do histórico (se omitido, abre menu interativo). */
|
|
6
|
+
id?: number;
|
|
7
|
+
/** `--yes`: confirma sem prompt. */
|
|
8
|
+
yes?: boolean;
|
|
9
|
+
/** `--force`: permite rodar dentro de container (não recomendado). */
|
|
10
|
+
force?: boolean;
|
|
11
|
+
prompt?: Prompt;
|
|
12
|
+
runner?: typeof defaultRunner;
|
|
13
|
+
}
|
|
14
|
+
export declare function runRollback(opts?: RollbackOptions): Promise<number>;
|
|
15
|
+
//# sourceMappingURL=rollback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../src/rollback.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oCAAoC;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,aAAa,CAAC;CAC/B;AA8HD,wBAAsB,WAAW,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyE7E"}
|
package/dist/rollback.js
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
// @oktis-works/cms - `okcms rollback` (histórico + rollback)
|
|
2
|
+
//
|
|
3
|
+
// Lista o histórico de updates/deploys e permite voltar para um estado anterior.
|
|
4
|
+
// O rollback de "download" restaura package.json (requer reinstall).
|
|
5
|
+
// O rollback de "deploy" troca a lane ativa no proxy (blue <-> green).
|
|
6
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { Prompt } from './prompt.js';
|
|
9
|
+
import { listHistory, getHistoryEntry } from './history.js';
|
|
10
|
+
import { reloadProxy, writeUpstreams } from './docker.js';
|
|
11
|
+
import { defaultRunner } from './docker.js';
|
|
12
|
+
import { loadEnvFile } from './env-file.js';
|
|
13
|
+
function printHistory(cwd) {
|
|
14
|
+
const entries = listHistory(cwd);
|
|
15
|
+
if (entries.length === 0) {
|
|
16
|
+
console.log('Histórico vazio.');
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
console.log('\nHistórico de updates/deploys (mais recente primeiro):\n');
|
|
20
|
+
for (const entry of entries) {
|
|
21
|
+
console.log(entry.id + '. ' + entry.at.split('T')[0] + ' ' + entry.at.split('T')[1]?.slice(0, 8));
|
|
22
|
+
console.log(' ' + entry.mode + ': ' + entry.message);
|
|
23
|
+
if (entry.packages && entry.packages.length > 0) {
|
|
24
|
+
for (const p of entry.packages) {
|
|
25
|
+
console.log(` @oktis-works/${p.name}: ${p.from} → ${p.to}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (entry.lane) {
|
|
29
|
+
console.log(` lane: ${entry.lane}${entry.previousLane ? ` (era ${entry.previousLane})` : ''}`);
|
|
30
|
+
}
|
|
31
|
+
console.log('');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** Executa rollback de download: restaura package.json e orienta reinstall. */
|
|
35
|
+
async function rollbackDownload(cwd, entry, prompt) {
|
|
36
|
+
const pkgPath = join(cwd, 'package.json');
|
|
37
|
+
if (!existsSync(pkgPath)) {
|
|
38
|
+
prompt.error('package.json não encontrado.');
|
|
39
|
+
return 1;
|
|
40
|
+
}
|
|
41
|
+
const currentPkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
42
|
+
let changed = false;
|
|
43
|
+
if (entry.packages) {
|
|
44
|
+
for (const p of entry.packages) {
|
|
45
|
+
const depName = `@oktis-works/${p.name}`;
|
|
46
|
+
for (const depType of ['dependencies', 'devDependencies', 'optionalDependencies']) {
|
|
47
|
+
if (currentPkg[depType]?.[depName]) {
|
|
48
|
+
currentPkg[depType][depName] = p.from;
|
|
49
|
+
changed = true;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (!changed) {
|
|
55
|
+
prompt.warn('Nenhuma dependência @oktis-works/* para reverter no package.json.');
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
writeFileSync(pkgPath, JSON.stringify(currentPkg, null, 2) + '\n', 'utf-8');
|
|
59
|
+
prompt.success('package.json revertido para versões anteriores.');
|
|
60
|
+
prompt.info('Execute `bun install` (ou `npm install`) para aplicar o rollback.');
|
|
61
|
+
return 0;
|
|
62
|
+
}
|
|
63
|
+
/** Executa rollback de deploy: troca a lane ativa no proxy. */
|
|
64
|
+
async function rollbackDeploy(cwd, entry, prompt, runner) {
|
|
65
|
+
if (!entry.previousLane) {
|
|
66
|
+
prompt.error('Não há lane anterior para rollback (primeiro deploy?).');
|
|
67
|
+
return 1;
|
|
68
|
+
}
|
|
69
|
+
const targetLane = entry.previousLane;
|
|
70
|
+
const currentLane = entry.lane;
|
|
71
|
+
prompt.heading(`Rollback de deploy: ${currentLane} → ${targetLane}`);
|
|
72
|
+
prompt.info('Trocando o proxy para a lane anterior...');
|
|
73
|
+
const record = loadEnvFile(join(cwd, '.env')).toRecord();
|
|
74
|
+
writeUpstreams(cwd, targetLane, record);
|
|
75
|
+
const reloaded = reloadProxy(cwd, runner);
|
|
76
|
+
if (!reloaded.ok) {
|
|
77
|
+
prompt.error('Falha ao recarregar nginx: ' + reloaded.stderr);
|
|
78
|
+
return 1;
|
|
79
|
+
}
|
|
80
|
+
// Atualiza estado da lane
|
|
81
|
+
const statePath = join(cwd, '.deploy', 'state.json');
|
|
82
|
+
let state = { lane: targetLane, previousLane: currentLane, version: '', at: new Date().toISOString(), history: [] };
|
|
83
|
+
try {
|
|
84
|
+
const raw = readFileSync(statePath, 'utf-8');
|
|
85
|
+
state = JSON.parse(raw);
|
|
86
|
+
}
|
|
87
|
+
catch { }
|
|
88
|
+
state.lane = targetLane;
|
|
89
|
+
state.previousLane = currentLane;
|
|
90
|
+
state.at = new Date().toISOString();
|
|
91
|
+
const { writeLaneState } = await import('./docker.js');
|
|
92
|
+
writeLaneState(cwd, state);
|
|
93
|
+
prompt.success(`Rollback concluído. Lane ativa: ${targetLane}`);
|
|
94
|
+
return 0;
|
|
95
|
+
}
|
|
96
|
+
/** Executa rollback de PM2: restaura ecosystem.config.js anterior (se houver snapshot). */
|
|
97
|
+
async function rollbackPm2(cwd, entry, prompt) {
|
|
98
|
+
if (!entry.packageJsonSnapshot) {
|
|
99
|
+
prompt.error('Sem snapshot de package.json para rollback PM2.');
|
|
100
|
+
return 1;
|
|
101
|
+
}
|
|
102
|
+
const pkgPath = join(cwd, 'package.json');
|
|
103
|
+
writeFileSync(pkgPath, entry.packageJsonSnapshot, 'utf-8');
|
|
104
|
+
prompt.success('package.json restaurado. Rode `bun install` e `pm2 reload all`.');
|
|
105
|
+
return 0;
|
|
106
|
+
}
|
|
107
|
+
export async function runRollback(opts = {}) {
|
|
108
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
109
|
+
const prompt = opts.prompt ?? new Prompt();
|
|
110
|
+
const ownsPrompt = opts.prompt === undefined;
|
|
111
|
+
const runner = opts.runner ?? defaultRunner;
|
|
112
|
+
const guard = (await import('./guards.js')).assertHostOnly('okcms rollback', { force: opts.force });
|
|
113
|
+
if (!guard.ok) {
|
|
114
|
+
console.error(guard.message);
|
|
115
|
+
if (ownsPrompt)
|
|
116
|
+
prompt.close();
|
|
117
|
+
return 1;
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
const entries = listHistory(cwd);
|
|
121
|
+
if (entries.length === 0) {
|
|
122
|
+
prompt.warn('Histórico vazio — nada para fazer rollback.');
|
|
123
|
+
return 0;
|
|
124
|
+
}
|
|
125
|
+
let targetId = opts.id;
|
|
126
|
+
if (targetId === undefined) {
|
|
127
|
+
printHistory(cwd);
|
|
128
|
+
targetId = await prompt.select('Escolha o estado para rollback (mais recente = 1):', entries.map((e) => ({
|
|
129
|
+
value: e.id,
|
|
130
|
+
label: `#${e.id} ${e.at.slice(0, 19).replace('T', ' ')} — ${e.mode}: ${e.message}`,
|
|
131
|
+
})), { defaultValue: entries[0]?.id });
|
|
132
|
+
}
|
|
133
|
+
const entry = getHistoryEntry(cwd, targetId);
|
|
134
|
+
if (!entry) {
|
|
135
|
+
prompt.error(`Entrada #${targetId} não encontrada no histórico.`);
|
|
136
|
+
return 1;
|
|
137
|
+
}
|
|
138
|
+
if (!opts.yes) {
|
|
139
|
+
const confirmed = await prompt.confirm(`Confirmar rollback para #${entry.id} (${entry.mode}: ${entry.message})?`, { defaultValue: false });
|
|
140
|
+
if (!confirmed) {
|
|
141
|
+
prompt.info('Cancelado.');
|
|
142
|
+
return 0;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
let code;
|
|
146
|
+
switch (entry.mode) {
|
|
147
|
+
case 'download':
|
|
148
|
+
code = await rollbackDownload(cwd, entry, prompt);
|
|
149
|
+
break;
|
|
150
|
+
case 'deploy':
|
|
151
|
+
code = await rollbackDeploy(cwd, entry, prompt, runner);
|
|
152
|
+
break;
|
|
153
|
+
case 'pm2':
|
|
154
|
+
code = await rollbackPm2(cwd, entry, prompt);
|
|
155
|
+
break;
|
|
156
|
+
default:
|
|
157
|
+
prompt.error(`Modo desconhecido: ${entry.mode}`);
|
|
158
|
+
return 1;
|
|
159
|
+
}
|
|
160
|
+
if (code === 0) {
|
|
161
|
+
prompt.success('Rollback concluído com sucesso.');
|
|
162
|
+
}
|
|
163
|
+
return code;
|
|
164
|
+
}
|
|
165
|
+
finally {
|
|
166
|
+
if (ownsPrompt)
|
|
167
|
+
prompt.close();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=rollback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollback.js","sourceRoot":"","sources":["../src/rollback.ts"],"names":[],"mappings":"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"}
|
package/dist/scaffold-docs.d.ts
CHANGED
|
@@ -14,6 +14,11 @@ export declare const DEFAULT_DOCS_LANG: DocsLang;
|
|
|
14
14
|
export declare function parseDocsLang(value: string | undefined | null): DocsLang | null;
|
|
15
15
|
/** Rótulo legível da língua (mensagens da CLI). */
|
|
16
16
|
export declare function docsLangLabel(lang: DocsLang): string;
|
|
17
|
+
/**
|
|
18
|
+
* Detecta a língua do projeto lendo o README.md existente.
|
|
19
|
+
* Usado pelo `okcms update`/`deploy` para atualizar docs na língua certa.
|
|
20
|
+
*/
|
|
21
|
+
export declare function detectProjectDocsLang(cwd: string): 'en' | 'pt';
|
|
17
22
|
/**
|
|
18
23
|
* README.md do projeto scaffoldado, na língua escolhida no \`okcms init\`.
|
|
19
24
|
* Default \`en\` (Enter do prompt e único valor em modo não-interativo).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold-docs.d.ts","sourceRoot":"","sources":["../src/scaffold-docs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scaffold-docs.d.ts","sourceRoot":"","sources":["../src/scaffold-docs.ts"],"names":[],"mappings":"AAiBA,iDAAiD;AACjD,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnC,0DAA0D;AAC1D,eAAO,MAAM,UAAU,EAAE,QAAQ,EAAiB,CAAC;AAEnD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAe,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,CAW/E;AAED,mDAAmD;AACnD,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAEpD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAQ9D;AAsgCD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,QAA4B,GACjC,MAAM,CAER;AAED,kCAAkC;AAClC,wBAAgB,SAAS,CAAC,IAAI,GAAE,QAA4B,GAAG,MAAM,CAEpE;AAED,iCAAiC;AACjC,wBAAgB,QAAQ,CAAC,IAAI,GAAE,QAA4B,GAAG,MAAM,CAEnE"}
|
package/dist/scaffold-docs.js
CHANGED
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
// `--lang en|pt` sem TTY) e não muda o path. No repositório, os guias derivados
|
|
12
12
|
// (docs/plugin-development*.md) existem nos dois nomes, com banner de idioma.
|
|
13
13
|
import { CMS_VERSION } from '@oktis-works/validation';
|
|
14
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
15
|
+
import { join } from 'node:path';
|
|
14
16
|
/** Línguas suportadas (ordem = ordem do menu do init). */
|
|
15
17
|
export const DOCS_LANGS = ['en', 'pt'];
|
|
16
18
|
/**
|
|
@@ -40,6 +42,21 @@ export function parseDocsLang(value) {
|
|
|
40
42
|
export function docsLangLabel(lang) {
|
|
41
43
|
return lang === 'pt' ? 'português' : 'inglês';
|
|
42
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Detecta a língua do projeto lendo o README.md existente.
|
|
47
|
+
* Usado pelo `okcms update`/`deploy` para atualizar docs na língua certa.
|
|
48
|
+
*/
|
|
49
|
+
export function detectProjectDocsLang(cwd) {
|
|
50
|
+
const readmePath = join(cwd, 'README.md');
|
|
51
|
+
if (!existsSync(readmePath))
|
|
52
|
+
return DEFAULT_DOCS_LANG;
|
|
53
|
+
const content = readFileSync(readmePath, 'utf-8');
|
|
54
|
+
if (content.includes('O que é o OkCMS') || content.includes('## Produção'))
|
|
55
|
+
return 'pt';
|
|
56
|
+
if (content.includes('What is OkCMS') || content.includes('## Production'))
|
|
57
|
+
return 'en';
|
|
58
|
+
return DEFAULT_DOCS_LANG;
|
|
59
|
+
}
|
|
43
60
|
/** README.md do projeto scaffoldado — versão em português. */
|
|
44
61
|
function projectReadmePt(projectName) {
|
|
45
62
|
return `# ${projectName}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold-docs.js","sourceRoot":"","sources":["../src/scaffold-docs.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,wEAAwE;AACxE,gFAAgF;AAChF,EAAE;AACF,sEAAsE;AACtE,6EAA6E;AAC7E,yDAAyD;AACzD,EAAE;AACF,0EAA0E;AAC1E,8EAA8E;AAC9E,gFAAgF;AAChF,8EAA8E;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"scaffold-docs.js","sourceRoot":"","sources":["../src/scaffold-docs.ts"],"names":[],"mappings":"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"}
|
package/dist/update.d.ts
CHANGED
|
@@ -47,5 +47,6 @@ export declare function parseMode(value: string): UpdateMode | null;
|
|
|
47
47
|
export declare function scanOutdated(cwd: string, log?: (message: string) => void): Promise<ScanResult>;
|
|
48
48
|
/** Flags > prompt. Fora de TTY, defaults conservadores e determinísticos. */
|
|
49
49
|
export declare function resolveDeployChoices(opts: Pick<UpdateOptions, 'noCache' | 'removeOrphans' | 'keepOrphans' | 'yes'>, prompt: Prompt): Promise<DeployChoices>;
|
|
50
|
+
export declare function runDownload(scan: ScanResult, opts: UpdateOptions, prompt: Prompt): Promise<number>;
|
|
50
51
|
export declare function runUpdate(opts?: UpdateOptions): Promise<number>;
|
|
51
52
|
//# sourceMappingURL=update.d.ts.map
|
package/dist/update.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAElE,OAAO,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAC;AAIpD,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,+EAA+E;IAC/E,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+CAA+C;IAC/C,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAcD,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAE1D;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAkB,GAC3C,OAAO,CAAC,UAAU,CAAC,CAiCrB;AAED,6EAA6E;AAC7E,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,eAAe,GAAG,aAAa,GAAG,KAAK,CAAC,EAC9E,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,CAAC,CAwBxB;AA0DD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAkDjB;AAED,wBAAsB,SAAS,CAAC,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAoGzE"}
|
package/dist/update.js
CHANGED
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
//
|
|
15
15
|
// A escolha entre os dois é o menu de TTY; fora de TTY vale `--mode` ou o
|
|
16
16
|
// default histórico.
|
|
17
|
+
//
|
|
18
|
+
// Histórico e rollback: cada operação (download/deploy) grava em
|
|
19
|
+
// `.deploy/update-history.json` — `okcms rollback` lista e permite voltar.
|
|
17
20
|
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
18
21
|
import { join } from 'node:path';
|
|
19
22
|
import { deployBlueGreen } from './bluegreen.js';
|
|
@@ -21,6 +24,8 @@ import { defaultRunner } from './docker.js';
|
|
|
21
24
|
import { assertHostOnly } from './guards.js';
|
|
22
25
|
import { getLatestVersion } from './npm-registry.js';
|
|
23
26
|
import { Prompt, style, symbol } from './prompt.js';
|
|
27
|
+
import { addHistoryEntry } from './history.js';
|
|
28
|
+
import { updateProjectDocs } from './docs-updater.js';
|
|
24
29
|
const MODE_ALIASES = {
|
|
25
30
|
download: 'download',
|
|
26
31
|
pkg: 'download',
|
|
@@ -89,7 +94,47 @@ export async function resolveDeployChoices(opts, prompt) {
|
|
|
89
94
|
: true;
|
|
90
95
|
return { noCache, removeOrphans };
|
|
91
96
|
}
|
|
92
|
-
|
|
97
|
+
/** Grava entrada no histórico de update + atualiza docs do projeto. */
|
|
98
|
+
async function recordUpdateAndDocs(cwd, scan) {
|
|
99
|
+
const pkg = await import('../package.json', { with: { type: 'json' } });
|
|
100
|
+
const cliVer = pkg.default.version;
|
|
101
|
+
const packages = scan.outdated.map((entry) => ({
|
|
102
|
+
name: entry.name,
|
|
103
|
+
from: entry.current,
|
|
104
|
+
to: entry.latest,
|
|
105
|
+
}));
|
|
106
|
+
addHistoryEntry(cwd, {
|
|
107
|
+
mode: 'download',
|
|
108
|
+
at: new Date().toISOString(),
|
|
109
|
+
cliVersion: cliVer,
|
|
110
|
+
packages,
|
|
111
|
+
message: `Atualizados ${packages.length} pacote(s) via download`,
|
|
112
|
+
}, cliVer);
|
|
113
|
+
// Atualiza docs do projeto (README/PLUGIN/THEME) — só reescreve se mudou
|
|
114
|
+
const updatedDocs = updateProjectDocs(cwd);
|
|
115
|
+
return updatedDocs;
|
|
116
|
+
}
|
|
117
|
+
async function recordDeployAndDocs(cwd, scan, lane, previousLane) {
|
|
118
|
+
const pkg = await import('../package.json', { with: { type: 'json' } });
|
|
119
|
+
const cliVer = pkg.default.version;
|
|
120
|
+
const packages = scan.outdated.map((entry) => ({
|
|
121
|
+
name: entry.name,
|
|
122
|
+
from: entry.current,
|
|
123
|
+
to: entry.latest,
|
|
124
|
+
}));
|
|
125
|
+
addHistoryEntry(cwd, {
|
|
126
|
+
mode: 'deploy',
|
|
127
|
+
at: new Date().toISOString(),
|
|
128
|
+
cliVersion: cliVer,
|
|
129
|
+
packages,
|
|
130
|
+
lane,
|
|
131
|
+
previousLane,
|
|
132
|
+
message: `Deploy blue/green → lane ${lane} (era ${previousLane ?? 'n/a'})`,
|
|
133
|
+
}, cliVer);
|
|
134
|
+
const updatedDocs = updateProjectDocs(cwd);
|
|
135
|
+
return updatedDocs;
|
|
136
|
+
}
|
|
137
|
+
export async function runDownload(scan, opts, prompt) {
|
|
93
138
|
const cwd = opts.cwd ?? process.cwd();
|
|
94
139
|
const runner = opts.runner ?? defaultRunner;
|
|
95
140
|
if (!scan.installed) {
|
|
@@ -113,15 +158,27 @@ async function runDownload(scan, opts, prompt) {
|
|
|
113
158
|
inherit: true,
|
|
114
159
|
timeoutMs: 600_000,
|
|
115
160
|
});
|
|
116
|
-
if (result.ok)
|
|
161
|
+
if (result.ok) {
|
|
162
|
+
const updatedDocs = await recordUpdateAndDocs(cwd, scan);
|
|
163
|
+
if (updatedDocs.length > 0) {
|
|
164
|
+
prompt.success(`Documentação do projeto atualizada: ${updatedDocs.join(', ')}`);
|
|
165
|
+
}
|
|
117
166
|
return 0;
|
|
167
|
+
}
|
|
118
168
|
// host sem bun: o npm faz o mesmo trabalho, só mais devagar
|
|
119
169
|
const npm = runner('npm', ['install', ...specs], {
|
|
120
170
|
cwd,
|
|
121
171
|
inherit: true,
|
|
122
172
|
timeoutMs: 600_000,
|
|
123
173
|
});
|
|
124
|
-
|
|
174
|
+
if (npm.ok) {
|
|
175
|
+
const updatedDocs = await recordUpdateAndDocs(cwd, scan);
|
|
176
|
+
if (updatedDocs.length > 0) {
|
|
177
|
+
prompt.success(`Documentação do projeto atualizada: ${updatedDocs.join(', ')}`);
|
|
178
|
+
}
|
|
179
|
+
return 0;
|
|
180
|
+
}
|
|
181
|
+
return 1;
|
|
125
182
|
}
|
|
126
183
|
export async function runUpdate(opts = {}) {
|
|
127
184
|
const prompt = opts.prompt ?? new Prompt();
|
|
@@ -199,6 +256,12 @@ export async function runUpdate(opts = {}) {
|
|
|
199
256
|
log: (message) => prompt.write(`${message}\n`),
|
|
200
257
|
warn: (message) => prompt.write(`${message}\n`),
|
|
201
258
|
});
|
|
259
|
+
if (result.ok) {
|
|
260
|
+
const updatedDocs = await recordDeployAndDocs(opts.cwd ?? process.cwd(), scan, result.lane, result.previousLane);
|
|
261
|
+
if (updatedDocs.length > 0) {
|
|
262
|
+
prompt.success(`Documentação do projeto atualizada: ${updatedDocs.join(', ')}`);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
202
265
|
return result.ok ? 0 : 1;
|
|
203
266
|
}
|
|
204
267
|
finally {
|
package/dist/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,gCAAgC;AAChC,EAAE;AACF,kEAAkE;AAClE,6EAA6E;AAC7E,0EAA0E;AAC1E,uDAAuD;AACvD,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,uEAAuE;AACvE,+DAA+D;AAC/D,EAAE;AACF,0EAA0E;AAC1E,qBAAqB;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|