원클릭으로
new-generator
Skill para criar novos geradores de dados seguindo as convenções do projeto Fill All.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Skill para criar novos geradores de dados seguindo as convenções do projeto Fill All.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Skill para planejamento de roadmap, gestão de features, milestones e priorização de tarefas do projeto Fill All.
Skill para validação de regressão em testes — verificar que mudanças não quebraram funcionalidades existentes.
Skill para realizar code reviews alinhados com as convenções e padrões de qualidade do projeto Fill All.
Skill para investigação e debug sistemático de bugs — reproduzir, isolar, corrigir e validar com scripts.
Skill para gerenciamento seguro de dependências npm — auditoria, atualização, lock files e breaking changes.
Skill para gerenciamento de internacionalização (i18n) — traduções, chaves de locale, chrome.i18n API e boas práticas.
| name | new-generator |
| description | Skill para criar novos geradores de dados seguindo as convenções do projeto Fill All. |
| license | MIT |
| compatibility | Node.js 18+, TypeScript 5.x, Chrome Extension Manifest V3 |
| metadata | {"author":"marcusp","version":"1.0","project":"fill-all","category":"scaffolding"} |
Guia passo a passo para criar um novo gerador de dados no projeto Fill All, seguindo todas as convenções de naming, exports, testes e registro.
FieldType correspondente já existe em src/types/index.tssrc/lib/generators/Nota: Nos exemplos abaixo,
<nome>e<Nome>são placeholders. Substitua pelo nome real do gerador (ex:cpf/Cpf,phone/Phone).
src/lib/generators/<nome>.ts
// ✅ Estrutura padrão de um gerador
/**
* Gera um <descrição do dado>.
* Retorna string formatada/não formatada conforme parâmetro.
*/
export function generate<Nome>(formatted = true): string {
// Lógica de geração
// NUNCA throw — retornar string vazia como fallback
return resultado;
}
| Regra | Detalhe |
|---|---|
| Função pura | Sem side effects, sem async, sem dependências externas |
| Síncrona | Sempre () → string, nunca async |
| Sem throw | Retornar "" ou fallback em caso de erro |
| Named export | Nunca export default |
| Naming | generate<Nome>() — verbo + substantivo |
| Dados brasileiros | Dígitos verificadores corretos (CPF, CNPJ, etc.) |
Arquivo: src/lib/generators/index.ts
// Adicionar re-export
export { generate<Nome> } from "./<nome>";
// Adicionar no generatorMap (mapeia FieldType → função geradora)
const generatorMap: Record<string, () => string> = {
// ... existentes
"<field-type>": generate<Nome>,
};
Arquivo: src/types/index.ts
export type FieldType =
| "existing-type"
// ... existentes
| "<novo-tipo>" // Adicionar aqui
;
src/lib/generators/__tests__/<nome>.test.ts
import { describe, it, expect } from "vitest";
import { generate<Nome> } from "@/lib/generators/<nome>";
describe("generate<Nome>", () => {
it("returns a non-empty string", () => {
const result = generate<Nome>();
expect(result).toBeTruthy();
expect(typeof result).toBe("string");
});
it("generates valid data across multiple iterations", () => {
for (let i = 0; i < 30; i++) {
const result = generate<Nome>();
expect(result).toBeTruthy();
// Adicionar validação específica do formato
}
});
it("returns formatted value by default", () => {
const result = generate<Nome>();
// Verificar formatação esperada (pontos, traços, etc.)
expect(result).toMatch(/padrão-regex/);
});
it("returns unformatted value when requested", () => {
const result = generate<Nome>(false);
// Verificar que não tem formatação
expect(result).toMatch(/^\d+$/);
});
it("never throws", () => {
for (let i = 0; i < 50; i++) {
expect(() => generate<Nome>()).not.toThrow();
}
});
});
# Validação rápida com script do projeto
./scripts/validate-step.sh types unit
# Ou comandos individuais:
# Verificar tipos
npm run type-check
# Rodar testes do gerador
npx vitest run src/lib/generators/__tests__/<nome>.test.ts
# Rodar todos os testes de geradores
npx vitest run src/lib/generators
# Verificar coverage
npm run test:coverage
export function generateCpf(formatted = true): string {
const digits = Array.from({ length: 9 }, () => Math.floor(Math.random() * 10));
// Cálculo do primeiro dígito verificador
const d1 = calcDigit(digits, [10, 9, 8, 7, 6, 5, 4, 3, 2]);
digits.push(d1);
// Cálculo do segundo dígito verificador
const d2 = calcDigit(digits, [11, 10, 9, 8, 7, 6, 5, 4, 3, 2]);
digits.push(d2);
const raw = digits.join("");
return formatted
? `${raw.slice(0, 3)}.${raw.slice(3, 6)}.${raw.slice(6, 9)}-${raw.slice(9)}`
: raw;
}
export function generateEmail(): string {
const user = generateRandomString(8);
const domains = ["gmail.com", "outlook.com", "yahoo.com.br"];
const domain = domains[Math.floor(Math.random() * domains.length)];
return `${user}@${domain}`;
}
src/lib/generators/<nome>.tsexport function generate<Nome>()throw — retorna fallbackgeneratorMap em index.tsindex.tsFieldType adicionado (se novo tipo)npm run type-check passanpm test passa