theus-cli-linux-x64 0.2.84
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/LICENSE +42 -0
- package/README.md +295 -0
- package/RELEASE.json +18 -0
- package/assets/brand-official/v1.0/logo/theus-lockup-negative-official.png +0 -0
- package/assets/brand-official/v1.0/logo/theus-lockup-primary-dark-official.png +0 -0
- package/assets/fonts/satoshi/satoshi-300.woff2 +0 -0
- package/assets/fonts/satoshi/satoshi-400.woff2 +0 -0
- package/assets/fonts/satoshi/satoshi-500.woff2 +0 -0
- package/assets/fonts/satoshi/satoshi-700.woff2 +0 -0
- package/assets/fonts/satoshi/satoshi-900.woff2 +0 -0
- package/assets/windows-store/Square150x150Logo.png +0 -0
- package/assets/windows-store/Square44x44Logo.png +0 -0
- package/assets/windows-store/StoreLogo.png +0 -0
- package/assets/windows-store/theus-store-icon-master.png +0 -0
- package/bin/theus +0 -0
- package/package.json +18 -0
- package/vendor/theus-arsenal/.arsenal-nombres-ola2.json +6 -0
- package/vendor/theus-arsenal/.arsenal-nombres-ola3.json +72 -0
- package/vendor/theus-arsenal/.mailmap +2 -0
- package/vendor/theus-arsenal/.theus-plugin/marketplace.json +25 -0
- package/vendor/theus-arsenal/.theus-plugin/plugin.json +20 -0
- package/vendor/theus-arsenal/AUTHORS.md +8 -0
- package/vendor/theus-arsenal/CLEANROOM_REPLACEMENT_PLAN.md +11 -0
- package/vendor/theus-arsenal/LICENSE +26 -0
- package/vendor/theus-arsenal/PROVENANCE.md +9 -0
- package/vendor/theus-arsenal/README.md +41 -0
- package/vendor/theus-arsenal/THIRD_PARTY.md +80 -0
- package/vendor/theus-arsenal/agents/actualizador-docs.md +123 -0
- package/vendor/theus-arsenal/agents/analista-comentarios.md +53 -0
- package/vendor/theus-arsenal/agents/analista-conversaciones.md +60 -0
- package/vendor/theus-arsenal/agents/analista-tests-pr.md +53 -0
- package/vendor/theus-arsenal/agents/analista-tipos.md +49 -0
- package/vendor/theus-arsenal/agents/arquitecto-accesibilidad.md +148 -0
- package/vendor/theus-arsenal/agents/arquitecto-codigo.md +79 -0
- package/vendor/theus-arsenal/agents/arquitecto-homelab.md +90 -0
- package/vendor/theus-arsenal/agents/arquitecto-redes.md +116 -0
- package/vendor/theus-arsenal/agents/arquitecto-sistemas.md +219 -0
- package/vendor/theus-arsenal/agents/bifurcador-opensource.md +206 -0
- package/vendor/theus-arsenal/agents/cazador-fallos-silenciosos.md +58 -0
- package/vendor/theus-arsenal/agents/consultor-documentacion.md +76 -0
- package/vendor/theus-arsenal/agents/diagnosticador-redes.md +135 -0
- package/vendor/theus-arsenal/agents/ejecutor-e2e.md +96 -0
- package/vendor/theus-arsenal/agents/empaquetador-opensource.md +257 -0
- package/vendor/theus-arsenal/agents/escaner-secretos.md +196 -0
- package/vendor/theus-arsenal/agents/especialista-seo.md +70 -0
- package/vendor/theus-arsenal/agents/estratega-marketing.md +158 -0
- package/vendor/theus-arsenal/agents/evaluador-agentes.md +214 -0
- package/vendor/theus-arsenal/agents/evaluador-harness.md +217 -0
- package/vendor/theus-arsenal/agents/explorador-codigo.md +79 -0
- package/vendor/theus-arsenal/agents/extractor-specs.md +214 -0
- package/vendor/theus-arsenal/agents/generador-harness.md +139 -0
- package/vendor/theus-arsenal/agents/guia-tdd.md +99 -0
- package/vendor/theus-arsenal/agents/jefe-de-gabinete.md +162 -0
- package/vendor/theus-arsenal/agents/limpiador-refactors.md +93 -0
- package/vendor/theus-arsenal/agents/optimizador-rendimiento.md +454 -0
- package/vendor/theus-arsenal/agents/planificador-harness.md +107 -0
- package/vendor/theus-arsenal/agents/planificador.md +221 -0
- package/vendor/theus-arsenal/agents/resolutor-apps-harmonyos.md +181 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-cpp.md +98 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-dart.md +209 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-django.md +253 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-go.md +102 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-java.md +274 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-kotlin.md +128 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-pytorch.md +128 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-react.md +214 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-rust.md +156 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-swift.md +169 -0
- package/vendor/theus-arsenal/agents/resolutor-builds.md +122 -0
- package/vendor/theus-arsenal/agents/revisor-bd.md +97 -0
- package/vendor/theus-arsenal/agents/revisor-codigo.md +291 -0
- package/vendor/theus-arsenal/agents/revisor-config-red.md +116 -0
- package/vendor/theus-arsenal/agents/revisor-cpp.md +80 -0
- package/vendor/theus-arsenal/agents/revisor-csharp.md +109 -0
- package/vendor/theus-arsenal/agents/revisor-django.md +168 -0
- package/vendor/theus-arsenal/agents/revisor-fastapi.md +82 -0
- package/vendor/theus-arsenal/agents/revisor-flutter.md +251 -0
- package/vendor/theus-arsenal/agents/revisor-go.md +84 -0
- package/vendor/theus-arsenal/agents/revisor-java.md +192 -0
- package/vendor/theus-arsenal/agents/revisor-kotlin.md +171 -0
- package/vendor/theus-arsenal/agents/revisor-ml.md +159 -0
- package/vendor/theus-arsenal/agents/revisor-php.md +108 -0
- package/vendor/theus-arsenal/agents/revisor-python.md +106 -0
- package/vendor/theus-arsenal/agents/revisor-react.md +166 -0
- package/vendor/theus-arsenal/agents/revisor-rust.md +102 -0
- package/vendor/theus-arsenal/agents/revisor-seguridad.md +116 -0
- package/vendor/theus-arsenal/agents/revisor-software-clinico.md +95 -0
- package/vendor/theus-arsenal/agents/revisor-swift.md +115 -0
- package/vendor/theus-arsenal/agents/revisor-typescript.md +123 -0
- package/vendor/theus-arsenal/agents/revisor-vue.md +205 -0
- package/vendor/theus-arsenal/agents/simplificador-codigo.md +55 -0
- package/vendor/theus-arsenal/commands/actualizar-docs.md +88 -0
- package/vendor/theus-arsenal/commands/actualizar-mapas-codigo.md +78 -0
- package/vendor/theus-arsenal/commands/aprender-evaluar.md +109 -0
- package/vendor/theus-arsenal/commands/aprender.md +74 -0
- package/vendor/theus-arsenal/commands/arreglar-build.md +66 -0
- package/vendor/theus-arsenal/commands/bucle-multiperspectiva.md +153 -0
- package/vendor/theus-arsenal/commands/build-cpp.md +173 -0
- package/vendor/theus-arsenal/commands/build-flutter.md +164 -0
- package/vendor/theus-arsenal/commands/build-go.md +183 -0
- package/vendor/theus-arsenal/commands/build-gradle.md +75 -0
- package/vendor/theus-arsenal/commands/build-kotlin.md +176 -0
- package/vendor/theus-arsenal/commands/build-react.md +187 -0
- package/vendor/theus-arsenal/commands/build-rust.md +187 -0
- package/vendor/theus-arsenal/commands/campana-marketing.md +125 -0
- package/vendor/theus-arsenal/commands/checkpoint.md +78 -0
- package/vendor/theus-arsenal/commands/cobertura-tests.md +73 -0
- package/vendor/theus-arsenal/commands/configurar-gestor-paquetes.md +86 -0
- package/vendor/theus-arsenal/commands/consulta.md +164 -0
- package/vendor/theus-arsenal/commands/control-calidad.md +50 -0
- package/vendor/theus-arsenal/commands/crear-skill.md +77 -0
- package/vendor/theus-arsenal/commands/enrutar-modelo.md +30 -0
- package/vendor/theus-arsenal/commands/epica-desbloquear.md +17 -0
- package/vendor/theus-arsenal/commands/epica-descomponer.md +22 -0
- package/vendor/theus-arsenal/commands/epica-publicar.md +21 -0
- package/vendor/theus-arsenal/commands/epica-reclamar.md +25 -0
- package/vendor/theus-arsenal/commands/epica-revisar.md +22 -0
- package/vendor/theus-arsenal/commands/epica-sincronizar.md +21 -0
- package/vendor/theus-arsenal/commands/epica-validar.md +21 -0
- package/vendor/theus-arsenal/commands/evolucionar.md +176 -0
- package/vendor/theus-arsenal/commands/funcionalidad.md +49 -0
- package/vendor/theus-arsenal/commands/guardar-sesion.md +278 -0
- package/vendor/theus-arsenal/commands/harness-build.md +111 -0
- package/vendor/theus-arsenal/commands/harness-diseno.md +46 -0
- package/vendor/theus-arsenal/commands/informe-costos.md +90 -0
- package/vendor/theus-arsenal/commands/iniciar-bucle.md +36 -0
- package/vendor/theus-arsenal/commands/instintos-estado.md +53 -0
- package/vendor/theus-arsenal/commands/instintos-exportar.md +69 -0
- package/vendor/theus-arsenal/commands/instintos-importar.md +120 -0
- package/vendor/theus-arsenal/commands/lienzo-planes.md +48 -0
- package/vendor/theus-arsenal/commands/limpiar-refactor.md +84 -0
- package/vendor/theus-arsenal/commands/modo-seguro.md +96 -0
- package/vendor/theus-arsenal/commands/orq-agregar-funcionalidad.md +36 -0
- package/vendor/theus-arsenal/commands/orq-cambiar-funcionalidad.md +38 -0
- package/vendor/theus-arsenal/commands/orq-construir-mvp.md +36 -0
- package/vendor/theus-arsenal/commands/orq-corregir-defecto.md +40 -0
- package/vendor/theus-arsenal/commands/orq-refinar-codigo.md +44 -0
- package/vendor/theus-arsenal/commands/orq-revisar.md +135 -0
- package/vendor/theus-arsenal/commands/plan-prd.md +160 -0
- package/vendor/theus-arsenal/commands/plan.md +198 -0
- package/vendor/theus-arsenal/commands/podar.md +31 -0
- package/vendor/theus-arsenal/commands/pr.md +181 -0
- package/vendor/theus-arsenal/commands/promover.md +41 -0
- package/vendor/theus-arsenal/commands/proyectos.md +33 -0
- package/vendor/theus-arsenal/commands/prp-commit.md +112 -0
- package/vendor/theus-arsenal/commands/prp-implementar.md +385 -0
- package/vendor/theus-arsenal/commands/prp-planificar.md +501 -0
- package/vendor/theus-arsenal/commands/reanudar-sesion.md +160 -0
- package/vendor/theus-arsenal/commands/revisar-codigo.md +289 -0
- package/vendor/theus-arsenal/commands/revisar-cpp.md +132 -0
- package/vendor/theus-arsenal/commands/revisar-fastapi.md +39 -0
- package/vendor/theus-arsenal/commands/revisar-flutter.md +115 -0
- package/vendor/theus-arsenal/commands/revisar-go.md +148 -0
- package/vendor/theus-arsenal/commands/revisar-kotlin.md +140 -0
- package/vendor/theus-arsenal/commands/revisar-pr.md +37 -0
- package/vendor/theus-arsenal/commands/revisar-python.md +297 -0
- package/vendor/theus-arsenal/commands/revisar-react.md +170 -0
- package/vendor/theus-arsenal/commands/revisar-rust.md +142 -0
- package/vendor/theus-arsenal/commands/revisar-vue.md +174 -0
- package/vendor/theus-arsenal/commands/salud-skills.md +52 -0
- package/vendor/theus-arsenal/commands/sesiones.md +345 -0
- package/vendor/theus-arsenal/commands/test-cpp.md +252 -0
- package/vendor/theus-arsenal/commands/test-flutter.md +143 -0
- package/vendor/theus-arsenal/commands/test-go.md +268 -0
- package/vendor/theus-arsenal/commands/test-kotlin.md +312 -0
- package/vendor/theus-arsenal/commands/test-react.md +265 -0
- package/vendor/theus-arsenal/commands/test-rust.md +309 -0
- package/vendor/theus-arsenal/commands/vigilancia-canary.md +43 -0
- package/vendor/theus-arsenal/hooks/hooks.json +274 -0
- package/vendor/theus-arsenal/package.json +6 -0
- package/vendor/theus-arsenal/rules/angular/coding-style.md +182 -0
- package/vendor/theus-arsenal/rules/angular/hooks.md +25 -0
- package/vendor/theus-arsenal/rules/angular/patterns.md +249 -0
- package/vendor/theus-arsenal/rules/angular/security.md +87 -0
- package/vendor/theus-arsenal/rules/angular/testing.md +164 -0
- package/vendor/theus-arsenal/rules/arkts/coding-style.md +153 -0
- package/vendor/theus-arsenal/rules/arkts/hooks.md +80 -0
- package/vendor/theus-arsenal/rules/arkts/patterns.md +236 -0
- package/vendor/theus-arsenal/rules/arkts/security.md +141 -0
- package/vendor/theus-arsenal/rules/arkts/testing.md +126 -0
- package/vendor/theus-arsenal/rules/common/agents.md +49 -0
- package/vendor/theus-arsenal/rules/common/code-review.md +123 -0
- package/vendor/theus-arsenal/rules/common/coding-style.md +90 -0
- package/vendor/theus-arsenal/rules/common/development-workflow.md +44 -0
- package/vendor/theus-arsenal/rules/common/git-workflow.md +24 -0
- package/vendor/theus-arsenal/rules/common/hooks.md +32 -0
- package/vendor/theus-arsenal/rules/common/patterns.md +31 -0
- package/vendor/theus-arsenal/rules/common/performance.md +53 -0
- package/vendor/theus-arsenal/rules/common/security.md +29 -0
- package/vendor/theus-arsenal/rules/common/testing.md +57 -0
- package/vendor/theus-arsenal/rules/cpp/coding-style.md +44 -0
- package/vendor/theus-arsenal/rules/cpp/hooks.md +39 -0
- package/vendor/theus-arsenal/rules/cpp/patterns.md +51 -0
- package/vendor/theus-arsenal/rules/cpp/security.md +51 -0
- package/vendor/theus-arsenal/rules/cpp/testing.md +44 -0
- package/vendor/theus-arsenal/rules/csharp/coding-style.md +72 -0
- package/vendor/theus-arsenal/rules/csharp/hooks.md +25 -0
- package/vendor/theus-arsenal/rules/csharp/patterns.md +50 -0
- package/vendor/theus-arsenal/rules/csharp/security.md +58 -0
- package/vendor/theus-arsenal/rules/csharp/testing.md +50 -0
- package/vendor/theus-arsenal/rules/dart/coding-style.md +159 -0
- package/vendor/theus-arsenal/rules/dart/hooks.md +68 -0
- package/vendor/theus-arsenal/rules/dart/patterns.md +261 -0
- package/vendor/theus-arsenal/rules/dart/security.md +135 -0
- package/vendor/theus-arsenal/rules/dart/testing.md +215 -0
- package/vendor/theus-arsenal/rules/fsharp/coding-style.md +112 -0
- package/vendor/theus-arsenal/rules/fsharp/hooks.md +26 -0
- package/vendor/theus-arsenal/rules/fsharp/patterns.md +111 -0
- package/vendor/theus-arsenal/rules/fsharp/security.md +76 -0
- package/vendor/theus-arsenal/rules/fsharp/testing.md +62 -0
- package/vendor/theus-arsenal/rules/golang/coding-style.md +32 -0
- package/vendor/theus-arsenal/rules/golang/hooks.md +17 -0
- package/vendor/theus-arsenal/rules/golang/patterns.md +45 -0
- package/vendor/theus-arsenal/rules/golang/security.md +34 -0
- package/vendor/theus-arsenal/rules/golang/testing.md +31 -0
- package/vendor/theus-arsenal/rules/java/coding-style.md +114 -0
- package/vendor/theus-arsenal/rules/java/hooks.md +18 -0
- package/vendor/theus-arsenal/rules/java/patterns.md +147 -0
- package/vendor/theus-arsenal/rules/java/security.md +101 -0
- package/vendor/theus-arsenal/rules/java/testing.md +133 -0
- package/vendor/theus-arsenal/rules/kotlin/coding-style.md +86 -0
- package/vendor/theus-arsenal/rules/kotlin/hooks.md +17 -0
- package/vendor/theus-arsenal/rules/kotlin/patterns.md +146 -0
- package/vendor/theus-arsenal/rules/kotlin/security.md +82 -0
- package/vendor/theus-arsenal/rules/kotlin/testing.md +128 -0
- package/vendor/theus-arsenal/rules/nuxt/coding-style.md +47 -0
- package/vendor/theus-arsenal/rules/nuxt/hooks.md +39 -0
- package/vendor/theus-arsenal/rules/nuxt/patterns.md +54 -0
- package/vendor/theus-arsenal/rules/nuxt/security.md +48 -0
- package/vendor/theus-arsenal/rules/nuxt/testing.md +49 -0
- package/vendor/theus-arsenal/rules/php/coding-style.md +40 -0
- package/vendor/theus-arsenal/rules/php/hooks.md +24 -0
- package/vendor/theus-arsenal/rules/php/patterns.md +33 -0
- package/vendor/theus-arsenal/rules/php/security.md +37 -0
- package/vendor/theus-arsenal/rules/php/testing.md +38 -0
- package/vendor/theus-arsenal/rules/python/coding-style.md +42 -0
- package/vendor/theus-arsenal/rules/python/fastapi.md +58 -0
- package/vendor/theus-arsenal/rules/python/hooks.md +19 -0
- package/vendor/theus-arsenal/rules/python/patterns.md +39 -0
- package/vendor/theus-arsenal/rules/python/security.md +30 -0
- package/vendor/theus-arsenal/rules/python/testing.md +38 -0
- package/vendor/theus-arsenal/rules/react/coding-style.md +109 -0
- package/vendor/theus-arsenal/rules/react/hooks.md +187 -0
- package/vendor/theus-arsenal/rules/react/patterns.md +194 -0
- package/vendor/theus-arsenal/rules/react/security.md +180 -0
- package/vendor/theus-arsenal/rules/react/testing.md +208 -0
- package/vendor/theus-arsenal/rules/react-native/accessibility.md +55 -0
- package/vendor/theus-arsenal/rules/react-native/coding-style.md +71 -0
- package/vendor/theus-arsenal/rules/react-native/hooks.md +28 -0
- package/vendor/theus-arsenal/rules/react-native/patterns.md +88 -0
- package/vendor/theus-arsenal/rules/react-native/performance.md +45 -0
- package/vendor/theus-arsenal/rules/react-native/production-readiness.md +51 -0
- package/vendor/theus-arsenal/rules/react-native/security.md +43 -0
- package/vendor/theus-arsenal/rules/react-native/testing.md +52 -0
- package/vendor/theus-arsenal/rules/ruby/coding-style.md +46 -0
- package/vendor/theus-arsenal/rules/ruby/hooks.md +37 -0
- package/vendor/theus-arsenal/rules/ruby/patterns.md +44 -0
- package/vendor/theus-arsenal/rules/ruby/security.md +51 -0
- package/vendor/theus-arsenal/rules/ruby/testing.md +51 -0
- package/vendor/theus-arsenal/rules/rust/coding-style.md +151 -0
- package/vendor/theus-arsenal/rules/rust/hooks.md +16 -0
- package/vendor/theus-arsenal/rules/rust/patterns.md +168 -0
- package/vendor/theus-arsenal/rules/rust/security.md +141 -0
- package/vendor/theus-arsenal/rules/rust/testing.md +154 -0
- package/vendor/theus-arsenal/rules/swift/coding-style.md +47 -0
- package/vendor/theus-arsenal/rules/swift/hooks.md +20 -0
- package/vendor/theus-arsenal/rules/swift/patterns.md +66 -0
- package/vendor/theus-arsenal/rules/swift/security.md +33 -0
- package/vendor/theus-arsenal/rules/swift/testing.md +45 -0
- package/vendor/theus-arsenal/rules/typescript/coding-style.md +199 -0
- package/vendor/theus-arsenal/rules/typescript/hooks.md +22 -0
- package/vendor/theus-arsenal/rules/typescript/patterns.md +52 -0
- package/vendor/theus-arsenal/rules/typescript/security.md +28 -0
- package/vendor/theus-arsenal/rules/typescript/testing.md +18 -0
- package/vendor/theus-arsenal/rules/vue/coding-style.md +54 -0
- package/vendor/theus-arsenal/rules/vue/hooks.md +45 -0
- package/vendor/theus-arsenal/rules/vue/patterns.md +56 -0
- package/vendor/theus-arsenal/rules/vue/security.md +46 -0
- package/vendor/theus-arsenal/rules/vue/testing.md +53 -0
- package/vendor/theus-arsenal/rules/web/coding-style.md +108 -0
- package/vendor/theus-arsenal/rules/web/design-quality.md +75 -0
- package/vendor/theus-arsenal/rules/web/hooks.md +141 -0
- package/vendor/theus-arsenal/rules/web/patterns.md +91 -0
- package/vendor/theus-arsenal/rules/web/performance.md +76 -0
- package/vendor/theus-arsenal/rules/web/security.md +69 -0
- package/vendor/theus-arsenal/rules/web/testing.md +67 -0
- package/vendor/theus-arsenal/scripts/hooks/bash-hook-dispatcher.js +192 -0
- package/vendor/theus-arsenal/scripts/hooks/block-no-verify.js +556 -0
- package/vendor/theus-arsenal/scripts/hooks/check-console-log.js +92 -0
- package/vendor/theus-arsenal/scripts/hooks/check-hook-enabled.js +16 -0
- package/vendor/theus-arsenal/scripts/hooks/config-protection.js +171 -0
- package/vendor/theus-arsenal/scripts/hooks/design-quality-check.js +132 -0
- package/vendor/theus-arsenal/scripts/hooks/doc-file-warning.js +110 -0
- package/vendor/theus-arsenal/scripts/hooks/modo-seguro.js +158 -0
- package/vendor/theus-arsenal/scripts/hooks/notificacion-escritorio.js +208 -0
- package/vendor/theus-arsenal/scripts/hooks/plugin-hook-bootstrap.js +280 -0
- package/vendor/theus-arsenal/scripts/hooks/post-bash-command-log.js +87 -0
- package/vendor/theus-arsenal/scripts/hooks/post-bash-dispatcher.js +24 -0
- package/vendor/theus-arsenal/scripts/hooks/post-bash-pr-created.js +60 -0
- package/vendor/theus-arsenal/scripts/hooks/post-edit-accumulator.js +94 -0
- package/vendor/theus-arsenal/scripts/hooks/post-edit-console-warn.js +54 -0
- package/vendor/theus-arsenal/scripts/hooks/post-edit-format.js +110 -0
- package/vendor/theus-arsenal/scripts/hooks/post-edit-typecheck.js +98 -0
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-commit-quality.js +447 -0
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-dev-server-block.js +232 -0
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-dispatcher.js +27 -0
- package/vendor/theus-arsenal/scripts/hooks/pre-compact.js +101 -0
- package/vendor/theus-arsenal/scripts/hooks/pretooluse-visible-output.js +49 -0
- package/vendor/theus-arsenal/scripts/hooks/quality-gate.js +168 -0
- package/vendor/theus-arsenal/scripts/hooks/run-with-flags.js +271 -0
- package/vendor/theus-arsenal/scripts/hooks/salud-mcp.js +749 -0
- package/vendor/theus-arsenal/scripts/hooks/seguimiento-costos.js +161 -0
- package/vendor/theus-arsenal/scripts/hooks/session-end.js +340 -0
- package/vendor/theus-arsenal/scripts/hooks/session-start.js +906 -0
- package/vendor/theus-arsenal/scripts/hooks/stop-format-typecheck.js +263 -0
- package/vendor/theus-arsenal/scripts/hooks/suggest-compact.js +286 -0
- package/vendor/theus-arsenal/scripts/hooks/theus-context-monitor.js +289 -0
- package/vendor/theus-arsenal/scripts/hooks/verificacion-factual.js +1278 -0
- package/vendor/theus-arsenal/scripts/lib/agent-data-home.js +96 -0
- package/vendor/theus-arsenal/scripts/lib/cost-estimate.js +66 -0
- package/vendor/theus-arsenal/scripts/lib/hook-flags.js +79 -0
- package/vendor/theus-arsenal/scripts/lib/llm-summary.js +185 -0
- package/vendor/theus-arsenal/scripts/lib/loopback-guard.js +54 -0
- package/vendor/theus-arsenal/scripts/lib/observer-sessions.js +237 -0
- package/vendor/theus-arsenal/scripts/lib/package-manager.d.ts +120 -0
- package/vendor/theus-arsenal/scripts/lib/package-manager.js +434 -0
- package/vendor/theus-arsenal/scripts/lib/path-safety.js +86 -0
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/markdown.js +285 -0
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/sdk.js +238 -0
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/server.js +534 -0
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/sessions.js +274 -0
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/ui.js +546 -0
- package/vendor/theus-arsenal/scripts/lib/project-detect.js +451 -0
- package/vendor/theus-arsenal/scripts/lib/resolve-formatter.js +193 -0
- package/vendor/theus-arsenal/scripts/lib/resolve-theus-root.js +101 -0
- package/vendor/theus-arsenal/scripts/lib/session-aliases.d.ts +138 -0
- package/vendor/theus-arsenal/scripts/lib/session-aliases.js +483 -0
- package/vendor/theus-arsenal/scripts/lib/session-bridge.js +155 -0
- package/vendor/theus-arsenal/scripts/lib/session-manager.d.ts +137 -0
- package/vendor/theus-arsenal/scripts/lib/session-manager.js +555 -0
- package/vendor/theus-arsenal/scripts/lib/shell-split.js +86 -0
- package/vendor/theus-arsenal/scripts/lib/shell-substitution.js +501 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/dashboard.js +414 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/health.js +285 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/index.js +22 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/provenance.js +200 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/tracker.js +157 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/versioning.js +246 -0
- package/vendor/theus-arsenal/scripts/lib/transcript-context.js +232 -0
- package/vendor/theus-arsenal/scripts/lib/utils.d.ts +205 -0
- package/vendor/theus-arsenal/scripts/lib/utils.js +658 -0
- package/vendor/theus-arsenal/scripts/plan-canvas.js +341 -0
- package/vendor/theus-arsenal/scripts/setup-package-manager.js +46 -0
- package/vendor/theus-arsenal/scripts/skills-health.js +143 -0
- package/vendor/theus-arsenal/skills/a11y-frontend/SKILL.md +444 -0
- package/vendor/theus-arsenal/skills/accesibilidad/SKILL.md +144 -0
- package/vendor/theus-arsenal/skills/acelerador-throughput-datos/SKILL.md +72 -0
- package/vendor/theus-arsenal/skills/agente-scraper-datos/SKILL.md +771 -0
- package/vendor/theus-arsenal/skills/analisis-plataformas-competencia/SKILL.md +137 -0
- package/vendor/theus-arsenal/skills/api-x/SKILL.md +233 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/SKILL.md +335 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/observer-loop.sh +374 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/observer.md +188 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/session-guardian.sh +153 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/start-observer.sh +253 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/config.json +8 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/hooks/observe.sh +594 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/detect-project.sh +325 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/instinct-cli.py +1918 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/lib/arsenal-dir.sh +23 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/test_parse_instinct.py +1420 -0
- package/vendor/theus-arsenal/skills/arquitectura-hexagonal/SKILL.md +275 -0
- package/vendor/theus-arsenal/skills/arquitectura-limpia-android/SKILL.md +340 -0
- package/vendor/theus-arsenal/skills/arquitectura-pipelines-recomendacion/SKILL.md +112 -0
- package/vendor/theus-arsenal/skills/atlas-datos-prediccion/SKILL.md +53 -0
- package/vendor/theus-arsenal/skills/auditoria-arquitectura-agentes/SKILL.md +257 -0
- package/vendor/theus-arsenal/skills/auditoria-produccion/SKILL.md +180 -0
- package/vendor/theus-arsenal/skills/auditoria-rutas-clic/SKILL.md +243 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/SKILL.md +180 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/examples/high-score-example.md +89 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/examples/low-score-example.md +87 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/references/evaluation-criteria.md +71 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/references/hook-integration.md +90 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/scripts/evaluate.py +409 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/templates/evaluation-report.md +86 -0
- package/vendor/theus-arsenal/skills/automatizacion-ssh-netmiko/SKILL.md +176 -0
- package/vendor/theus-arsenal/skills/base-datos-pubmed/SKILL.md +174 -0
- package/vendor/theus-arsenal/skills/base-datos-uspto/SKILL.md +173 -0
- package/vendor/theus-arsenal/skills/benchmark/SKILL.md +92 -0
- package/vendor/theus-arsenal/skills/bitacora-crecimiento/SKILL.md +120 -0
- package/vendor/theus-arsenal/skills/bucle-verificacion/SKILL.md +125 -0
- package/vendor/theus-arsenal/skills/buscar-primero/SKILL.md +184 -0
- package/vendor/theus-arsenal/skills/busqueda-exa/SKILL.md +111 -0
- package/vendor/theus-arsenal/skills/cache-por-hash/SKILL.md +160 -0
- package/vendor/theus-arsenal/skills/campana-marketing/SKILL.md +118 -0
- package/vendor/theus-arsenal/skills/capacidad-producto/SKILL.md +138 -0
- package/vendor/theus-arsenal/skills/cazador-vulnerabilidades/SKILL.md +104 -0
- package/vendor/theus-arsenal/skills/compactacion-estrategica/SKILL.md +115 -0
- package/vendor/theus-arsenal/skills/comparador-baskets-prediccion/SKILL.md +69 -0
- package/vendor/theus-arsenal/skills/compras-energia/SKILL.md +206 -0
- package/vendor/theus-arsenal/skills/concurrencia-swift-6-2/SKILL.md +224 -0
- package/vendor/theus-arsenal/skills/consejo/SKILL.md +201 -0
- package/vendor/theus-arsenal/skills/construccion-harness-agentes/SKILL.md +78 -0
- package/vendor/theus-arsenal/skills/constructor-conectores/SKILL.md +119 -0
- package/vendor/theus-arsenal/skills/constructor-equipos/SKILL.md +169 -0
- package/vendor/theus-arsenal/skills/consulta-documentacion/SKILL.md +92 -0
- package/vendor/theus-arsenal/skills/consultas-genomicas-gget/SKILL.md +170 -0
- package/vendor/theus-arsenal/skills/contacto-inversores/SKILL.md +95 -0
- package/vendor/theus-arsenal/skills/corrutinas-flows-kotlin/SKILL.md +284 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/SKILL.md +46 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/3d.md +86 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/animations.md +29 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/charts-bar-chart.tsx +173 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/text-animations-typewriter.tsx +100 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets.md +78 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/audio.md +172 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/calculate-metadata.md +104 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/can-decode.md +75 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/charts.md +58 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/compositions.md +146 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/display-captions.md +126 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/extract-frames.md +229 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/fonts.md +152 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-audio-duration.md +58 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-video-dimensions.md +68 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-video-duration.md +58 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/gifs.md +138 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/images.md +130 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/import-srt-captions.md +67 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/lottie.md +67 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/measuring-dom-nodes.md +34 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/measuring-text.md +143 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/sequencing.md +106 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/tailwind.md +11 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/text-animations.md +20 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/timing.md +179 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/transcribe-captions.md +19 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/transitions.md +122 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/trimming.md +52 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/videos.md +171 -0
- package/vendor/theus-arsenal/skills/cumplimiento-aduanero/SKILL.md +270 -0
- package/vendor/theus-arsenal/skills/cumplimiento-hipaa/SKILL.md +78 -0
- package/vendor/theus-arsenal/skills/datos-sensibles-salud/SKILL.md +149 -0
- package/vendor/theus-arsenal/skills/decimales-tokens-evm/SKILL.md +128 -0
- package/vendor/theus-arsenal/skills/decisiones-arquitectura/SKILL.md +206 -0
- package/vendor/theus-arsenal/skills/demos-ui/SKILL.md +469 -0
- package/vendor/theus-arsenal/skills/desarrollo-por-intencion/SKILL.md +369 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/SKILL.md +149 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/10_proposito-porque.md +42 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/20_posicionamiento.md +47 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/30_audiencia-nicho.md +53 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/40_personalidad-arquetipo.md +61 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/50_voz-tono.md +62 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/60_narrativa-historia.md +54 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/70_tension-fundador.md +50 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/90_SINTESIS.md +133 -0
- package/vendor/theus-arsenal/skills/descubrimiento-plugins-laravel/SKILL.md +230 -0
- package/vendor/theus-arsenal/skills/destilado-reglas/SKILL.md +263 -0
- package/vendor/theus-arsenal/skills/destilado-reglas/scripts/scan-rules.sh +58 -0
- package/vendor/theus-arsenal/skills/destilado-reglas/scripts/scan-skills.sh +129 -0
- package/vendor/theus-arsenal/skills/diagnostico-bgp/SKILL.md +170 -0
- package/vendor/theus-arsenal/skills/direccion-estetica/SKILL.md +220 -0
- package/vendor/theus-arsenal/skills/direccion-estetica/references/taxonomia-generos.md +89 -0
- package/vendor/theus-arsenal/skills/diseno-api/SKILL.md +522 -0
- package/vendor/theus-arsenal/skills/diseno-liquid-glass/SKILL.md +282 -0
- package/vendor/theus-arsenal/skills/e2e-escritorio-windows/SKILL.md +879 -0
- package/vendor/theus-arsenal/skills/edicion-video/SKILL.md +289 -0
- package/vendor/theus-arsenal/skills/enfoque-producto/SKILL.md +91 -0
- package/vendor/theus-arsenal/skills/entornos-flox/SKILL.md +493 -0
- package/vendor/theus-arsenal/skills/estandares-codigo/SKILL.md +548 -0
- package/vendor/theus-arsenal/skills/estandares-cpp/SKILL.md +727 -0
- package/vendor/theus-arsenal/skills/estandares-java/SKILL.md +389 -0
- package/vendor/theus-arsenal/skills/estilo-legado/SKILL.md +149 -0
- package/vendor/theus-arsenal/skills/estructura-informes-competencia/SKILL.md +95 -0
- package/vendor/theus-arsenal/skills/evaluacion-academica/SKILL.md +165 -0
- package/vendor/theus-arsenal/skills/explorador-skills/SKILL.md +129 -0
- package/vendor/theus-arsenal/skills/flujo-git/SKILL.md +714 -0
- package/vendor/theus-arsenal/skills/flujo-ingenieria-ml/SKILL.md +343 -0
- package/vendor/theus-arsenal/skills/flujo-tdd/SKILL.md +584 -0
- package/vendor/theus-arsenal/skills/forja-personas/SKILL.md +298 -0
- package/vendor/theus-arsenal/skills/forja-personas/gacha.py +224 -0
- package/vendor/theus-arsenal/skills/forja-personas/gacha.sh +5 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/avatar-style.md +123 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/boundary-rules.md +53 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/error-handling.md +53 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/identity-tension.md +48 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/naming-system.md +39 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/output-template.md +166 -0
- package/vendor/theus-arsenal/skills/fundamentos-animacion/SKILL.md +296 -0
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/SKILL.md +156 -0
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/scripts/generate_icons.swift +258 -0
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/scripts/iconify_gen.sh +235 -0
- package/vendor/theus-arsenal/skills/gestion-excepciones-logisticas/SKILL.md +208 -0
- package/vendor/theus-arsenal/skills/gestion-transportistas/SKILL.md +204 -0
- package/vendor/theus-arsenal/skills/guia-adopcion-ml/SKILL.md +64 -0
- package/vendor/theus-arsenal/skills/harness-agente-autonomo/SKILL.md +252 -0
- package/vendor/theus-arsenal/skills/harness-eval-clinico/SKILL.md +212 -0
- package/vendor/theus-arsenal/skills/harness-evaluacion/SKILL.md +296 -0
- package/vendor/theus-arsenal/skills/harness-generador-evaluador/SKILL.md +254 -0
- package/vendor/theus-arsenal/skills/homelab-diseno-red/SKILL.md +120 -0
- package/vendor/theus-arsenal/skills/homelab-dns-pihole/SKILL.md +264 -0
- package/vendor/theus-arsenal/skills/homelab-preparacion-red/SKILL.md +144 -0
- package/vendor/theus-arsenal/skills/homelab-segmentacion-vlan/SKILL.md +307 -0
- package/vendor/theus-arsenal/skills/homelab-vpn-wireguard/SKILL.md +299 -0
- package/vendor/theus-arsenal/skills/ingenieria-agentica/SKILL.md +96 -0
- package/vendor/theus-arsenal/skills/inspeccion-animaciones-blender/SKILL.md +164 -0
- package/vendor/theus-arsenal/skills/instaladores-python/SKILL.md +820 -0
- package/vendor/theus-arsenal/skills/integracion-jira/SKILL.md +307 -0
- package/vendor/theus-arsenal/skills/inteligencia-leads/SKILL.md +312 -0
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/agente-enriquecimiento.md +87 -0
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/mapeador-mutuos.md +76 -0
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/puntuador-senales.md +60 -0
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/redactor-outreach.md +102 -0
- package/vendor/theus-arsenal/skills/inteligencia-mercados-prediccion/SKILL.md +53 -0
- package/vendor/theus-arsenal/skills/introspeccion-agente/SKILL.md +150 -0
- package/vendor/theus-arsenal/skills/inventario-skills/SKILL.md +194 -0
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/quick-diff.sh +87 -0
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/save-results.sh +57 -0
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/scan.sh +170 -0
- package/vendor/theus-arsenal/skills/investigacion-mercado/SKILL.md +87 -0
- package/vendor/theus-arsenal/skills/investigacion-oraculos-prediccion/SKILL.md +59 -0
- package/vendor/theus-arsenal/skills/investigacion-profunda/SKILL.md +161 -0
- package/vendor/theus-arsenal/skills/keccak256-nodejs/SKILL.md +100 -0
- package/vendor/theus-arsenal/skills/libro-decisiones-recursivo/SKILL.md +82 -0
- package/vendor/theus-arsenal/skills/lienzo-planes/SKILL.md +111 -0
- package/vendor/theus-arsenal/skills/limpieza-configuracion/SKILL.md +116 -0
- package/vendor/theus-arsenal/skills/logistica-inversa-devoluciones/SKILL.md +241 -0
- package/vendor/theus-arsenal/skills/manejo-errores/SKILL.md +375 -0
- package/vendor/theus-arsenal/skills/materiales-inversores/SKILL.md +101 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/SKILL.md +170 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/forget.mjs +44 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/info.mjs +24 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/init.mjs +152 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/list.mjs +40 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/migrate.mjs +214 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/resume.mjs +36 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/save.mjs +210 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/shared.mjs +402 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/hooks/session-start.mjs +238 -0
- package/vendor/theus-arsenal/skills/metodologia-benchmarks/SKILL.md +131 -0
- package/vendor/theus-arsenal/skills/migraciones-bd/SKILL.md +430 -0
- package/vendor/theus-arsenal/skills/modelos-fundacionales-en-dispositivo/SKILL.md +244 -0
- package/vendor/theus-arsenal/skills/modo-seguro/SKILL.md +86 -0
- package/vendor/theus-arsenal/skills/motion-avanzado/SKILL.md +592 -0
- package/vendor/theus-arsenal/skills/motor-de-contenido/SKILL.md +136 -0
- package/vendor/theus-arsenal/skills/no-conformidades-calidad/SKILL.md +249 -0
- package/vendor/theus-arsenal/skills/onboarding-codigo/SKILL.md +244 -0
- package/vendor/theus-arsenal/skills/operaciones-agentes-empresariales/SKILL.md +51 -0
- package/vendor/theus-arsenal/skills/operaciones-conocimiento/SKILL.md +159 -0
- package/vendor/theus-arsenal/skills/operaciones-correo/SKILL.md +123 -0
- package/vendor/theus-arsenal/skills/operaciones-facturacion/SKILL.md +142 -0
- package/vendor/theus-arsenal/skills/operaciones-flujo-proyectos/SKILL.md +110 -0
- package/vendor/theus-arsenal/skills/operaciones-github/SKILL.md +143 -0
- package/vendor/theus-arsenal/skills/operaciones-google-workspace/SKILL.md +100 -0
- package/vendor/theus-arsenal/skills/operaciones-investigacion/SKILL.md +124 -0
- package/vendor/theus-arsenal/skills/operaciones-mensajes/SKILL.md +103 -0
- package/vendor/theus-arsenal/skills/operaciones-terminal/SKILL.md +110 -0
- package/vendor/theus-arsenal/skills/optimizacion-benchmark/SKILL.md +70 -0
- package/vendor/theus-arsenal/skills/optimizacion-costos-llm/SKILL.md +182 -0
- package/vendor/theus-arsenal/skills/optimizador-conexiones/SKILL.md +191 -0
- package/vendor/theus-arsenal/skills/optimizador-paralelismo/SKILL.md +75 -0
- package/vendor/theus-arsenal/skills/optimizador-prompts/SKILL.md +374 -0
- package/vendor/theus-arsenal/skills/orq-agregar-funcionalidad/SKILL.md +37 -0
- package/vendor/theus-arsenal/skills/orq-cambiar-funcionalidad/SKILL.md +36 -0
- package/vendor/theus-arsenal/skills/orq-construir-mvp/SKILL.md +38 -0
- package/vendor/theus-arsenal/skills/orq-corregir-defecto/SKILL.md +36 -0
- package/vendor/theus-arsenal/skills/orq-pipeline/SKILL.md +134 -0
- package/vendor/theus-arsenal/skills/orq-refinar-codigo/SKILL.md +49 -0
- package/vendor/theus-arsenal/skills/orquestacion-equipos-agentes/SKILL.md +117 -0
- package/vendor/theus-arsenal/skills/pagos-agentes-x402/SKILL.md +237 -0
- package/vendor/theus-arsenal/skills/patrones-angular/SKILL.md +153 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/angular-animations.md +160 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/angular-aria.md +410 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/cli.md +86 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/component-harnesses.md +59 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/component-styling.md +91 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/components.md +117 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/creating-services.md +97 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/data-resolvers.md +69 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/define-routes.md +67 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/defining-providers.md +72 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/di-fundamentals.md +120 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/e2e-testing.md +56 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/effects.md +83 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/hierarchical-injectors.md +43 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/host-elements.md +80 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/injection-context.md +63 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/inputs.md +101 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/linked-signal.md +59 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/loading-strategies.md +61 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/mcp.md +67 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/navigate-to-routes.md +69 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/outputs.md +86 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/reactive-forms.md +122 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/rendering-strategies.md +44 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/resource.md +77 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/route-animations.md +56 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/route-guards.md +52 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/router-lifecycle.md +45 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/router-testing.md +87 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/show-routes-with-outlets.md +68 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/signal-forms.md +795 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/signals-overview.md +94 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/tailwind-css.md +69 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/template-driven-forms.md +114 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/testing-fundamentals.md +65 -0
- package/vendor/theus-arsenal/skills/patrones-animacion/SKILL.md +432 -0
- package/vendor/theus-arsenal/skills/patrones-backend/SKILL.md +560 -0
- package/vendor/theus-arsenal/skills/patrones-cdss-clinico/SKILL.md +249 -0
- package/vendor/theus-arsenal/skills/patrones-cisco-ios/SKILL.md +148 -0
- package/vendor/theus-arsenal/skills/patrones-clickhouse/SKILL.md +443 -0
- package/vendor/theus-arsenal/skills/patrones-compose-multiplatform/SKILL.md +298 -0
- package/vendor/theus-arsenal/skills/patrones-dart-flutter/SKILL.md +566 -0
- package/vendor/theus-arsenal/skills/patrones-despliegue/SKILL.md +426 -0
- package/vendor/theus-arsenal/skills/patrones-django/SKILL.md +739 -0
- package/vendor/theus-arsenal/skills/patrones-django-celery/SKILL.md +456 -0
- package/vendor/theus-arsenal/skills/patrones-docker/SKILL.md +363 -0
- package/vendor/theus-arsenal/skills/patrones-dotnet/SKILL.md +321 -0
- package/vendor/theus-arsenal/skills/patrones-emr-clinico/SKILL.md +168 -0
- package/vendor/theus-arsenal/skills/patrones-fastapi/SKILL.md +513 -0
- package/vendor/theus-arsenal/skills/patrones-frontend/SKILL.md +655 -0
- package/vendor/theus-arsenal/skills/patrones-go/SKILL.md +674 -0
- package/vendor/theus-arsenal/skills/patrones-jpa/SKILL.md +156 -0
- package/vendor/theus-arsenal/skills/patrones-kotlin/SKILL.md +717 -0
- package/vendor/theus-arsenal/skills/patrones-kotlin-exposed/SKILL.md +724 -0
- package/vendor/theus-arsenal/skills/patrones-kotlin-ktor/SKILL.md +694 -0
- package/vendor/theus-arsenal/skills/patrones-kubernetes/SKILL.md +754 -0
- package/vendor/theus-arsenal/skills/patrones-laravel/SKILL.md +414 -0
- package/vendor/theus-arsenal/skills/patrones-mcp/SKILL.md +66 -0
- package/vendor/theus-arsenal/skills/patrones-mysql/SKILL.md +420 -0
- package/vendor/theus-arsenal/skills/patrones-nestjs/SKILL.md +229 -0
- package/vendor/theus-arsenal/skills/patrones-nextjs/SKILL.md +56 -0
- package/vendor/theus-arsenal/skills/patrones-nuxt4/SKILL.md +99 -0
- package/vendor/theus-arsenal/skills/patrones-perl/SKILL.md +508 -0
- package/vendor/theus-arsenal/skills/patrones-postgres/SKILL.md +141 -0
- package/vendor/theus-arsenal/skills/patrones-prisma/SKILL.md +399 -0
- package/vendor/theus-arsenal/skills/patrones-python/SKILL.md +750 -0
- package/vendor/theus-arsenal/skills/patrones-pytorch/SKILL.md +400 -0
- package/vendor/theus-arsenal/skills/patrones-quarkus/SKILL.md +729 -0
- package/vendor/theus-arsenal/skills/patrones-react/SKILL.md +339 -0
- package/vendor/theus-arsenal/skills/patrones-react-native/SKILL.md +325 -0
- package/vendor/theus-arsenal/skills/patrones-redis/SKILL.md +401 -0
- package/vendor/theus-arsenal/skills/patrones-rust/SKILL.md +504 -0
- package/vendor/theus-arsenal/skills/patrones-springboot/SKILL.md +314 -0
- package/vendor/theus-arsenal/skills/patrones-swiftui/SKILL.md +261 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/SKILL.md +281 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/architecture.md +90 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/data-handling.md +60 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/database.md +99 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/routing.md +64 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/system-usage.md +97 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/testing.md +72 -0
- package/vendor/theus-arsenal/skills/patrones-vite/SKILL.md +449 -0
- package/vendor/theus-arsenal/skills/patrones-vue/SKILL.md +469 -0
- package/vendor/theus-arsenal/skills/persistencia-actores-swift/SKILL.md +148 -0
- package/vendor/theus-arsenal/skills/pipeline-opensource/SKILL.md +254 -0
- package/vendor/theus-arsenal/skills/planificacion-demanda-inventario/SKILL.md +236 -0
- package/vendor/theus-arsenal/skills/planificador-trades-prediccion/SKILL.md +60 -0
- package/vendor/theus-arsenal/skills/plano-tecnico/SKILL.md +102 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/SKILL.md +189 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/STYLE_PRESETS.md +330 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/animation-patterns.md +122 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/html-template.md +419 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/scripts/export-pdf.sh +418 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/scripts/extract-pptx.py +96 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/viewport-base.css +153 -0
- package/vendor/theus-arsenal/skills/presupuesto-contexto/SKILL.md +263 -0
- package/vendor/theus-arsenal/skills/procesamiento-documentos-nutrient/SKILL.md +168 -0
- package/vendor/theus-arsenal/skills/programacion-produccion/SKILL.md +220 -0
- package/vendor/theus-arsenal/skills/publicacion-cruzada/SKILL.md +117 -0
- package/vendor/theus-arsenal/skills/publicador-social/SKILL.md +121 -0
- package/vendor/theus-arsenal/skills/puerta-de-entrega/SKILL.md +164 -0
- package/vendor/theus-arsenal/skills/puerta-de-entrega/hooks/puerta-entrega.py +242 -0
- package/vendor/theus-arsenal/skills/pulir-interfaces/SKILL.md +126 -0
- package/vendor/theus-arsenal/skills/qa-navegador/SKILL.md +103 -0
- package/vendor/theus-arsenal/skills/ranking-grafo-social/SKILL.md +153 -0
- package/vendor/theus-arsenal/skills/recuperacion-iterativa/SKILL.md +236 -0
- package/vendor/theus-arsenal/skills/redaccion-articulos/SKILL.md +81 -0
- package/vendor/theus-arsenal/skills/regex-vs-llm/SKILL.md +221 -0
- package/vendor/theus-arsenal/skills/regresion-codigo-ia/SKILL.md +388 -0
- package/vendor/theus-arsenal/skills/rendimiento-react/SKILL.md +567 -0
- package/vendor/theus-arsenal/skills/revision-codigo-flutter-dart/SKILL.md +442 -0
- package/vendor/theus-arsenal/skills/revision-literatura-cientifica/SKILL.md +191 -0
- package/vendor/theus-arsenal/skills/revision-multiperspectiva/SKILL.md +302 -0
- package/vendor/theus-arsenal/skills/revision-riesgo-prediccion/SKILL.md +56 -0
- package/vendor/theus-arsenal/skills/revision-seguridad/SKILL.md +505 -0
- package/vendor/theus-arsenal/skills/revision-seguridad/cloud-infrastructure-security.md +361 -0
- package/vendor/theus-arsenal/skills/runtime-bun/SKILL.md +83 -0
- package/vendor/theus-arsenal/skills/salud-codigo-codescene/SKILL.md +163 -0
- package/vendor/theus-arsenal/skills/salud-interfaces-red/SKILL.md +143 -0
- package/vendor/theus-arsenal/skills/seguimiento-costos/SKILL.md +122 -0
- package/vendor/theus-arsenal/skills/seguridad-agentes-trading/SKILL.md +145 -0
- package/vendor/theus-arsenal/skills/seguridad-amm-defi/SKILL.md +166 -0
- package/vendor/theus-arsenal/skills/seguridad-django/SKILL.md +648 -0
- package/vendor/theus-arsenal/skills/seguridad-laravel/SKILL.md +945 -0
- package/vendor/theus-arsenal/skills/seguridad-perl/SKILL.md +507 -0
- package/vendor/theus-arsenal/skills/seguridad-quarkus/SKILL.md +474 -0
- package/vendor/theus-arsenal/skills/seguridad-springboot/SKILL.md +279 -0
- package/vendor/theus-arsenal/skills/seo/SKILL.md +166 -0
- package/vendor/theus-arsenal/skills/sistema-diseno/SKILL.md +81 -0
- package/vendor/theus-arsenal/skills/sistema-operativo-agentico/SKILL.md +375 -0
- package/vendor/theus-arsenal/skills/sistemas-latencia-critica/SKILL.md +65 -0
- package/vendor/theus-arsenal/skills/tdd-django/SKILL.md +735 -0
- package/vendor/theus-arsenal/skills/tdd-laravel/SKILL.md +673 -0
- package/vendor/theus-arsenal/skills/tdd-quarkus/SKILL.md +817 -0
- package/vendor/theus-arsenal/skills/tdd-springboot/SKILL.md +165 -0
- package/vendor/theus-arsenal/skills/testing-cpp/SKILL.md +328 -0
- package/vendor/theus-arsenal/skills/testing-csharp/SKILL.md +321 -0
- package/vendor/theus-arsenal/skills/testing-e2e/SKILL.md +325 -0
- package/vendor/theus-arsenal/skills/testing-go/SKILL.md +719 -0
- package/vendor/theus-arsenal/skills/testing-kotlin/SKILL.md +829 -0
- package/vendor/theus-arsenal/skills/testing-perl/SKILL.md +479 -0
- package/vendor/theus-arsenal/skills/testing-protocolos-di-swift/SKILL.md +196 -0
- package/vendor/theus-arsenal/skills/testing-python/SKILL.md +815 -0
- package/vendor/theus-arsenal/skills/testing-react/SKILL.md +421 -0
- package/vendor/theus-arsenal/skills/testing-rust/SKILL.md +506 -0
- package/vendor/theus-arsenal/skills/tours-de-codigo/SKILL.md +252 -0
- package/vendor/theus-arsenal/skills/traduccion-documentos-visado/SKILL.md +121 -0
- package/vendor/theus-arsenal/skills/ui-a-vue/SKILL.md +141 -0
- package/vendor/theus-arsenal/skills/validacion-config-red/SKILL.md +211 -0
- package/vendor/theus-arsenal/skills/verificacion-django/SKILL.md +470 -0
- package/vendor/theus-arsenal/skills/verificacion-factual/SKILL.md +142 -0
- package/vendor/theus-arsenal/skills/verificacion-laravel/SKILL.md +184 -0
- package/vendor/theus-arsenal/skills/verificacion-quarkus/SKILL.md +485 -0
- package/vendor/theus-arsenal/skills/verificacion-springboot/SKILL.md +237 -0
- package/vendor/theus-arsenal/skills/videodb/SKILL.md +374 -0
- package/vendor/theus-arsenal/skills/videodb/reference/api-reference.md +550 -0
- package/vendor/theus-arsenal/skills/videodb/reference/capture-reference.md +407 -0
- package/vendor/theus-arsenal/skills/videodb/reference/capture.md +101 -0
- package/vendor/theus-arsenal/skills/videodb/reference/editor.md +443 -0
- package/vendor/theus-arsenal/skills/videodb/reference/generative.md +331 -0
- package/vendor/theus-arsenal/skills/videodb/reference/rtstream-reference.md +564 -0
- package/vendor/theus-arsenal/skills/videodb/reference/rtstream.md +65 -0
- package/vendor/theus-arsenal/skills/videodb/reference/search.md +230 -0
- package/vendor/theus-arsenal/skills/videodb/reference/streaming.md +406 -0
- package/vendor/theus-arsenal/skills/videodb/reference/use-cases.md +118 -0
- package/vendor/theus-arsenal/skills/videodb/scripts/ws_listener.py +279 -0
- package/vendor/theus-arsenal/skills/videos-manim/SKILL.md +91 -0
- package/vendor/theus-arsenal/skills/videos-manim/assets/network_graph_scene.py +52 -0
- package/vendor/theus-arsenal/skills/vigilancia-canary/SKILL.md +108 -0
- package/vendor/theus-arsenal/skills/voz-de-marca/SKILL.md +106 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Testing con harnesses de componentes
|
|
2
|
+
|
|
3
|
+
Los harnesses de componentes son la forma estándar y preferida de interactuar con componentes en las pruebas. Proveen una API robusta y centrada en el usuario que hace las pruebas menos frágiles y más legibles, aislándolas de los cambios en la estructura DOM interna del componente.
|
|
4
|
+
|
|
5
|
+
## ¿Por qué usar harnesses?
|
|
6
|
+
|
|
7
|
+
- **Robustez:** las pruebas no se rompen cuando refactorizas el HTML interno o las clases CSS de un componente.
|
|
8
|
+
- **Legibilidad:** las pruebas describen interacciones desde la perspectiva del usuario (p. ej., `button.click()`, `slider.getValue()`) en lugar de consultas al DOM (`fixture.nativeElement.querySelector(...)`).
|
|
9
|
+
- **Reutilización:** el mismo harness puede usarse tanto en pruebas unitarias como E2E.
|
|
10
|
+
|
|
11
|
+
Angular Material provee un harness de pruebas para cada componente de su librería.
|
|
12
|
+
|
|
13
|
+
## Usar un harness en una prueba unitaria
|
|
14
|
+
|
|
15
|
+
El `TestbedHarnessEnvironment` es el punto de entrada para usar harnesses en pruebas unitarias.
|
|
16
|
+
|
|
17
|
+
### Ejemplo: probar con un `MatButtonHarness`
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import {TestbedHarnessEnvironment} from '@angular/cdk/testing/testbed';
|
|
21
|
+
import {MatButtonHarness} from '@angular/material/button/testing';
|
|
22
|
+
import {MyButtonContainerComponent} from './my-button-container.component';
|
|
23
|
+
|
|
24
|
+
describe('MyButtonContainerComponent', () => {
|
|
25
|
+
let fixture: ComponentFixture<MyButtonContainerComponent>;
|
|
26
|
+
let loader: HarnessLoader;
|
|
27
|
+
|
|
28
|
+
beforeEach(async () => {
|
|
29
|
+
await TestBed.configureTestingModule({
|
|
30
|
+
imports: [MyButtonContainerComponent, MatButtonModule],
|
|
31
|
+
}).compileComponents();
|
|
32
|
+
|
|
33
|
+
fixture = TestBed.createComponent(MyButtonContainerComponent);
|
|
34
|
+
// Crea un loader de harnesses para el fixture del componente
|
|
35
|
+
loader = TestbedHarnessEnvironment.loader(fixture);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('debería encontrar un botón con un texto específico', async () => {
|
|
39
|
+
// Carga el harness de un MatButton con el texto "Submit"
|
|
40
|
+
const submitButton = await loader.getHarness(MatButtonHarness.with({text: 'Submit'}));
|
|
41
|
+
|
|
42
|
+
// Usa la API del harness para interactuar con el componente
|
|
43
|
+
expect(await submitButton.isDisabled()).toBe(false);
|
|
44
|
+
await submitButton.click();
|
|
45
|
+
|
|
46
|
+
// ... verificaciones
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Conceptos clave
|
|
52
|
+
|
|
53
|
+
1. **`HarnessLoader`**: objeto usado para encontrar y crear instancias de harnesses. Obtén un loader para el fixture de tu componente con `TestbedHarnessEnvironment.loader(fixture)`.
|
|
54
|
+
|
|
55
|
+
2. **`loader.getHarness(HarnessClass)`**: encuentra y devuelve de forma asíncrona una instancia del harness para el primer componente que coincida.
|
|
56
|
+
|
|
57
|
+
3. **`HarnessClass.with({ ... })`**: muchos harnesses proveen un método estático `with` que devuelve un `HarnessPredicate`. Esto permite filtrar y encontrar componentes por sus propiedades, como texto, selector o estado deshabilitado. Úsalo siempre para apuntar con precisión al componente que quieres probar.
|
|
58
|
+
|
|
59
|
+
4. **API del harness:** una vez que tienes una instancia del harness, usa sus métodos (p. ej., `.click()`, `.getText()`, `.getValue()`) para interactuar con el componente. Estos métodos gestionan automáticamente la espera de operaciones asíncronas y la detección de cambios.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Estilos de componentes
|
|
2
|
+
|
|
3
|
+
Los componentes de Angular pueden definir estilos que aplican específicamente a su plantilla, lo que permite encapsulación y modularidad.
|
|
4
|
+
|
|
5
|
+
## Definir estilos
|
|
6
|
+
|
|
7
|
+
Los estilos pueden definirse inline o en archivos separados.
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
@Component({
|
|
11
|
+
selector: 'app-photo',
|
|
12
|
+
// Estilos inline
|
|
13
|
+
styles: `
|
|
14
|
+
img {
|
|
15
|
+
border-radius: 50%;
|
|
16
|
+
}
|
|
17
|
+
`,
|
|
18
|
+
// O archivo externo
|
|
19
|
+
styleUrl: 'photo.component.css',
|
|
20
|
+
})
|
|
21
|
+
export class Photo {}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Encapsulación de vistas
|
|
25
|
+
|
|
26
|
+
Cada componente tiene una configuración de encapsulación de vista que determina cómo se acotan los estilos.
|
|
27
|
+
|
|
28
|
+
| Modo | Comportamiento |
|
|
29
|
+
| :------------------------------ | :----------------------------------------------------------------------------------------------------------- |
|
|
30
|
+
| `Emulated` (por defecto) | Acota los estilos al componente mediante atributos HTML únicos. Los estilos globales aún pueden filtrarse. |
|
|
31
|
+
| `ShadowDom` | Usa la API nativa de Shadow DOM del navegador para aislar los estilos por completo. |
|
|
32
|
+
| `None` | Desactiva la encapsulación. Los estilos del componente se vuelven globales. |
|
|
33
|
+
| `ExperimentalIsolatedShadowDom` | Garantiza estrictamente que solo apliquen los estilos del componente. |
|
|
34
|
+
|
|
35
|
+
### Uso
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
import { ViewEncapsulation } from '@angular/core';
|
|
39
|
+
|
|
40
|
+
@Component({
|
|
41
|
+
...,
|
|
42
|
+
encapsulation: ViewEncapsulation.None,
|
|
43
|
+
})
|
|
44
|
+
export class GlobalStyled {}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Selectores especiales
|
|
48
|
+
|
|
49
|
+
### `:host`
|
|
50
|
+
|
|
51
|
+
Apunta al elemento host del componente (el elemento que coincide con el selector del componente).
|
|
52
|
+
|
|
53
|
+
```css
|
|
54
|
+
:host {
|
|
55
|
+
display: block;
|
|
56
|
+
border: 1px solid black;
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### `:host-context()`
|
|
61
|
+
|
|
62
|
+
Apunta al elemento host según alguna condición en sus ancestros.
|
|
63
|
+
|
|
64
|
+
```css
|
|
65
|
+
/* Aplica los estilos si algún ancestro tiene la clase 'theme-dark' */
|
|
66
|
+
:host-context(.theme-dark) {
|
|
67
|
+
background-color: #333;
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### `::ng-deep`
|
|
72
|
+
|
|
73
|
+
Desactiva la encapsulación de vista para una regla específica, permitiendo que se "filtre" a los componentes hijos.
|
|
74
|
+
**Nota: el equipo de Angular desaconseja firmemente el uso de `::ng-deep`.** Se soporta solo por compatibilidad hacia atrás.
|
|
75
|
+
|
|
76
|
+
## Estilos en plantillas
|
|
77
|
+
|
|
78
|
+
Puedes usar elementos `<style>` directamente en la plantilla de un componente. Las reglas de encapsulación de vista siguen aplicando.
|
|
79
|
+
|
|
80
|
+
```html
|
|
81
|
+
<style>
|
|
82
|
+
.dynamic-class {
|
|
83
|
+
color: red;
|
|
84
|
+
}
|
|
85
|
+
</style>
|
|
86
|
+
<div class="dynamic-class">Hola</div>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Estilos externos
|
|
90
|
+
|
|
91
|
+
Usar `<link>` o `@import` en CSS se trata como estilos externos. **Los estilos externos no se ven afectados por la encapsulación de vista emulada.**
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Componentes
|
|
2
|
+
|
|
3
|
+
Los componentes de Angular son los bloques fundamentales de una aplicación. Cada componente consiste en una clase TypeScript con comportamientos, una plantilla HTML y un selector CSS.
|
|
4
|
+
|
|
5
|
+
## Definición de un componente
|
|
6
|
+
|
|
7
|
+
Usa el decorador `@Component` para definir los metadatos del componente.
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
@Component({
|
|
11
|
+
selector: 'app-profile',
|
|
12
|
+
template: `
|
|
13
|
+
<img src="profile.jpg" alt="Foto de perfil" />
|
|
14
|
+
<button (click)="save()">Guardar</button>
|
|
15
|
+
`,
|
|
16
|
+
styles: `
|
|
17
|
+
img {
|
|
18
|
+
border-radius: 50%;
|
|
19
|
+
}
|
|
20
|
+
`,
|
|
21
|
+
})
|
|
22
|
+
export class Profile {
|
|
23
|
+
save() {
|
|
24
|
+
/* ... */
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Opciones de metadatos
|
|
30
|
+
|
|
31
|
+
- `selector`: el selector CSS que identifica este componente en las plantillas.
|
|
32
|
+
- `template`: plantilla HTML inline (preferida para plantillas pequeñas).
|
|
33
|
+
- `templateUrl`: ruta a un archivo HTML externo.
|
|
34
|
+
- `styles`: estilos CSS inline.
|
|
35
|
+
- `styleUrl` / `styleUrls`: ruta(s) a archivo(s) CSS externo(s).
|
|
36
|
+
- `imports`: lista los componentes, directivas o pipes usados en la plantilla de este componente.
|
|
37
|
+
|
|
38
|
+
## Usar componentes
|
|
39
|
+
|
|
40
|
+
Para usar un componente, añádelo al array `imports` del componente consumidor y usa su selector en la plantilla.
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
@Component({
|
|
44
|
+
selector: 'app-root',
|
|
45
|
+
imports: [Profile],
|
|
46
|
+
template: `<app-profile />`,
|
|
47
|
+
})
|
|
48
|
+
export class App {}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Control de flujo en plantillas
|
|
52
|
+
|
|
53
|
+
Angular usa bloques integrados para renderizado condicional y bucles.
|
|
54
|
+
|
|
55
|
+
### Renderizado condicional (`@if`)
|
|
56
|
+
|
|
57
|
+
Usa `@if` para mostrar contenido condicionalmente. Puedes incluir bloques `@else if` y `@else`.
|
|
58
|
+
|
|
59
|
+
```html
|
|
60
|
+
@if (user.isAdmin) {
|
|
61
|
+
<admin-dashboard />
|
|
62
|
+
} @else if (user.isModerator) {
|
|
63
|
+
<mod-dashboard />
|
|
64
|
+
} @else {
|
|
65
|
+
<standard-dashboard />
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Alias del resultado**: guarda el resultado de la expresión para reutilizarlo.
|
|
70
|
+
|
|
71
|
+
```html
|
|
72
|
+
@if (user.settings(); as settings) {
|
|
73
|
+
<p>Tema: {{ settings.theme }}</p>
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Bucles (`@for`)
|
|
78
|
+
|
|
79
|
+
El bloque `@for` itera sobre colecciones. La expresión `track` es **obligatoria** por rendimiento y reutilización del DOM.
|
|
80
|
+
|
|
81
|
+
```html
|
|
82
|
+
<ul>
|
|
83
|
+
@for (item of items(); track item.id; let i = $index, total = $count) {
|
|
84
|
+
<li>{{ i + 1 }}/{{ total }}: {{ item.name }}</li>
|
|
85
|
+
} @empty {
|
|
86
|
+
<li>No hay elementos que mostrar.</li>
|
|
87
|
+
}
|
|
88
|
+
</ul>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Variables implícitas**: `$index`, `$count`, `$first`, `$last`, `$even`, `$odd`.
|
|
92
|
+
|
|
93
|
+
### Contenido alternativo (`@switch`)
|
|
94
|
+
|
|
95
|
+
El bloque `@switch` renderiza contenido según un valor. Usa igualdad estricta (`===`) y **no tiene fallthrough**.
|
|
96
|
+
|
|
97
|
+
```html
|
|
98
|
+
@switch (status()) { @case ('loading') { <app-spinner /> } @case ('error') { <app-error-msg /> }
|
|
99
|
+
@case ('success') { <app-data-grid /> } @default {
|
|
100
|
+
<p>Estado desconocido</p>
|
|
101
|
+
} }
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Comprobación exhaustiva de tipos**: usa `@default never;` para asegurar que se manejan todos los casos de un tipo unión.
|
|
105
|
+
|
|
106
|
+
```html
|
|
107
|
+
@switch (state) { @case ('on') { ... } @case ('off') { ... } @default never; // Falla si se añade
|
|
108
|
+
un estado nuevo como 'standby' }
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Conceptos base
|
|
112
|
+
|
|
113
|
+
- **Elemento host**: el elemento del DOM que coincide con el selector del componente.
|
|
114
|
+
- **Vista**: el DOM renderizado por la plantilla del componente dentro del elemento host.
|
|
115
|
+
- **Standalone**: por defecto, los componentes son standalone (desde Angular 19, `standalone: true` es el valor por defecto). En versiones anteriores, `standalone: true` debe ser explícito o el componente debe formar parte de un `NgModule`.
|
|
116
|
+
- **Árbol de componentes**: las aplicaciones Angular se estructuran como un árbol de componentes, donde cada componente puede alojar componentes hijos.
|
|
117
|
+
- **Nomenclatura de componentes**: no añadas el sufijo `Component` a las clases de componentes (p. ej., AppComponent) salvo que el proyecto esté configurado para usar esa convención.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Crear y usar servicios
|
|
2
|
+
|
|
3
|
+
Los servicios en Angular son piezas de código reutilizables que gestionan carga de datos, lógica de negocio o gestión de estado a las que necesitan acceder múltiples componentes u otros servicios.
|
|
4
|
+
|
|
5
|
+
## Crear un servicio
|
|
6
|
+
|
|
7
|
+
Puedes generar un servicio con la CLI de Angular:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
ng generate service my-data
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
O puedes crear manualmente una clase TypeScript y decorarla con `@Injectable()`.
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import {Injectable} from '@angular/core';
|
|
17
|
+
|
|
18
|
+
@Injectable({
|
|
19
|
+
providedIn: 'root',
|
|
20
|
+
})
|
|
21
|
+
export class BasicDataStore {
|
|
22
|
+
private data: string[] = [];
|
|
23
|
+
|
|
24
|
+
addData(item: string): void {
|
|
25
|
+
this.data.push(item);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
getData(): string[] {
|
|
29
|
+
return [...this.data];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### La opción `providedIn: 'root'`
|
|
35
|
+
|
|
36
|
+
Usar `providedIn: 'root'` es el enfoque recomendado para la mayoría de los servicios. Le indica a Angular que debe:
|
|
37
|
+
|
|
38
|
+
- **Crear una única instancia (singleton)** para toda la aplicación.
|
|
39
|
+
- **Ponerla disponible en todas partes** automáticamente, sin necesidad de listarla en ningún array `providers`.
|
|
40
|
+
- **Habilitar tree-shaking**, es decir, el servicio solo se incluye en el bundle JavaScript final si realmente se inyecta en algún sitio.
|
|
41
|
+
|
|
42
|
+
## Inyectar un servicio
|
|
43
|
+
|
|
44
|
+
Una vez creado el servicio, puedes inyectarlo en componentes, directivas u otros servicios con la función `inject()`.
|
|
45
|
+
|
|
46
|
+
### Inyectar en un componente
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
import {Component, inject} from '@angular/core';
|
|
50
|
+
import {BasicDataStore} from './basic-data-store.service';
|
|
51
|
+
|
|
52
|
+
@Component({
|
|
53
|
+
selector: 'app-example',
|
|
54
|
+
template: `
|
|
55
|
+
<div>
|
|
56
|
+
<p>Elementos de datos: {{ dataStore.getData().length }}</p>
|
|
57
|
+
<button (click)="dataStore.addData('Nuevo elemento')">Añadir elemento</button>
|
|
58
|
+
</div>
|
|
59
|
+
`,
|
|
60
|
+
})
|
|
61
|
+
export class Example {
|
|
62
|
+
// Inyecta el servicio como campo de clase
|
|
63
|
+
dataStore = inject(BasicDataStore);
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Inyectar en otro servicio
|
|
68
|
+
|
|
69
|
+
Los servicios pueden inyectar otros servicios exactamente de la misma manera.
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
import {Injectable, inject} from '@angular/core';
|
|
73
|
+
import {AdvancedDataStore} from './advanced-data-store.service';
|
|
74
|
+
|
|
75
|
+
@Injectable({
|
|
76
|
+
providedIn: 'root',
|
|
77
|
+
})
|
|
78
|
+
export class BasicDataStore {
|
|
79
|
+
// Inyección de otro servicio
|
|
80
|
+
private advancedDataStore = inject(AdvancedDataStore);
|
|
81
|
+
|
|
82
|
+
private data: string[] = [];
|
|
83
|
+
|
|
84
|
+
getData(): string[] {
|
|
85
|
+
// Combina los datos de este servicio y del servicio inyectado
|
|
86
|
+
return [...this.data, ...this.advancedDataStore.getData()];
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Patrones avanzados de servicios
|
|
92
|
+
|
|
93
|
+
Aunque `providedIn: 'root'` cubre la mayoría de los escenarios, a veces puedes necesitar:
|
|
94
|
+
|
|
95
|
+
- **Instancias específicas por componente**: si un componente necesita su propia instancia aislada de un servicio, provéelo directamente en el array `@Component({ providers: [MyService] })` del componente.
|
|
96
|
+
- **Providers de fábrica**: para creación dinámica.
|
|
97
|
+
- **Providers de valor**: para inyectar objetos de configuración.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Resolvers de datos
|
|
2
|
+
|
|
3
|
+
Los resolvers de datos obtienen datos antes de que una ruta se active, asegurando que los componentes tengan los datos necesarios al renderizarse.
|
|
4
|
+
|
|
5
|
+
## Crear un resolver
|
|
6
|
+
|
|
7
|
+
Implementa el tipo `ResolveFn`.
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
export const userResolver: ResolveFn<User> = (route, state) => {
|
|
11
|
+
const userService = inject(UserService);
|
|
12
|
+
const id = route.paramMap.get('id')!;
|
|
13
|
+
return userService.getUser(id);
|
|
14
|
+
};
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Configurar la ruta
|
|
18
|
+
|
|
19
|
+
Añade el resolver bajo la clave `resolve`.
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
{
|
|
23
|
+
path: 'user/:id',
|
|
24
|
+
component: UserProfile,
|
|
25
|
+
resolve: {
|
|
26
|
+
user: userResolver
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Acceder a los datos resueltos
|
|
32
|
+
|
|
33
|
+
### 1. Vía `ActivatedRoute` (tradicional)
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
private route = inject(ActivatedRoute);
|
|
37
|
+
data = toSignal(this.route.data);
|
|
38
|
+
user = computed(() => this.data().user);
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 2. Vía inputs del componente (moderno)
|
|
42
|
+
|
|
43
|
+
Habilita `withComponentInputBinding()` en `provideRouter` para pasar los datos resueltos directamente a `@Input` o `input()`.
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
// app.config.ts
|
|
47
|
+
provideRouter(routes, withComponentInputBinding());
|
|
48
|
+
|
|
49
|
+
// component.ts
|
|
50
|
+
user = input.required<User>();
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Manejo de errores
|
|
54
|
+
|
|
55
|
+
La navegación se bloquea si un resolver falla.
|
|
56
|
+
|
|
57
|
+
- Usa `withNavigationErrorHandler` para el manejo global.
|
|
58
|
+
- Usa `catchError` dentro del resolver para devolver un `RedirectCommand` o datos de reserva.
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
return userService
|
|
62
|
+
.get(id)
|
|
63
|
+
.pipe(catchError(() => of(new RedirectCommand(router.parseUrl('/error')))));
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Buenas prácticas
|
|
67
|
+
|
|
68
|
+
- **Mantenlo ligero**: obtén solo los datos críticos.
|
|
69
|
+
- **Da retroalimentación**: escucha los eventos del router para mostrar una barra de carga global durante la navegación, ya que la UI permanece en la página anterior hasta que el resolver termina.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Definir rutas
|
|
2
|
+
|
|
3
|
+
Las rutas son objetos que definen qué componente debe renderizarse para una ruta URL específica.
|
|
4
|
+
|
|
5
|
+
## Configuración básica
|
|
6
|
+
|
|
7
|
+
Define las rutas en un array `Routes` y provéelas usando `provideRouter` en tu `appConfig`.
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
// app.routes.ts
|
|
11
|
+
export const routes: Routes = [
|
|
12
|
+
{path: '', component: HomePage},
|
|
13
|
+
{path: 'admin', component: AdminPage},
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
// app.config.ts
|
|
17
|
+
export const appConfig: ApplicationConfig = {
|
|
18
|
+
providers: [provideRouter(routes)],
|
|
19
|
+
};
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Rutas URL
|
|
23
|
+
|
|
24
|
+
- **Estáticas**: coinciden con una cadena exacta (p. ej., `'admin'`).
|
|
25
|
+
- **Parámetros de ruta**: segmentos dinámicos con prefijo de dos puntos (p. ej., `'user/:id'`).
|
|
26
|
+
- **Comodín**: coincide con cualquier URL usando `**`. Útil para páginas "No encontrado". **Colócala siempre al final del array.**
|
|
27
|
+
|
|
28
|
+
## Estrategia de coincidencia
|
|
29
|
+
|
|
30
|
+
Angular usa una estrategia de **primera coincidencia gana**. Las rutas específicas deben ir antes que las menos específicas.
|
|
31
|
+
|
|
32
|
+
## Redirecciones
|
|
33
|
+
|
|
34
|
+
Usa `redirectTo` para apuntar una ruta a otra.
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
{ path: 'articles', redirectTo: '/blog' },
|
|
38
|
+
{ path: 'blog', component: Blog },
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Títulos de página
|
|
42
|
+
|
|
43
|
+
Asocia títulos a las rutas por accesibilidad. Los títulos pueden ser estáticos o dinámicos (vía `ResolveFn` o una `TitleStrategy` personalizada).
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
{ path: 'home', component: Home, title: 'Página de inicio' }
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Datos y providers de ruta
|
|
50
|
+
|
|
51
|
+
- **Datos estáticos**: adjunta metadatos con la propiedad `data`.
|
|
52
|
+
- **Providers de ruta**: acota dependencias a una ruta específica y sus hijas con el array `providers`.
|
|
53
|
+
|
|
54
|
+
## Rutas anidadas (hijas)
|
|
55
|
+
|
|
56
|
+
Define subvistas con la propiedad `children`. Los componentes padre deben incluir un `<router-outlet />`.
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
{
|
|
60
|
+
path: 'product/:id',
|
|
61
|
+
component: Product,
|
|
62
|
+
children: [
|
|
63
|
+
{ path: 'info', component: ProductInfo },
|
|
64
|
+
{ path: 'reviews', component: ProductReviews },
|
|
65
|
+
],
|
|
66
|
+
}
|
|
67
|
+
```
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Definir proveedores de dependencias
|
|
2
|
+
|
|
3
|
+
Angular ofrece formas automáticas y manuales de proveer dependencias a su sistema de inyección de dependencias (DI).
|
|
4
|
+
|
|
5
|
+
## Provisión automática
|
|
6
|
+
|
|
7
|
+
La forma más común de proveer un servicio es usando `providedIn: 'root'` en un `@Injectable()`.
|
|
8
|
+
|
|
9
|
+
### InjectionToken
|
|
10
|
+
|
|
11
|
+
Usa `InjectionToken` para dependencias que no son clases (objetos de configuración, funciones, primitivos). Un `InjectionToken` también puede proveerse automáticamente.
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import {InjectionToken} from '@angular/core';
|
|
15
|
+
|
|
16
|
+
export interface AppConfig {
|
|
17
|
+
apiUrl: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const APP_CONFIG = new InjectionToken<AppConfig>('app.config', {
|
|
21
|
+
providedIn: 'root',
|
|
22
|
+
factory: () => ({apiUrl: 'https://api.example.com'}),
|
|
23
|
+
});
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Provisión manual
|
|
27
|
+
|
|
28
|
+
Usa el array `providers` cuando un servicio no tiene `providedIn`, cuando quieres una instancia nueva para un componente específico, o al configurar valores en tiempo de ejecución.
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
@Component({
|
|
32
|
+
providers: [
|
|
33
|
+
// Abreviatura de { provide: LocalService, useClass: LocalService }
|
|
34
|
+
LocalService,
|
|
35
|
+
|
|
36
|
+
// useClass: intercambiar implementaciones
|
|
37
|
+
{provide: Logger, useClass: BetterLogger},
|
|
38
|
+
|
|
39
|
+
// useValue: proveer valores estáticos
|
|
40
|
+
{provide: API_URL_TOKEN, useValue: 'https://api.example.com'},
|
|
41
|
+
|
|
42
|
+
// useFactory: generar el valor dinámicamente
|
|
43
|
+
{
|
|
44
|
+
provide: ApiClient,
|
|
45
|
+
useFactory: (http = inject(HttpClient)) => new ApiClient(http),
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
// useExisting: crear un alias
|
|
49
|
+
{provide: OldLogger, useExisting: NewLogger},
|
|
50
|
+
|
|
51
|
+
// multi: proveer múltiples valores para el mismo token como un array
|
|
52
|
+
{provide: INTERCEPTOR_TOKEN, useClass: AuthInterceptor, multi: true},
|
|
53
|
+
],
|
|
54
|
+
})
|
|
55
|
+
export class Example {}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Ámbitos de los providers
|
|
59
|
+
|
|
60
|
+
- **Bootstrap de la aplicación**: singletons globales. Úsalos para clientes HTTP, logging o configuración global de la app.
|
|
61
|
+
- **Componente/Directiva**: instancias aisladas. Úsalas para estado o formularios específicos del componente. Los servicios se destruyen cuando el componente se destruye.
|
|
62
|
+
- **Ruta**: servicios específicos de una funcionalidad, cargados solo con ciertas rutas.
|
|
63
|
+
|
|
64
|
+
## Patrón de librería: funciones `provide*`
|
|
65
|
+
|
|
66
|
+
Los autores de librerías deben exportar funciones que devuelvan arrays de providers para encapsular la configuración:
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
export function provideAnalytics(config: AnalyticsConfig): Provider[] {
|
|
70
|
+
return [{provide: ANALYTICS_CONFIG, useValue: config}, AnalyticsService];
|
|
71
|
+
}
|
|
72
|
+
```
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Fundamentos de inyección de dependencias (DI)
|
|
2
|
+
|
|
3
|
+
La inyección de dependencias (DI) es un patrón de diseño que sirve para organizar y compartir código a lo largo de una aplicación, permitiéndote "inyectar" funcionalidades en distintas partes. Esto mejora la mantenibilidad, escalabilidad y testeabilidad del código.
|
|
4
|
+
|
|
5
|
+
## Cómo funciona la DI en Angular
|
|
6
|
+
|
|
7
|
+
Hay dos formas principales en que el código interactúa con el sistema de DI de Angular:
|
|
8
|
+
|
|
9
|
+
1. **Proveer**: poner valores (objetos, funciones, primitivos) a disposición del sistema de DI.
|
|
10
|
+
2. **Inyectar**: pedirle al sistema de DI esos valores.
|
|
11
|
+
|
|
12
|
+
Los componentes, directivas y servicios de Angular participan automáticamente en la DI.
|
|
13
|
+
|
|
14
|
+
## Servicios
|
|
15
|
+
|
|
16
|
+
Un **servicio** es la forma más común de compartir datos y funcionalidad en una aplicación. Es una clase TypeScript decorada con `@Injectable()`.
|
|
17
|
+
|
|
18
|
+
### Crear un servicio
|
|
19
|
+
|
|
20
|
+
Usa la opción `providedIn: 'root'` en el decorador `@Injectable` para hacer del servicio un singleton disponible en toda la aplicación. Es el enfoque recomendado para la mayoría de los servicios.
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
import {Injectable} from '@angular/core';
|
|
24
|
+
|
|
25
|
+
@Injectable({
|
|
26
|
+
providedIn: 'root', // Lo convierte en un singleton disponible en todas partes
|
|
27
|
+
})
|
|
28
|
+
export class AnalyticsLogger {
|
|
29
|
+
trackEvent(category: string, value: string) {
|
|
30
|
+
console.log('Evento de analítica registrado:', {category, value});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Usos comunes de los servicios:
|
|
36
|
+
|
|
37
|
+
- Clientes de datos (llamadas a API)
|
|
38
|
+
- Gestión de estado
|
|
39
|
+
- Autenticación y autorización
|
|
40
|
+
- Logging y manejo de errores
|
|
41
|
+
- Funciones de utilidad
|
|
42
|
+
|
|
43
|
+
## Inyectar dependencias
|
|
44
|
+
|
|
45
|
+
Usa la función `inject()` de Angular para solicitar dependencias.
|
|
46
|
+
|
|
47
|
+
### La función `inject()`
|
|
48
|
+
|
|
49
|
+
Puedes usar la función `inject()` para obtener una instancia de un servicio (o de cualquier otro token provisto).
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
import {Component, inject} from '@angular/core';
|
|
53
|
+
import {Router} from '@angular/router';
|
|
54
|
+
import {AnalyticsLogger} from './analytics-logger.service';
|
|
55
|
+
|
|
56
|
+
@Component({
|
|
57
|
+
selector: 'app-navbar',
|
|
58
|
+
template: `<a href="#" (click)="navigateToDetail($event)">Página de detalle</a>`,
|
|
59
|
+
})
|
|
60
|
+
export class Navbar {
|
|
61
|
+
// Inyección de dependencias mediante inicializadores de campos de clase
|
|
62
|
+
private router = inject(Router);
|
|
63
|
+
private analytics = inject(AnalyticsLogger);
|
|
64
|
+
|
|
65
|
+
navigateToDetail(event: Event) {
|
|
66
|
+
event.preventDefault();
|
|
67
|
+
this.analytics.trackEvent('navigation', '/details');
|
|
68
|
+
this.router.navigate(['/details']);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### ¿Dónde puede usarse `inject()`? (Contexto de inyección)
|
|
74
|
+
|
|
75
|
+
Puedes llamar a `inject()` en un **contexto de inyección**. Los contextos de inyección más comunes ocurren durante la construcción de un componente, directiva o servicio.
|
|
76
|
+
|
|
77
|
+
Lugares válidos para llamar a `inject()`:
|
|
78
|
+
|
|
79
|
+
1. **Inicializadores de campos de clase** (recomendado)
|
|
80
|
+
2. **Cuerpo del constructor**
|
|
81
|
+
3. **Guards de ruta y resolvers** (se ejecutan en un contexto de inyección)
|
|
82
|
+
4. **Funciones de fábrica** usadas en providers
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
import {Component, Directive, Injectable, inject, ElementRef} from '@angular/core';
|
|
86
|
+
import {HttpClient} from '@angular/common/http';
|
|
87
|
+
|
|
88
|
+
// 1. En un componente (inicializador de campo y constructor)
|
|
89
|
+
@Component({
|
|
90
|
+
/*...*/
|
|
91
|
+
})
|
|
92
|
+
export class Example {
|
|
93
|
+
private service1 = inject(MyService); // Inicializador de campo válido
|
|
94
|
+
|
|
95
|
+
private service2: MyService;
|
|
96
|
+
constructor() {
|
|
97
|
+
this.service2 = inject(MyService); // Cuerpo de constructor válido
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// 2. En una directiva
|
|
102
|
+
@Directive({
|
|
103
|
+
/*...*/
|
|
104
|
+
})
|
|
105
|
+
export class MyDirective {
|
|
106
|
+
private element = inject(ElementRef); // Inicializador de campo válido
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// 3. En un servicio
|
|
110
|
+
@Injectable({providedIn: 'root'})
|
|
111
|
+
export class MyService {
|
|
112
|
+
private http = inject(HttpClient); // Inicializador de campo válido
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// 4. En un guard de ruta (funcional)
|
|
116
|
+
export const authGuard = () => {
|
|
117
|
+
const auth = inject(AuthService); // Guard de ruta válido
|
|
118
|
+
return auth.isAuthenticated();
|
|
119
|
+
};
|
|
120
|
+
```
|