extension-to-functions-codebase

Skill for converting an installed Firebase Extension (or extension source) into a standalone Cloud Functions for Firebase codebase or publishable npm package,…

npx skills add https://github.com/firebase/agent-skills --skill extension-to-functions-codebase

Extension to Functions Codebase & npm Package Migration

Overview

Migrates a Firebase Extension into either:

  1. A local Cloud Functions codebase (functions/src/ for app integration).
  2. A publishable npm package (reusable open-source package exporting V2 functions).

Leverages native Cloud Functions features (declarative IAM, Parameterized Config, SDK Lifecycle Hooks) and modernizes 1st Gen triggers to 2nd Gen using the Destructuring Compatibility Shim.


Target Migration Workflows

  • Target A: Local Functions Codebase (End-User App Integration)

    • Output: Code under functions/src/. Config in .env.
    • Deployment: firebase deploy --only functions.
  • Target B: Publishable npm Package / Shareable Package

    • Output: Reusable npm package exporting V2 functions.
    • Configuration: package.json specifying exports map, engines: { "node": ">=22" }, and peerDependencies: { "firebase-functions": ">=6.0.0" }.
    • Usage: Consumers install package and re-export functions in index.ts (export * from "<package-name>").

Core Rules & Constraints

1. Declarative IAM & APIs (Zero-Local-Overhead)

Use native SDK declarations instead of manual gcloud scripts or console instructions:

  • Use requiresRole("roles/...") for required GCP IAM permissions.
  • Use requiresAPI("service.googleapis.com", "Description") for Google APIs.

2. Global Parameter Access Restriction

  • Never call .value() at top-level module load scope.
  • Initialize global SDK instances inside onInit() or lazy getters:
    import { defineString } from "firebase-functions/params";
    import { onInit } from "firebase-functions/v2";
    
    const dataset = defineString("DATASET_ID");
    let client: BigQuery;
    
    onInit(() => {
      client = new BigQuery({ datasetId: dataset.value() });
    });
    

3. V2 Concurrency & Cost Parity

V2 enables concurrency (up to 80 requests). To preserve V1 single-concurrency pricing, set cpu: "gcf_gen1".


Step-by-Step Migration Execution

Step 1: Inventory Extension Resources

  1. extension.yaml:
    • paramsdefineString, defineInt, defineBoolean, defineSecret.
    • apisrequiresAPI(...).
    • rolesrequiresRole(...).
    • lifecycleEventsafterFirstDeploy & afterRedeploy.
    • resources → Upgrade 1st Gen triggers to 2nd Gen (onDocumentWritten, onTaskDispatched, onRequest).
  2. Files & Scripts: Preserve devDependencies, test framework (jest), and test scripts.

Step 2: Configure package.json

  • Set name: "<package-name>", engines: { "node": ">=22" }.
  • Set peerDependencies:
    "peerDependencies": {
      "firebase-admin": "^11.0.0 || ^12.0.0",
      "firebase-functions": ">=6.0.0"
    }
    
  • Configure exports map targeting ESM/CommonJS and TypeScript declarations (lib/index.js, lib/index.d.ts).

Step 3: Upgrade Triggers from V1 to V2

  • Firestore: Use onDocumentWritten from firebase-functions/v2/firestore.
  • Tasks: Use onTaskDispatched from firebase-functions/v2/tasks. Remove EXT_INSTANCE_ID when enqueueing tasks.
  • HTTP: Use onRequest from firebase-functions/v2/https.
  • Apply Destructuring Compatibility Shim ({ change, context }, { snapshot, context }) where legacy 1st Gen handlers expect (change, context).

Step 4: Convert Lifecycle Events

Map extension lifecycle events to SDK lifecycle hooks in src/index.ts:

  • onInstallafterFirstDeploy({ task: { function: "initTask" } })
  • onUpdate / onConfigureafterRedeploy({ task: { function: "setupTask" } })

Step 5: Package README & Export Instructions

Generate README.md containing:

  1. Installation instructions (npm install).
  2. Re-export snippet (export * from "<package-name>").
  3. Parameterized Configuration .env reference table.
  4. What Changed (Extension vs Package) comparison table.

Reminder: NEVER execute npm publish.

Mehr Skills von firebase

developing-genkit-dart
firebase
Einheitliches AI SDK für Dart, das Codegenerierung, strukturierte Ausgaben, Tools, Flows und Agents ermöglicht. Bietet Kern-APIs für Generierung, Tool-Definition, Flow-Orchestrierung, Embeddings und Streaming mit einer einzigen Schnittstelle. Enthält 8+ Plugins für LLM-Anbieter (Google Gemini, Anthropic Claude, OpenAI GPT), Firebase AI, Model Context Protocol, Chrome-Browser-Integration und HTTP-Server-Hosting über Shelf. Integrierte CLI mit lokaler Entwicklungs-UI für Flow-Ausführung, Tracing, Modellexperimentierung und...
official
developing-genkit-js
firebase
Erstellen Sie KI-gestützte Node.js/TypeScript-Anwendungen mit Genkit-Flows, Tools und Multi-Modell-Unterstützung. Genkit ist anbieterneutral; unterstützt Google AI, OpenAI, Anthropic, Ollama und andere LLM-Anbieter über Plugins. Definieren Sie Flows mit typsicheren Schemas mit Zod, führen Sie Generierungsanfragen aus und erstellen Sie mehrstufige KI-Workflows in TypeScript. Erfordert Genkit CLI v1.29.0+; aufgrund aktueller größerer API-Änderungen müssen Sie die Genkit-Dokumentation:read und common-errors.md für aktuelle Muster konsultieren, nicht auf früherem Wissen basieren...
official
firebase-ai-logic
firebase
We need to translate the given English text into German, preserving the name "firebase-ai-logic" but it's not in the text. The instruction says: "Do not include the name unless it appears in the source text." The name does not appear in the source text, so we don't include it. We just translate the text inside <text>. Also preserve product names, protocol names, URLs, numbers, technical terms. So "Gemini", "Gemini Nano", "Chrome", "Cloud Storage", "App Check" should remain as is. Translate the rest naturally. Let me translate: "Client-side Gemini integration for web apps with multimodal inference, streaming, and on-device hybrid execution." -> "Clientseitige Gemini-Integration für Web-Apps mit multimodaler Inferenz, Streaming und hybrider Ausführung auf dem Gerät." "Supports text-only and multimodal inputs (images, audio, video, PDFs); files over 20 MB route through Cloud Storage" -> "Unterstützt reine Texteingaben und multim
official
firebase-ai-logic-basics
firebase
Offizielle Fähigkeit zur Integration von Firebase AI Logic (Gemini API) in Webanwendungen. Behandelt Einrichtung, multimodale Inferenz, strukturierte Ausgabe und Sicherheit.
official
firebase-app-hosting-basics
firebase
Bereitstellen und Verwalten von Full-Stack-Web-Apps mit Firebase App Hosting unter Verwendung von Next.js, Angular und anderen unterstützten Frameworks. Erfordert ein Firebase-Projekt im Blaze-Tarif; unterstützt Server-Side Rendering (SSR) und Incremental Static Regeneration (ISR)-Workflows. Bereitstellung über firebase.json-Konfiguration mit optionaler apphosting.yaml für das Backend-Setup oder aktiviertes automatisiertes "git push to deploy" durch GitHub-Integration. Enthält Geheimnisverwaltung über CLI-Befehle für sicheren Zugriff auf sensible Schlüssel...
official
firebase-auth-basics
firebase
Richten Sie Firebase Authentication mit mehreren Identitätsanbietern und sicheren Datenzugriffsregeln ein. Unterstützt E-Mail/Passwort, Telefonnummer, anonyme, föderierte Anbieter (Google, Facebook, Twitter, GitHub, Microsoft, Apple) und benutzerdefinierte Authentifizierungsintegration. Jeder authentifizierte Benutzer erhält eine eindeutige ID und JWT-basierte Token (kurzlebige ID-Token und langlebige Refresh-Token) für den Zugriff auf Firebase-Dienste. Aktivieren Sie Anbieter über die CLI für Google Sign In, anonyme Anmeldung und E-Mail/Passwort; nutzen Sie die Firebase-Konsole...
official
firebase-basics
firebase
Firebase-Projekt-Setup und CLI-Workflow für die Integration von KI-Agenten. Erfordert die vorherige Durchführung der firebase-local-env-setup-Fähigkeit und die Installation der Firebase-CLI. Der Kern-Workflow umfasst die Authentifizierung über firebase login, die Projekterstellung mit eindeutigen IDs und die Dienstinitialisierung über den interaktiven Befehl firebase init. Unterstützt die Funktionsauswahl während des Setups, einschließlich Firestore, Functions und Hosting, mit automatischer Generierung von Konfigurationsdateien. Selbst dokumentierende CLI mit --help-Flags für...
official
firebase-crashlytics
firebase
Umfassender Leitfaden für Firebase Crashlytics, einschließlich Bereitstellung und SDK-Nutzung. Verwenden Sie diese Fähigkeit, wenn der Benutzer Hilfe bei der Einrichtung von Crashlytics, dem Hinzufügen…
official