> ## Documentation Index
> Fetch the complete documentation index at: https://docs.analytics.synapside.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Estrutura do Projeto e Pacotes

As funções do Analytics Lab utilizam uma estrutura de arquivos padronizada com gerenciamento automático de dependências e compilação de imagens imutáveis no deploy.

## Estrutura de arquivos

Ao inicializar uma função através do comando `sanalytics create`, os arquivos são organizados da seguinte forma:

### Node.js (`node22`)

```text theme={null}
meu-projeto/
├── sanalytics.json     # Manifesto com identificador e configurações da função
├── package.json        # Declaração de dependências npm
├── index.js            # Arquivo de entrada exportando a função handler
└── .gitignore          # Arquivos e pastas ignorados no deploy
```

### Python (`python3.12`)

```text theme={null}
meu-projeto/
├── sanalytics.json     # Manifesto com identificador e configurações da função
├── requirements.txt    # Lista de bibliotecas pip
├── main.py             # Arquivo de entrada exportando a função handler
└── .gitignore          # Arquivos e pastas ignorados no deploy
```

## Manifesto `sanalytics.json`

O arquivo `sanalytics.json` vincula o diretório local à função correspondente no Analytics Lab:

```json theme={null}
{
  "function_id": "01a001fa-dfb4-7337-94f8-90c70ffd5140",
  "name": "Minha Função",
  "slug": "minha-funcao",
  "runtime": "node22",
  "entrypoint": "index.js:handler"
}
```

| Campo         | Descrição                                       |
| ------------- | ----------------------------------------------- |
| `function_id` | Identificador UUID da função no Lab             |
| `name`        | Nome legível exibido no painel                  |
| `slug`        | Identificador no formato slug                   |
| `runtime`     | Ambiente de execução (`node22` ou `python3.12`) |
| `entrypoint`  | Ponto de entrada no formato `arquivo:funcao`    |

## Contrato da função `handler`

O ponto de entrada deve exportar uma função que recebe os argumentos `event` (parâmetros da invocação) e `context` (metadados da execução):

### JavaScript (Node.js ESM)

```javascript theme={null}
export async function handler(event, context) {
  return {
    status: 'success',
    data: event
  };
}
```

### Python

```python theme={null}
def handler(event, context):
    return {
        "status": "success",
        "data": event
    }
```

## Gestão de dependências e build

O Analytics Lab instala as dependências automaticamente e constrói uma imagem imutável para cada versão publicada:

* **Pastas locais ignoradas:** Diretórios como `node_modules/` e `.venv/` não devem ser enviados e são excluídos automaticamente no deploy pelo `.gitignore`.
* **Imagem pré-construída no deploy:** Durante o `sanalytics deploy`, o sistema instala as bibliotecas declaradas (`npm` ou `pip`) e gera um snapshot pronto e otimizado da função, garantindo que as execuções em produção iniciem instantaneamente.

### Exemplo de declaração

**Node.js (`package.json`):**

```json theme={null}
{
  "name": "minha-funcao",
  "version": "1.0.0",
  "type": "module",
  "dependencies": {
    "axios": "^1.7.0"
  }
}
```

**Python (`requirements.txt`):**

```text theme={null}
requests>=2.31.0
pandas>=2.2.0
```
