@ninenity/neutrun 1.9.3 → 1.9.4

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.
@@ -0,0 +1,24 @@
1
+ /**
2
+ * A leitura da linha de comando, separada de quem a executa.
3
+ *
4
+ * Fica em arquivo próprio porque é a parte que dá para testar sem terminal, sem rede e
5
+ * sem tocar em disco — e é onde mora a decisão mais fácil de errar de uma CLI: o que
6
+ * fazer com o que não se entendeu. Um comando digitado errado que cai no `help` e sai com
7
+ * `0` é uma CLI que mente para o `&&` do script de quem chamou.
8
+ */
9
+ export type Command = 'bootstrap' | 'locate' | 'translate' | 'sync' | 'help' | 'version';
10
+ export interface Parsed {
11
+ command: Command;
12
+ /** Pasta do projeto onde o comando trabalha. */
13
+ dir?: string;
14
+ color?: boolean;
15
+ quiet: boolean;
16
+ /** Idiomas de destino do `translate`, quando alguém quis outros. */
17
+ langs?: string[];
18
+ /** O que veio e não foi entendido. Presente = a CLI recusa e sai com 1. */
19
+ error?: string;
20
+ }
21
+ export declare const COMANDOS: Array<[string, string]>;
22
+ export declare function parseArgs(argv: string[]): Parsed;
23
+ export declare function helpText(version: string): string;
24
+ //# sourceMappingURL=Args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Args.d.ts","sourceRoot":"","sources":["../../src/CLI/Args.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;AAExF,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;IACd,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAkBD,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAK5C,CAAA;AAED,wBAAgB,SAAS,CAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAwCjD;AAED,wBAAgB,QAAQ,CAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA0BjD"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ /**
3
+ * A leitura da linha de comando, separada de quem a executa.
4
+ *
5
+ * Fica em arquivo próprio porque é a parte que dá para testar sem terminal, sem rede e
6
+ * sem tocar em disco — e é onde mora a decisão mais fácil de errar de uma CLI: o que
7
+ * fazer com o que não se entendeu. Um comando digitado errado que cai no `help` e sai com
8
+ * `0` é uma CLI que mente para o `&&` do script de quem chamou.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.COMANDOS = void 0;
12
+ exports.parseArgs = parseArgs;
13
+ exports.helpText = helpText;
14
+ const ALIAS = {
15
+ bootstrap: 'bootstrap',
16
+ init: 'bootstrap',
17
+ locate: 'locate',
18
+ localize: 'locate',
19
+ translate: 'translate',
20
+ sync: 'sync',
21
+ tsync: 'sync',
22
+ help: 'help',
23
+ '--help': 'help',
24
+ '-h': 'help',
25
+ version: 'version',
26
+ '--version': 'version',
27
+ '-v': 'version'
28
+ };
29
+ exports.COMANDOS = [
30
+ ['bootstrap', 'cria os arquivos de tipagem em .ninenity/Generated'],
31
+ ['locate', 'extrai os textos do código para os dicionários'],
32
+ ['translate', 'traduz o dicionário base para os outros idiomas'],
33
+ ['sync', 'locate e translate, nessa ordem']
34
+ ];
35
+ function parseArgs(argv) {
36
+ const out = { command: 'help', quiet: false };
37
+ const [primeiro, ...resto] = argv;
38
+ if (primeiro === undefined)
39
+ return out;
40
+ const comando = ALIAS[primeiro.toLowerCase()];
41
+ if (!comando) {
42
+ return { ...out, error: `não conheço o comando "${primeiro}"` };
43
+ }
44
+ out.command = comando;
45
+ for (let i = 0; i < resto.length; i += 1) {
46
+ const flag = resto[i];
47
+ if (flag === '--quiet' || flag === '-q') {
48
+ out.quiet = true;
49
+ continue;
50
+ }
51
+ if (flag === '--no-color') {
52
+ out.color = false;
53
+ continue;
54
+ }
55
+ if (flag === '--color') {
56
+ out.color = true;
57
+ continue;
58
+ }
59
+ if (flag === '--help' || flag === '-h') {
60
+ out.command = 'help';
61
+ continue;
62
+ }
63
+ if (flag === '--dir' || flag === '-C') {
64
+ const valor = resto[i + 1];
65
+ if (!valor || valor.startsWith('-'))
66
+ return { ...out, error: `${flag} precisa de um caminho` };
67
+ out.dir = valor;
68
+ i += 1;
69
+ continue;
70
+ }
71
+ if (flag === '--lang' || flag === '-l') {
72
+ const valor = resto[i + 1];
73
+ if (!valor || valor.startsWith('-'))
74
+ return { ...out, error: `${flag} precisa de um idioma, como en-US` };
75
+ out.langs = [...(out.langs ?? []), ...valor.split(',').map(item => item.trim()).filter(Boolean)];
76
+ i += 1;
77
+ continue;
78
+ }
79
+ return { ...out, error: `não conheço a opção "${flag}"` };
80
+ }
81
+ return out;
82
+ }
83
+ function helpText(version) {
84
+ const linhas = [
85
+ '',
86
+ ` neutrun ${version}`,
87
+ '',
88
+ ' USO',
89
+ ' neutrun <comando> [opções]',
90
+ '',
91
+ ' COMANDOS',
92
+ ...exports.COMANDOS.map(([nome, texto]) => ` ${nome.padEnd(11)}${texto}`),
93
+ '',
94
+ ' OPÇÕES',
95
+ ' -C, --dir <path> pasta do projeto (padrão: onde você está)',
96
+ ' -l, --lang <code> idioma de destino do translate; repita ou separe por vírgula',
97
+ ' -q, --quiet só o resultado e os erros',
98
+ ' --no-color sem cor e sem animação',
99
+ ' -v, --version versão do Neutrun',
100
+ ' -h, --help esta ajuda',
101
+ '',
102
+ ' EXEMPLOS',
103
+ ' neutrun bootstrap',
104
+ ' neutrun sync',
105
+ ' neutrun translate --lang en-US,fr-FR',
106
+ ''
107
+ ];
108
+ return linhas.join('\n');
109
+ }
110
+ //# sourceMappingURL=Args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Args.js","sourceRoot":"","sources":["../../src/CLI/Args.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,8 @@
1
- export declare function runBootstrap(projectDir?: string): void;
1
+ import { type Reporter } from './Ui';
2
+ export interface BootstrapResult {
3
+ criados: string[];
4
+ existiam: string[];
5
+ pasta: string;
6
+ }
7
+ export declare function runBootstrap(projectDir?: string, report?: Reporter): BootstrapResult;
2
8
  //# sourceMappingURL=Bootstrap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Bootstrap.d.ts","sourceRoot":"","sources":["../../src/CLI/Bootstrap.ts"],"names":[],"mappings":"AAKA,wBAAgB,YAAY,CAAC,UAAU,GAAE,MAAsB,GAAG,IAAI,CA6ErE"}
1
+ {"version":3,"file":"Bootstrap.d.ts","sourceRoot":"","sources":["../../src/CLI/Bootstrap.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,MAAM,CAAA;AA6CnD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAiBD,wBAAgB,YAAY,CAC1B,UAAU,GAAE,MAAsB,EAClC,MAAM,GAAE,QAAwB,GAC/B,eAAe,CA0BjB"}
@@ -6,66 +6,67 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.runBootstrap = runBootstrap;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
- const ConsoleLog_1 = require("../Shared/ConsoleLog");
10
9
  const Neutrun_1 = __importDefault(require("../Shared/Neutrun"));
11
- function runBootstrap(projectDir = process.cwd()) {
12
- const genDir = Neutrun_1.default.getGeneratedPath();
13
- if (!fs_1.default.existsSync(genDir)) {
14
- fs_1.default.mkdirSync(genDir, { recursive: true });
15
- }
16
- const rolesFile = path_1.default.join(genDir, 'Roles.ts');
17
- if (!fs_1.default.existsSync(rolesFile)) {
18
- const rolesOutput = `import type { RoleData } from '@ninenity/neutrun'
19
-
20
- export interface AppRoles {
21
- readonly [key: string]: RoleData
22
- }
23
- const Roles: AppRoles = {}
24
- export default Roles
25
- export type RoleName = keyof AppRoles
26
- `;
27
- fs_1.default.writeFileSync(rolesFile, rolesOutput, 'utf-8');
28
- (0, ConsoleLog_1.logSuccess)('Arquivo Roles.ts gerado com placeholders em .ninenity/Generated/', 'Bootstrap');
29
- }
30
- const channelsFile = path_1.default.join(genDir, 'Channels.ts');
31
- if (!fs_1.default.existsSync(channelsFile)) {
32
- const channelsOutput = `import type { ChannelData } from '@ninenity/neutrun'
10
+ const Ui_1 = require("./Ui");
11
+ const tipagem = (nome, tipo) => `import type { ${tipo} } from '@ninenity/neutrun'
33
12
 
34
- export interface AppChannels {
35
- readonly [key: string]: ChannelData
13
+ export interface App${nome} {
14
+ readonly [key: string]: ${tipo}
36
15
  }
37
- const Channels: AppChannels = {}
38
- export default Channels
39
- export type ChannelName = keyof AppChannels
16
+ const ${nome}: App${nome} = {}
17
+ export default ${nome}
18
+ export type ${nome.replace(/s$/, '')}Name = keyof App${nome}
40
19
  `;
41
- fs_1.default.writeFileSync(channelsFile, channelsOutput, 'utf-8');
42
- (0, ConsoleLog_1.logSuccess)('Arquivo Channels.ts gerado com placeholders em .ninenity/Generated/', 'Bootstrap');
43
- }
44
- const configFile = path_1.default.join(genDir, 'Config.ts');
45
- if (!fs_1.default.existsSync(configFile)) {
46
- const configOutput = `export interface AppConfig {
20
+ const MODELOS = [
21
+ { arquivo: 'Roles.ts', conteudo: tipagem('Roles', 'RoleData') },
22
+ { arquivo: 'Channels.ts', conteudo: tipagem('Channels', 'ChannelData') },
23
+ { arquivo: 'Emojis.ts', conteudo: tipagem('Emojis', 'EmojiData') },
24
+ {
25
+ arquivo: 'Config.ts',
26
+ conteudo: `export interface AppConfig {
47
27
  [key: string]: any
48
28
  }
49
29
  const Config: AppConfig = {}
50
30
  export default Config
51
- `;
52
- fs_1.default.writeFileSync(configFile, configOutput, 'utf-8');
53
- (0, ConsoleLog_1.logSuccess)('Arquivo Config.ts gerado com placeholders em .ninenity/Generated/', 'Bootstrap');
31
+ `
54
32
  }
55
- const emojisFile = path_1.default.join(genDir, 'Emojis.ts');
56
- if (!fs_1.default.existsSync(emojisFile)) {
57
- const emojisOutput = `import type { EmojiData } from '@ninenity/neutrun'
58
-
59
- export interface AppEmojis {
60
- readonly [key: string]: EmojiData
33
+ ];
34
+ /**
35
+ * Onde escrever, e por que não é só `Neutrun.getGeneratedPath()`.
36
+ *
37
+ * Aquele helper resolve sempre por `process.cwd()` — ignora o `projectDir` que esta
38
+ * função recebe. Com o `--dir` da CLI isso vira o pior tipo de erro: o comando diz que
39
+ * deu certo e escreve a tipagem na pasta errada, criando um `.ninenity` onde ninguém
40
+ * pediu. Quando o alvo é o próprio `cwd`, o helper continua valendo — ele respeita o
41
+ * caminho que `Neutrun.init` tiver configurado, e quem chama a função de dentro de um bot
42
+ * depende disso.
43
+ */
44
+ function pastaGerada(projectDir) {
45
+ if (path_1.default.resolve(projectDir) === path_1.default.resolve(process.cwd()))
46
+ return Neutrun_1.default.getGeneratedPath();
47
+ return path_1.default.join(projectDir, '.ninenity', 'Generated');
61
48
  }
62
- const Emojis: AppEmojis = {}
63
- export default Emojis
64
- export type EmojiName = keyof AppEmojis
65
- `;
66
- fs_1.default.writeFileSync(emojisFile, emojisOutput, 'utf-8');
67
- (0, ConsoleLog_1.logSuccess)('Arquivo Emojis.ts gerado com placeholders em .ninenity/Generated/', 'Bootstrap');
49
+ function runBootstrap(projectDir = process.cwd(), report = Ui_1.plainReporter) {
50
+ const genDir = pastaGerada(projectDir);
51
+ const resultado = { criados: [], existiam: [], pasta: genDir };
52
+ report.start('preparando .ninenity/Generated');
53
+ if (!fs_1.default.existsSync(genDir))
54
+ fs_1.default.mkdirSync(genDir, { recursive: true });
55
+ report.total(MODELOS.length, 'tipagens');
56
+ for (const modelo of MODELOS) {
57
+ const destino = path_1.default.join(genDir, modelo.arquivo);
58
+ if (fs_1.default.existsSync(destino)) {
59
+ resultado.existiam.push(modelo.arquivo);
60
+ report.tick(`${modelo.arquivo} já existia`);
61
+ continue;
62
+ }
63
+ fs_1.default.writeFileSync(destino, modelo.conteudo, 'utf-8');
64
+ resultado.criados.push(modelo.arquivo);
65
+ report.tick(`${modelo.arquivo} criado`);
68
66
  }
69
- (0, ConsoleLog_1.logSuccess)('Bootstrap de tipagens .ninenity concluído!', 'Bootstrap');
67
+ report.ok(resultado.criados.length > 0
68
+ ? `${resultado.criados.length} arquivo(s) de tipagem criado(s)`
69
+ : 'tipagens já estavam no lugar');
70
+ return resultado;
70
71
  }
71
72
  //# sourceMappingURL=Bootstrap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Bootstrap.js","sourceRoot":"","sources":["../../src/CLI/Bootstrap.ts"],"names":[],"mappings":";;;;;AAKA,oCA6EC;AAlFD,4CAAmB;AACnB,gDAAuB;AACvB,qDAAiD;AACjD,gEAAuC;AAEvC,SAAgB,YAAY,CAAC,aAAqB,OAAO,CAAC,GAAG,EAAE;IAC7D,MAAM,MAAM,GAAG,iBAAO,CAAC,gBAAgB,EAAE,CAAA;IAEzC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,YAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC/C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG;;;;;;;;CAQvB,CAAA;QACG,YAAE,CAAC,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;QACjD,IAAA,uBAAU,EACR,kEAAkE,EAClE,WAAW,CACZ,CAAA;IACH,CAAC;IAED,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACrD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,cAAc,GAAG;;;;;;;;CAQ1B,CAAA;QACG,YAAE,CAAC,aAAa,CAAC,YAAY,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;QACvD,IAAA,uBAAU,EACR,qEAAqE,EACrE,WAAW,CACZ,CAAA;IACH,CAAC;IAED,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACjD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG;;;;;CAKxB,CAAA;QACG,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAA;QACnD,IAAA,uBAAU,EACR,mEAAmE,EACnE,WAAW,CACZ,CAAA;IACH,CAAC;IAED,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACjD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG;;;;;;;;CAQxB,CAAA;QACG,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAA;QACnD,IAAA,uBAAU,EACR,mEAAmE,EACnE,WAAW,CACZ,CAAA;IACH,CAAC;IAED,IAAA,uBAAU,EAAC,4CAA4C,EAAE,WAAW,CAAC,CAAA;AACvE,CAAC"}
1
+ {"version":3,"file":"Bootstrap.js","sourceRoot":"","sources":["../../src/CLI/Bootstrap.ts"],"names":[],"mappings":";;;;;AAqEA,oCA6BC;AAlGD,4CAAmB;AACnB,gDAAuB;AACvB,gEAAuC;AACvC,6BAAmD;AAmBnD,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE,CACrD,iBAAiB,IAAI;;sBAED,IAAI;4BACE,IAAI;;QAExB,IAAI,QAAQ,IAAI;iBACP,IAAI;cACP,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,IAAI;CAC1D,CAAA;AAED,MAAM,OAAO,GAAa;IACxB,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;IAC/D,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE;IACxE,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE;IAClE;QACE,OAAO,EAAE,WAAW;QACpB,QAAQ,EAAE;;;;;CAKb;KACE;CACF,CAAA;AAQD;;;;;;;;;GASG;AACH,SAAS,WAAW,CAAE,UAAkB;IACtC,IAAI,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAAE,OAAO,iBAAO,CAAC,gBAAgB,EAAE,CAAA;IAC/F,OAAO,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;AACxD,CAAC;AAED,SAAgB,YAAY,CAC1B,aAAqB,OAAO,CAAC,GAAG,EAAE,EAClC,SAAmB,kBAAa;IAEhC,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;IACtC,MAAM,SAAS,GAAoB,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;IAE/E,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAA;IAC9C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,YAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAErE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACxC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QACjD,IAAI,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YACvC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,aAAa,CAAC,CAAA;YAC3C,SAAQ;QACV,CAAC;QACD,YAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACnD,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACtC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,SAAS,CAAC,CAAA;IACzC,CAAC;IAED,MAAM,CAAC,EAAE,CACP,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAC1B,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,kCAAkC;QAC/D,CAAC,CAAC,8BAA8B,CACnC,CAAA;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -1,8 +1,15 @@
1
+ import { type Reporter } from './Ui';
1
2
  /**
2
3
  * Garante que o identificador runtime `I18n` exista no import do Neutrun.
3
4
  * Importações nomeadas existentes são mescladas para evitar imports
4
5
  * duplicados gerados pelo localizador.
5
6
  */
6
7
  export declare function ensureI18nImport(content: string): string;
7
- export declare function runLocalize(projectDir?: string): void;
8
+ export interface LocalizeResult {
9
+ /** Arquivos que a passagem reescreveu. */
10
+ arquivos: number;
11
+ /** Chaves no dicionário depois da passagem. */
12
+ chaves: number;
13
+ }
14
+ export declare function runLocalize(projectDir?: string, report?: Reporter): LocalizeResult;
8
15
  //# sourceMappingURL=Localize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Localize.d.ts","sourceRoot":"","sources":["../../src/CLI/Localize.ts"],"names":[],"mappings":"AAoBA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA+DxD;AAED,wBAAgB,WAAW,CAAC,UAAU,GAAE,MAAsB,GAAG,IAAI,CA8RpE"}
1
+ {"version":3,"file":"Localize.d.ts","sourceRoot":"","sources":["../../src/CLI/Localize.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,MAAM,CAAA;AAkBnD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA+DxD;AAED,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,WAAW,CACzB,UAAU,GAAE,MAAsB,EAClC,MAAM,GAAE,QAAwB,GAC/B,cAAc,CA0RhB"}
@@ -7,7 +7,7 @@ exports.ensureI18nImport = ensureI18nImport;
7
7
  exports.runLocalize = runLocalize;
8
8
  const fs_1 = __importDefault(require("fs"));
9
9
  const path_1 = __importDefault(require("path"));
10
- const ConsoleLog_1 = require("../Shared/ConsoleLog");
10
+ const Ui_1 = require("./Ui");
11
11
  const KNOWN_CATEGORIES = [
12
12
  'commands',
13
13
  'components',
@@ -78,7 +78,7 @@ function ensureI18nImport(content) {
78
78
  }
79
79
  return `${importStatement}\n${normalized}`;
80
80
  }
81
- function runLocalize(projectDir = process.cwd()) {
81
+ function runLocalize(projectDir = process.cwd(), report = Ui_1.plainReporter) {
82
82
  const discordDir = path_1.default.join(projectDir, 'src', 'Discord');
83
83
  const targetSrcDir = fs_1.default.existsSync(discordDir)
84
84
  ? discordDir
@@ -88,6 +88,7 @@ function runLocalize(projectDir = process.cwd()) {
88
88
  const ptBrFile = path_1.default.join(translateDir, 'pt_br.ts');
89
89
  const extractedDict = {};
90
90
  const migratedKeysMap = {};
91
+ let arquivosTocados = 0;
91
92
  function buildFileCategoryMap() {
92
93
  const map = {};
93
94
  function scan(dir) {
@@ -144,7 +145,7 @@ function runLocalize(projectDir = process.cwd()) {
144
145
  const newPath = `${targetCategory}.${topKey}.${subKey}`;
145
146
  setDictValue(extractedDict, newPath.split('.'), val);
146
147
  migratedKeysMap[oldPath] = newPath;
147
- (0, ConsoleLog_1.logInfo)(`Migrando chave: "${oldPath}" ? "${newPath}"`, 'AutoLocate');
148
+ report.note(`migrando ${oldPath} -> ${newPath}`);
148
149
  }
149
150
  }
150
151
  delete extractedDict[topKey];
@@ -164,7 +165,7 @@ function runLocalize(projectDir = process.cwd()) {
164
165
  const existingDict = imported.default?.dict || imported.dict || {};
165
166
  Object.assign(extractedDict, existingDict);
166
167
  migrateUncategorizedKeys(extractedDict, categoryMap);
167
- (0, ConsoleLog_1.logInfo)(`Dicionário existente preservado de ${path_1.default.basename(targetFile)}`, 'AutoLocate');
168
+ report.note(`dicionário existente preservado de ${path_1.default.basename(targetFile)}`);
168
169
  }
169
170
  catch (err) {
170
171
  // Ignora se não conseguir carregar
@@ -258,7 +259,8 @@ function runLocalize(projectDir = process.cwd()) {
258
259
  if (fileModified || content.includes('I18n.t(')) {
259
260
  content = ensureI18nImport(content);
260
261
  fs_1.default.writeFileSync(filePath, content, 'utf-8');
261
- (0, ConsoleLog_1.logSuccess)(`Refatorado: ${path_1.default.relative(targetSrcDir, filePath)}`, 'AutoLocate');
262
+ arquivosTocados += 1;
263
+ report.tick(path_1.default.relative(targetSrcDir, filePath));
262
264
  }
263
265
  }
264
266
  function scanDirectory(dir) {
@@ -284,14 +286,45 @@ function runLocalize(projectDir = process.cwd()) {
284
286
  const ptBrContent = `export default {\n locale: 'pt-BR',\n dict: ${JSON.stringify(extractedDict, null, 2)}\n}\n`;
285
287
  fs_1.default.writeFileSync(tptFile, tptContent, 'utf-8');
286
288
  fs_1.default.writeFileSync(ptBrFile, ptBrContent, 'utf-8');
287
- (0, ConsoleLog_1.logSuccess)(`Dicionário Template salvo em: Translate/tpt_tsl.ts`, 'AutoLocate');
288
- (0, ConsoleLog_1.logSuccess)(`Dicionário PT-BR salvo em: Translate/pt_br.ts`, 'AutoLocate');
289
+ report.note('dicionários salvos em src/Shared/Translate');
289
290
  }
290
- (0, ConsoleLog_1.logInfo)('Iniciando Auto Localização...', 'AutoLocate');
291
+ report.start('procurando textos no código');
291
292
  const categoryMap = buildFileCategoryMap();
292
293
  loadExistingDictionary(categoryMap);
294
+ /*
295
+ * O total é sabido antes de reescrever qualquer coisa: é o que permite a barra de
296
+ * progresso em vez de um spinner que gira sem dizer quanto falta. Contar duas vezes a
297
+ * árvore de arquivos custa milissegundos; olhar para um spinner sem fim custa mais.
298
+ */
299
+ report.total(contarArquivos(targetSrcDir), 'arquivos');
293
300
  scanDirectory(targetSrcDir);
294
301
  saveDictionaries();
295
- (0, ConsoleLog_1.logSuccess)('Auto Localização concluída!', 'AutoLocate');
302
+ const chaves = contarChaves(extractedDict);
303
+ report.ok(`${arquivosTocados} arquivo(s) refatorado(s), ${chaves} chave(s) no dicionário`);
304
+ return { arquivos: arquivosTocados, chaves };
305
+ }
306
+ /** Quantos `.ts`/`.js` existem debaixo de `dir`. Só para dimensionar a barra. */
307
+ function contarArquivos(dir) {
308
+ if (!fs_1.default.existsSync(dir))
309
+ return 0;
310
+ let total = 0;
311
+ for (const entry of fs_1.default.readdirSync(dir, { withFileTypes: true })) {
312
+ const full = path_1.default.join(dir, entry.name);
313
+ if (entry.isDirectory())
314
+ total += contarArquivos(full);
315
+ else if (entry.isFile() && /\.(ts|js)$/.test(entry.name))
316
+ total += 1;
317
+ }
318
+ return total;
319
+ }
320
+ function contarChaves(dict) {
321
+ let total = 0;
322
+ for (const valor of Object.values(dict)) {
323
+ if (typeof valor === 'string')
324
+ total += 1;
325
+ else if (valor && typeof valor === 'object')
326
+ total += contarChaves(valor);
327
+ }
328
+ return total;
296
329
  }
297
330
  //# sourceMappingURL=Localize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Localize.js","sourceRoot":"","sources":["../../src/CLI/Localize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Localize.js","sourceRoot":"","sources":["../../src/CLI/Localize.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,8 @@
1
- export declare function runTranslate(projectDir?: string): Promise<void>;
1
+ import { type Reporter } from './Ui';
2
+ export interface TranslateResult {
3
+ chaves: number;
4
+ idiomas: string[];
5
+ falhas: number;
6
+ }
7
+ export declare function runTranslate(projectDir?: string, report?: Reporter, idiomas?: string[]): Promise<TranslateResult>;
2
8
  //# sourceMappingURL=Translate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Translate.d.ts","sourceRoot":"","sources":["../../src/CLI/Translate.ts"],"names":[],"mappings":"AA6DA,wBAAsB,YAAY,CAAC,UAAU,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCpF"}
1
+ {"version":3,"file":"Translate.d.ts","sourceRoot":"","sources":["../../src/CLI/Translate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,MAAM,CAAA;AAoCnD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf;AA8ED,wBAAsB,YAAY,CAChC,UAAU,GAAE,MAAsB,EAClC,MAAM,GAAE,QAAwB,EAChC,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,eAAe,CAAC,CAsD1B"}
@@ -6,77 +6,129 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.runTranslate = runTranslate;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
- const ConsoleLog_1 = require("../Shared/ConsoleLog");
10
- async function translateText(text, targetLang) {
9
+ const Ui_1 = require("./Ui");
10
+ const PADRAO = [
11
+ { code: 'en-US', fileName: 'en_us.ts' },
12
+ { code: 'es-ES', fileName: 'es_es.ts' }
13
+ ];
14
+ /** Quantas traduções ao mesmo tempo. Acima disso o endpoint começa a responder 429. */
15
+ const EM_PARALELO = 6;
16
+ /** `en-US` → `en_us.ts`. Para quem passou um idioma que não está na tabela padrão. */
17
+ const arquivoDe = (code) => `${code.toLowerCase().replace(/-/g, '_')}.ts`;
18
+ /**
19
+ * As variáveis do texto saem antes de traduzir e voltam depois.
20
+ *
21
+ * `{user}` traduzido vira `{usuário}`, e a chave deixa de casar com o que o código passa —
22
+ * um bug que só aparece em produção, no idioma que ninguém testou.
23
+ */
24
+ async function traduzirTexto(text, targetLang) {
11
25
  if (!text || typeof text !== 'string')
12
- return text;
26
+ return { texto: text, ok: true };
13
27
  const variables = [];
14
- const maskedText = text.replace(/\{([^}]+)\}/g, (match) => {
28
+ const mascarado = text.replace(/\{([^}]+)\}/g, match => {
15
29
  variables.push(match);
16
30
  return `__VAR_${variables.length - 1}__`;
17
31
  });
18
32
  try {
19
33
  const langCode = targetLang.split('-')[0];
20
- const url = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=${langCode}&dt=t&q=${encodeURIComponent(maskedText)}`;
34
+ const url = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=${langCode}&dt=t&q=${encodeURIComponent(mascarado)}`;
21
35
  const response = await fetch(url);
36
+ if (!response.ok)
37
+ throw new Error(`HTTP ${response.status}`);
22
38
  const data = await response.json();
23
- let translated = '';
39
+ let traduzido = '';
24
40
  if (Array.isArray(data[0])) {
25
- for (const sentence of data[0]) {
41
+ for (const sentence of data[0])
26
42
  if (sentence[0])
27
- translated += sentence[0];
28
- }
43
+ traduzido += sentence[0];
29
44
  }
30
- if (!translated)
31
- translated = text;
32
- let restoredText = translated;
45
+ if (!traduzido)
46
+ return { texto: text, ok: false };
47
+ let restaurado = traduzido;
33
48
  variables.forEach((variable, index) => {
34
- restoredText = restoredText.replace(new RegExp(`__VAR_${index}__`, 'gi'), variable);
35
- restoredText = restoredText.replace(new RegExp(`__VAR_ ${index} __`, 'gi'), variable);
49
+ restaurado = restaurado.replace(new RegExp(`__VAR_${index}__`, 'gi'), variable);
50
+ restaurado = restaurado.replace(new RegExp(`__VAR_ ${index} __`, 'gi'), variable);
36
51
  });
37
- return restoredText;
52
+ return { texto: restaurado, ok: true };
38
53
  }
39
- catch (error) {
40
- (0, ConsoleLog_1.logError)(`Erro ao traduzir "${text}": ${error}`, 'AutoTranslate');
41
- return text;
54
+ catch {
55
+ return { texto: text, ok: false };
42
56
  }
43
57
  }
44
- async function translateDict(dict, targetLang) {
45
- const result = {};
46
- for (const [key, value] of Object.entries(dict)) {
47
- if (typeof value === 'object' && value !== null) {
48
- result[key] = await translateDict(value, targetLang);
49
- }
50
- else if (typeof value === 'string') {
51
- (0, ConsoleLog_1.logInfo)(`Translating [${key}]: "${value}"`, 'AutoTranslate');
52
- result[key] = await translateText(value, targetLang);
53
- }
58
+ /** Todo texto do dicionário, achatado num caminho de chaves. */
59
+ function colher(dict, caminho = []) {
60
+ const saida = [];
61
+ for (const [chave, valor] of Object.entries(dict)) {
62
+ if (typeof valor === 'string')
63
+ saida.push({ caminho: [...caminho, chave], texto: valor });
64
+ else if (valor && typeof valor === 'object')
65
+ saida.push(...colher(valor, [...caminho, chave]));
54
66
  }
55
- return result;
67
+ return saida;
56
68
  }
57
- async function runTranslate(projectDir = process.cwd()) {
69
+ const plantar = (dict, caminho, texto) => {
70
+ let atual = dict;
71
+ for (let i = 0; i < caminho.length - 1; i += 1) {
72
+ const chave = caminho[i];
73
+ if (!atual[chave] || typeof atual[chave] !== 'object')
74
+ atual[chave] = {};
75
+ atual = atual[chave];
76
+ }
77
+ atual[caminho[caminho.length - 1]] = texto;
78
+ };
79
+ /** Roda `trabalho` sobre a lista com no máximo `teto` em voo ao mesmo tempo. */
80
+ async function comTeto(itens, teto, trabalho) {
81
+ let proximo = 0;
82
+ const trilhas = Array.from({ length: Math.min(teto, itens.length) }, async () => {
83
+ while (proximo < itens.length) {
84
+ const meu = proximo;
85
+ proximo += 1;
86
+ await trabalho(itens[meu]);
87
+ }
88
+ });
89
+ await Promise.all(trilhas);
90
+ }
91
+ async function runTranslate(projectDir = process.cwd(), report = Ui_1.plainReporter, idiomas) {
58
92
  const translateDir = path_1.default.join(projectDir, 'src', 'Shared', 'Translate');
59
93
  const tptFile = path_1.default.join(translateDir, 'tpt_tsl.ts');
60
94
  if (!fs_1.default.existsSync(tptFile)) {
61
- (0, ConsoleLog_1.logError)(`Arquivo template tpt_tsl.ts não encontrado em ${translateDir}`, 'AutoTranslate');
62
- return;
95
+ throw new Error(`não achei o template tpt_tsl.ts em ${translateDir}. Rode \`neutrun locate\` antes — é ele que gera o dicionário base.`);
63
96
  }
64
97
  delete require.cache[require.resolve(tptFile)];
65
98
  const templateModule = require(tptFile);
66
99
  const baseDict = templateModule.default?.dict || templateModule.dict || {};
67
- const targetLanguages = [
68
- { code: 'en-US', fileName: 'en_us.ts' },
69
- { code: 'es-ES', fileName: 'es_es.ts' }
70
- ];
71
- (0, ConsoleLog_1.logInfo)('Iniciando Tradução Automática das chaves...', 'AutoTranslate');
72
- for (const lang of targetLanguages) {
73
- (0, ConsoleLog_1.logInfo)(`Traduzindo dicionário para: [${lang.code}]...`, 'AutoTranslate');
74
- const translatedDict = await translateDict(baseDict, lang.code);
75
- const fileContent = `export default {\n locale: '${lang.code}',\n dict: ${JSON.stringify(translatedDict, null, 2)}\n}\n`;
76
- const outputPath = path_1.default.join(translateDir, lang.fileName);
77
- fs_1.default.writeFileSync(outputPath, fileContent, 'utf-8');
78
- (0, ConsoleLog_1.logSuccess)(`Dicionário gerado com sucesso: Translate/${lang.fileName}`, 'AutoTranslate');
100
+ const alvos = idiomas?.length
101
+ ? idiomas.map(code => ({ code, fileName: arquivoDe(code) }))
102
+ : PADRAO;
103
+ const textos = colher(baseDict);
104
+ const resultado = { chaves: textos.length, idiomas: [], falhas: 0 };
105
+ if (textos.length === 0) {
106
+ report.warn('o dicionário base está vazio — nada para traduzir');
107
+ return resultado;
108
+ }
109
+ for (const alvo of alvos) {
110
+ report.start(`traduzindo para ${alvo.code}`);
111
+ report.total(textos.length, alvo.code);
112
+ const traduzido = {};
113
+ let falhasDoIdioma = 0;
114
+ await comTeto(textos, EM_PARALELO, async (item) => {
115
+ const { texto, ok } = await traduzirTexto(item.texto, alvo.code);
116
+ if (!ok)
117
+ falhasDoIdioma += 1;
118
+ plantar(traduzido, item.caminho, texto);
119
+ report.tick(item.caminho.join('.'));
120
+ });
121
+ const conteudo = `export default {\n locale: '${alvo.code}',\n dict: ${JSON.stringify(traduzido, null, 2)}\n}\n`;
122
+ fs_1.default.writeFileSync(path_1.default.join(translateDir, alvo.fileName), conteudo, 'utf-8');
123
+ resultado.idiomas.push(alvo.code);
124
+ resultado.falhas += falhasDoIdioma;
125
+ if (falhasDoIdioma > 0) {
126
+ report.warn(`${alvo.fileName}: ${textos.length - falhasDoIdioma}/${textos.length} chaves — ${falhasDoIdioma} ficaram em português`);
127
+ }
128
+ else {
129
+ report.ok(`${alvo.fileName}: ${textos.length} chaves`);
130
+ }
79
131
  }
80
- (0, ConsoleLog_1.logSuccess)('Todas as traduções foram concluídas com sucesso!', 'AutoTranslate');
132
+ return resultado;
81
133
  }
82
134
  //# sourceMappingURL=Translate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Translate.js","sourceRoot":"","sources":["../../src/CLI/Translate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Translate.js","sourceRoot":"","sources":["../../src/CLI/Translate.ts"],"names":[],"mappings":";;;;;AAwHA,oCA0DC;AAlLD,4CAAmB;AACnB,gDAAuB;AACvB,6BAAmD;AA4BnD,MAAM,MAAM,GAAW;IACrB,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;IACvC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;CACxC,CAAA;AAED,uFAAuF;AACvF,MAAM,WAAW,GAAG,CAAC,CAAA;AAQrB,sFAAsF;AACtF,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAA;AAEzF;;;;;GAKG;AACH,KAAK,UAAU,aAAa,CAAE,IAAY,EAAE,UAAkB;IAC5D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IAEvE,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE;QACrD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACrB,OAAO,SAAS,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACzC,MAAM,GAAG,GAAG,6EAA6E,QAAQ,WAAW,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAA;QAE3I,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QAC5D,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAEvC,IAAI,SAAS,GAAG,EAAE,CAAA;QAClB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC;gBAAE,IAAI,QAAQ,CAAC,CAAC,CAAC;oBAAE,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC3E,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;QAEjD,IAAI,UAAU,GAAG,SAAS,CAAA;QAC1B,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YACpC,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAA;YAC/E,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAA;QACnF,CAAC,CAAC,CAAA;QACF,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;IACnC,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,SAAS,MAAM,CAAE,IAAqB,EAAE,UAAoB,EAAE;IAC5D,MAAM,KAAK,GAAgD,EAAE,CAAA;IAC7D,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;aACpF,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAwB,EAAE,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IACnH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,IAAqB,EAAE,OAAiB,EAAE,KAAa,EAAQ,EAAE;IAChF,IAAI,KAAK,GAAG,IAAI,CAAA;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QACxB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ;YAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;QACxE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAoB,CAAA;IACzC,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;AAC5C,CAAC,CAAA;AAED,gFAAgF;AAChF,KAAK,UAAU,OAAO,CAAK,KAAU,EAAE,IAAY,EAAE,QAAoC;IACvF,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;QAC9E,OAAO,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,OAAO,CAAA;YACnB,OAAO,IAAI,CAAC,CAAA;YACZ,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC,CAAC,CAAA;IACF,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC;AAEM,KAAK,UAAU,YAAY,CAChC,aAAqB,OAAO,CAAC,GAAG,EAAE,EAClC,SAAmB,kBAAa,EAChC,OAAkB;IAElB,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;IACxE,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;IAErD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,sCAAsC,YAAY,qEAAqE,CACxH,CAAA;IACH,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACvC,MAAM,QAAQ,GAAoB,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,cAAc,CAAC,IAAI,IAAI,EAAE,CAAA;IAE3F,MAAM,KAAK,GAAW,OAAO,EAAE,MAAM;QACnC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,MAAM,CAAA;IAEV,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC/B,MAAM,SAAS,GAAoB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;IAEpF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;QAChE,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAEtC,MAAM,SAAS,GAAoB,EAAE,CAAA;QACrC,IAAI,cAAc,GAAG,CAAC,CAAA;QAEtB,MAAM,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE;YAC9C,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;YAChE,IAAI,CAAC,EAAE;gBAAE,cAAc,IAAI,CAAC,CAAA;YAC5B,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YACvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACrC,CAAC,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,gCAAgC,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAA;QAClH,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;QAE3E,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjC,SAAS,CAAC,MAAM,IAAI,cAAc,CAAA;QAElC,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,GAAG,cAAc,IAAI,MAAM,CAAC,MAAM,aAAa,cAAc,uBAAuB,CAAC,CAAA;QACrI,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,SAAS,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * A cara da CLI: banner, spinner, barra de progresso e o resumo do fim.
3
+ *
4
+ * A regra que governa o arquivo inteiro: **animação só quando alguém está olhando.**
5
+ * Spinner e barra de progresso funcionam reescrevendo a linha atual com códigos de
6
+ * escape; num terminal isso é movimento, e num arquivo de log é lixo — `\r` e sequências
7
+ * `` empilhadas em cada linha, num arquivo que alguém vai ler depois justamente
8
+ * porque algo deu errado. Por isso `rich` olha para o TTY, para `CI` e para `NO_COLOR`
9
+ * antes de decidir, e o modo pobre imprime uma linha por evento — que é o que se quer ler
10
+ * num `docker logs`.
11
+ *
12
+ * Nada aqui decide o que a CLI faz; só como ela aparece. Os comandos falam com o
13
+ * `Reporter`, e é a `Ui` que escolhe entre desenhar um spinner e escrever uma linha.
14
+ */
15
+ export interface UiOptions {
16
+ /** `false` desliga cor e animação. Ausente = decide pelo ambiente. */
17
+ color?: boolean;
18
+ /** Só erros e o resultado. Para quem chama a CLI de dentro de um script. */
19
+ quiet?: boolean;
20
+ stream?: NodeJS.WriteStream;
21
+ }
22
+ /**
23
+ * O que um comando conta para quem está olhando.
24
+ *
25
+ * Fica separado da `Ui` porque `runLocalize` e `runTranslate` também rodam fora da CLI —
26
+ * o bot chama os dois por `tsx -e` — e ali não deve existir spinner nenhum. O comando
27
+ * reporta o que aconteceu; quem escolhe a forma é o dono da saída.
28
+ */
29
+ export interface Reporter {
30
+ /** Começou uma etapa longa. */
31
+ start(label: string): void;
32
+ /** A mesma etapa, com texto novo. Não cria linha nova no modo rico. */
33
+ update(label: string): void;
34
+ /** O total de itens ficou conhecido: dá para trocar o spinner por uma barra. */
35
+ total(count: number, label?: string): void;
36
+ /** Mais um item pronto. */
37
+ tick(label?: string): void;
38
+ ok(label: string): void;
39
+ warn(label: string): void;
40
+ fail(label: string): void;
41
+ /** Uma linha solta, sem estado. */
42
+ note(label: string): void;
43
+ }
44
+ /** O reporter de quem não tem terminal: uma linha por evento, e nada mais. */
45
+ export declare const plainReporter: Reporter;
46
+ /** O reporter de quem chamou a função direto e não quer saída nenhuma. */
47
+ export declare const silentReporter: Reporter;
48
+ /** `1m03s`, `840ms`. Duração que se lê de relance. */
49
+ export declare const duracao: (ms: number) => string;
50
+ export declare class Ui implements Reporter {
51
+ /** Pode animar: tem terminal, tem cor, e ninguém pediu silêncio. */
52
+ readonly rich: boolean;
53
+ private readonly quiet;
54
+ private readonly stream;
55
+ private fiando?;
56
+ private barra?;
57
+ private feitos;
58
+ private readonly inicio;
59
+ constructor(options?: UiOptions);
60
+ /** O logotipo. Só aparece com terminal: num log ele é seis linhas de nada. */
61
+ banner(version: string): void;
62
+ titulo(texto: string, detalhe?: string): void;
63
+ start(label: string): void;
64
+ update(label: string): void;
65
+ /**
66
+ * Troca o spinner por uma barra quando o total aparece.
67
+ *
68
+ * Enquanto não se sabe quantos são, "traduzindo…" é tudo que dá para dizer com verdade.
69
+ * Assim que o total é conhecido, a barra passa a responder a única pergunta que
70
+ * interessa numa espera longa — quanto falta —, e é por isso que a troca acontece no
71
+ * meio do comando em vez de escolher um dos dois no começo.
72
+ */
73
+ total(count: number, label?: string): void;
74
+ tick(label?: string): void;
75
+ ok(label: string): void;
76
+ warn(label: string): void;
77
+ /** Erro sai mesmo em `--quiet`: silêncio sobre falha é o silêncio errado. */
78
+ fail(label: string): void;
79
+ note(label: string): void;
80
+ /** O resumo do fim: o que foi feito, em quanto tempo. */
81
+ resumo(linhas: Array<[string, string]>, titulo?: string): void;
82
+ /** Fecha o que estiver animando. Idempotente, e chamado antes de qualquer escrita. */
83
+ parar(): void;
84
+ }
85
+ //# sourceMappingURL=Ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Ui.d.ts","sourceRoot":"","sources":["../../src/CLI/Ui.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,SAAS;IACxB,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,4EAA4E;IAC5E,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAA;CAC5B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB,+BAA+B;IAC/B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,uEAAuE;IACvE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,gFAAgF;IAChF,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1C,2BAA2B;IAC3B,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,mCAAmC;IACnC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,8EAA8E;AAC9E,eAAO,MAAM,aAAa,EAAE,QAS3B,CAAA;AAED,0EAA0E;AAC1E,eAAO,MAAM,cAAc,EAAE,QAS5B,CAAA;AAsCD,sDAAsD;AACtD,eAAO,MAAM,OAAO,GAAI,IAAI,MAAM,KAAG,MAKpC,CAAA;AAED,qBAAa,EAAG,YAAW,QAAQ;IACjC,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,MAAM,CAAC,CAAK;IACpB,OAAO,CAAC,KAAK,CAAC,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;gBAEvB,OAAO,GAAE,SAAc;IAqBpC,8EAA8E;IAC9E,MAAM,CAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAW9B,MAAM,CAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAK9C,KAAK,CAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAU3B,MAAM,CAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM5B;;;;;;;OAOG;IACH,KAAK,CAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAc,GAAG,IAAI;IA8BhD,IAAI,CAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAO3B,EAAE,CAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAWxB,IAAI,CAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAW1B,6EAA6E;IAC7E,IAAI,CAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAU1B,IAAI,CAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAU1B,yDAAyD;IACzD,MAAM,CAAE,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,SAAW,GAAG,IAAI;IAWjE,sFAAsF;IACtF,KAAK,IAAK,IAAI;CAUf"}
package/dist/CLI/Ui.js ADDED
@@ -0,0 +1,246 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Ui = exports.duracao = exports.silentReporter = exports.plainReporter = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const cli_progress_1 = __importDefault(require("cli-progress"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ /** O reporter de quem não tem terminal: uma linha por evento, e nada mais. */
11
+ exports.plainReporter = {
12
+ start: label => console.log(chalk_1.default.cyan(`→ ${label}`)),
13
+ update: () => undefined,
14
+ total: () => undefined,
15
+ tick: () => undefined,
16
+ ok: label => console.log(chalk_1.default.green(`✓ ${label}`)),
17
+ warn: label => console.log(chalk_1.default.yellow(`! ${label}`)),
18
+ fail: label => console.log(chalk_1.default.red(`✗ ${label}`)),
19
+ note: label => console.log(chalk_1.default.gray(` ${label}`))
20
+ };
21
+ /** O reporter de quem chamou a função direto e não quer saída nenhuma. */
22
+ exports.silentReporter = {
23
+ start: () => undefined,
24
+ update: () => undefined,
25
+ total: () => undefined,
26
+ tick: () => undefined,
27
+ ok: () => undefined,
28
+ warn: () => undefined,
29
+ fail: () => undefined,
30
+ note: () => undefined
31
+ };
32
+ const SIMBOLO = {
33
+ ok: '✔',
34
+ warn: '▲',
35
+ fail: '✖',
36
+ seta: '›',
37
+ ponto: '·'
38
+ };
39
+ /**
40
+ * O degradê do banner, do ciano ao magenta.
41
+ *
42
+ * Sem `gradient-string` de propósito: é mais uma dependência num pacote que já é
43
+ * dependência de todo bot do ecossistema, para pintar sete letras. `chalk` já faz cor de
44
+ * 256 e a conta cabe em três linhas.
45
+ */
46
+ const degrade = (texto, passo, total) => {
47
+ const t = total <= 1 ? 0 : passo / (total - 1);
48
+ const r = Math.round(120 + t * 100);
49
+ const g = Math.round(220 - t * 110);
50
+ const b = 255;
51
+ return chalk_1.default.rgb(r, g, b)(texto);
52
+ };
53
+ /**
54
+ * A marca, em uma linha.
55
+ *
56
+ * Não é arte ASCII de seis linhas, e por dois motivos. Blocos como `█` e `╗` dependem da
57
+ * fonte do terminal: no `cmd.exe` com fonte raster, num `ssh` de celular, num log de
58
+ * container, aquilo vira uma cerca de quadrados — a primeira impressão da ferramenta
59
+ * sendo um bug de encoding. E uma CLI que se roda dez vezes por dia não pode gastar oito
60
+ * linhas se apresentando em cada uma.
61
+ *
62
+ * O degradê fica nas letras, que são ASCII e existem em qualquer fonte.
63
+ */
64
+ const MARCA = 'NEUTRUN';
65
+ /** `1m03s`, `840ms`. Duração que se lê de relance. */
66
+ const duracao = (ms) => {
67
+ if (ms < 1_000)
68
+ return `${Math.round(ms)}ms`;
69
+ if (ms < 60_000)
70
+ return `${(ms / 1_000).toFixed(1)}s`;
71
+ const minutos = Math.floor(ms / 60_000);
72
+ return `${minutos}m${String(Math.round((ms % 60_000) / 1_000)).padStart(2, '0')}s`;
73
+ };
74
+ exports.duracao = duracao;
75
+ class Ui {
76
+ /** Pode animar: tem terminal, tem cor, e ninguém pediu silêncio. */
77
+ rich;
78
+ quiet;
79
+ stream;
80
+ fiando;
81
+ barra;
82
+ feitos = 0;
83
+ inicio = Date.now();
84
+ constructor(options = {}) {
85
+ this.stream = options.stream ?? process.stdout;
86
+ this.quiet = options.quiet === true;
87
+ /*
88
+ * `CI` e `NO_COLOR` entram na conta junto com o TTY.
89
+ *
90
+ * O TTY sozinho não basta: um runner de CI pode alocar pseudo-terminal e ainda assim
91
+ * guardar a saída num arquivo, que é onde o spinner vira ruído. E `NO_COLOR` é a
92
+ * convenção que já existe para "não pinte nada" — respeitar é de graça.
93
+ */
94
+ const ambienteDeixa = this.stream.isTTY === true &&
95
+ !process.env.CI &&
96
+ !process.env.NO_COLOR &&
97
+ process.env.TERM !== 'dumb';
98
+ this.rich = (options.color ?? ambienteDeixa) && !this.quiet;
99
+ if (options.color === false)
100
+ chalk_1.default.level = 0;
101
+ }
102
+ /** O logotipo. Só aparece com terminal: num log ele é seis linhas de nada. */
103
+ banner(version) {
104
+ if (!this.rich)
105
+ return;
106
+ const letras = [...MARCA]
107
+ .map((letra, indice) => chalk_1.default.bold(degrade(letra, indice, MARCA.length)))
108
+ .join('');
109
+ this.stream.write(`\n ${chalk_1.default.dim('◆')} ${letras} ${chalk_1.default.dim(SIMBOLO.ponto)} ${chalk_1.default.cyan(`v${version}`)}\n` +
110
+ ` ${chalk_1.default.gray('framework do ecossistema Ninenity')}\n\n`);
111
+ }
112
+ titulo(texto, detalhe) {
113
+ if (this.quiet)
114
+ return;
115
+ this.stream.write(`${chalk_1.default.bold.white(texto)}${detalhe ? chalk_1.default.gray(` ${detalhe}`) : ''}\n`);
116
+ }
117
+ start(label) {
118
+ if (this.quiet)
119
+ return;
120
+ this.parar();
121
+ if (!this.rich) {
122
+ this.stream.write(`${chalk_1.default.cyan(SIMBOLO.seta)} ${label}\n`);
123
+ return;
124
+ }
125
+ this.fiando = (0, ora_1.default)({ text: label, stream: this.stream, spinner: 'dots' }).start();
126
+ }
127
+ update(label) {
128
+ if (this.quiet)
129
+ return;
130
+ if (this.fiando)
131
+ this.fiando.text = label;
132
+ else if (this.barra)
133
+ this.barra.update(this.feitos, { label });
134
+ }
135
+ /**
136
+ * Troca o spinner por uma barra quando o total aparece.
137
+ *
138
+ * Enquanto não se sabe quantos são, "traduzindo…" é tudo que dá para dizer com verdade.
139
+ * Assim que o total é conhecido, a barra passa a responder a única pergunta que
140
+ * interessa numa espera longa — quanto falta —, e é por isso que a troca acontece no
141
+ * meio do comando em vez de escolher um dos dois no começo.
142
+ */
143
+ total(count, label = 'progresso') {
144
+ if (this.quiet || count <= 0)
145
+ return;
146
+ this.parar();
147
+ this.feitos = 0;
148
+ /*
149
+ * A barra exige TTY de verdade, e não só `rich`.
150
+ *
151
+ * `--color` liga `rich` à força — o que faz sentido para cor e para o spinner, que o
152
+ * `ora` degrada sozinho imprimindo uma linha por quadro. A barra não degrada: sem TTY
153
+ * ela simplesmente não desenha, e o total sumia da saída sem deixar rastro.
154
+ */
155
+ if (!this.rich || this.stream.isTTY !== true) {
156
+ this.stream.write(`${chalk_1.default.cyan(SIMBOLO.seta)} ${label}: ${count} item(ns)\n`);
157
+ return;
158
+ }
159
+ this.barra = new cli_progress_1.default.SingleBar({
160
+ format: ` ${chalk_1.default.cyan('{bar}')} ${chalk_1.default.bold('{percentage}%')} ${chalk_1.default.gray('{value}/{total}')} ${chalk_1.default.dim('{label}')}`,
161
+ barCompleteChar: '█',
162
+ barIncompleteChar: '░',
163
+ hideCursor: true,
164
+ stream: this.stream,
165
+ barsize: 24,
166
+ clearOnComplete: true
167
+ }, cli_progress_1.default.Presets.shades_classic);
168
+ this.barra.start(count, 0, { label });
169
+ }
170
+ tick(label) {
171
+ if (this.quiet)
172
+ return;
173
+ this.feitos += 1;
174
+ if (this.barra)
175
+ this.barra.update(this.feitos, { label: label ?? '' });
176
+ else if (this.fiando && label)
177
+ this.fiando.text = label;
178
+ }
179
+ ok(label) {
180
+ if (this.quiet)
181
+ return;
182
+ if (this.fiando) {
183
+ this.fiando.succeed(label);
184
+ this.fiando = undefined;
185
+ return;
186
+ }
187
+ this.parar();
188
+ this.stream.write(`${chalk_1.default.green(SIMBOLO.ok)} ${label}\n`);
189
+ }
190
+ warn(label) {
191
+ if (this.quiet)
192
+ return;
193
+ if (this.fiando) {
194
+ this.fiando.warn(label);
195
+ this.fiando = undefined;
196
+ return;
197
+ }
198
+ this.parar();
199
+ this.stream.write(`${chalk_1.default.yellow(SIMBOLO.warn)} ${label}\n`);
200
+ }
201
+ /** Erro sai mesmo em `--quiet`: silêncio sobre falha é o silêncio errado. */
202
+ fail(label) {
203
+ if (this.fiando) {
204
+ this.fiando.fail(label);
205
+ this.fiando = undefined;
206
+ return;
207
+ }
208
+ this.parar();
209
+ process.stderr.write(`${chalk_1.default.red(SIMBOLO.fail)} ${label}\n`);
210
+ }
211
+ note(label) {
212
+ if (this.quiet)
213
+ return;
214
+ if (this.fiando || this.barra) {
215
+ // Escrever por baixo de um spinner embaralha a linha dele: vira texto do próprio.
216
+ this.update(label);
217
+ return;
218
+ }
219
+ this.stream.write(` ${chalk_1.default.gray(label)}\n`);
220
+ }
221
+ /** O resumo do fim: o que foi feito, em quanto tempo. */
222
+ resumo(linhas, titulo = 'Pronto') {
223
+ this.parar();
224
+ if (this.quiet)
225
+ return;
226
+ const largura = Math.max(...linhas.map(([rotulo]) => rotulo.length), 0);
227
+ this.stream.write(`\n${chalk_1.default.green.bold(`${SIMBOLO.ok} ${titulo}`)} ${chalk_1.default.gray(`em ${(0, exports.duracao)(Date.now() - this.inicio)}`)}\n`);
228
+ for (const [rotulo, valor] of linhas) {
229
+ this.stream.write(` ${chalk_1.default.gray(rotulo.padEnd(largura))} ${chalk_1.default.white(valor)}\n`);
230
+ }
231
+ this.stream.write('\n');
232
+ }
233
+ /** Fecha o que estiver animando. Idempotente, e chamado antes de qualquer escrita. */
234
+ parar() {
235
+ if (this.barra) {
236
+ this.barra.stop();
237
+ this.barra = undefined;
238
+ }
239
+ if (this.fiando) {
240
+ this.fiando.stop();
241
+ this.fiando = undefined;
242
+ }
243
+ }
244
+ }
245
+ exports.Ui = Ui;
246
+ //# sourceMappingURL=Ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Ui.js","sourceRoot":"","sources":["../../src/CLI/Ui.ts"],"names":[],"mappings":"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"}
package/dist/CLI/bin.js CHANGED
@@ -1,36 +1,108 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
3
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
4
9
  const Localize_1 = require("./Localize");
5
10
  const Translate_1 = require("./Translate");
6
11
  const Bootstrap_1 = require("./Bootstrap");
7
- const ConsoleLog_1 = require("../Shared/ConsoleLog");
8
- const command = process.argv[2]?.toLowerCase();
12
+ const Args_1 = require("./Args");
13
+ const Ui_1 = require("./Ui");
14
+ /**
15
+ * A porta de entrada da CLI.
16
+ *
17
+ * O que este arquivo garante, e a versão anterior não: **o código de saída diz a
18
+ * verdade.** Antes, comando desconhecido caía no texto de ajuda e saía com `0` — um
19
+ * `neutrun sinc && npm publish` publicava mesmo com o erro de digitação. Agora o que não
20
+ * foi entendido sai com `1`, e o que quebrou no meio também.
21
+ *
22
+ * A `Ui` é construída aqui e passada para baixo. Os comandos não sabem se existe terminal;
23
+ * eles reportam, e quem desenha é ela.
24
+ */
25
+ /** A versão sai do `package.json` do pacote, ande ele em `src` ou em `dist`. */
26
+ function versaoDoPacote() {
27
+ const candidatos = [
28
+ path_1.default.join(__dirname, '..', '..', 'package.json'),
29
+ path_1.default.join(__dirname, '..', '..', '..', 'package.json')
30
+ ];
31
+ for (const caminho of candidatos) {
32
+ try {
33
+ const bruto = JSON.parse(fs_1.default.readFileSync(caminho, 'utf-8'));
34
+ if (bruto.name === '@ninenity/neutrun' && bruto.version)
35
+ return bruto.version;
36
+ }
37
+ catch {
38
+ /* tenta o próximo */
39
+ }
40
+ }
41
+ return '0.0.0';
42
+ }
9
43
  async function main() {
10
- switch (command) {
11
- case 'bootstrap':
12
- case 'init':
13
- (0, Bootstrap_1.runBootstrap)();
14
- break;
15
- case 'locate':
16
- case 'localize':
17
- (0, Localize_1.runLocalize)();
18
- break;
19
- case 'translate':
20
- await (0, Translate_1.runTranslate)();
21
- break;
22
- case 'sync':
23
- case 'tsync':
24
- (0, Localize_1.runLocalize)();
25
- await (0, Translate_1.runTranslate)();
26
- break;
27
- default:
28
- (0, ConsoleLog_1.logInfo)('Uso: npx ninenity-cli <bootstrap | locate | translate | sync>', 'CLI');
29
- break;
44
+ const parsed = (0, Args_1.parseArgs)(process.argv.slice(2));
45
+ const version = versaoDoPacote();
46
+ const ui = new Ui_1.Ui({ color: parsed.color, quiet: parsed.quiet });
47
+ if (parsed.error) {
48
+ ui.fail(`${parsed.error}. Veja \`neutrun help\`.`);
49
+ return 1;
50
+ }
51
+ if (parsed.command === 'version') {
52
+ process.stdout.write(`${version}\n`);
53
+ return 0;
54
+ }
55
+ if (parsed.command === 'help') {
56
+ process.stdout.write(`${(0, Args_1.helpText)(version)}\n`);
57
+ return 0;
58
+ }
59
+ const dir = parsed.dir ? path_1.default.resolve(parsed.dir) : process.cwd();
60
+ if (!fs_1.default.existsSync(dir)) {
61
+ ui.fail(`a pasta "${dir}" não existe`);
62
+ return 1;
63
+ }
64
+ ui.banner(version);
65
+ ui.titulo(`neutrun ${parsed.command}`, path_1.default.basename(dir));
66
+ try {
67
+ if (parsed.command === 'bootstrap') {
68
+ const feitos = (0, Bootstrap_1.runBootstrap)(dir, ui);
69
+ ui.resumo([
70
+ ['arquivos criados', String(feitos.criados.length)],
71
+ ['já existiam', String(feitos.existiam.length)],
72
+ ['pasta', feitos.pasta]
73
+ ], 'Tipagens prontas');
74
+ return 0;
75
+ }
76
+ if (parsed.command === 'locate' || parsed.command === 'sync') {
77
+ const local = (0, Localize_1.runLocalize)(dir, ui);
78
+ ui.resumo([
79
+ ['arquivos refatorados', String(local.arquivos)],
80
+ ['chaves no dicionário', String(local.chaves)],
81
+ ['dicionários', 'tpt_tsl.ts, pt_br.ts']
82
+ ], 'Localização concluída');
83
+ if (parsed.command === 'locate')
84
+ return 0;
85
+ }
86
+ const traduzido = await (0, Translate_1.runTranslate)(dir, ui, parsed.langs);
87
+ ui.resumo([
88
+ ['chaves traduzidas', String(traduzido.chaves)],
89
+ ['idiomas', traduzido.idiomas.join(', ') || '—'],
90
+ ['falhas', String(traduzido.falhas)]
91
+ ], traduzido.falhas > 0 ? 'Tradução concluída com falhas' : 'Tradução concluída');
92
+ return traduzido.falhas > 0 ? 1 : 0;
93
+ }
94
+ catch (error) {
95
+ ui.parar();
96
+ ui.fail(error.message);
97
+ if (process.env.NEUTRUN_DEBUG)
98
+ console.error(error);
99
+ return 1;
30
100
  }
31
101
  }
32
- main().catch((err) => {
33
- (0, ConsoleLog_1.logError)(`Erro na execução da CLI: ${err}`, 'CLI');
34
- process.exit(1);
102
+ void main()
103
+ .then(codigo => { process.exitCode = codigo; })
104
+ .catch(error => {
105
+ process.stderr.write(`erro inesperado na CLI: ${String(error)}\n`);
106
+ process.exitCode = 1;
35
107
  });
36
108
  //# sourceMappingURL=bin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/CLI/bin.ts"],"names":[],"mappings":";;;AACA,yCAAwC;AACxC,2CAA0C;AAC1C,2CAA0C;AAC1C,qDAAwD;AAExD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAA;AAE9C,KAAK,UAAU,IAAI;IACjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM;YACT,IAAA,wBAAY,GAAE,CAAA;YACd,MAAK;QAEP,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU;YACb,IAAA,sBAAW,GAAE,CAAA;YACb,MAAK;QAEP,KAAK,WAAW;YACd,MAAM,IAAA,wBAAY,GAAE,CAAA;YACpB,MAAK;QAEP,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,IAAA,sBAAW,GAAE,CAAA;YACb,MAAM,IAAA,wBAAY,GAAE,CAAA;YACpB,MAAK;QAEP;YACE,IAAA,oBAAO,EAAC,+DAA+D,EAAE,KAAK,CAAC,CAAA;YAC/E,MAAK;IACT,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,IAAA,qBAAQ,EAAC,4BAA4B,GAAG,EAAE,EAAE,KAAK,CAAC,CAAA;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/CLI/bin.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ninenity/neutrun",
3
- "version": "1.9.3",
3
+ "version": "1.9.4",
4
4
  "description": "Framework do ecossistema Ninenity.",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -8,6 +8,10 @@
8
8
  "files": [
9
9
  "dist"
10
10
  ],
11
+ "bin": {
12
+ "neutrun": "dist/CLI/bin.js",
13
+ "ninenity-cli": "dist/CLI/bin.js"
14
+ },
11
15
  "main": "dist/index.js",
12
16
  "types": "dist/index.d.ts",
13
17
  "exports": {
@@ -46,7 +50,8 @@
46
50
  "build": "tsc",
47
51
  "typecheck": "tsc --noEmit",
48
52
  "prepack": "npm run build",
49
- "pack:check": "npm pack --dry-run",
53
+ "pack:check": "node scripts/check-pack.mjs dist/",
54
+ "cli": "node dist/CLI/bin.js",
50
55
  "dev": "tsc --watch",
51
56
  "test": "jest --config ../jest.config.js --runInBand"
52
57
  },