@neetru/cli 2.1.0 → 2.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/README.md +40 -2
- package/dist/commands/doctor.js +3 -3
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +13 -1
- package/dist/commands/init.js +246 -53
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/new.d.ts +12 -0
- package/dist/commands/new.js +163 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/products.d.ts +31 -0
- package/dist/commands/products.js +190 -0
- package/dist/commands/products.js.map +1 -1
- package/dist/commands/upgrade.js +1 -1
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/commands/workspaces.d.ts +22 -0
- package/dist/commands/workspaces.js +146 -2
- package/dist/commands/workspaces.js.map +1 -1
- package/dist/index.js +95 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/config-schema.d.ts +2 -2
- package/dist/version.d.ts +1 -0
- package/dist/version.js +24 -0
- package/dist/version.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -15,6 +15,8 @@ Requer Node 20 ou superior.
|
|
|
15
15
|
|
|
16
16
|
> **Migrando de `1.0.x`?** A linha `2.x` é uma **reescrita completa** com arquitetura nova (VM-based agents). Veja [CHANGELOG.md](./CHANGELOG.md) — não há caminho automático.
|
|
17
17
|
|
|
18
|
+
> **Novo em `2.2.0`?** Veja [v2.2.0 — Fluxo end-to-end](#v220--fluxo-end-to-end) abaixo: 5 comandos novos que fecham o bootstrap completo no terminal.
|
|
19
|
+
|
|
18
20
|
## Topologia de produto Neetru
|
|
19
21
|
|
|
20
22
|
```
|
|
@@ -55,6 +57,26 @@ neetru build
|
|
|
55
57
|
neetru deploy --target=vm
|
|
56
58
|
```
|
|
57
59
|
|
|
60
|
+
## v2.2.0 — Fluxo end-to-end
|
|
61
|
+
|
|
62
|
+
A linha `2.2.0` (2026-05-16) fecha o ciclo completo de bootstrap de um SaaS Neetru a partir do terminal — antes, criar produto + workspace exigia ida à UI staff.
|
|
63
|
+
|
|
64
|
+
| Comando | O que faz | Doc |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| `neetru products create` | Registra um produto novo em `products/{id}` (registry interno do ProductOS). | [`products.md`](../docs/sistema/manuais/devex/cli-reference/products.md) |
|
|
67
|
+
| `neetru workspaces list` | Lista workspaces com filtros (`--product`, `--customer`, `--env`, `--status`). | [`workspaces.md`](../docs/sistema/manuais/devex/cli-reference/workspaces.md) |
|
|
68
|
+
| `neetru workspaces get <id>` | Detalhes completos de um workspace (sem expor `oauthClientSecret`). | [`workspaces.md`](../docs/sistema/manuais/devex/cli-reference/workspaces.md) |
|
|
69
|
+
| `neetru workspaces open <id>` | Abre o painel `/workspaces/<id>` no browser (best-effort cross-platform). | [`workspaces.md`](../docs/sistema/manuais/devex/cli-reference/workspaces.md) |
|
|
70
|
+
| `neetru new <name>` | **Macro end-to-end:** produto + workspace + scaffold local + abre browser. Pra prototipagem rápida e onboarding. | [`new-macro.md`](../docs/sistema/manuais/devex/cli-reference/new-macro.md) |
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Macro: do zero ao dev local em <60s
|
|
74
|
+
neetru new pedidos-pro
|
|
75
|
+
cd pedidos-pro && npm install && npm run dev
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Ver os 3 docs canônicos acima pra flags, exit codes, schema e tratamento de erro detalhado.
|
|
79
|
+
|
|
58
80
|
## Comandos
|
|
59
81
|
|
|
60
82
|
### Auth
|
|
@@ -65,10 +87,26 @@ neetru deploy --target=vm
|
|
|
65
87
|
| `neetru logout` | Apaga credenciais locais. |
|
|
66
88
|
| `neetru whoami` | Mostra identidade da chave atual. `--json` para scripts. |
|
|
67
89
|
|
|
68
|
-
###
|
|
90
|
+
### Produtos (registry interno — ProductOS)
|
|
91
|
+
|
|
92
|
+
| Comando | O que faz |
|
|
93
|
+
|---|---|
|
|
94
|
+
| `neetru products create` | Cria produto em `products/{id}` (interativo ou via flags). v2.2.0. |
|
|
95
|
+
| `neetru products list` | Lista produtos do registry interno. `--status`, `--limit`, `--json`. |
|
|
96
|
+
| `neetru products publish <slug>` | Toggle visibility do catálogo público para um produto já cadastrado. |
|
|
97
|
+
| `neetru products unpublish <slug>` | Esconde da landing (mantém doc). |
|
|
98
|
+
| `neetru products db ...` | Per-product database management (Phase A — 8 subcomandos). |
|
|
99
|
+
|
|
100
|
+
### Workspaces (prototipação no Core)
|
|
69
101
|
|
|
70
102
|
| Comando | O que faz |
|
|
71
103
|
|---|---|
|
|
104
|
+
| `neetru new <name>` | **Macro end-to-end:** produto + workspace + scaffold local. v2.2.0. |
|
|
105
|
+
| `neetru workspaces create` | Cria workspace vinculado a (produto × customer × env). |
|
|
106
|
+
| `neetru workspaces list` | Lista workspaces com filtros. v2.2.0. |
|
|
107
|
+
| `neetru workspaces get <id>` | Detalhes completos. v2.2.0. |
|
|
108
|
+
| `neetru workspaces open <id>` | Abre `/workspaces/<id>` no browser. v2.2.0. |
|
|
109
|
+
| `neetru workspaces advance <id>` | Promove bundle version no workspace. |
|
|
72
110
|
| `neetru init <name>` | Scaffold de projeto Next.js ou Node API. `--type nextjs\|node-api`. |
|
|
73
111
|
| `neetru status --client-id <id>` | Status do workspace: build/deploy último, domínio, tier. `--json` para scripts. |
|
|
74
112
|
| `neetru logs --client-id <id>` | Logs do workspace; `-f` follow, `-n` lines, `--since 30m`, `--level error`. |
|
|
@@ -147,7 +185,7 @@ NEETRU_API_BASE=https://api.neetru.com # default
|
|
|
147
185
|
|
|
148
186
|
## Repositório
|
|
149
187
|
|
|
150
|
-
Mantido em [`Neetru/core/cli/`](https://github.com/Neetru/core/tree/main/cli) como parte do monorepo.
|
|
188
|
+
Mantido em [`Neetru/neetru-core/cli/`](https://github.com/Neetru/neetru-core/tree/main/cli) como parte do monorepo.
|
|
151
189
|
|
|
152
190
|
## License
|
|
153
191
|
|
package/dist/commands/doctor.js
CHANGED
|
@@ -21,9 +21,9 @@ import { apiRequest, CliApiError, CliNetworkError } from '../lib/api-client.js';
|
|
|
21
21
|
import { config } from '../lib/config.js';
|
|
22
22
|
import { neetruConfigSchema } from '../lib/config-schema.js';
|
|
23
23
|
import { log } from '../utils/logger.js';
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
|
|
24
|
+
// CLI_VERSION lido dinamicamente de cli/package.json via src/version.ts.
|
|
25
|
+
// Fix do bug onde 2.0.0 ficava hardcoded depois de bumps.
|
|
26
|
+
import { CLI_VERSION } from '../version.js';
|
|
27
27
|
const NPM_REGISTRY = 'https://registry.npmjs.org/@neetru/cli';
|
|
28
28
|
/* ── Checks individuais — exportados pra teste ────────────────────── */
|
|
29
29
|
export async function checkToken() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
interface InitOptions {
|
|
2
2
|
name: string;
|
|
3
3
|
type: 'nextjs' | 'node-api';
|
|
4
|
+
/** Skip prompt + init em cwd direto (merge mode). */
|
|
5
|
+
here?: boolean;
|
|
6
|
+
/** Skip prompt + sobrescreve conflitos sem perguntar. */
|
|
7
|
+
force?: boolean;
|
|
8
|
+
/** Custom path target. */
|
|
9
|
+
path?: string;
|
|
10
|
+
/** Modo non-interactive — sai com erro se prompt for necessário. */
|
|
11
|
+
yes?: boolean;
|
|
4
12
|
}
|
|
5
13
|
/**
|
|
6
14
|
* Scaffold de projeto SaaS Neetru.
|
|
7
15
|
* Gera estrutura mínima com Core SDK wired: auth, tenant gate, billing hook.
|
|
16
|
+
*
|
|
17
|
+
* v2.1.1 (2026-05-16): adiciona prompt interativo de caminho + merge mode +
|
|
18
|
+
* preservação de arquivos existentes. Antes sempre criava subdiretório e
|
|
19
|
+
* falhava se nome existia.
|
|
8
20
|
*/
|
|
9
|
-
export declare function runInit(
|
|
21
|
+
export declare function runInit(opts: InitOptions): Promise<void>;
|
|
10
22
|
export {};
|
package/dist/commands/init.js
CHANGED
|
@@ -1,46 +1,240 @@
|
|
|
1
1
|
import * as fs from 'fs/promises';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import ora from 'ora';
|
|
4
|
+
import inquirer from 'inquirer';
|
|
4
5
|
import { log } from '../utils/logger.js';
|
|
6
|
+
/**
|
|
7
|
+
* Inspeciona um diretório pra decidir se é projeto existente, vazio, ou
|
|
8
|
+
* misto. Usado pra escolher merge vs new dir vs abort.
|
|
9
|
+
*/
|
|
10
|
+
async function inspectDir(dir) {
|
|
11
|
+
try {
|
|
12
|
+
const entries = await fs.readdir(dir);
|
|
13
|
+
const files = entries.filter((e) => !e.startsWith('.DS_Store'));
|
|
14
|
+
return {
|
|
15
|
+
exists: true,
|
|
16
|
+
isEmpty: files.length === 0,
|
|
17
|
+
hasPackageJson: entries.includes('package.json'),
|
|
18
|
+
hasSrc: entries.includes('src'),
|
|
19
|
+
hasGit: entries.includes('.git'),
|
|
20
|
+
hasNeetruConfig: entries.includes('neetru.config.json'),
|
|
21
|
+
fileCount: files.length,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return {
|
|
26
|
+
exists: false,
|
|
27
|
+
isEmpty: true,
|
|
28
|
+
hasPackageJson: false,
|
|
29
|
+
hasSrc: false,
|
|
30
|
+
hasGit: false,
|
|
31
|
+
hasNeetruConfig: false,
|
|
32
|
+
fileCount: 0,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Decide o caminho final + modo (new|merge|abort) interativamente.
|
|
38
|
+
* Imprime hints pra dev entender porque cada opção aparece.
|
|
39
|
+
*/
|
|
40
|
+
async function resolveTarget(name, cwd, opts) {
|
|
41
|
+
const subDir = path.resolve(cwd, name);
|
|
42
|
+
const customDir = opts.path ? path.resolve(cwd, opts.path) : null;
|
|
43
|
+
const cwdInspection = await inspectDir(cwd);
|
|
44
|
+
// ── Flags explícitas curtem o prompt ─────────────────────────────────
|
|
45
|
+
if (opts.here) {
|
|
46
|
+
return { dir: cwd, mode: 'merge', force: Boolean(opts.force) };
|
|
47
|
+
}
|
|
48
|
+
if (customDir) {
|
|
49
|
+
const insp = await inspectDir(customDir);
|
|
50
|
+
if (insp.exists && !insp.isEmpty && !opts.force) {
|
|
51
|
+
log.warn(`${customDir} tem ${insp.fileCount} arquivo(s). Use --force pra sobrescrever ou prossiga em modo merge.`);
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
dir: customDir,
|
|
56
|
+
mode: insp.hasPackageJson ? 'merge' : 'new',
|
|
57
|
+
force: Boolean(opts.force),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// ── Modo non-interactive sem flags ───────────────────────────────────
|
|
61
|
+
if (opts.yes) {
|
|
62
|
+
// Default: cria subdir <cwd>/<name>
|
|
63
|
+
const insp = await inspectDir(subDir);
|
|
64
|
+
if (insp.exists && !insp.isEmpty) {
|
|
65
|
+
log.error(`Diretório "${name}" já existe com arquivos. Use --here ou --path ou --force.`);
|
|
66
|
+
process.exit(1); // erro hard em non-interactive — consistente com pre-2.2.0
|
|
67
|
+
}
|
|
68
|
+
return { dir: subDir, mode: 'new', force: false };
|
|
69
|
+
}
|
|
70
|
+
// ── Interactive ──────────────────────────────────────────────────────
|
|
71
|
+
console.log();
|
|
72
|
+
log.info(`Onde você quer inicializar o projeto "${name}"?`);
|
|
73
|
+
console.log();
|
|
74
|
+
log.dim(` cwd atual: ${cwd}`);
|
|
75
|
+
if (cwdInspection.hasPackageJson) {
|
|
76
|
+
log.dim(` ⚠ cwd já tem package.json — parece projeto existente`);
|
|
77
|
+
}
|
|
78
|
+
else if (!cwdInspection.isEmpty) {
|
|
79
|
+
log.dim(` ⚠ cwd tem ${cwdInspection.fileCount} arquivo(s)`);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
log.dim(` cwd está vazio`);
|
|
83
|
+
}
|
|
84
|
+
if (cwdInspection.hasNeetruConfig) {
|
|
85
|
+
log.dim(` ⚠ cwd já tem neetru.config.json — projeto Neetru existente`);
|
|
86
|
+
}
|
|
87
|
+
console.log();
|
|
88
|
+
const choices = [
|
|
89
|
+
{
|
|
90
|
+
name: `Criar novo subdiretório → ./${name}/`,
|
|
91
|
+
value: 'subdir',
|
|
92
|
+
short: 'subdir',
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
if (cwdInspection.exists) {
|
|
96
|
+
const label = cwdInspection.hasPackageJson
|
|
97
|
+
? `Mesclar no cwd atual (merge — preserva arquivos) → ${cwd}`
|
|
98
|
+
: cwdInspection.isEmpty
|
|
99
|
+
? `Inicializar AQUI no cwd vazio → ${cwd}`
|
|
100
|
+
: `Mesclar no cwd (tem ${cwdInspection.fileCount} arq, vai preservar) → ${cwd}`;
|
|
101
|
+
choices.push({ name: label, value: 'here', short: 'here' });
|
|
102
|
+
}
|
|
103
|
+
choices.push({ name: 'Outro caminho (digite)', value: 'custom', short: 'custom' }, { name: 'Cancelar', value: 'abort', short: 'cancel' });
|
|
104
|
+
const { choice } = await inquirer.prompt([
|
|
105
|
+
{ type: 'list', name: 'choice', message: 'Caminho do init:', choices },
|
|
106
|
+
]);
|
|
107
|
+
if (choice === 'abort') {
|
|
108
|
+
log.warn('Cancelado.');
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
let dir;
|
|
112
|
+
let mode;
|
|
113
|
+
if (choice === 'here') {
|
|
114
|
+
dir = cwd;
|
|
115
|
+
mode = cwdInspection.isEmpty ? 'new' : 'merge';
|
|
116
|
+
}
|
|
117
|
+
else if (choice === 'custom') {
|
|
118
|
+
const { custom } = await inquirer.prompt([
|
|
119
|
+
{ type: 'input', name: 'custom', message: 'Caminho (relativo ou absoluto):', default: `./${name}` },
|
|
120
|
+
]);
|
|
121
|
+
dir = path.resolve(cwd, custom);
|
|
122
|
+
const insp = await inspectDir(dir);
|
|
123
|
+
mode = insp.isEmpty || !insp.exists ? 'new' : 'merge';
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
dir = subDir;
|
|
127
|
+
const insp = await inspectDir(dir);
|
|
128
|
+
if (insp.exists && !insp.isEmpty) {
|
|
129
|
+
log.warn(`./${name} já existe com ${insp.fileCount} arquivo(s).`);
|
|
130
|
+
const { proceed } = await inquirer.prompt([
|
|
131
|
+
{
|
|
132
|
+
type: 'list',
|
|
133
|
+
name: 'proceed',
|
|
134
|
+
message: 'O que fazer?',
|
|
135
|
+
choices: [
|
|
136
|
+
{ name: 'Merge (preserva existentes, adiciona scaffold)', value: 'merge' },
|
|
137
|
+
{ name: 'Cancelar', value: 'abort' },
|
|
138
|
+
],
|
|
139
|
+
},
|
|
140
|
+
]);
|
|
141
|
+
if (proceed === 'abort') {
|
|
142
|
+
log.warn('Cancelado.');
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
mode = 'merge';
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
mode = 'new';
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// ── Confirmação final ─────────────────────────────────────────────────
|
|
152
|
+
console.log();
|
|
153
|
+
log.info(`Vou ${mode === 'merge' ? 'MESCLAR scaffold em' : 'CRIAR estrutura em'}: ${dir}`);
|
|
154
|
+
if (mode === 'merge') {
|
|
155
|
+
log.dim(` → arquivos existentes serão PRESERVADOS (skip silencioso).`);
|
|
156
|
+
log.dim(` → só arquivos ausentes do scaffold serão criados.`);
|
|
157
|
+
}
|
|
158
|
+
const { confirm } = await inquirer.prompt([
|
|
159
|
+
{ type: 'confirm', name: 'confirm', message: 'Confirma?', default: true },
|
|
160
|
+
]);
|
|
161
|
+
if (!confirm) {
|
|
162
|
+
log.warn('Cancelado.');
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
return { dir, mode, force: false };
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Wrapper write-if-missing — preserva existentes em modo merge.
|
|
169
|
+
*/
|
|
170
|
+
function makeWriter(mode, force) {
|
|
171
|
+
return async function writeFileSafe(filePath, content) {
|
|
172
|
+
if (mode === 'merge' && !force) {
|
|
173
|
+
try {
|
|
174
|
+
await fs.access(filePath);
|
|
175
|
+
return 'skipped'; // já existe, preserva
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// não existe, escreve
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
182
|
+
await fs.writeFile(filePath, content);
|
|
183
|
+
return 'wrote';
|
|
184
|
+
};
|
|
185
|
+
}
|
|
5
186
|
/**
|
|
6
187
|
* Scaffold de projeto SaaS Neetru.
|
|
7
188
|
* Gera estrutura mínima com Core SDK wired: auth, tenant gate, billing hook.
|
|
189
|
+
*
|
|
190
|
+
* v2.1.1 (2026-05-16): adiciona prompt interativo de caminho + merge mode +
|
|
191
|
+
* preservação de arquivos existentes. Antes sempre criava subdiretório e
|
|
192
|
+
* falhava se nome existia.
|
|
8
193
|
*/
|
|
9
|
-
export async function runInit(
|
|
194
|
+
export async function runInit(opts) {
|
|
10
195
|
log.banner();
|
|
11
|
-
log.heading(`Inicializando produto: ${name}`);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
try {
|
|
16
|
-
await fs.access(dir);
|
|
17
|
-
log.error(`Diretório "${name}" já existe.`);
|
|
18
|
-
process.exit(1);
|
|
196
|
+
log.heading(`Inicializando produto: ${opts.name}`);
|
|
197
|
+
const target = await resolveTarget(opts.name, process.cwd(), opts);
|
|
198
|
+
if (!target) {
|
|
199
|
+
process.exit(0); // cancelado limpo
|
|
19
200
|
}
|
|
20
|
-
|
|
21
|
-
|
|
201
|
+
const { dir, mode, force } = target;
|
|
202
|
+
console.log();
|
|
203
|
+
const spinner = ora({
|
|
204
|
+
text: mode === 'merge' ? 'Mesclando scaffold...' : 'Criando estrutura...',
|
|
205
|
+
color: 'blue',
|
|
206
|
+
}).start();
|
|
207
|
+
const writer = makeWriter(mode, force);
|
|
208
|
+
const writes = [];
|
|
209
|
+
const skips = [];
|
|
210
|
+
async function track(filePath, content) {
|
|
211
|
+
const res = await writer(filePath, content);
|
|
212
|
+
const rel = path.relative(dir, filePath) || path.basename(filePath);
|
|
213
|
+
if (res === 'wrote')
|
|
214
|
+
writes.push(rel);
|
|
215
|
+
else
|
|
216
|
+
skips.push(rel);
|
|
22
217
|
}
|
|
23
|
-
const spinner = ora({ text: 'Criando estrutura...', color: 'blue' }).start();
|
|
24
218
|
try {
|
|
25
219
|
await fs.mkdir(dir, { recursive: true });
|
|
26
|
-
if (type === 'nextjs') {
|
|
27
|
-
await scaffoldNextjs(dir, name);
|
|
220
|
+
if (opts.type === 'nextjs') {
|
|
221
|
+
await scaffoldNextjs(dir, opts.name, track);
|
|
28
222
|
}
|
|
29
223
|
else {
|
|
30
|
-
await scaffoldNodeApi(dir, name);
|
|
224
|
+
await scaffoldNodeApi(dir, opts.name, track);
|
|
31
225
|
}
|
|
32
|
-
//
|
|
33
|
-
const slug = name
|
|
226
|
+
// neetru.config.json — sempre escreve (se merge, só se não existir)
|
|
227
|
+
const slug = opts.name
|
|
34
228
|
.trim()
|
|
35
229
|
.toLowerCase()
|
|
36
230
|
.replace(/[^a-z0-9-]+/g, '-')
|
|
37
231
|
.replace(/-+/g, '-')
|
|
38
232
|
.replace(/^-|-$/g, '');
|
|
39
|
-
await
|
|
233
|
+
await track(path.join(dir, 'neetru.config.json'), JSON.stringify({
|
|
40
234
|
$schema: 'https://neetru.com/schema/neetru.config.json',
|
|
41
|
-
slug: slug || name,
|
|
42
|
-
name,
|
|
43
|
-
runtime: type,
|
|
235
|
+
slug: slug || opts.name,
|
|
236
|
+
name: opts.name,
|
|
237
|
+
runtime: opts.type,
|
|
44
238
|
tenantId: '',
|
|
45
239
|
publish: {
|
|
46
240
|
tagline: '',
|
|
@@ -50,29 +244,38 @@ export async function runInit({ name, type }) {
|
|
|
50
244
|
order: 100,
|
|
51
245
|
},
|
|
52
246
|
}, null, 2));
|
|
53
|
-
spinner.succeed('
|
|
247
|
+
spinner.succeed(mode === 'merge' ? 'Scaffold mesclado!' : 'Projeto criado!');
|
|
54
248
|
console.log();
|
|
55
249
|
log.info(`Diretório: ${dir}`);
|
|
56
|
-
log.info(`
|
|
57
|
-
log.
|
|
250
|
+
log.info(`Modo: ${mode === 'merge' ? 'MERGE (preserved existing files)' : 'NEW (full scaffold)'}`);
|
|
251
|
+
log.info(`${writes.length} arquivo(s) criado(s)${skips.length ? `, ${skips.length} preservado(s)` : ''}.`);
|
|
252
|
+
if (skips.length > 0 && skips.length <= 8) {
|
|
253
|
+
log.dim(' Preservados:');
|
|
254
|
+
for (const f of skips)
|
|
255
|
+
log.dim(` · ${f}`);
|
|
256
|
+
}
|
|
257
|
+
else if (skips.length > 8) {
|
|
258
|
+
log.dim(` ${skips.length} arquivos preservados (rode com --force pra sobrescrever).`);
|
|
259
|
+
}
|
|
260
|
+
console.log();
|
|
261
|
+
log.info('Próximos passos:');
|
|
262
|
+
if (dir !== process.cwd()) {
|
|
263
|
+
log.dim(` cd ${path.relative(process.cwd(), dir) || opts.name}`);
|
|
264
|
+
}
|
|
58
265
|
log.dim(` npm install`);
|
|
59
|
-
log.dim(` neetru ai
|
|
60
|
-
log.dim(`
|
|
266
|
+
log.dim(` neetru ai # inicie o assistente dentro do projeto`);
|
|
267
|
+
log.dim(` npm run dev # inicia servidor de dev local`);
|
|
61
268
|
console.log();
|
|
62
269
|
}
|
|
63
270
|
catch (err) {
|
|
64
|
-
spinner.fail('Falha
|
|
65
|
-
log.error(err
|
|
271
|
+
spinner.fail('Falha no scaffold.');
|
|
272
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
66
273
|
process.exit(1);
|
|
67
274
|
}
|
|
68
275
|
}
|
|
69
|
-
async function scaffoldNextjs(dir, name) {
|
|
70
|
-
const src = path.join(dir, 'src', 'app');
|
|
71
|
-
await fs.mkdir(src, { recursive: true });
|
|
72
|
-
await fs.mkdir(path.join(dir, 'src', 'lib'), { recursive: true });
|
|
73
|
-
await fs.mkdir(path.join(dir, 'src', 'components'), { recursive: true });
|
|
276
|
+
async function scaffoldNextjs(dir, name, write) {
|
|
74
277
|
// package.json
|
|
75
|
-
await
|
|
278
|
+
await write(path.join(dir, 'package.json'), JSON.stringify({
|
|
76
279
|
name,
|
|
77
280
|
version: '0.1.0',
|
|
78
281
|
private: true,
|
|
@@ -95,12 +298,12 @@ async function scaffoldNextjs(dir, name) {
|
|
|
95
298
|
},
|
|
96
299
|
}, null, 2));
|
|
97
300
|
// next.config.mjs
|
|
98
|
-
await
|
|
301
|
+
await write(path.join(dir, 'next.config.mjs'), `/** @type {import('next').NextConfig} */
|
|
99
302
|
const nextConfig = {};
|
|
100
303
|
export default nextConfig;
|
|
101
304
|
`);
|
|
102
305
|
// Layout raiz
|
|
103
|
-
await
|
|
306
|
+
await write(path.join(dir, 'src', 'app', 'layout.tsx'), `import type { Metadata } from 'next';
|
|
104
307
|
|
|
105
308
|
export const metadata: Metadata = {
|
|
106
309
|
title: '${name}',
|
|
@@ -115,8 +318,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
|
|
|
115
318
|
}
|
|
116
319
|
`);
|
|
117
320
|
// Página inicial com auth gate via SDK 1.1
|
|
118
|
-
|
|
119
|
-
await fs.writeFile(path.join(src, 'page.tsx'), `// Produto Neetru — gerado por neetru init
|
|
321
|
+
await write(path.join(dir, 'src', 'app', 'page.tsx'), `// Produto Neetru — gerado por neetru init
|
|
120
322
|
// Auth via @neetru/sdk client (createNeetruClient + auth namespace)
|
|
121
323
|
|
|
122
324
|
'use client';
|
|
@@ -162,9 +364,8 @@ export default function HomePage() {
|
|
|
162
364
|
);
|
|
163
365
|
}
|
|
164
366
|
`);
|
|
165
|
-
// Middleware Next.js — gate de cookie de sessão em rotas privadas
|
|
166
|
-
|
|
167
|
-
await fs.writeFile(path.join(dir, 'src', 'middleware.ts'), `import { NextRequest, NextResponse } from 'next/server';
|
|
367
|
+
// Middleware Next.js — gate de cookie de sessão em rotas privadas
|
|
368
|
+
await write(path.join(dir, 'src', 'middleware.ts'), `import { NextRequest, NextResponse } from 'next/server';
|
|
168
369
|
|
|
169
370
|
const PUBLIC_PATHS = ['/login', '/api/auth', '/_next', '/favicon.ico'];
|
|
170
371
|
|
|
@@ -174,7 +375,6 @@ export function middleware(request: NextRequest) {
|
|
|
174
375
|
return NextResponse.next();
|
|
175
376
|
}
|
|
176
377
|
|
|
177
|
-
// Cookie '__session' setado pelo OIDC callback do auth.neetru.com.
|
|
178
378
|
const hasSession = request.cookies.has('__session');
|
|
179
379
|
if (!hasSession) {
|
|
180
380
|
const url = request.nextUrl.clone();
|
|
@@ -190,7 +390,7 @@ export const config = {
|
|
|
190
390
|
};
|
|
191
391
|
`);
|
|
192
392
|
// tsconfig.json
|
|
193
|
-
await
|
|
393
|
+
await write(path.join(dir, 'tsconfig.json'), JSON.stringify({
|
|
194
394
|
compilerOptions: {
|
|
195
395
|
target: 'ES2017',
|
|
196
396
|
lib: ['dom', 'dom.iterable', 'esnext'],
|
|
@@ -212,10 +412,8 @@ export const config = {
|
|
|
212
412
|
exclude: ['node_modules'],
|
|
213
413
|
}, null, 2));
|
|
214
414
|
}
|
|
215
|
-
async function scaffoldNodeApi(dir, name) {
|
|
216
|
-
await
|
|
217
|
-
await fs.mkdir(path.join(dir, 'src', 'middleware'), { recursive: true });
|
|
218
|
-
await fs.writeFile(path.join(dir, 'package.json'), JSON.stringify({
|
|
415
|
+
async function scaffoldNodeApi(dir, name, write) {
|
|
416
|
+
await write(path.join(dir, 'package.json'), JSON.stringify({
|
|
219
417
|
name,
|
|
220
418
|
version: '0.1.0',
|
|
221
419
|
private: true,
|
|
@@ -235,12 +433,10 @@ async function scaffoldNodeApi(dir, name) {
|
|
|
235
433
|
'@types/node': '^22.0.0',
|
|
236
434
|
},
|
|
237
435
|
}, null, 2));
|
|
238
|
-
await
|
|
436
|
+
await write(path.join(dir, 'src', 'index.ts'), `import Fastify from 'fastify';
|
|
239
437
|
import { createNeetruClient } from '@neetru/sdk';
|
|
240
438
|
|
|
241
439
|
// Padrão @neetru/sdk@1.1 — namespaces server-side: entitlements/usage/telemetry.
|
|
242
|
-
// O SDK NÃO publica subpath /fastify; o gate é um preHandler fino que reusa
|
|
243
|
-
// o cliente. \`createNeetruClient\` é seguro em Node com apiKey de produto.
|
|
244
440
|
const neetru = createNeetruClient({
|
|
245
441
|
apiKey: process.env.NEETRU_API_KEY,
|
|
246
442
|
env: (process.env.NEETRU_ENV as 'dev' | 'prod') ?? 'dev',
|
|
@@ -250,7 +446,6 @@ const PRODUCT_SLUG = process.env.NEETRU_PRODUCT_SLUG ?? '${name}';
|
|
|
250
446
|
|
|
251
447
|
const app = Fastify({ logger: true });
|
|
252
448
|
|
|
253
|
-
// preHandler de entitlement: bloqueia a rota se o portador não tem a feature.
|
|
254
449
|
function requireEntitlement(feature: string) {
|
|
255
450
|
return async (
|
|
256
451
|
_request: import('fastify').FastifyRequest,
|
|
@@ -265,12 +460,10 @@ function requireEntitlement(feature: string) {
|
|
|
265
460
|
|
|
266
461
|
app.get('/health', async () => ({ status: 'ok' }));
|
|
267
462
|
|
|
268
|
-
// Rota protegida — só responde se o produto tem a feature 'api-access'.
|
|
269
463
|
app.get(
|
|
270
464
|
'/api/data',
|
|
271
465
|
{ preHandler: requireEntitlement('api-access') },
|
|
272
466
|
async () => {
|
|
273
|
-
// Registra uso pra billing metered (acumula no mock em NEETRU_ENV=dev).
|
|
274
467
|
await neetru.usage.report('api_call', 1, { productId: PRODUCT_SLUG });
|
|
275
468
|
return { data: [] };
|
|
276
469
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface NewMacroOptions {
|
|
2
|
+
productSlug?: string;
|
|
3
|
+
env?: 'dev' | 'staging' | 'prod';
|
|
4
|
+
tier?: 'dev' | 'standard' | 'enterprise';
|
|
5
|
+
customer?: string;
|
|
6
|
+
/** Pula scaffold local (útil quando o repo já existe). */
|
|
7
|
+
skipInit?: boolean;
|
|
8
|
+
/** Pula a abertura do browser (útil em CI). */
|
|
9
|
+
skipOpen?: boolean;
|
|
10
|
+
json?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function runNewMacro(name: string, opts?: NewMacroOptions): Promise<void>;
|