@erplora/outfitkit
Advanced tools
| export {}; |
| /** | ||
| * Carga un config de vite por su RUTA, no por un `import` estático: importarlo con un especificador | ||
| * literal lo mete en el programa de `tsc --noEmit`, y con él los tipos de vite/unplugin-icons, que | ||
| * no son los de la librería. El typecheck del paquete no tiene por qué cargar con eso. | ||
| */ | ||
| export declare function loadViteConfig(file: string): Promise<{ | ||
| test: { | ||
| include: string[]; | ||
| exclude: string[]; | ||
| globalSetup?: string[]; | ||
| }; | ||
| }>; |
| export {}; |
| /** BOM UTF-8: al frente del export para que Excel detecte la codificación. */ | ||
| export declare const CSV_BOM = "\uFEFF"; | ||
| /** | ||
| * Bytes Windows-1252 → texto, con nuestra propia tabla. | ||
| * | ||
| * No usa `TextDecoder`: su soporte de codificaciones heredadas depende del entorno (ver arriba), | ||
| * y el import de un CSV de Excel tiene que leerse igual en el navegador, en el Hub offline y en | ||
| * cualquier runner de CI. | ||
| */ | ||
| export declare function decodeWindows1252(bytes: Uint8Array): string; | ||
| /** Bytes de un fichero CSV → texto: UTF-8 estricto con fallback a Windows-1252 (Excel). */ | ||
| export declare function decodeCsvBuffer(buf: ArrayBuffer): string; |
+3
-1
| { | ||
| "name": "@erplora/outfitkit", | ||
| "version": "0.1.41", | ||
| "version": "0.1.42", | ||
| "description": "OutfitKit — librería de Web Components (Lit) que CONSTRUYE lo que Ionic no tiene (tree, data-table rica, inline-feedback, kpi/stat, stepper/wizard, calendar, kanban…) sobre primitivos de Ionic. Ionic es la base; OutfitKit cubre los huecos. npm + CDN, imports individuales, CSP-safe. Tema vía tokens --ok-* (fallback a --ion-*).", | ||
@@ -147,2 +147,4 @@ "type": "module", | ||
| "test": "vitest run", | ||
| "test:parity": "vitest run --config vitest.parity.config.ts", | ||
| "test:all": "npm test && npm run test:parity", | ||
| "verify:csp": "node scripts/assert-csp-safe.mjs dist", | ||
@@ -149,0 +151,0 @@ "verify:node-modules": "node scripts/assert-no-tracked-node-modules.mjs", |
+20
-0
@@ -439,2 +439,5 @@ # OutfitKit (`@erplora/outfitkit`) | ||
| ```sh | ||
| npm test # suite de LIBRERÍA (hermética): solo lee este repo | ||
| npm run test:parity # suite de PARIDAD: showcase ↔ hub/, saas/ y modules-workspace/ | ||
| npm run test:all # las dos | ||
| npm run build # vite (dist/*.js, outfitkit.js, theme.example.css) + tsc (dist/*.d.ts) | ||
@@ -447,2 +450,19 @@ npm run typecheck # comprobación de tipos sin emitir | ||
| ### Las dos suites de test | ||
| Los tests están partidos porque solo una mitad puede correr en un runner limpio: | ||
| | Suite | Qué lee | Job de CI | | ||
| |---|---|---| | ||
| | **Librería** (`npm test`) | solo este repo | `quality`, en un runner **sin nada al lado** | | ||
| | **Paridad** (`npm run test:parity`) | el código real de `hub/`, `saas/` y `modules-workspace/modules/*` | `parity`, que **clona antes** lo que compara | | ||
| - Un test de paridad se **declara** con la marca `@suite parity` en su cabecera. El reparto lo hace | ||
| [`scripts/test-suites.mjs`](scripts/test-suites.mjs), y la lista de repos que clona CI se | ||
| **deduce de los propios tests** (`listParityRepos`): un test nuevo trae su clonado consigo. | ||
| - El job `quality` corre la suite de librería **sin los repos hermanos delante**: un test que lea | ||
| otro repo sin la marca se cae ahí, en rojo y en el acto. Esa es la red de seguridad del reparto. | ||
| - Si la suite de paridad **no puede** correr (falta un checkout), **falla diciendo cuál** — nunca se | ||
| auto-omite. Un test invisible es peor que no tener test. | ||
| Publicación a npm: [`docs/RELEASING.md`](docs/RELEASING.md) (Trusted Publishing / OIDC). | ||
@@ -449,0 +469,0 @@ |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
2164582
0.14%300
1.01%62514
0.16%480
4.35%