@oktis-works/cms 0.1.13 → 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.
- package/dist/assets.d.ts +94 -0
- package/dist/assets.d.ts.map +1 -0
- package/dist/assets.js +671 -0
- package/dist/assets.js.map +1 -0
- package/dist/bluegreen.d.ts +121 -0
- package/dist/bluegreen.d.ts.map +1 -0
- package/dist/bluegreen.js +393 -0
- package/dist/bluegreen.js.map +1 -0
- package/dist/commands.d.ts +6 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +116 -61
- package/dist/commands.js.map +1 -1
- package/dist/config-wizard.d.ts +39 -0
- package/dist/config-wizard.d.ts.map +1 -0
- package/dist/config-wizard.js +308 -0
- package/dist/config-wizard.js.map +1 -0
- package/dist/docker.d.ts +148 -0
- package/dist/docker.d.ts.map +1 -0
- package/dist/docker.js +324 -0
- package/dist/docker.js.map +1 -0
- package/dist/doctor.d.ts +2 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +51 -0
- package/dist/doctor.js.map +1 -1
- package/dist/env-file.d.ts +45 -0
- package/dist/env-file.d.ts.map +1 -0
- package/dist/env-file.js +200 -0
- package/dist/env-file.js.map +1 -0
- package/dist/env-schema.d.ts +28 -0
- package/dist/env-schema.d.ts.map +1 -0
- package/dist/env-schema.js +497 -0
- package/dist/env-schema.js.map +1 -0
- package/dist/guards.d.ts +40 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +159 -0
- package/dist/guards.js.map +1 -0
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +12 -3
- package/dist/parser.js.map +1 -1
- package/dist/project-config.js +2 -2
- package/dist/prompt.d.ts +81 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +379 -0
- package/dist/prompt.js.map +1 -0
- package/dist/redeploy.d.ts +109 -0
- package/dist/redeploy.d.ts.map +1 -0
- package/dist/redeploy.js +363 -0
- package/dist/redeploy.js.map +1 -0
- package/dist/scaffold-docs.d.ts +25 -6
- package/dist/scaffold-docs.d.ts.map +1 -1
- package/dist/scaffold-docs.js +711 -33
- package/dist/scaffold-docs.js.map +1 -1
- package/dist/scaffold.d.ts +17 -1
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +77 -14
- package/dist/scaffold.js.map +1 -1
- package/dist/theme-build.d.ts +35 -0
- package/dist/theme-build.d.ts.map +1 -0
- package/dist/theme-build.js +86 -0
- package/dist/theme-build.js.map +1 -0
- package/dist/update.d.ts +51 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +210 -0
- package/dist/update.js.map +1 -0
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold-docs.js","sourceRoot":"","sources":["../src/scaffold-docs.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,wEAAwE;AACxE,gFAAgF;
|
|
1
|
+
{"version":3,"file":"scaffold-docs.js","sourceRoot":"","sources":["../src/scaffold-docs.ts"],"names":[],"mappings":"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"}
|
package/dist/scaffold.d.ts
CHANGED
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import type { DocsLang } from './scaffold-docs.js';
|
|
2
3
|
/** Normaliza o nome do projeto para um npm name válido (slug). */
|
|
3
4
|
export declare function toPackageName(name: string): string;
|
|
4
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Range que o projeto usa para os 5 pacotes do OkCMS (4 apps + a própria CLI).
|
|
7
|
+
*
|
|
8
|
+
* Por que não `^0.2.0` (o minor da CLI):
|
|
9
|
+
* `^0.2.0` em 0.x é `>=0.2.0 <0.3.0` — se os apps ainda não foram publicados
|
|
10
|
+
* nesse minor (mudanças no `ignore` do changeset, como admin/web, podem ficar
|
|
11
|
+
* um release atrás), o `bun install` do scaffold cai em ETARGET. Foi
|
|
12
|
+
* exatamente esse o bug de 0.1.14 → 0.2.0.
|
|
13
|
+
*
|
|
14
|
+
* A janela é de DOIS minors em 0.x — para cima e para baixo — então o npm/bun
|
|
15
|
+
* sempre acha a versão mais nova publicada dentro dela. Como os cinco
|
|
16
|
+
* pacotes compartilham o MESMO range, eles também ficam consistentes entre si.
|
|
17
|
+
* A partir de 1.x vira `^MAJOR.0.0` (compatibilidade semântica madura).
|
|
18
|
+
*/
|
|
19
|
+
export declare function appRangeFor(cliVersion: string): string;
|
|
20
|
+
export declare function scaffoldProject(targetDir: string, name: string, lang?: DocsLang): Promise<string>;
|
|
5
21
|
export interface InstallResult {
|
|
6
22
|
ok: boolean;
|
|
7
23
|
tool: string;
|
package/dist/scaffold.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAQ/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAWtD;AAoBD,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,QAA4B,GACjC,OAAO,CAAC,MAAM,CAAC,CAwLjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,SAAS,CAAA;CAAO,GACzC,aAAa,CAmBf"}
|
package/dist/scaffold.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
// @oktis-works/cms - Project Scaffolding
|
|
2
2
|
import { spawnSync } from 'node:child_process';
|
|
3
|
-
import { mkdir, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
4
4
|
import { existsSync } from 'node:fs';
|
|
5
5
|
import { join, resolve } from 'node:path';
|
|
6
6
|
import { defaultProjectConfig, DEFAULT_CONFIG_FILENAME } from './project-config.js';
|
|
7
|
+
import { DEPLOY_GITIGNORE } from './assets.js';
|
|
8
|
+
import { writeDeployAssets } from './bluegreen.js';
|
|
9
|
+
import { DEFAULT_DOCS_LANG, docsLangLabel, pluginDoc, projectReadme, themeDoc } from './scaffold-docs.js';
|
|
7
10
|
/** Normaliza o nome do projeto para um npm name válido (slug). */
|
|
8
11
|
export function toPackageName(name) {
|
|
9
12
|
const slug = name
|
|
@@ -12,7 +15,51 @@ export function toPackageName(name) {
|
|
|
12
15
|
.replace(/^[-.]+|[-.]+$/g, '');
|
|
13
16
|
return slug.length > 0 ? slug : 'okcms-project';
|
|
14
17
|
}
|
|
15
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Range que o projeto usa para os 5 pacotes do OkCMS (4 apps + a própria CLI).
|
|
20
|
+
*
|
|
21
|
+
* Por que não `^0.2.0` (o minor da CLI):
|
|
22
|
+
* `^0.2.0` em 0.x é `>=0.2.0 <0.3.0` — se os apps ainda não foram publicados
|
|
23
|
+
* nesse minor (mudanças no `ignore` do changeset, como admin/web, podem ficar
|
|
24
|
+
* um release atrás), o `bun install` do scaffold cai em ETARGET. Foi
|
|
25
|
+
* exatamente esse o bug de 0.1.14 → 0.2.0.
|
|
26
|
+
*
|
|
27
|
+
* A janela é de DOIS minors em 0.x — para cima e para baixo — então o npm/bun
|
|
28
|
+
* sempre acha a versão mais nova publicada dentro dela. Como os cinco
|
|
29
|
+
* pacotes compartilham o MESMO range, eles também ficam consistentes entre si.
|
|
30
|
+
* A partir de 1.x vira `^MAJOR.0.0` (compatibilidade semântica madura).
|
|
31
|
+
*/
|
|
32
|
+
export function appRangeFor(cliVersion) {
|
|
33
|
+
const [rawMajor, rawMinor] = cliVersion.split('.');
|
|
34
|
+
const major = Number(rawMajor);
|
|
35
|
+
const minor = Number(rawMinor);
|
|
36
|
+
if (!Number.isInteger(major) || !Number.isInteger(minor) || major < 0 || minor < 0) {
|
|
37
|
+
// versão ilegível → cai no comportamento histórico em vez de quebrar o init
|
|
38
|
+
return `^${cliVersion}`;
|
|
39
|
+
}
|
|
40
|
+
if (major > 0)
|
|
41
|
+
return `>=${major}.0.0 <${major + 1}.0.0`;
|
|
42
|
+
const lower = minor > 0 ? minor - 1 : 0;
|
|
43
|
+
return `>=0.${lower}.0 <0.${minor + 1}.0`;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Acrescenta ao `.gitignore` do projeto só o que ainda não está lá.
|
|
47
|
+
*
|
|
48
|
+
* `okcms init` pode rodar num diretório que o operador já versionou — reescrever
|
|
49
|
+
* o arquivo apagaria as regras dele. Por isso é merge, sempre.
|
|
50
|
+
*/
|
|
51
|
+
async function mergeGitignore(root, entries) {
|
|
52
|
+
const path = join(root, '.gitignore');
|
|
53
|
+
const current = existsSync(path) ? await readFile(path, 'utf-8') : '';
|
|
54
|
+
const present = new Set(current.split(/\r?\n/).map((line) => line.trim()));
|
|
55
|
+
const missing = entries.filter((entry) => !present.has(entry));
|
|
56
|
+
if (missing.length === 0)
|
|
57
|
+
return;
|
|
58
|
+
const body = current.length === 0 ? '' : `${current.replace(/\s+$/, '')}\n\n`;
|
|
59
|
+
const header = current.length === 0 ? '# OkCMS\n' : '# okcms init\n';
|
|
60
|
+
await writeFile(`${path}`, `${body}${header}${missing.join('\n')}\n`, 'utf-8');
|
|
61
|
+
}
|
|
62
|
+
export async function scaffoldProject(targetDir, name, lang = DEFAULT_DOCS_LANG) {
|
|
16
63
|
const root = resolve(process.cwd(), targetDir);
|
|
17
64
|
console.log(`Criando projeto "${name}" em ${root}...`);
|
|
18
65
|
await mkdir(join(root, 'themes'), { recursive: true });
|
|
@@ -20,16 +67,13 @@ export async function scaffoldProject(targetDir, name) {
|
|
|
20
67
|
await mkdir(join(root, 'migrations'), { recursive: true });
|
|
21
68
|
const config = defaultProjectConfig(name);
|
|
22
69
|
await writeFile(join(root, DEFAULT_CONFIG_FILENAME), JSON.stringify(config, null, 2), 'utf-8');
|
|
23
|
-
// package.json do projeto — apps do OkCMS como dependências
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
// o install (ETARGET) sempre que CLI e apps não forem publicados juntos.
|
|
27
|
-
// Assim o `bunx` dos apps resolve local, `okcms update` enxerga
|
|
28
|
-
// node_modules/@oktis-works/* e tudo funciona sem configuração manual.
|
|
70
|
+
// package.json do projeto — apps do OkCMS como dependências. O range vem de
|
|
71
|
+
// `appRangeFor` (janela de dois minors em 0.x) e NUNCA é a versão exata do
|
|
72
|
+
// CLI; ver a documentação dessa função para o histórico do ETARGET.
|
|
29
73
|
// Não sobrescreve manifest existente.
|
|
30
74
|
const cliPkg = await import('../package.json', { with: { type: 'json' } });
|
|
31
75
|
const cliVersion = cliPkg.default.version;
|
|
32
|
-
const appRange =
|
|
76
|
+
const appRange = appRangeFor(cliVersion);
|
|
33
77
|
const manifestPath = join(root, 'package.json');
|
|
34
78
|
if (!existsSync(manifestPath)) {
|
|
35
79
|
const manifest = {
|
|
@@ -133,22 +177,41 @@ volumes:
|
|
|
133
177
|
redisdata:
|
|
134
178
|
`;
|
|
135
179
|
await writeFile(join(root, 'docker-compose.yml'), compose, 'utf-8');
|
|
180
|
+
// --- deploy Docker (blue/green) ------------------------------------------
|
|
181
|
+
// Escrito no init, não no primeiro deploy: o projeto nasce com a estrutura
|
|
182
|
+
// completa (imagem única, infra, lanes, template do nginx) e o operador vê
|
|
183
|
+
// tudo no git desde o primeiro commit. `writeDeployAssets` não sobrescreve
|
|
184
|
+
// nada — um re-init de projeto já configurado é no-op aqui.
|
|
185
|
+
const deployCreated = writeDeployAssets(root, 'blue', {
|
|
186
|
+
PORT: String(config.ports.api),
|
|
187
|
+
WEB_PORT: String(config.ports.web),
|
|
188
|
+
ADMIN_PORT: String(config.ports.admin),
|
|
189
|
+
});
|
|
190
|
+
await mergeGitignore(root, ['.env', 'node_modules/', 'dist/', ...DEPLOY_GITIGNORE]);
|
|
136
191
|
// Documentação do projeto — só escreve se não existir (não sobrescreve
|
|
137
|
-
// README editado pelo usuário em re-init).
|
|
138
|
-
|
|
192
|
+
// README editado pelo usuário em re-init). A língua (en/pt) vem do `--lang`
|
|
193
|
+
// ou do menu do init; o nome do arquivo é sempre o mesmo.
|
|
194
|
+
let docsWritten = 0;
|
|
139
195
|
for (const [filename, content] of [
|
|
140
|
-
['README.md', projectReadme(name)],
|
|
141
|
-
['PLUGIN.md',
|
|
142
|
-
['THEME.md',
|
|
196
|
+
['README.md', projectReadme(name, lang)],
|
|
197
|
+
['PLUGIN.md', pluginDoc(lang)],
|
|
198
|
+
['THEME.md', themeDoc(lang)],
|
|
143
199
|
]) {
|
|
144
200
|
const docPath = join(root, filename);
|
|
145
201
|
if (!existsSync(docPath)) {
|
|
146
202
|
await writeFile(docPath, content, 'utf-8');
|
|
203
|
+
docsWritten += 1;
|
|
147
204
|
}
|
|
148
205
|
}
|
|
206
|
+
if (docsWritten > 0) {
|
|
207
|
+
console.log(`Documentação gerada em ${docsLangLabel(lang)}: ${docsWritten} arquivo(s)`);
|
|
208
|
+
}
|
|
149
209
|
const relTarget = targetDir === '.' ? null : targetDir;
|
|
150
210
|
const cfgName = DEFAULT_CONFIG_FILENAME;
|
|
151
211
|
console.log(`Projeto "${name}" criado em ${root}`);
|
|
212
|
+
if (deployCreated.length > 0) {
|
|
213
|
+
console.log(`Arquivos de deploy Docker criados: ${deployCreated.join(', ')}`);
|
|
214
|
+
}
|
|
152
215
|
console.log('Próximos passos:');
|
|
153
216
|
let step = 1;
|
|
154
217
|
if (relTarget !== null) {
|
package/dist/scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { resolveStyleEngine } from '@oktis-works/theme-runtime';
|
|
2
|
+
/** Manifesto cru: quem valida de verdade é o theme-runtime. */
|
|
3
|
+
export declare function readThemeManifest(path: string): any | null;
|
|
4
|
+
/**
|
|
5
|
+
* `theme.json` é o canônico (ThemeLoader); `manifest.json` é aceito como
|
|
6
|
+
* fallback para temas antigos que nasceram com esse nome.
|
|
7
|
+
*/
|
|
8
|
+
export declare function themeManifestPath(themesDir: string, theme: string): string | null;
|
|
9
|
+
export interface ThemeStyleResolution {
|
|
10
|
+
manifestPath: string;
|
|
11
|
+
manifest: any;
|
|
12
|
+
report: ReturnType<typeof resolveStyleEngine>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Lê o manifesto (qualquer um dos dois nomes) e resolve engine/entrada/saída.
|
|
16
|
+
* `null` = arquivo ausente ou JSON inválido.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveThemeStyle(themesDir: string, theme: string): ThemeStyleResolution | null;
|
|
19
|
+
export interface ThemeBuildOutcome {
|
|
20
|
+
theme: string;
|
|
21
|
+
engine: string;
|
|
22
|
+
output: string;
|
|
23
|
+
bytes: number;
|
|
24
|
+
isolated: boolean;
|
|
25
|
+
entry: string | null;
|
|
26
|
+
warnings: string[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Compila o tema e grava `dist/theme.css`.
|
|
30
|
+
*
|
|
31
|
+
* Lança (em vez de `process.exit`) para o chamador decidir: o `theme:build`
|
|
32
|
+
* avulso imprime e sai com 1; o redeploy aborta ANTES de tocar no Docker.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildThemeStylesOnDisk(themesDir: string, themeName: string): Promise<ThemeBuildOutcome>;
|
|
35
|
+
//# sourceMappingURL=theme-build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-build.d.ts","sourceRoot":"","sources":["../src/theme-build.ts"],"names":[],"mappings":"AAYA,OAAO,EAAoB,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAElF,+DAA+D;AAC/D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAQ1D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMjF;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,GAAG,CAAC;IACd,MAAM,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;CAC/C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAU/F;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,CAAC,CAgC5B"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// @oktis-works/cms - Build de estilo de tema (compartilhado por theme:build e redeploy)
|
|
2
|
+
//
|
|
3
|
+
// `themes/<n>/dist/theme.css` é lido PRONTO pelo web (`/themes/<tema>/dist/
|
|
4
|
+
// theme.css`) — ninguém compila SCSS/Tailwind dentro do container. Então o
|
|
5
|
+
// build roda no host, e o artefato só chega na imagem no rebuild. É exatamente
|
|
6
|
+
// isso que o `okcms redeploy` orquestra; este módulo é a parte "compilar um
|
|
7
|
+
// tema", usada pelo comando avulso e pelo redeploy, para não existirem dois
|
|
8
|
+
// caminhos ligeiramente diferentes do mesmo pipeline.
|
|
9
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
10
|
+
import { dirname, isAbsolute, join } from 'node:path';
|
|
11
|
+
import { buildThemeStyles, resolveStyleEngine } from '@oktis-works/theme-runtime';
|
|
12
|
+
/** Manifesto cru: quem valida de verdade é o theme-runtime. */
|
|
13
|
+
export function readThemeManifest(path) {
|
|
14
|
+
if (!existsSync(path))
|
|
15
|
+
return null;
|
|
16
|
+
try {
|
|
17
|
+
const parsed = JSON.parse(readFileSync(path, 'utf-8'));
|
|
18
|
+
return parsed && typeof parsed === 'object' ? parsed : null;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* `theme.json` é o canônico (ThemeLoader); `manifest.json` é aceito como
|
|
26
|
+
* fallback para temas antigos que nasceram com esse nome.
|
|
27
|
+
*/
|
|
28
|
+
export function themeManifestPath(themesDir, theme) {
|
|
29
|
+
for (const file of ['theme.json', 'manifest.json']) {
|
|
30
|
+
const path = join(themesDir, theme, file);
|
|
31
|
+
if (existsSync(path))
|
|
32
|
+
return path;
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Lê o manifesto (qualquer um dos dois nomes) e resolve engine/entrada/saída.
|
|
38
|
+
* `null` = arquivo ausente ou JSON inválido.
|
|
39
|
+
*/
|
|
40
|
+
export function resolveThemeStyle(themesDir, theme) {
|
|
41
|
+
const manifestPath = themeManifestPath(themesDir, theme);
|
|
42
|
+
if (!manifestPath)
|
|
43
|
+
return null;
|
|
44
|
+
const manifest = readThemeManifest(manifestPath);
|
|
45
|
+
if (!manifest)
|
|
46
|
+
return null;
|
|
47
|
+
return {
|
|
48
|
+
manifestPath,
|
|
49
|
+
manifest,
|
|
50
|
+
report: resolveStyleEngine({ themesRoot: themesDir, themeName: theme, manifest }),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Compila o tema e grava `dist/theme.css`.
|
|
55
|
+
*
|
|
56
|
+
* Lança (em vez de `process.exit`) para o chamador decidir: o `theme:build`
|
|
57
|
+
* avulso imprime e sai com 1; o redeploy aborta ANTES de tocar no Docker.
|
|
58
|
+
*/
|
|
59
|
+
export async function buildThemeStylesOnDisk(themesDir, themeName) {
|
|
60
|
+
const manifestPath = themeManifestPath(themesDir, themeName);
|
|
61
|
+
if (!manifestPath) {
|
|
62
|
+
throw new Error(`manifesto do tema não encontrado em ${join(themesDir, themeName)} (theme.json)`);
|
|
63
|
+
}
|
|
64
|
+
const manifest = readThemeManifest(manifestPath);
|
|
65
|
+
if (!manifest) {
|
|
66
|
+
throw new Error(`manifesto inválido (JSON): ${manifestPath}`);
|
|
67
|
+
}
|
|
68
|
+
const { css, report } = await buildThemeStyles({ themesRoot: themesDir, themeName, manifest });
|
|
69
|
+
// `output` vem do manifesto: nunca escrever fora do diretório do tema.
|
|
70
|
+
if (report.output.includes('..') || isAbsolute(report.output)) {
|
|
71
|
+
throw new Error(`stylesConfig.output inválido em ${manifestPath}: ${report.output}`);
|
|
72
|
+
}
|
|
73
|
+
const target = join(themesDir, themeName, report.output);
|
|
74
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
75
|
+
writeFileSync(target, css, 'utf-8');
|
|
76
|
+
return {
|
|
77
|
+
theme: themeName,
|
|
78
|
+
engine: report.engine,
|
|
79
|
+
output: report.output,
|
|
80
|
+
bytes: Buffer.byteLength(css, 'utf-8'),
|
|
81
|
+
isolated: report.isolated,
|
|
82
|
+
entry: report.entry,
|
|
83
|
+
warnings: report.warnings,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=theme-build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-build.js","sourceRoot":"","sources":["../src/theme-build.ts"],"names":[],"mappings":"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"}
|
package/dist/update.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type DeployChoices } from './bluegreen.js';
|
|
2
|
+
import { type Runner } from './docker.js';
|
|
3
|
+
import { type ContainerProbe } from './guards.js';
|
|
4
|
+
import { Prompt } from './prompt.js';
|
|
5
|
+
export type UpdateMode = 'download' | 'deploy';
|
|
6
|
+
export interface OutdatedEntry {
|
|
7
|
+
/** nome curto do pacote (`api`), como aparece em node_modules. */
|
|
8
|
+
name: string;
|
|
9
|
+
/** nome publicado (`@oktis-works/api`). */
|
|
10
|
+
pkg: string;
|
|
11
|
+
current: string;
|
|
12
|
+
latest: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ScanResult {
|
|
15
|
+
/** false = não existe `node_modules/@oktis-works` (projeto nunca instalou). */
|
|
16
|
+
installed: boolean;
|
|
17
|
+
outdated: OutdatedEntry[];
|
|
18
|
+
}
|
|
19
|
+
export interface UpdateOptions {
|
|
20
|
+
cwd?: string;
|
|
21
|
+
/** `--install`: aplica as atualizações no modo download. */
|
|
22
|
+
install?: boolean;
|
|
23
|
+
/** `--mode download|deploy` (aliases abaixo); ausente = menu/default. */
|
|
24
|
+
mode?: string;
|
|
25
|
+
/** `--no-cache`: build limpo. */
|
|
26
|
+
noCache?: boolean;
|
|
27
|
+
/** `--remove-orphans` / `--keep-orphans`. */
|
|
28
|
+
removeOrphans?: boolean;
|
|
29
|
+
keepOrphans?: boolean;
|
|
30
|
+
/** `--yes`: nenhum prompt, tudo em default. */
|
|
31
|
+
yes?: boolean;
|
|
32
|
+
/** `--force`: permite rodar dentro de container (não recomendado). */
|
|
33
|
+
force?: boolean;
|
|
34
|
+
/** Sonda do `assertHostOnly` (testes); em produção usa a detecção real. */
|
|
35
|
+
probe?: ContainerProbe;
|
|
36
|
+
runner?: Runner;
|
|
37
|
+
prompt?: Prompt;
|
|
38
|
+
log?: (message: string) => void;
|
|
39
|
+
}
|
|
40
|
+
/** `null` = valor inválido (diferente de "não informado"). */
|
|
41
|
+
export declare function parseMode(value: string): UpdateMode | null;
|
|
42
|
+
/**
|
|
43
|
+
* Varre `node_modules/@oktis-works/*` e compara cada versão instalada com a
|
|
44
|
+
* do registry. Falha de rede num pacote não derruba a varredura: ele fica de
|
|
45
|
+
* fora e o operador vê `?` na próxima rodada.
|
|
46
|
+
*/
|
|
47
|
+
export declare function scanOutdated(cwd: string, log?: (message: string) => void): Promise<ScanResult>;
|
|
48
|
+
/** Flags > prompt. Fora de TTY, defaults conservadores e determinísticos. */
|
|
49
|
+
export declare function resolveDeployChoices(opts: Pick<UpdateOptions, 'noCache' | 'removeOrphans' | 'keepOrphans' | 'yes'>, prompt: Prompt): Promise<DeployChoices>;
|
|
50
|
+
export declare function runUpdate(opts?: UpdateOptions): Promise<number>;
|
|
51
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAoBA,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;AAEpD,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;AA6CD,wBAAsB,SAAS,CAAC,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwFzE"}
|
package/dist/update.js
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
// @oktis-works/cms - `okcms update` (F3)
|
|
2
|
+
//
|
|
3
|
+
// Dois caminhos, um só comando:
|
|
4
|
+
//
|
|
5
|
+
// download baixa/atualiza os pacotes @oktis-works no host. É o
|
|
6
|
+
// comportamento histórico (`okcms update -i`) e continua sendo o
|
|
7
|
+
// default em não-TTY — script nenhum passa a fazer deploy por
|
|
8
|
+
// acidente só porque a CLI ganhou um menu.
|
|
9
|
+
//
|
|
10
|
+
// deploy sobe a aplicação em Docker com troca blue/green: pacotes no
|
|
11
|
+
// host → build → migrations → edge da lane nova → healthcheck →
|
|
12
|
+
// swap do nginx → dreno do worker → derruba a lane antiga.
|
|
13
|
+
// A CLI roda no HOST, sempre (ver assertHostOnly).
|
|
14
|
+
//
|
|
15
|
+
// A escolha entre os dois é o menu de TTY; fora de TTY vale `--mode` ou o
|
|
16
|
+
// default histórico.
|
|
17
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
18
|
+
import { join } from 'node:path';
|
|
19
|
+
import { deployBlueGreen } from './bluegreen.js';
|
|
20
|
+
import { defaultRunner } from './docker.js';
|
|
21
|
+
import { assertHostOnly } from './guards.js';
|
|
22
|
+
import { getLatestVersion } from './npm-registry.js';
|
|
23
|
+
import { Prompt, style, symbol } from './prompt.js';
|
|
24
|
+
const MODE_ALIASES = {
|
|
25
|
+
download: 'download',
|
|
26
|
+
pkg: 'download',
|
|
27
|
+
packages: 'download',
|
|
28
|
+
pacotes: 'download',
|
|
29
|
+
deploy: 'deploy',
|
|
30
|
+
docker: 'deploy',
|
|
31
|
+
bluegreen: 'deploy',
|
|
32
|
+
'blue-green': 'deploy',
|
|
33
|
+
'blue_green': 'deploy',
|
|
34
|
+
};
|
|
35
|
+
/** `null` = valor inválido (diferente de "não informado"). */
|
|
36
|
+
export function parseMode(value) {
|
|
37
|
+
return MODE_ALIASES[value.trim().toLowerCase()] ?? null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Varre `node_modules/@oktis-works/*` e compara cada versão instalada com a
|
|
41
|
+
* do registry. Falha de rede num pacote não derruba a varredura: ele fica de
|
|
42
|
+
* fora e o operador vê `?` na próxima rodada.
|
|
43
|
+
*/
|
|
44
|
+
export async function scanOutdated(cwd, log = console.log) {
|
|
45
|
+
const nmDir = join(cwd, 'node_modules', '@oktis-works');
|
|
46
|
+
if (!existsSync(nmDir))
|
|
47
|
+
return { installed: false, outdated: [] };
|
|
48
|
+
const installed = readdirSync(nmDir, { withFileTypes: true })
|
|
49
|
+
.filter((entry) => entry.isDirectory())
|
|
50
|
+
.map((entry) => entry.name);
|
|
51
|
+
const outdated = [];
|
|
52
|
+
for (const name of installed) {
|
|
53
|
+
let current = '?';
|
|
54
|
+
try {
|
|
55
|
+
const pkgJson = JSON.parse(readFileSync(join(nmDir, name, 'package.json'), 'utf-8'));
|
|
56
|
+
current = pkgJson.version ?? '?';
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// sem package.json legível — tratado como desconhecido abaixo
|
|
60
|
+
}
|
|
61
|
+
const latest = await getLatestVersion(`@oktis-works/${name}`);
|
|
62
|
+
if (!latest || latest === current) {
|
|
63
|
+
log(` ✓ @oktis-works/${name} ${current} (em dia)`);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
log(` ↑ @oktis-works/${name} ${current} → ${latest} disponível`);
|
|
67
|
+
outdated.push({ name, pkg: `@oktis-works/${name}`, current, latest });
|
|
68
|
+
}
|
|
69
|
+
return { installed: true, outdated };
|
|
70
|
+
}
|
|
71
|
+
/** Flags > prompt. Fora de TTY, defaults conservadores e determinísticos. */
|
|
72
|
+
export async function resolveDeployChoices(opts, prompt) {
|
|
73
|
+
const interactive = prompt.interactive && opts.yes !== true;
|
|
74
|
+
const noCache = opts.noCache === true
|
|
75
|
+
? true
|
|
76
|
+
: interactive
|
|
77
|
+
? !(await prompt.confirm('Build com cache de camadas? (não = rebuild limpo, mais lento)', {
|
|
78
|
+
defaultValue: true,
|
|
79
|
+
}))
|
|
80
|
+
: false;
|
|
81
|
+
const removeOrphans = opts.keepOrphans === true
|
|
82
|
+
? false
|
|
83
|
+
: opts.removeOrphans === true
|
|
84
|
+
? true
|
|
85
|
+
: interactive
|
|
86
|
+
? await prompt.confirm('Remover contêineres órfãos da lane antiga?', {
|
|
87
|
+
defaultValue: true,
|
|
88
|
+
})
|
|
89
|
+
: true;
|
|
90
|
+
return { noCache, removeOrphans };
|
|
91
|
+
}
|
|
92
|
+
async function runDownload(scan, opts, prompt) {
|
|
93
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
94
|
+
const runner = opts.runner ?? defaultRunner;
|
|
95
|
+
if (!scan.installed) {
|
|
96
|
+
console.error('Nenhum pacote @oktis-works/* instalado em node_modules.');
|
|
97
|
+
console.error('Rode `bun install` (ou `okcms init`) antes de atualizar.');
|
|
98
|
+
return 1;
|
|
99
|
+
}
|
|
100
|
+
if (scan.outdated.length === 0) {
|
|
101
|
+
prompt.success('Todos os pacotes estão em dia.');
|
|
102
|
+
return 0;
|
|
103
|
+
}
|
|
104
|
+
if (opts.install !== true) {
|
|
105
|
+
prompt.info('Use --install para atualizar automaticamente.');
|
|
106
|
+
prompt.info('Ou --mode deploy para um deploy Docker blue/green completo.');
|
|
107
|
+
return 0;
|
|
108
|
+
}
|
|
109
|
+
prompt.write('\nAtualizando...\n');
|
|
110
|
+
const specs = scan.outdated.map((entry) => `${entry.pkg}@latest`);
|
|
111
|
+
const result = runner('bun', ['add', ...specs], {
|
|
112
|
+
cwd,
|
|
113
|
+
inherit: true,
|
|
114
|
+
timeoutMs: 600_000,
|
|
115
|
+
});
|
|
116
|
+
if (result.ok)
|
|
117
|
+
return 0;
|
|
118
|
+
// host sem bun: o npm faz o mesmo trabalho, só mais devagar
|
|
119
|
+
const npm = runner('npm', ['install', ...specs], {
|
|
120
|
+
cwd,
|
|
121
|
+
inherit: true,
|
|
122
|
+
timeoutMs: 600_000,
|
|
123
|
+
});
|
|
124
|
+
return npm.ok ? 0 : 1;
|
|
125
|
+
}
|
|
126
|
+
export async function runUpdate(opts = {}) {
|
|
127
|
+
const prompt = opts.prompt ?? new Prompt();
|
|
128
|
+
const ownsPrompt = opts.prompt === undefined;
|
|
129
|
+
// A CLI de deploy/config só existe no host: dentro de um container ela
|
|
130
|
+
// viraria um instalador de pacotes na rede do banco, com .env exposto.
|
|
131
|
+
const guard = assertHostOnly('okcms update', { force: opts.force, probe: opts.probe });
|
|
132
|
+
if (!guard.ok) {
|
|
133
|
+
console.error(guard.message);
|
|
134
|
+
if (ownsPrompt)
|
|
135
|
+
prompt.close();
|
|
136
|
+
return 1;
|
|
137
|
+
}
|
|
138
|
+
const onInterrupt = () => {
|
|
139
|
+
prompt.write(`\n ${style.yellow(symbol.warn)} interrompido — nenhum passo de deploy em andamento foi registrado.\n`);
|
|
140
|
+
process.exit(130);
|
|
141
|
+
};
|
|
142
|
+
process.once('SIGINT', onInterrupt);
|
|
143
|
+
try {
|
|
144
|
+
// ---- 1. modo ----------------------------------------------------------
|
|
145
|
+
let mode;
|
|
146
|
+
if (opts.mode !== undefined) {
|
|
147
|
+
const parsed = parseMode(opts.mode);
|
|
148
|
+
if (parsed === null) {
|
|
149
|
+
prompt.error(`--mode inválido: ${opts.mode} — use "download" ou "deploy"`);
|
|
150
|
+
return 1;
|
|
151
|
+
}
|
|
152
|
+
mode = parsed;
|
|
153
|
+
}
|
|
154
|
+
else if (prompt.interactive && opts.yes !== true) {
|
|
155
|
+
mode = await prompt.select('O que o update deve fazer?', [
|
|
156
|
+
{
|
|
157
|
+
value: 'download',
|
|
158
|
+
label: 'Só baixar pacotes',
|
|
159
|
+
hint: 'node_modules atualizado · nada sobe no Docker',
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
value: 'deploy',
|
|
163
|
+
label: 'Deploy Docker blue/green completo',
|
|
164
|
+
hint: 'build · migrations · swap de lane · worker drenado',
|
|
165
|
+
},
|
|
166
|
+
], { defaultValue: 'download' });
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
// não-TTY sem --mode = comportamento histórico, inalterado
|
|
170
|
+
mode = 'download';
|
|
171
|
+
}
|
|
172
|
+
// ---- 2. varredura -----------------------------------------------------
|
|
173
|
+
prompt.heading(`OkCMS update — modo ${mode}`);
|
|
174
|
+
const scan = await scanOutdated(opts.cwd ?? process.cwd(), (message) => prompt.write(`${message}\n`));
|
|
175
|
+
if (mode === 'download')
|
|
176
|
+
return await runDownload(scan, opts, prompt);
|
|
177
|
+
// ---- 3. escolhas do deploy -------------------------------------------
|
|
178
|
+
const choices = await resolveDeployChoices(opts, prompt);
|
|
179
|
+
const interactive = prompt.interactive && opts.yes !== true;
|
|
180
|
+
if (interactive) {
|
|
181
|
+
prompt.heading('Resumo do deploy blue/green');
|
|
182
|
+
prompt.info(`pacotes: ${scan.outdated.length} atualização(ões)`);
|
|
183
|
+
prompt.info(`build: ${choices.noCache ? 'sem cache (rebuild limpo)' : 'com cache de camadas'}`);
|
|
184
|
+
prompt.info(`órfãos da lane antiga: ${choices.removeOrphans ? 'remover' : 'manter'}`);
|
|
185
|
+
prompt.info('ordem: build → migrations no host → edge → health → swap → worker → down');
|
|
186
|
+
const confirmed = await prompt.confirm('Iniciar deploy?', { defaultValue: true });
|
|
187
|
+
if (!confirmed) {
|
|
188
|
+
prompt.warn('cancelado — nada foi executado.');
|
|
189
|
+
return 0;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// ---- 4. deploy --------------------------------------------------------
|
|
193
|
+
const result = await deployBlueGreen({
|
|
194
|
+
cwd: opts.cwd,
|
|
195
|
+
runner: opts.runner,
|
|
196
|
+
choices,
|
|
197
|
+
packages: scan.outdated.map((entry) => `${entry.pkg}@latest`),
|
|
198
|
+
installAll: !scan.installed,
|
|
199
|
+
log: (message) => prompt.write(`${message}\n`),
|
|
200
|
+
warn: (message) => prompt.write(`${message}\n`),
|
|
201
|
+
});
|
|
202
|
+
return result.ok ? 0 : 1;
|
|
203
|
+
}
|
|
204
|
+
finally {
|
|
205
|
+
process.removeListener('SIGINT', onInterrupt);
|
|
206
|
+
if (ownsPrompt)
|
|
207
|
+
prompt.close();
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|