THE3RDTRAINER/Homepage

Skill para converter uma Extensão do Firebase instalada (ou código-fonte de extensão) em uma base de código independente do Cloud Functions for Firebase ou em um pacote npm publicável, incluindo atualizações de gatilhos V1 para V2, hooks de ciclo de vida e segurança declarativa.

O que é Homepage?

Este skill automatiza a migração de uma Extensão do Firebase para uma base de código local de Cloud Functions ou para um pacote npm reutilizável, facilitando a integração em aplicações e a publicação open-source. Ele moderniza gatilhos de primeira geração para segunda geração usando o Shim de Compatibilidade por Desestruturação, e adota recursos nativos como IAM declarativo, Configuração Parametrizada e hooks do SDK de ciclo de vida. Compatível com ambientes de desenvolvimento local e fluxos de deploy via Firebase CLI, o skill garante conformidade com as práticas mais recentes do Firebase Functions, incluindo restrições de acesso a parâmetros e otimizações de concorrência. É útil para desenvolvedores que desejam extrair o valor de uma extensão para um formato mais flexível e controlado, seja para uso interno ou compartilhamento com a comunidade.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/THE3RDTRAINER/Homepage/tree/HEAD/.agents/skills/extension-to-functions-codebase

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Migração de Extensão para Base de Código de Functions e Pacote npm

Visão Geral

Migra uma Extensão do Firebase para:

  1. Uma base de código local do Cloud Functions (functions/src/ para integração com o aplicativo).
  2. Um pacote npm publicável (pacote open-source reutilizável que exporta funções V2).

Aproveita recursos nativos do Cloud Functions (IAM declarativo, Configuração Parametrizada, Hooks do SDK de Ciclo de Vida) e moderniza gatilhos de 1ª Geração para 2ª Geração usando o Shim de Compatibilidade por Desestruturação.


Fluxos de Trabalho de Migração Alvo

  • Alvo A: Base de Código Local de Functions (Integração com Aplicativo do Usuário Final)

    • Saída: Código em functions/src/. Configuração em .env.
    • Implantação: firebase deploy --only functions.
  • Alvo B: Pacote npm Publicável / Pacote Compartilhável

    • Saída: Pacote npm reutilizável exportando funções V2.
    • Configuração: package.json especificando mapa exports, engines: { "node": ">=22" } e peerDependencies: { "firebase-functions": ">=6.0.0" }.
    • Uso: Consumidores instalam o pacote e re-exportam funções em index.ts (export * from "<nome-do-pacote>").

Regras e Restrições Principais

1. IAM e APIs Declarativos (Zero Sobrecarga Local)

Use declarações nativas do SDK em vez de scripts gcloud manuais ou instruções do console:

  • Use requiresRole("roles/...") para permissões GCP IAM necessárias.
  • Use requiresAPI("service.googleapis.com", "Descrição") para APIs do Google.

2. Restrição de Acesso a Parâmetros Globais

  • Nunca chame .value() no escopo de carregamento do módulo de nível superior.
  • Inicialize instâncias globais do SDK dentro de onInit() ou getters lazy:
    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. Concorrência e Paridade de Custo V2

O V2 permite concorrência (até 80 requisições). Para preservar o preço de concorrência única do V1, defina cpu: "gcf_gen1".


Execução Passo a Passo da Migração

Passo 1: Inventariar Recursos da Extensão

  1. extension.yaml:
    • params → defineString, defineInt, defineBoolean, defineSecret.
    • apis → requiresAPI(...).
    • roles → requiresRole(...).
    • lifecycleEvents → afterFirstDeploy & afterRedeploy.
    • resources → Atualizar gatilhos de 1ª Geração para 2ª Geração (onDocumentWritten, onTaskDispatched, onRequest).
  2. Arquivos e Scripts: Preservar devDependencies, framework de teste (jest) e scripts de teste.

Passo 2: Configurar package.json

  • Definir name: "<nome-do-pacote>", engines: { "node": ">=22" }.
  • Definir peerDependencies:
    "peerDependencies": {
      "firebase-admin": "^11.0.0 || ^12.0.0",
      "firebase-functions": ">=6.0.0"
    }
    
  • Configurar mapa exports direcionado para ESM/CommonJS e declarações TypeScript (lib/index.js, lib/index.d.ts).

Passo 3: Atualizar Gatilhos de V1 para V2

  • Firestore: Usar onDocumentWritten de firebase-functions/v2/firestore.
  • Tasks: Usar onTaskDispatched de firebase-functions/v2/tasks. Remover EXT_INSTANCE_ID ao enfileirar tarefas.
  • HTTP: Usar onRequest de firebase-functions/v2/https.
  • Aplicar o Shim de Compatibilidade por Desestruturação ({ change, context }, { snapshot, context }) onde handlers legados de 1ª Geração esperam (change, context).

Passo 4: Converter Eventos de Ciclo de Vida

Mapear eventos de ciclo de vida da extensão para hooks do SDK de ciclo de vida em src/index.ts:

  • onInstall → afterFirstDeploy({ task: { function: "initTask" } })
  • onUpdate / onConfigure → afterRedeploy({ task: { function: "setupTask" } })

Passo 5: README do Pacote e Instruções de Exportação

Gerar README.md contendo:

  1. Instruções de instalação (npm install).
  2. Trecho de re-exportação (export * from "<nome-do-pacote>").
  3. Tabela de referência de configuração .env parametrizada.
  4. Tabela de comparação O que Mudou (Extensão vs Pacote).

Lembrete: NUNCA execute npm publish.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

Habilidades Relacionadas