forlogic-core 1.11.4 → 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 CHANGED
@@ -312,17 +312,16 @@ export default defineConfig(({ mode }) => ({
312
312
 
313
313
  ### 🏗️ Factory de Configuração Vite (Opcional)
314
314
 
315
- Para projetos que desejam usar a configuração completa padronizada:
315
+ Para projetos que desejam usar a configuração padronizada com segurança:
316
316
 
317
317
  ```typescript
318
318
  // vite.config.ts
319
319
  import { defineConfig } from 'vite';
320
320
  import react from '@vitejs/plugin-react-swc';
321
+ import path from 'path';
321
322
  import { createForlogicViteConfig } from 'forlogic-core/vite';
322
323
 
323
324
  const forlogicConfig = createForlogicViteConfig({
324
- srcAlias: '@',
325
- libAlias: 'forlogic-core',
326
325
  security: {
327
326
  supabaseUrls: ['https://seu-projeto.supabase.co'],
328
327
  trustedOrigins: ['https://meu-app.com'],
@@ -332,14 +331,98 @@ const forlogicConfig = createForlogicViteConfig({
332
331
  });
333
332
 
334
333
  export default defineConfig(({ mode }) => {
335
- const config = forlogicConfig(mode === 'development');
334
+ const isDev = mode === 'development';
335
+ const baseConfig = forlogicConfig(isDev);
336
+
336
337
  return {
337
- ...config,
338
- plugins: [react(), ...config.plugins],
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
+ },
339
346
  };
340
347
  });
341
348
  ```
342
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
+
379
+ plugins: [
380
+ react(),
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
+ }),
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
+ },
413
+ };
414
+ });
415
+ ```
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
+
343
426
  ---
344
427
 
345
428
  ### 🔄 Forçar Re-bundle de Dependências
@@ -747,6 +830,48 @@ Se você não fornecer um `queryClient`, o `CoreProviders` cria um com as seguin
747
830
 
748
831
  ---
749
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
+
750
875
  <!-- AUTO_GENERATED_START -->
751
876
 
752
877
  ### 📚 Estatísticas da Documentação
package/dist/README.md CHANGED
@@ -312,17 +312,16 @@ export default defineConfig(({ mode }) => ({
312
312
 
313
313
  ### 🏗️ Factory de Configuração Vite (Opcional)
314
314
 
315
- Para projetos que desejam usar a configuração completa padronizada:
315
+ Para projetos que desejam usar a configuração padronizada com segurança:
316
316
 
317
317
  ```typescript
318
318
  // vite.config.ts
319
319
  import { defineConfig } from 'vite';
320
320
  import react from '@vitejs/plugin-react-swc';
321
+ import path from 'path';
321
322
  import { createForlogicViteConfig } from 'forlogic-core/vite';
322
323
 
323
324
  const forlogicConfig = createForlogicViteConfig({
324
- srcAlias: '@',
325
- libAlias: 'forlogic-core',
326
325
  security: {
327
326
  supabaseUrls: ['https://seu-projeto.supabase.co'],
328
327
  trustedOrigins: ['https://meu-app.com'],
@@ -332,14 +331,98 @@ const forlogicConfig = createForlogicViteConfig({
332
331
  });
333
332
 
334
333
  export default defineConfig(({ mode }) => {
335
- const config = forlogicConfig(mode === 'development');
334
+ const isDev = mode === 'development';
335
+ const baseConfig = forlogicConfig(isDev);
336
+
336
337
  return {
337
- ...config,
338
- plugins: [react(), ...config.plugins],
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
+ },
339
346
  };
340
347
  });
341
348
  ```
342
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
+
379
+ plugins: [
380
+ react(),
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
+ }),
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
+ },
413
+ };
414
+ });
415
+ ```
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
+
343
426
  ---
344
427
 
345
428
  ### 🔄 Forçar Re-bundle de Dependências
@@ -747,6 +830,48 @@ Se você não fornecer um `queryClient`, o `CoreProviders` cria um com as seguin
747
830
 
748
831
  ---
749
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
+
750
875
  <!-- AUTO_GENERATED_START -->
751
876
 
752
877
  ### 📚 Estatísticas da Documentação
@@ -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();
@@ -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,
@@ -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.4",
3
+ "version": "1.11.5",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",