forlogic-core 1.11.3 → 1.11.5
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 +188 -67
- package/dist/README.md +266 -145
- package/dist/bin/pull-docs.js +61 -0
- package/dist/vite/index.esm.js +0 -9
- package/dist/vite/index.js +0 -9
- package/package.json +12 -2
package/README.md
CHANGED
|
@@ -210,15 +210,13 @@ CREATE INDEX idx_processes_title ON processes.processes(title);
|
|
|
210
210
|
|
|
211
211
|
A biblioteca `forlogic-core` exporta configurações padronizadas de Vite e Tailwind para garantir consistência de segurança e estilo em todos os projetos.
|
|
212
212
|
|
|
213
|
-
### 📦
|
|
214
|
-
|
|
215
|
-
As configurações estão disponíveis via subpaths do pacote:
|
|
213
|
+
### 📦 Imports Disponíveis
|
|
216
214
|
|
|
217
215
|
```typescript
|
|
218
|
-
// Configurações Vite
|
|
216
|
+
// Configurações Vite (headers de segurança, CSP, CORS)
|
|
219
217
|
import { createSecurityHeadersPlugin, createForlogicViteConfig } from 'forlogic-core/vite';
|
|
220
218
|
|
|
221
|
-
// Preset Tailwind
|
|
219
|
+
// Preset Tailwind (cores, animações, gradientes)
|
|
222
220
|
import { forlogicTailwindPreset, forlogicContentPaths } from 'forlogic-core/tailwind';
|
|
223
221
|
```
|
|
224
222
|
|
|
@@ -258,64 +256,54 @@ import { defineConfig } from 'vite';
|
|
|
258
256
|
import react from '@vitejs/plugin-react-swc';
|
|
259
257
|
import { createSecurityHeadersPlugin } from 'forlogic-core/vite';
|
|
260
258
|
|
|
261
|
-
export default defineConfig(({ mode }) => {
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
cspReportUri: 'https://seu-projeto.supabase.co/functions/v1/csp-report',
|
|
298
|
-
|
|
299
|
-
// Habilitar Trusted Types em produção (default: true)
|
|
300
|
-
enableTrustedTypes: true,
|
|
301
|
-
|
|
302
|
-
// Upgrade HTTP para HTTPS em produção (default: true)
|
|
303
|
-
upgradeInsecureRequests: true,
|
|
304
|
-
}),
|
|
305
|
-
],
|
|
306
|
-
};
|
|
307
|
-
});
|
|
259
|
+
export default defineConfig(({ mode }) => ({
|
|
260
|
+
plugins: [
|
|
261
|
+
react(),
|
|
262
|
+
createSecurityHeadersPlugin(mode === 'development', {
|
|
263
|
+
// URLs do Supabase para permitir conexões
|
|
264
|
+
supabaseUrls: [
|
|
265
|
+
'https://seu-projeto-dev.supabase.co',
|
|
266
|
+
'https://seu-projeto-prod.supabase.co',
|
|
267
|
+
],
|
|
268
|
+
|
|
269
|
+
// Origens confiáveis adicionais para CORS
|
|
270
|
+
trustedOrigins: [
|
|
271
|
+
'https://meu-app.com',
|
|
272
|
+
'https://admin.meu-app.com',
|
|
273
|
+
],
|
|
274
|
+
|
|
275
|
+
// APIs externas para connect-src
|
|
276
|
+
additionalConnectSrc: [
|
|
277
|
+
'https://api.exemplo.com',
|
|
278
|
+
'wss://websocket.exemplo.com',
|
|
279
|
+
],
|
|
280
|
+
|
|
281
|
+
// CDNs de scripts/estilos/fontes adicionais
|
|
282
|
+
additionalScriptSrc: ['https://cdn.analytics.com'],
|
|
283
|
+
additionalStyleSrc: ['https://fonts.custom.com'],
|
|
284
|
+
additionalFontSrc: ['https://fonts.gstatic.com'],
|
|
285
|
+
|
|
286
|
+
// URI para reportar violações CSP
|
|
287
|
+
cspReportUri: 'https://seu-projeto.supabase.co/functions/v1/csp-report',
|
|
288
|
+
|
|
289
|
+
// Opções de produção (defaults: true)
|
|
290
|
+
enableTrustedTypes: true,
|
|
291
|
+
upgradeInsecureRequests: true,
|
|
292
|
+
}),
|
|
293
|
+
],
|
|
294
|
+
}));
|
|
308
295
|
```
|
|
309
296
|
|
|
310
297
|
#### Opções do Plugin
|
|
311
298
|
|
|
312
299
|
| Opção | Tipo | Padrão | Descrição |
|
|
313
300
|
|-------|------|--------|-----------|
|
|
314
|
-
| `supabaseUrls` | `string[]` | `[]` | URLs do Supabase
|
|
301
|
+
| `supabaseUrls` | `string[]` | `[]` | URLs do Supabase permitidas |
|
|
315
302
|
| `trustedOrigins` | `string[]` | `[]` | Origens confiáveis adicionais para CORS |
|
|
316
303
|
| `additionalScriptSrc` | `string[]` | `[]` | Fontes de script adicionais para CSP |
|
|
317
304
|
| `additionalStyleSrc` | `string[]` | `[]` | Fontes de estilo adicionais para CSP |
|
|
318
305
|
| `additionalConnectSrc` | `string[]` | `[]` | APIs/WebSockets adicionais para CSP |
|
|
306
|
+
| `additionalFontSrc` | `string[]` | `[]` | Fontes de font adicionais para CSP |
|
|
319
307
|
| `cspReportUri` | `string` | - | URI para relatório de violações CSP |
|
|
320
308
|
| `enableTrustedTypes` | `boolean` | `true` | Habilitar Trusted Types em produção |
|
|
321
309
|
| `upgradeInsecureRequests` | `boolean` | `true` | Upgrade HTTP→HTTPS em produção |
|
|
@@ -324,44 +312,135 @@ export default defineConfig(({ mode }) => {
|
|
|
324
312
|
|
|
325
313
|
### 🏗️ Factory de Configuração Vite (Opcional)
|
|
326
314
|
|
|
327
|
-
Para projetos que desejam usar a configuração
|
|
315
|
+
Para projetos que desejam usar a configuração padronizada com segurança:
|
|
328
316
|
|
|
329
317
|
```typescript
|
|
330
318
|
// vite.config.ts
|
|
331
319
|
import { defineConfig } from 'vite';
|
|
332
320
|
import react from '@vitejs/plugin-react-swc';
|
|
321
|
+
import path from 'path';
|
|
333
322
|
import { createForlogicViteConfig } from 'forlogic-core/vite';
|
|
334
323
|
|
|
335
|
-
// Cria configuração com opções personalizadas
|
|
336
324
|
const forlogicConfig = createForlogicViteConfig({
|
|
337
|
-
srcAlias: '@', // Alias para ./src
|
|
338
|
-
libAlias: 'forlogic-core', // Alias para ./lib (desenvolvimento local)
|
|
339
325
|
security: {
|
|
340
326
|
supabaseUrls: ['https://seu-projeto.supabase.co'],
|
|
341
327
|
trustedOrigins: ['https://meu-app.com'],
|
|
342
328
|
},
|
|
343
|
-
server: {
|
|
344
|
-
|
|
345
|
-
port: 8080,
|
|
346
|
-
},
|
|
347
|
-
build: {
|
|
348
|
-
chunkSizeWarningLimit: 4000,
|
|
349
|
-
},
|
|
329
|
+
server: { host: '::', port: 8080 },
|
|
330
|
+
build: { chunkSizeWarningLimit: 4000 },
|
|
350
331
|
});
|
|
351
332
|
|
|
352
333
|
export default defineConfig(({ mode }) => {
|
|
353
|
-
const
|
|
334
|
+
const isDev = mode === 'development';
|
|
335
|
+
const baseConfig = forlogicConfig(isDev);
|
|
354
336
|
|
|
355
337
|
return {
|
|
356
|
-
...
|
|
338
|
+
...baseConfig,
|
|
339
|
+
plugins: [react(), ...baseConfig.plugins],
|
|
340
|
+
// IMPORTANTE: resolve.alias deve usar caminhos absolutos
|
|
341
|
+
resolve: {
|
|
342
|
+
alias: {
|
|
343
|
+
'@': path.resolve(__dirname, './src'),
|
|
344
|
+
},
|
|
345
|
+
},
|
|
346
|
+
};
|
|
347
|
+
});
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
> **⚠️ IMPORTANTE**: A factory **não** configura `resolve.alias` porque caminhos relativos não funcionam corretamente no build. Cada projeto deve definir seus próprios aliases com `path.resolve(__dirname, './caminho')` para garantir caminhos absolutos.
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
### 📋 Template Completo para Projetos Consumidores
|
|
355
|
+
|
|
356
|
+
Copie e adapte este template para novos projetos:
|
|
357
|
+
|
|
358
|
+
```typescript
|
|
359
|
+
// vite.config.ts
|
|
360
|
+
import { defineConfig } from 'vite';
|
|
361
|
+
import react from '@vitejs/plugin-react-swc';
|
|
362
|
+
import path from 'path';
|
|
363
|
+
import { createSecurityHeadersPlugin } from 'forlogic-core/vite';
|
|
364
|
+
|
|
365
|
+
export default defineConfig(({ mode }) => {
|
|
366
|
+
const isDev = mode === 'development';
|
|
367
|
+
|
|
368
|
+
return {
|
|
369
|
+
server: {
|
|
370
|
+
host: '::',
|
|
371
|
+
port: 8080,
|
|
372
|
+
},
|
|
373
|
+
|
|
374
|
+
// Força re-bundle quando atualizar forlogic-core
|
|
375
|
+
optimizeDeps: {
|
|
376
|
+
force: true,
|
|
377
|
+
},
|
|
378
|
+
|
|
357
379
|
plugins: [
|
|
358
380
|
react(),
|
|
359
|
-
|
|
381
|
+
// Headers de segurança (CSP, CORS, etc.)
|
|
382
|
+
createSecurityHeadersPlugin(isDev, {
|
|
383
|
+
supabaseUrls: [
|
|
384
|
+
'https://SEU_PROJETO.supabase.co',
|
|
385
|
+
],
|
|
386
|
+
additionalConnectSrc: [
|
|
387
|
+
'https://*.qualiex.com',
|
|
388
|
+
],
|
|
389
|
+
// Opcional: URI para relatório de violações CSP
|
|
390
|
+
cspReportUri: isDev
|
|
391
|
+
? 'https://SEU_PROJETO_DEV.supabase.co/functions/v1/csp-report'
|
|
392
|
+
: 'https://SEU_PROJETO_PROD.supabase.co/functions/v1/csp-report',
|
|
393
|
+
}),
|
|
360
394
|
],
|
|
395
|
+
|
|
396
|
+
// CRÍTICO: Aliases devem usar caminhos absolutos
|
|
397
|
+
resolve: {
|
|
398
|
+
alias: {
|
|
399
|
+
'@': path.resolve(__dirname, './src'),
|
|
400
|
+
},
|
|
401
|
+
},
|
|
402
|
+
|
|
403
|
+
publicDir: false,
|
|
404
|
+
|
|
405
|
+
esbuild: {
|
|
406
|
+
sourcemap: true,
|
|
407
|
+
target: 'es2020',
|
|
408
|
+
},
|
|
409
|
+
|
|
410
|
+
build: {
|
|
411
|
+
chunkSizeWarningLimit: 4000,
|
|
412
|
+
},
|
|
361
413
|
};
|
|
362
414
|
});
|
|
363
415
|
```
|
|
364
416
|
|
|
417
|
+
#### Checklist de Configuração
|
|
418
|
+
|
|
419
|
+
```markdown
|
|
420
|
+
- [ ] Substituiu `SEU_PROJETO` pelas URLs do Supabase
|
|
421
|
+
- [ ] Adicionou origens confiáveis em `additionalConnectSrc` se necessário
|
|
422
|
+
- [ ] Verificou que `resolve.alias` usa `path.resolve(__dirname, ...)`
|
|
423
|
+
- [ ] Reiniciou o servidor após modificar o arquivo
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
---
|
|
427
|
+
|
|
428
|
+
### 🔄 Forçar Re-bundle de Dependências
|
|
429
|
+
|
|
430
|
+
Se você atualizar a `forlogic-core` e as mudanças não aparecerem no preview:
|
|
431
|
+
|
|
432
|
+
```typescript
|
|
433
|
+
// vite.config.ts
|
|
434
|
+
export default defineConfig(({ mode }) => ({
|
|
435
|
+
optimizeDeps: {
|
|
436
|
+
force: true, // Força re-otimização a cada restart do dev server
|
|
437
|
+
},
|
|
438
|
+
// ...
|
|
439
|
+
}));
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
> **⚠️ IMPORTANTE**: Após adicionar `force: true`, reinicie o servidor completamente (pare e inicie novamente).
|
|
443
|
+
|
|
365
444
|
---
|
|
366
445
|
|
|
367
446
|
### 🎨 Preset Tailwind CSS
|
|
@@ -751,6 +830,48 @@ Se você não fornecer um `queryClient`, o `CoreProviders` cria um com as seguin
|
|
|
751
830
|
|
|
752
831
|
---
|
|
753
832
|
|
|
833
|
+
## 🛠️ CLI: Sincronização de Documentação
|
|
834
|
+
|
|
835
|
+
O `forlogic-core` disponibiliza um comando CLI para sincronizar a documentação centralizada do banco de dados para projetos consumidores.
|
|
836
|
+
|
|
837
|
+
### Uso
|
|
838
|
+
|
|
839
|
+
```bash
|
|
840
|
+
# Via npx (recomendado)
|
|
841
|
+
npx forlogic-core-pull-docs
|
|
842
|
+
|
|
843
|
+
# Ou adicione ao package.json do seu projeto:
|
|
844
|
+
{
|
|
845
|
+
"scripts": {
|
|
846
|
+
"pull-docs": "forlogic-core-pull-docs"
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
# E execute:
|
|
851
|
+
npm run pull-docs
|
|
852
|
+
```
|
|
853
|
+
|
|
854
|
+
### O que é sincronizado
|
|
855
|
+
|
|
856
|
+
| Arquivo | Descrição |
|
|
857
|
+
|---------|-----------|
|
|
858
|
+
| `docs/FORLOGIC_CORE_README.md` | README completo da biblioteca |
|
|
859
|
+
| `docs/DESIGN_SYSTEM.md` | Documentação do Design System |
|
|
860
|
+
| `docs/KNOWLEDGE.md` | Knowledge base para IA/Lovable |
|
|
861
|
+
|
|
862
|
+
### Benefícios
|
|
863
|
+
|
|
864
|
+
- ✅ **Centralizado**: Documentação mantida em um único lugar (banco de dados)
|
|
865
|
+
- ✅ **Sempre atualizado**: Execute o comando para obter a versão mais recente
|
|
866
|
+
- ✅ **Sem cópia manual**: Não precisa copiar arquivos entre projetos
|
|
867
|
+
- ✅ **Ideal para Custom Knowledge**: Use os arquivos gerados no Lovable
|
|
868
|
+
|
|
869
|
+
### Requisitos
|
|
870
|
+
|
|
871
|
+
O comando usa credenciais públicas do Supabase do forlogic-core e não requer configuração adicional.
|
|
872
|
+
|
|
873
|
+
---
|
|
874
|
+
|
|
754
875
|
<!-- AUTO_GENERATED_START -->
|
|
755
876
|
|
|
756
877
|
### 📚 Estatísticas da Documentação
|
package/dist/README.md
CHANGED
|
@@ -210,15 +210,13 @@ CREATE INDEX idx_processes_title ON processes.processes(title);
|
|
|
210
210
|
|
|
211
211
|
A biblioteca `forlogic-core` exporta configurações padronizadas de Vite e Tailwind para garantir consistência de segurança e estilo em todos os projetos.
|
|
212
212
|
|
|
213
|
-
### 📦
|
|
214
|
-
|
|
215
|
-
As configurações estão disponíveis via subpaths do pacote:
|
|
213
|
+
### 📦 Imports Disponíveis
|
|
216
214
|
|
|
217
215
|
```typescript
|
|
218
|
-
// Configurações Vite
|
|
216
|
+
// Configurações Vite (headers de segurança, CSP, CORS)
|
|
219
217
|
import { createSecurityHeadersPlugin, createForlogicViteConfig } from 'forlogic-core/vite';
|
|
220
218
|
|
|
221
|
-
// Preset Tailwind
|
|
219
|
+
// Preset Tailwind (cores, animações, gradientes)
|
|
222
220
|
import { forlogicTailwindPreset, forlogicContentPaths } from 'forlogic-core/tailwind';
|
|
223
221
|
```
|
|
224
222
|
|
|
@@ -258,64 +256,54 @@ import { defineConfig } from 'vite';
|
|
|
258
256
|
import react from '@vitejs/plugin-react-swc';
|
|
259
257
|
import { createSecurityHeadersPlugin } from 'forlogic-core/vite';
|
|
260
258
|
|
|
261
|
-
export default defineConfig(({ mode }) => {
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
cspReportUri: 'https://seu-projeto.supabase.co/functions/v1/csp-report',
|
|
298
|
-
|
|
299
|
-
// Habilitar Trusted Types em produção (default: true)
|
|
300
|
-
enableTrustedTypes: true,
|
|
301
|
-
|
|
302
|
-
// Upgrade HTTP para HTTPS em produção (default: true)
|
|
303
|
-
upgradeInsecureRequests: true,
|
|
304
|
-
}),
|
|
305
|
-
],
|
|
306
|
-
};
|
|
307
|
-
});
|
|
259
|
+
export default defineConfig(({ mode }) => ({
|
|
260
|
+
plugins: [
|
|
261
|
+
react(),
|
|
262
|
+
createSecurityHeadersPlugin(mode === 'development', {
|
|
263
|
+
// URLs do Supabase para permitir conexões
|
|
264
|
+
supabaseUrls: [
|
|
265
|
+
'https://seu-projeto-dev.supabase.co',
|
|
266
|
+
'https://seu-projeto-prod.supabase.co',
|
|
267
|
+
],
|
|
268
|
+
|
|
269
|
+
// Origens confiáveis adicionais para CORS
|
|
270
|
+
trustedOrigins: [
|
|
271
|
+
'https://meu-app.com',
|
|
272
|
+
'https://admin.meu-app.com',
|
|
273
|
+
],
|
|
274
|
+
|
|
275
|
+
// APIs externas para connect-src
|
|
276
|
+
additionalConnectSrc: [
|
|
277
|
+
'https://api.exemplo.com',
|
|
278
|
+
'wss://websocket.exemplo.com',
|
|
279
|
+
],
|
|
280
|
+
|
|
281
|
+
// CDNs de scripts/estilos/fontes adicionais
|
|
282
|
+
additionalScriptSrc: ['https://cdn.analytics.com'],
|
|
283
|
+
additionalStyleSrc: ['https://fonts.custom.com'],
|
|
284
|
+
additionalFontSrc: ['https://fonts.gstatic.com'],
|
|
285
|
+
|
|
286
|
+
// URI para reportar violações CSP
|
|
287
|
+
cspReportUri: 'https://seu-projeto.supabase.co/functions/v1/csp-report',
|
|
288
|
+
|
|
289
|
+
// Opções de produção (defaults: true)
|
|
290
|
+
enableTrustedTypes: true,
|
|
291
|
+
upgradeInsecureRequests: true,
|
|
292
|
+
}),
|
|
293
|
+
],
|
|
294
|
+
}));
|
|
308
295
|
```
|
|
309
296
|
|
|
310
297
|
#### Opções do Plugin
|
|
311
298
|
|
|
312
299
|
| Opção | Tipo | Padrão | Descrição |
|
|
313
300
|
|-------|------|--------|-----------|
|
|
314
|
-
| `supabaseUrls` | `string[]` | `[]` | URLs do Supabase
|
|
301
|
+
| `supabaseUrls` | `string[]` | `[]` | URLs do Supabase permitidas |
|
|
315
302
|
| `trustedOrigins` | `string[]` | `[]` | Origens confiáveis adicionais para CORS |
|
|
316
303
|
| `additionalScriptSrc` | `string[]` | `[]` | Fontes de script adicionais para CSP |
|
|
317
304
|
| `additionalStyleSrc` | `string[]` | `[]` | Fontes de estilo adicionais para CSP |
|
|
318
305
|
| `additionalConnectSrc` | `string[]` | `[]` | APIs/WebSockets adicionais para CSP |
|
|
306
|
+
| `additionalFontSrc` | `string[]` | `[]` | Fontes de font adicionais para CSP |
|
|
319
307
|
| `cspReportUri` | `string` | - | URI para relatório de violações CSP |
|
|
320
308
|
| `enableTrustedTypes` | `boolean` | `true` | Habilitar Trusted Types em produção |
|
|
321
309
|
| `upgradeInsecureRequests` | `boolean` | `true` | Upgrade HTTP→HTTPS em produção |
|
|
@@ -324,44 +312,135 @@ export default defineConfig(({ mode }) => {
|
|
|
324
312
|
|
|
325
313
|
### 🏗️ Factory de Configuração Vite (Opcional)
|
|
326
314
|
|
|
327
|
-
Para projetos que desejam usar a configuração
|
|
315
|
+
Para projetos que desejam usar a configuração padronizada com segurança:
|
|
328
316
|
|
|
329
317
|
```typescript
|
|
330
318
|
// vite.config.ts
|
|
331
319
|
import { defineConfig } from 'vite';
|
|
332
320
|
import react from '@vitejs/plugin-react-swc';
|
|
321
|
+
import path from 'path';
|
|
333
322
|
import { createForlogicViteConfig } from 'forlogic-core/vite';
|
|
334
323
|
|
|
335
|
-
// Cria configuração com opções personalizadas
|
|
336
324
|
const forlogicConfig = createForlogicViteConfig({
|
|
337
|
-
srcAlias: '@', // Alias para ./src
|
|
338
|
-
libAlias: 'forlogic-core', // Alias para ./lib (desenvolvimento local)
|
|
339
325
|
security: {
|
|
340
326
|
supabaseUrls: ['https://seu-projeto.supabase.co'],
|
|
341
327
|
trustedOrigins: ['https://meu-app.com'],
|
|
342
328
|
},
|
|
343
|
-
server: {
|
|
344
|
-
|
|
345
|
-
port: 8080,
|
|
346
|
-
},
|
|
347
|
-
build: {
|
|
348
|
-
chunkSizeWarningLimit: 4000,
|
|
349
|
-
},
|
|
329
|
+
server: { host: '::', port: 8080 },
|
|
330
|
+
build: { chunkSizeWarningLimit: 4000 },
|
|
350
331
|
});
|
|
351
332
|
|
|
352
333
|
export default defineConfig(({ mode }) => {
|
|
353
|
-
const
|
|
334
|
+
const isDev = mode === 'development';
|
|
335
|
+
const baseConfig = forlogicConfig(isDev);
|
|
354
336
|
|
|
355
337
|
return {
|
|
356
|
-
...
|
|
338
|
+
...baseConfig,
|
|
339
|
+
plugins: [react(), ...baseConfig.plugins],
|
|
340
|
+
// IMPORTANTE: resolve.alias deve usar caminhos absolutos
|
|
341
|
+
resolve: {
|
|
342
|
+
alias: {
|
|
343
|
+
'@': path.resolve(__dirname, './src'),
|
|
344
|
+
},
|
|
345
|
+
},
|
|
346
|
+
};
|
|
347
|
+
});
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
> **⚠️ IMPORTANTE**: A factory **não** configura `resolve.alias` porque caminhos relativos não funcionam corretamente no build. Cada projeto deve definir seus próprios aliases com `path.resolve(__dirname, './caminho')` para garantir caminhos absolutos.
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
### 📋 Template Completo para Projetos Consumidores
|
|
355
|
+
|
|
356
|
+
Copie e adapte este template para novos projetos:
|
|
357
|
+
|
|
358
|
+
```typescript
|
|
359
|
+
// vite.config.ts
|
|
360
|
+
import { defineConfig } from 'vite';
|
|
361
|
+
import react from '@vitejs/plugin-react-swc';
|
|
362
|
+
import path from 'path';
|
|
363
|
+
import { createSecurityHeadersPlugin } from 'forlogic-core/vite';
|
|
364
|
+
|
|
365
|
+
export default defineConfig(({ mode }) => {
|
|
366
|
+
const isDev = mode === 'development';
|
|
367
|
+
|
|
368
|
+
return {
|
|
369
|
+
server: {
|
|
370
|
+
host: '::',
|
|
371
|
+
port: 8080,
|
|
372
|
+
},
|
|
373
|
+
|
|
374
|
+
// Força re-bundle quando atualizar forlogic-core
|
|
375
|
+
optimizeDeps: {
|
|
376
|
+
force: true,
|
|
377
|
+
},
|
|
378
|
+
|
|
357
379
|
plugins: [
|
|
358
380
|
react(),
|
|
359
|
-
|
|
381
|
+
// Headers de segurança (CSP, CORS, etc.)
|
|
382
|
+
createSecurityHeadersPlugin(isDev, {
|
|
383
|
+
supabaseUrls: [
|
|
384
|
+
'https://SEU_PROJETO.supabase.co',
|
|
385
|
+
],
|
|
386
|
+
additionalConnectSrc: [
|
|
387
|
+
'https://*.qualiex.com',
|
|
388
|
+
],
|
|
389
|
+
// Opcional: URI para relatório de violações CSP
|
|
390
|
+
cspReportUri: isDev
|
|
391
|
+
? 'https://SEU_PROJETO_DEV.supabase.co/functions/v1/csp-report'
|
|
392
|
+
: 'https://SEU_PROJETO_PROD.supabase.co/functions/v1/csp-report',
|
|
393
|
+
}),
|
|
360
394
|
],
|
|
395
|
+
|
|
396
|
+
// CRÍTICO: Aliases devem usar caminhos absolutos
|
|
397
|
+
resolve: {
|
|
398
|
+
alias: {
|
|
399
|
+
'@': path.resolve(__dirname, './src'),
|
|
400
|
+
},
|
|
401
|
+
},
|
|
402
|
+
|
|
403
|
+
publicDir: false,
|
|
404
|
+
|
|
405
|
+
esbuild: {
|
|
406
|
+
sourcemap: true,
|
|
407
|
+
target: 'es2020',
|
|
408
|
+
},
|
|
409
|
+
|
|
410
|
+
build: {
|
|
411
|
+
chunkSizeWarningLimit: 4000,
|
|
412
|
+
},
|
|
361
413
|
};
|
|
362
414
|
});
|
|
363
415
|
```
|
|
364
416
|
|
|
417
|
+
#### Checklist de Configuração
|
|
418
|
+
|
|
419
|
+
```markdown
|
|
420
|
+
- [ ] Substituiu `SEU_PROJETO` pelas URLs do Supabase
|
|
421
|
+
- [ ] Adicionou origens confiáveis em `additionalConnectSrc` se necessário
|
|
422
|
+
- [ ] Verificou que `resolve.alias` usa `path.resolve(__dirname, ...)`
|
|
423
|
+
- [ ] Reiniciou o servidor após modificar o arquivo
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
---
|
|
427
|
+
|
|
428
|
+
### 🔄 Forçar Re-bundle de Dependências
|
|
429
|
+
|
|
430
|
+
Se você atualizar a `forlogic-core` e as mudanças não aparecerem no preview:
|
|
431
|
+
|
|
432
|
+
```typescript
|
|
433
|
+
// vite.config.ts
|
|
434
|
+
export default defineConfig(({ mode }) => ({
|
|
435
|
+
optimizeDeps: {
|
|
436
|
+
force: true, // Força re-otimização a cada restart do dev server
|
|
437
|
+
},
|
|
438
|
+
// ...
|
|
439
|
+
}));
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
> **⚠️ IMPORTANTE**: Após adicionar `force: true`, reinicie o servidor completamente (pare e inicie novamente).
|
|
443
|
+
|
|
365
444
|
---
|
|
366
445
|
|
|
367
446
|
### 🎨 Preset Tailwind CSS
|
|
@@ -751,82 +830,124 @@ Se você não fornecer um `queryClient`, o `CoreProviders` cria um com as seguin
|
|
|
751
830
|
|
|
752
831
|
---
|
|
753
832
|
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
-
|
|
786
|
-
-
|
|
787
|
-
-
|
|
788
|
-
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
- [
|
|
807
|
-
- [
|
|
808
|
-
- [
|
|
809
|
-
- [
|
|
810
|
-
- [
|
|
811
|
-
- [
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
- [
|
|
816
|
-
- [
|
|
817
|
-
- [
|
|
818
|
-
- [
|
|
819
|
-
- [
|
|
820
|
-
- [
|
|
821
|
-
- [
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
- [
|
|
826
|
-
- [
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
833
|
+
## 🛠️ CLI: Sincronização de Documentação
|
|
834
|
+
|
|
835
|
+
O `forlogic-core` disponibiliza um comando CLI para sincronizar a documentação centralizada do banco de dados para projetos consumidores.
|
|
836
|
+
|
|
837
|
+
### Uso
|
|
838
|
+
|
|
839
|
+
```bash
|
|
840
|
+
# Via npx (recomendado)
|
|
841
|
+
npx forlogic-core-pull-docs
|
|
842
|
+
|
|
843
|
+
# Ou adicione ao package.json do seu projeto:
|
|
844
|
+
{
|
|
845
|
+
"scripts": {
|
|
846
|
+
"pull-docs": "forlogic-core-pull-docs"
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
# E execute:
|
|
851
|
+
npm run pull-docs
|
|
852
|
+
```
|
|
853
|
+
|
|
854
|
+
### O que é sincronizado
|
|
855
|
+
|
|
856
|
+
| Arquivo | Descrição |
|
|
857
|
+
|---------|-----------|
|
|
858
|
+
| `docs/FORLOGIC_CORE_README.md` | README completo da biblioteca |
|
|
859
|
+
| `docs/DESIGN_SYSTEM.md` | Documentação do Design System |
|
|
860
|
+
| `docs/KNOWLEDGE.md` | Knowledge base para IA/Lovable |
|
|
861
|
+
|
|
862
|
+
### Benefícios
|
|
863
|
+
|
|
864
|
+
- ✅ **Centralizado**: Documentação mantida em um único lugar (banco de dados)
|
|
865
|
+
- ✅ **Sempre atualizado**: Execute o comando para obter a versão mais recente
|
|
866
|
+
- ✅ **Sem cópia manual**: Não precisa copiar arquivos entre projetos
|
|
867
|
+
- ✅ **Ideal para Custom Knowledge**: Use os arquivos gerados no Lovable
|
|
868
|
+
|
|
869
|
+
### Requisitos
|
|
870
|
+
|
|
871
|
+
O comando usa credenciais públicas do Supabase do forlogic-core e não requer configuração adicional.
|
|
872
|
+
|
|
873
|
+
---
|
|
874
|
+
|
|
875
|
+
<!-- AUTO_GENERATED_START -->
|
|
876
|
+
|
|
877
|
+
### 📚 Estatísticas da Documentação
|
|
878
|
+
|
|
879
|
+
**49 Componentes UI** | **6 Tokens** | **2 Ferramentas CRUD**
|
|
880
|
+
|
|
881
|
+
---
|
|
882
|
+
|
|
883
|
+
### 🎨 Fundamentos (Tokens)
|
|
884
|
+
|
|
885
|
+
- [Colors Foundation](./docs/DESIGN_SYSTEM.md#colorsfoundation) - Sistema de cores completo com escalas neutras, de marca e funcionais.
|
|
886
|
+
- [Radius](./docs/DESIGN_SYSTEM.md#radius) - Sistema de arredondamento de bordas para consistência visual.
|
|
887
|
+
- [Shadows](./docs/DESIGN_SYSTEM.md#shadows) - Sistema de sombras e elevação para criar profundidade e hierarquia.
|
|
888
|
+
- [Spacing](./docs/DESIGN_SYSTEM.md#spacing) - Escala de espaçamento consistente baseada em uma unidade base de 4px.
|
|
889
|
+
- [Typography](./docs/DESIGN_SYSTEM.md#typographycomponent) - Componentes de tipografia para estilos de texto consistentes em toda a sua aplicação.
|
|
890
|
+
- [Typography Foundation](./docs/DESIGN_SYSTEM.md#typographyfoundation) - Sistema tipográfico completo com Display, Headings, Body e mais.
|
|
891
|
+
|
|
892
|
+
### 🧩 Componentes UI
|
|
893
|
+
|
|
894
|
+
- [Accordion](./docs/DESIGN_SYSTEM.md#accordion) - Um conjunto de cabeçalhos interativos empilhados verticalmente, onde cada um revela uma seção de conteúdo.
|
|
895
|
+
- [Action Button](./docs/DESIGN_SYSTEM.md#actionbutton) - Botão compacto otimizado para ações em linhas de tabela e menus dropdown.
|
|
896
|
+
- [Alert](./docs/DESIGN_SYSTEM.md#alert) - Exibe uma mensagem de destaque para chamar a atenção do usuário.
|
|
897
|
+
- [Aspect Ratio](./docs/DESIGN_SYSTEM.md#aspectratio) - Exibe conteúdo dentro de uma proporção desejada.
|
|
898
|
+
- [Avatar](./docs/DESIGN_SYSTEM.md#avatar) - Um elemento de imagem com fallback para representar o usuário.
|
|
899
|
+
- [Badge](./docs/DESIGN_SYSTEM.md#badge) - Exibe um badge ou um componente que se parece com um badge.
|
|
900
|
+
- [Breadcrumb](./docs/DESIGN_SYSTEM.md#breadcrumb) - Exibe o caminho até o recurso atual usando uma hierarquia de links.
|
|
901
|
+
- [Button](./docs/DESIGN_SYSTEM.md#button) - Componente de botão com variantes semânticas, tamanhos e estados. Use para ações primárias, secundárias e destrutivas.
|
|
902
|
+
- [Button Group](./docs/DESIGN_SYSTEM.md#buttongroup) - Agrupa botões relacionados com espaçamento e bordas apropriados.
|
|
903
|
+
- [Calendar & Date Picker](./docs/DESIGN_SYSTEM.md#calendar) - Componentes para seleção de datas. O Calendar exibe um calendário interativo, enquanto o Date Picker combina um campo de input com o calendário em um popover.
|
|
904
|
+
- [Card](./docs/DESIGN_SYSTEM.md#card) - Exibe um card com cabeçalho, conteúdo e rodapé.
|
|
905
|
+
- [Carousel](./docs/DESIGN_SYSTEM.md#carousel) - Um componente de carrossel para alternar entre elementos. Nota: Este componente requer a biblioteca Embla Carousel que não está incluída no forlogic-core por padrão.
|
|
906
|
+
- [Checkbox](./docs/DESIGN_SYSTEM.md#checkbox) - Um controle que permite ao usuário alternar entre marcado e desmarcado.
|
|
907
|
+
- [Collapsible](./docs/DESIGN_SYSTEM.md#collapsible) - Um componente interativo que expande/colapsa um painel.
|
|
908
|
+
- [Color Picker](./docs/DESIGN_SYSTEM.md#colorpicker) - Seletor de cores com paleta predefinida e seletor customizado.
|
|
909
|
+
- [Combobox](./docs/DESIGN_SYSTEM.md#combobox) - Componente versátil para seleção única ou múltipla com busca inteligente. Combina Popover e Command para autocomplete.
|
|
910
|
+
- [Context Menu](./docs/DESIGN_SYSTEM.md#contextmenu) - Exibe um menu ao usuário — como um conjunto de ações ou funções — acionado por um clique com o botão direito do mouse.
|
|
911
|
+
- [Dialog](./docs/DESIGN_SYSTEM.md#dialog) - Uma janela sobreposta à janela principal ou a outra janela de diálogo, tornando o conteúdo abaixo inerte. Inclui variações para seleção, tabelas e formulários.
|
|
912
|
+
- [Dropdown Menu](./docs/DESIGN_SYSTEM.md#dropdownmenu) - Exibe um menu ao usuário — como um conjunto de ações ou funções — acionado por um botão ou elemento interativo.
|
|
913
|
+
- [Empty State](./docs/DESIGN_SYSTEM.md#emptystate) - Componente para exibir estados vazios com ícone, mensagem e ação opcional.
|
|
914
|
+
- [Form](./docs/DESIGN_SYSTEM.md#form) - Construindo formulários com React Hook Form e Zod.
|
|
915
|
+
- [Grid](./docs/DESIGN_SYSTEM.md#grid) - Sistema de grid responsivo com configuração simplificada de colunas e espaçamento.
|
|
916
|
+
- [Icon Picker](./docs/DESIGN_SYSTEM.md#iconpicker) - Seletor de ícones da biblioteca Lucide React com busca integrada.
|
|
917
|
+
- [Input](./docs/DESIGN_SYSTEM.md#input) - Exibe um campo de entrada de texto.
|
|
918
|
+
- [Input Group](./docs/DESIGN_SYSTEM.md#inputgroup) - Agrupe inputs com addons de prefixo, sufixo, ícones, botões, tooltips e dropdowns. Segue a API oficial do shadcn/ui.
|
|
919
|
+
- [Input OTP](./docs/DESIGN_SYSTEM.md#inputotp) - Accessible one-time password component with customizable number of inputs. Available in the UI library but not exported from forlogic-core.
|
|
920
|
+
- [Label](./docs/DESIGN_SYSTEM.md#label) - Renderiza uma label acessível associada a controles.
|
|
921
|
+
- [Loading State](./docs/DESIGN_SYSTEM.md#loadingstate) - Componente para gerenciar estados de loading de forma declarativa com dois tipos: spinner e overlay.
|
|
922
|
+
- [Native Select](./docs/DESIGN_SYSTEM.md#nativeselect) - Elemento select nativo do HTML com estilização.
|
|
923
|
+
- [Pagination](./docs/DESIGN_SYSTEM.md#pagination) - Barra de paginação completa com seletor de itens por página e controles de navegação.
|
|
924
|
+
- [Progress](./docs/DESIGN_SYSTEM.md#progress) - Exibe um indicador mostrando o progresso de conclusão de uma tarefa, tipicamente exibido como uma barra de progresso.
|
|
925
|
+
- [Radio Group](./docs/DESIGN_SYSTEM.md#radiogroup) - Um conjunto de botões marcáveis—conhecidos como botões de rádio—onde apenas um pode ser marcado por vez.
|
|
926
|
+
- [Resizable](./docs/DESIGN_SYSTEM.md#resizable) - Grupos de painéis redimensionáveis e layouts acessíveis com suporte a teclado. Construído sobre react-resizable-panels.
|
|
927
|
+
- [Scroll Area](./docs/DESIGN_SYSTEM.md#scrollarea) - Aprimora a funcionalidade de rolagem nativa para estilização personalizada e cross-browser.
|
|
928
|
+
- [Searchbar](./docs/DESIGN_SYSTEM.md#searchbar) - Campo de busca com ícone de pesquisa integrado e botão de limpar opcional. Otimizado para experiências de busca em toda a aplicação.
|
|
929
|
+
- [Select](./docs/DESIGN_SYSTEM.md#select) - Exibe uma lista de opções para o usuário escolher—acionada por um botão.
|
|
930
|
+
- [Separator](./docs/DESIGN_SYSTEM.md#separator) - Separa visual ou semanticamente o conteúdo.
|
|
931
|
+
- [Sheet](./docs/DESIGN_SYSTEM.md#sheet) - Estende o componente Dialog para exibir conteúdo que complementa o conteúdo principal da tela.
|
|
932
|
+
- [Skeleton](./docs/DESIGN_SYSTEM.md#skeleton) - Componente de placeholder para estados de carregamento. Inclui variantes pré-configuradas para tabelas, cards, formulários e mais.
|
|
933
|
+
- [Slider](./docs/DESIGN_SYSTEM.md#slider) - Um input onde o usuário seleciona um valor dentro de um intervalo determinado.
|
|
934
|
+
- [Spinner](./docs/DESIGN_SYSTEM.md#spinner) - Um componente de spinner de carregamento para indicar estado de carregamento.
|
|
935
|
+
- [Stack](./docs/DESIGN_SYSTEM.md#stack) - Layout de pilha flexível com controle de direção, espaçamento, alinhamento e justificação.
|
|
936
|
+
- [Switch](./docs/DESIGN_SYSTEM.md#switch) - Um controle que permite ao usuário alternar entre marcado e desmarcado.
|
|
937
|
+
- [Tab Page Layout](./docs/DESIGN_SYSTEM.md#tabpagelayout) - Layout padronizado para páginas dentro de tabs com header, descrição, ações e conteúdo scrollável.
|
|
938
|
+
- [Table](./docs/DESIGN_SYSTEM.md#table) - Uma tabela semântica para exibir dados tabulares.
|
|
939
|
+
- [Tabs](./docs/DESIGN_SYSTEM.md#tabs) - Um conjunto de seções de conteúdo em camadas—conhecidas como painéis de abas—que são exibidas uma de cada vez.
|
|
940
|
+
- [Textarea](./docs/DESIGN_SYSTEM.md#textarea) - Exibe um textarea de formulário ou um componente que se parece com um textarea.
|
|
941
|
+
- [Toast](./docs/DESIGN_SYSTEM.md#toast) - Componente de notificação toast usando Sonner. Exibe mensagens temporárias para feedback de ações do usuário.
|
|
942
|
+
- [Toggle](./docs/DESIGN_SYSTEM.md#toggle) - Botões de dois estados que podem estar ligados ou desligados, individualmente ou em grupo.
|
|
943
|
+
|
|
944
|
+
### 🚀 Sistema CRUD
|
|
945
|
+
|
|
946
|
+
- [CRUD System](./docs/DESIGN_SYSTEM.md#crudsystem) - Sistema completo para criação rápida de interfaces CRUD com validação, busca, paginação e muito mais.
|
|
947
|
+
- [Wizard Form](./docs/DESIGN_SYSTEM.md#wizardform) - Formulário multi-etapas com validação, navegação entre seções e indicadores de progresso.
|
|
948
|
+
|
|
949
|
+
---
|
|
950
|
+
|
|
951
|
+
> 📘 **Documentação Completa**: Para ver detalhes de props, exemplos de uso e acessibilidade de cada componente, consulte o [Design System Completo](./docs/DESIGN_SYSTEM.md).
|
|
952
|
+
|
|
832
953
|
<!-- AUTO_GENERATED_END -->
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
#!/usr/bin/env node
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { createClient } from '@supabase/supabase-js';
|
|
6
|
+
|
|
7
|
+
const FORLOGIC_CORE_SUPABASE_URL = "https://ccjfvpnndclajkleyqkc.supabase.co";
|
|
8
|
+
const FORLOGIC_CORE_ANON_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImNjamZ2cG5uZGNsYWprbGV5cWtjIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTA5NTQ1OTksImV4cCI6MjA2NjUzMDU5OX0.j7ASp7OYaR5oXfnVmK77VGNH-5hDa9JpzbAYJBUpfa8";
|
|
9
|
+
const supabase = createClient(
|
|
10
|
+
FORLOGIC_CORE_SUPABASE_URL,
|
|
11
|
+
FORLOGIC_CORE_ANON_KEY
|
|
12
|
+
);
|
|
13
|
+
const DOCS_TO_SYNC = [
|
|
14
|
+
{ type: "readme", outputFile: "docs/FORLOGIC_CORE_README.md" },
|
|
15
|
+
{ type: "design_system", outputFile: "docs/DESIGN_SYSTEM.md" },
|
|
16
|
+
{ type: "knowledge", outputFile: "docs/KNOWLEDGE.md" }
|
|
17
|
+
];
|
|
18
|
+
async function pullDocs() {
|
|
19
|
+
console.log("\u{1F4E5} Puxando documenta\xE7\xE3o do forlogic-core...\n");
|
|
20
|
+
let successCount = 0;
|
|
21
|
+
let errorCount = 0;
|
|
22
|
+
for (const doc of DOCS_TO_SYNC) {
|
|
23
|
+
try {
|
|
24
|
+
const { data, error } = await supabase.schema("common").from("documentation").select("content, updated_at").eq("type", doc.type).single();
|
|
25
|
+
if (error) {
|
|
26
|
+
console.error(`\u274C Erro ao buscar ${doc.type}:`, error.message);
|
|
27
|
+
errorCount++;
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (!data) {
|
|
31
|
+
console.warn(`\u26A0\uFE0F Documento '${doc.type}' n\xE3o encontrado no banco`);
|
|
32
|
+
errorCount++;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const outputPath = path.join(process.cwd(), doc.outputFile);
|
|
36
|
+
const outputDir = path.dirname(outputPath);
|
|
37
|
+
if (!fs.existsSync(outputDir)) {
|
|
38
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
39
|
+
}
|
|
40
|
+
fs.writeFileSync(outputPath, data.content, "utf-8");
|
|
41
|
+
console.log(`\u2705 ${doc.type} \u2192 ${doc.outputFile}`);
|
|
42
|
+
console.log(` \u{1F4CA} Tamanho: ${(data.content.length / 1024).toFixed(2)} KB`);
|
|
43
|
+
console.log(` \u{1F550} \xDAltima atualiza\xE7\xE3o: ${data.updated_at}
|
|
44
|
+
`);
|
|
45
|
+
successCount++;
|
|
46
|
+
} catch (err) {
|
|
47
|
+
console.error(`\u274C Erro ao processar ${doc.type}:`, err.message);
|
|
48
|
+
errorCount++;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501");
|
|
52
|
+
console.log(`\u{1F389} Sincroniza\xE7\xE3o conclu\xEDda!`);
|
|
53
|
+
console.log(` \u2705 Sucesso: ${successCount}`);
|
|
54
|
+
console.log(` \u274C Erros: ${errorCount}
|
|
55
|
+
`);
|
|
56
|
+
if (successCount > 0) {
|
|
57
|
+
console.log("\u{1F4A1} Arquivos sincronizados em docs/");
|
|
58
|
+
console.log(" Use no Custom Knowledge do Lovable ou como refer\xEAncia.\n");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
pullDocs();
|
package/dist/vite/index.esm.js
CHANGED
|
@@ -162,8 +162,6 @@ function createSecurityHeadersPlugin(isDev, options = {}) {
|
|
|
162
162
|
|
|
163
163
|
function createForlogicViteConfig(options = {}) {
|
|
164
164
|
const {
|
|
165
|
-
srcAlias = "@",
|
|
166
|
-
libAlias = "forlogic-core",
|
|
167
165
|
security = {},
|
|
168
166
|
server = {},
|
|
169
167
|
build = {},
|
|
@@ -180,13 +178,6 @@ function createForlogicViteConfig(options = {}) {
|
|
|
180
178
|
host: server.host ?? "::",
|
|
181
179
|
port: server.port ?? 8080
|
|
182
180
|
},
|
|
183
|
-
resolve: {
|
|
184
|
-
alias: {
|
|
185
|
-
[srcAlias]: "./src",
|
|
186
|
-
[libAlias]: "./lib",
|
|
187
|
-
"/assets": "./lib/assets"
|
|
188
|
-
}
|
|
189
|
-
},
|
|
190
181
|
publicDir: false,
|
|
191
182
|
esbuild: {
|
|
192
183
|
sourcemap: build.sourcemap ?? true,
|
package/dist/vite/index.js
CHANGED
|
@@ -164,8 +164,6 @@ function createSecurityHeadersPlugin(isDev, options = {}) {
|
|
|
164
164
|
|
|
165
165
|
function createForlogicViteConfig(options = {}) {
|
|
166
166
|
const {
|
|
167
|
-
srcAlias = "@",
|
|
168
|
-
libAlias = "forlogic-core",
|
|
169
167
|
security = {},
|
|
170
168
|
server = {},
|
|
171
169
|
build = {},
|
|
@@ -182,13 +180,6 @@ function createForlogicViteConfig(options = {}) {
|
|
|
182
180
|
host: server.host ?? "::",
|
|
183
181
|
port: server.port ?? 8080
|
|
184
182
|
},
|
|
185
|
-
resolve: {
|
|
186
|
-
alias: {
|
|
187
|
-
[srcAlias]: "./src",
|
|
188
|
-
[libAlias]: "./lib",
|
|
189
|
-
"/assets": "./lib/assets"
|
|
190
|
-
}
|
|
191
|
-
},
|
|
192
183
|
publicDir: false,
|
|
193
184
|
esbuild: {
|
|
194
185
|
sourcemap: build.sourcemap ?? true,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "forlogic-core",
|
|
3
|
-
"version": "1.11.
|
|
3
|
+
"version": "1.11.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.esm.js",
|
|
@@ -12,7 +12,17 @@
|
|
|
12
12
|
"types": "./dist/index.d.ts"
|
|
13
13
|
},
|
|
14
14
|
"./index.css": "./dist/index.css",
|
|
15
|
-
"./tokens": "./dist/tokens/index.js"
|
|
15
|
+
"./tokens": "./dist/tokens/index.js",
|
|
16
|
+
"./vite": {
|
|
17
|
+
"import": "./dist/vite/index.esm.js",
|
|
18
|
+
"require": "./dist/vite/index.js",
|
|
19
|
+
"types": "./dist/vite/index.d.ts"
|
|
20
|
+
},
|
|
21
|
+
"./tailwind": {
|
|
22
|
+
"import": "./dist/tailwind/index.esm.js",
|
|
23
|
+
"require": "./dist/tailwind/index.js",
|
|
24
|
+
"types": "./dist/tailwind/index.d.ts"
|
|
25
|
+
}
|
|
16
26
|
},
|
|
17
27
|
"files": [
|
|
18
28
|
"dist",
|