@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.
- 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
package/dist/env-file.js
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
// @oktis-works/cms - Leitor/editor de .env que preserva o arquivo do usuário
|
|
2
|
+
//
|
|
3
|
+
// O `.env` de um projeto é editado à mão: tem comentários, seções, linhas em
|
|
4
|
+
// branco e ordem que o autor escolheu. Regenerar o arquivo a partir de um
|
|
5
|
+
// mapa de chaves (como quase todo "env wizard" faz) destrói isso. Aqui o
|
|
6
|
+
// arquivo é parseado em LINHAS — só a linha da chave muda, o resto passa
|
|
7
|
+
// byte a byte.
|
|
8
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
9
|
+
import { dirname } from 'node:path';
|
|
10
|
+
const ASSIGN_RE = /^([ \t]*(?:export[ \t]+)?)([A-Za-z_][A-Za-z0-9_]*)([ \t]*=[ \t]*)(.*)$/;
|
|
11
|
+
/**
|
|
12
|
+
* Separa `valor # comentário` sem cortar `#` dentro de aspas nem fragmentos
|
|
13
|
+
* de URL (`http://x/#a`) — só considera `#` preceded de espaço ou no início.
|
|
14
|
+
*/
|
|
15
|
+
function splitSuffix(value) {
|
|
16
|
+
let quote = null;
|
|
17
|
+
for (let i = 0; i < value.length; i++) {
|
|
18
|
+
const ch = value[i];
|
|
19
|
+
if (quote) {
|
|
20
|
+
if (ch === quote)
|
|
21
|
+
quote = null;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (ch === '"' || ch === "'") {
|
|
25
|
+
quote = ch;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (ch === '#') {
|
|
29
|
+
const prev = value[i - 1];
|
|
30
|
+
if (i === 0 || prev === ' ' || prev === '\t') {
|
|
31
|
+
// mantém o espaço que separava valor e comentário: o round-trip tem
|
|
32
|
+
// que devolver a linha idêntica (o autor do .env escolheu o alinhamento)
|
|
33
|
+
let start = i;
|
|
34
|
+
while (start > 0 && (value[start - 1] === ' ' || value[start - 1] === '\t'))
|
|
35
|
+
start--;
|
|
36
|
+
return { value: value.slice(0, start), suffix: value.slice(start) };
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return { value, suffix: '' };
|
|
41
|
+
}
|
|
42
|
+
/** Remove aspas externas de um valor dotenv. */
|
|
43
|
+
function unquote(value) {
|
|
44
|
+
const trimmed = value.trim();
|
|
45
|
+
if (trimmed.length >= 2) {
|
|
46
|
+
const first = trimmed[0];
|
|
47
|
+
const last = trimmed[trimmed.length - 1];
|
|
48
|
+
if ((first === '"' && last === '"') || (first === "'" && last === "'")) {
|
|
49
|
+
return trimmed.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return trimmed;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Volta a serializar um valor para o formato dotenv: cru quando não ambíguo,
|
|
56
|
+
* com aspas duplas quando contém espaço, `#`, aspas ou expansão de variável.
|
|
57
|
+
*/
|
|
58
|
+
export function serializeEnvValue(value) {
|
|
59
|
+
if (value === '')
|
|
60
|
+
return '';
|
|
61
|
+
const needsQuotes = /[\s#"'$`\\]/.test(value);
|
|
62
|
+
if (!needsQuotes)
|
|
63
|
+
return value;
|
|
64
|
+
return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
65
|
+
}
|
|
66
|
+
export class EnvFile {
|
|
67
|
+
lines;
|
|
68
|
+
path;
|
|
69
|
+
constructor(text = '', path = null) {
|
|
70
|
+
this.path = path;
|
|
71
|
+
this.lines = text.length > 0 ? text.split(/\r?\n/).map((raw) => parseLine(raw)) : [];
|
|
72
|
+
// um trailing newline final vira linha vazia no split — mantemos para
|
|
73
|
+
// round-trip fiel
|
|
74
|
+
}
|
|
75
|
+
/** Linhas exatamente como estão no disco. */
|
|
76
|
+
toString() {
|
|
77
|
+
return this.lines.map((line) => line.raw).join('\n');
|
|
78
|
+
}
|
|
79
|
+
get(key) {
|
|
80
|
+
const line = this.lines.find((candidate) => candidate.kind === 'assign' && candidate.key === key);
|
|
81
|
+
if (!line?.value)
|
|
82
|
+
return undefined;
|
|
83
|
+
return unquote(line.value);
|
|
84
|
+
}
|
|
85
|
+
/** Valor bruto (com aspas/comentário removidos apenas das pontas). */
|
|
86
|
+
has(key) {
|
|
87
|
+
return this.lines.some((line) => line.kind === 'assign' && line.key === key);
|
|
88
|
+
}
|
|
89
|
+
keys() {
|
|
90
|
+
const seen = new Set();
|
|
91
|
+
for (const line of this.lines) {
|
|
92
|
+
if (line.kind === 'assign' && line.key)
|
|
93
|
+
seen.add(line.key);
|
|
94
|
+
}
|
|
95
|
+
return [...seen];
|
|
96
|
+
}
|
|
97
|
+
/** Todas as chaves → valor (sem aspas). */
|
|
98
|
+
toRecord() {
|
|
99
|
+
const out = {};
|
|
100
|
+
for (const line of this.lines) {
|
|
101
|
+
if (line.kind === 'assign' && line.key)
|
|
102
|
+
out[line.key] = unquote(line.value ?? '');
|
|
103
|
+
}
|
|
104
|
+
return out;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Define/insere uma chave. Na substituição preserva prefixo, separador e
|
|
108
|
+
* comentário final — é o que faz o wizard não "sujar" o arquivo.
|
|
109
|
+
*/
|
|
110
|
+
set(key, value) {
|
|
111
|
+
const serialized = serializeEnvValue(value);
|
|
112
|
+
const existing = this.lines.find((line) => line.kind === 'assign' && line.key === key);
|
|
113
|
+
if (existing) {
|
|
114
|
+
const comment = existing.suffix ? `${serialized}${existing.suffix}` : serialized;
|
|
115
|
+
const next = `${existing.prefix ?? ''}${existing.key ?? ''}${existing.sep ?? '='}${comment}`;
|
|
116
|
+
if (existing.raw === next)
|
|
117
|
+
return false;
|
|
118
|
+
existing.raw = next;
|
|
119
|
+
existing.value = serialized;
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
this.lines.push({
|
|
123
|
+
kind: 'assign',
|
|
124
|
+
raw: `${key}=${serialized}`,
|
|
125
|
+
key,
|
|
126
|
+
value: serialized,
|
|
127
|
+
prefix: '',
|
|
128
|
+
sep: '=',
|
|
129
|
+
suffix: '',
|
|
130
|
+
});
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
/** Remove a linha de uma chave (mantém comentários em volta). */
|
|
134
|
+
delete(key) {
|
|
135
|
+
const before = this.lines.length;
|
|
136
|
+
this.lines = this.lines.filter((line) => !(line.kind === 'assign' && line.key === key));
|
|
137
|
+
return this.lines.length !== before;
|
|
138
|
+
}
|
|
139
|
+
/** Cria a chave abaixo do último comentário de uma seção (`# --- Foo ---`). */
|
|
140
|
+
setInSection(key, value, sectionHint) {
|
|
141
|
+
if (this.has(key))
|
|
142
|
+
return this.set(key, value);
|
|
143
|
+
const hint = sectionHint.toLowerCase();
|
|
144
|
+
let insertAt = -1;
|
|
145
|
+
for (let i = 0; i < this.lines.length; i++) {
|
|
146
|
+
const line = this.lines[i];
|
|
147
|
+
if (line.kind !== 'raw')
|
|
148
|
+
continue;
|
|
149
|
+
const text = line.raw.toLowerCase();
|
|
150
|
+
if (text.includes('#') && text.includes(hint))
|
|
151
|
+
insertAt = i + 1;
|
|
152
|
+
}
|
|
153
|
+
const serialized = serializeEnvValue(value);
|
|
154
|
+
const entry = {
|
|
155
|
+
kind: 'assign',
|
|
156
|
+
raw: `${key}=${serialized}`,
|
|
157
|
+
key,
|
|
158
|
+
value: serialized,
|
|
159
|
+
prefix: '',
|
|
160
|
+
sep: '=',
|
|
161
|
+
suffix: '',
|
|
162
|
+
};
|
|
163
|
+
if (insertAt >= 0)
|
|
164
|
+
this.lines.splice(insertAt, 0, entry);
|
|
165
|
+
else
|
|
166
|
+
this.lines.push(entry);
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
save(path = this.path, mode = 0o600) {
|
|
170
|
+
if (!path)
|
|
171
|
+
throw new Error('EnvFile.save: sem caminho');
|
|
172
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
173
|
+
writeFileSync(path, `${this.toString()}\n`, 'utf-8');
|
|
174
|
+
// .env carrega senha de banco e JWT_SECRET: dono só é o padrão aceitável
|
|
175
|
+
try {
|
|
176
|
+
chmodSync(path, mode);
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
// filesystem sem suporte a chmod (Windows) — não é bloqueante
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function parseLine(raw) {
|
|
184
|
+
const match = ASSIGN_RE.exec(raw);
|
|
185
|
+
if (!match)
|
|
186
|
+
return { kind: 'raw', raw };
|
|
187
|
+
const [, prefix, key, sep, rest] = match;
|
|
188
|
+
const { value, suffix } = splitSuffix(rest);
|
|
189
|
+
return { kind: 'assign', raw, key, prefix, sep, value, suffix };
|
|
190
|
+
}
|
|
191
|
+
export function parseEnv(text) {
|
|
192
|
+
return new EnvFile(text, null);
|
|
193
|
+
}
|
|
194
|
+
/** Lê `.env` (ou `.env.example` como fallback) — nunca lança se não existe. */
|
|
195
|
+
export function loadEnvFile(path) {
|
|
196
|
+
if (!existsSync(path))
|
|
197
|
+
return new EnvFile('', path);
|
|
198
|
+
return new EnvFile(readFileSync(path, 'utf-8'), path);
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=env-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-file.js","sourceRoot":"","sources":["../src/env-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type EnvType = 'string' | 'number' | 'boolean' | 'port' | 'duration' | 'url' | 'database-url' | 'path' | 'enum' | 'secret';
|
|
2
|
+
export interface EnvField {
|
|
3
|
+
key: string;
|
|
4
|
+
section: string;
|
|
5
|
+
label: string;
|
|
6
|
+
description: string;
|
|
7
|
+
type: EnvType;
|
|
8
|
+
default?: string;
|
|
9
|
+
options?: string[];
|
|
10
|
+
required?: boolean;
|
|
11
|
+
/** Mostra o campo só quando a condição é verdadeira (dependências). */
|
|
12
|
+
when?: (record: Record<string, string>) => boolean;
|
|
13
|
+
/** Minibloco de exemplo exibido no prompt. */
|
|
14
|
+
example?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface EnvSection {
|
|
17
|
+
id: string;
|
|
18
|
+
title: string;
|
|
19
|
+
hint: string;
|
|
20
|
+
}
|
|
21
|
+
export declare const ENV_SECTIONS: EnvSection[];
|
|
22
|
+
export declare const ENV_FIELDS: EnvField[];
|
|
23
|
+
/** Mensagem de erro para o prompt, ou null quando o valor é válido. */
|
|
24
|
+
export declare function validateField(field: EnvField, value: string): string | null;
|
|
25
|
+
/** Campos de uma seção, já filtrados por dependência (`when`). */
|
|
26
|
+
export declare function fieldsForSection(sectionId: string, record: Record<string, string>): EnvField[];
|
|
27
|
+
export declare function sectionById(sectionId: string): EnvSection | undefined;
|
|
28
|
+
//# sourceMappingURL=env-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-schema.d.ts","sourceRoot":"","sources":["../src/env-schema.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,OAAO,GACf,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,UAAU,GACV,KAAK,GACL,cAAc,GACd,MAAM,GACN,MAAM,GACN,QAAQ,CAAC;AAEb,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC;IACnD,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,YAAY,EAAE,UAAU,EAWpC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,QAAQ,EAoZhC,CAAC;AASF,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0D3E;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,QAAQ,EAAE,CAI9F;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAErE"}
|