[{"data":1,"prerenderedAt":61},["ShallowReactive",2],{"\u002Fapi\u002Fpage\u002Fes\u002Fskills\u002Fsumi-nuxt\u002Ffirebase-firestore":3,"PageBody_xacSjr49RslCTIdEJ5njKRM2rwuvGb3gF7XG0swEFI":53},{"title":4,"description":5,"plugin":6,"kind":7,"references":8,"source":9,"stale":10,"heading":11,"toc":12,"locale":52},"firebase-firestore","Firebase para aplicaciones Nuxt\u002FVue: modelado de datos en Firestore guiado por las consultas (desnormalización, documentos de agregación, índices compuestos, paginación por cursor, lotes y transacciones), reglas de seguridad como el backend real (denegar por defecto, validación de la forma, pruebas con el emulador), patrones de Auth, Cloud Functions v2 (idempotencia, reintentos, secretos), coste y amplificación de lecturas, Emulator Suite, y el SDK modular o nuxt-vuefire. Úsala al diseñar colecciones, escribir consultas, editar firestore.rules, storage.rules, firestore.indexes.json, firebase.json, functions\u002F** o cualquier código que importe firebase\u002F* o firebase-admin.","sumi-nuxt","skill",2,"plugins\u002Fsumi-nuxt\u002Fskills\u002Ffirebase-firestore\u002FSKILL.md",false,"Firebase y Firestore",[13,16,19,22,25,28,31,34,37,40,43,46,49],{"id":14,"text":15},"core-principles","Principios básicos",{"id":17,"text":18},"modeling-rules","Reglas de modelado",{"id":20,"text":21},"queries-indexes-pagination","Consultas, índices, paginación",{"id":23,"text":24},"writes-batches-and-transactions","Escrituras: lotes y transacciones",{"id":26,"text":27},"security-rules","Reglas de seguridad",{"id":29,"text":30},"auth","Auth",{"id":32,"text":33},"cloud-functions-v2","Cloud Functions (v2)",{"id":35,"text":36},"client-sdk-and-nuxt-integration","SDK de cliente e integración con Nuxt",{"id":38,"text":39},"emulator-suite","Emulator Suite",{"id":41,"text":42},"anti-patterns-ai-slop-tells","Antipatrones (señales de relleno de IA)",{"id":44,"text":45},"done-checklist","Lista de verificación",{"id":47,"text":48},"firestore-modeling-worked-examples","Ejemplos de modelado de Firestore desarrollados",{"id":50,"text":51},"testing-security-rules-with-the-emulator","Pruebas de las reglas de seguridad con el emulador","es",["Island",54],{"key":55,"result":56},"PageBody_xacSjr49RslCTIdEJ5njKRM2rwuvGb3gF7XG0swEFI",{"head":57},{"style":58},[59],{"innerHTML":60},".prose[data-v-1545ba8e]{max-width:var(--measure-prose)}.prose[data-v-1545ba8e] h2{margin-block:var(--space-8) var(--space-4)}.prose[data-v-1545ba8e] h3{margin-block:var(--space-6) var(--space-3)}.prose[data-v-1545ba8e] h4{margin-block:var(--space-5) var(--space-3);font-family:var(--font-mono);font-variation-settings:\"wdth\" var(--mono-width-label);font-size:var(--text-small);text-transform:uppercase;letter-spacing:var(--text-label-ls);color:var(--color-text-muted)}.prose[data-v-1545ba8e] ol,.prose[data-v-1545ba8e] p,.prose[data-v-1545ba8e] ul{margin-block-end:var(--space-4)}.prose[data-v-1545ba8e] li{margin-block-end:var(--space-2)}.prose[data-v-1545ba8e] ol,.prose[data-v-1545ba8e] ul{padding-inline-start:var(--space-5)}.prose[data-v-1545ba8e] li:has(.task-box){list-style:none}.prose[data-v-1545ba8e] .task-box{width:.8em;height:.8em;border:var(--border-width) solid var(--color-border);vertical-align:baseline;margin-inline-end:var(--space-2);display:inline-block}.prose[data-v-1545ba8e] code{padding:1px var(--space-1);background:var(--color-surface-sunk);border:var(--border-width) solid var(--color-border)}.prose[data-v-1545ba8e] pre{padding:var(--space-4);background:var(--color-surface-sunk);border:var(--border-width) solid var(--color-border);margin-block-end:var(--space-5);overflow-x:auto}.prose[data-v-1545ba8e] pre code{background:0 0;border:0;padding:0}.prose[data-v-1545ba8e] .table-scroll{max-width:none;margin-block-end:var(--space-5);overflow-x:auto}.prose[data-v-1545ba8e] table{border-collapse:collapse;width:100%;min-width:32rem;font-size:var(--text-small);line-height:var(--text-small-lh)}.prose[data-v-1545ba8e] td,.prose[data-v-1545ba8e] th{padding:var(--space-3) var(--space-4);text-align:start;vertical-align:top;border-block-start:var(--divider-width) solid var(--color-divider)}.prose[data-v-1545ba8e] th{font-family:var(--font-mono);font-variation-settings:\"wdth\" var(--mono-width-label);font-size:var(--text-label);letter-spacing:var(--text-label-ls);text-transform:uppercase;color:var(--color-text-muted);border-block-end:var(--border-width) solid var(--color-border)}.prose[data-v-1545ba8e] blockquote{margin:0 0 var(--space-5);border-inline-start:var(--seam-width) solid var(--color-seam);color:var(--color-text-muted);padding-inline-start:var(--space-4)}.prose[data-v-1545ba8e] hr{margin-block:var(--space-7);border:0;border-block-start:var(--divider-width) solid var(--color-divider)}.prose[data-v-1545ba8e] pre,.prose[data-v-1545ba8e] table{max-width:none}",1791464218102]