npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@polariens/kitsune-lint

v1.0.0

Published

Opinionated ESLint & Prettier configs for high-quality Vue, TypeScript & Vitest projects. Clean code, sharp rules.

Readme

kitsune-lint 🦊

Português | English

Configurações opinativas de ESLint, Prettier e Stylelint para projetos de alta qualidade em Vue 3, TypeScript e Vitest. Código limpo com regras afiadas.

Ajuda desenvolvedores a iniciar projetos JavaScript/TypeScript sem a complexidade de configurar regra por regra, entregando padrões rigorosos de linting, segurança e qualidade já travados para garantir código limpo e seguro — especialmente em bases aceleradas por Inteligência Artificial.

Mantido oficialmente pela Polariens, uma instituição sem fins lucrativos focada em tecnologia aberta e impacto comunitário.

Kitsune (狐) é a raposa mística do folclore japonês — astuta, adaptável e capaz de se transformar conforme o contexto. Assim como a kitsune, este pacote se molda ao seu projeto: você escolhe os módulos e as opções, e ele compõe as regras certas para cada cenário. Código limpo com a precisão de uma raposa.


Sumário


O que é

O kitsune-lint padroniza regras de linting, formatação e qualidade de código através do formato moderno Flat Config do ESLint (v9+), além de integrar Prettier e Stylelint (SCSS & Vue SFC).

  • Modular: Ative apenas o que seu projeto utiliza (vue, pinia, vitest, etc.).
  • TypeScript First: Tipagem nativa completa para todas as opções (.d.mts).
  • Regras Customizadas: Regras AST exclusivas (kitsune/alias-imports e kitsune/no-null-in-types).
  • Zero Lock-in: Compatível com extensões e plugins de terceiros via extend.

Instalação

Instale o pacote principal como dependência de desenvolvimento:

npm install --save-dev kitsune-lint

Nota: Se o seu projeto estiver consumindo via escopo da organização:

npm install --save-dev @polariens/kitsune-lint

As peer dependencies devem ser instaladas no projeto consumidor de acordo com os módulos desejados.

1. Dependências Básicas (Obrigatório)

Essenciais para os módulos base que vêm ativos por padrão (base, typescript, cleanCode):

npm install --save-dev eslint @eslint/js typescript-eslint globals

2. Instalação Completa (Todos os módulos)

Para projetos que utilizam a suíte completa (TypeScript + Vue 3 + Pinia + Vitest + Security):

npm install --save-dev eslint @eslint/js typescript-eslint globals eslint-plugin-security eslint-plugin-vue vue-eslint-parser eslint-plugin-pinia @vitest/eslint-plugin

3. Instalação Modular (Por Demanda)

Instale apenas os plugins necessários para os módulos que for ativar:

  • Módulo security (ativo por padrão):

    npm install --save-dev eslint-plugin-security
  • Módulo vue:

    npm install --save-dev eslint-plugin-vue vue-eslint-parser
  • Módulo pinia:

    npm install --save-dev eslint-plugin-pinia
  • Módulo vitest:

    npm install --save-dev @vitest/eslint-plugin

ESLint

Factory Function (Recomendado)

O método createKitsuneConfig é assíncrono e unifica as regras ativando/desativando módulos de forma declarativa:

// eslint.config.js ou eslint.config.mjs
import { createKitsuneConfig } from 'kitsune-lint/eslint';

export default await createKitsuneConfig({
  vue: true,
  pinia: true,
  tests: true,
  vitest: true,
});

Por padrão, base, typescript, security e cleanCode vêm ativados (true). Para desligar algum, basta passar false:

export default await createKitsuneConfig({
  security: false,
  vue: true,
});

Customizando Módulos

Em vez de true, passe um objeto com opções específicas:

// eslint.config.js
import { createKitsuneConfig } from 'kitsune-lint/eslint';

export default await createKitsuneConfig({
  base: {
    environment: 'node', // 'browser' | 'node' | 'shared-node-browser'
  },
  cleanCode: {
    maxDepth: 3,
    maxParams: 3,
    complexity: 10,
    maxLines: 300,
    maxLinesPerFunction: 60,
  },
  vue: {
    apiStyle: 'script-setup', // 'script-setup' | 'composition' | 'options'
    componentsNameCasing: 'PascalCase',
    propNameCasing: 'camelCase',
    maxTemplateDepth: 5,
  },
  pinia: {
    files: ['src/stores/**/*.ts'],
  },
  vitest: {
    fn: 'test', // 'test' | 'it'
    maxNestedDescribe: 2,
  },
});

Imports Granulares

Para controle manual completo da composição da configuração:

// eslint.config.js
import { base } from 'kitsune-lint/eslint/base';
import { typescript } from 'kitsune-lint/eslint/typescript';
import { cleanCode } from 'kitsune-lint/eslint/clean-code';
import { security } from 'kitsune-lint/eslint/security';
import { vue } from 'kitsune-lint/eslint/vue';
import { pinia } from 'kitsune-lint/eslint/pinia';

export default [
  ...base({ environment: 'browser' }),
  ...typescript(),
  ...cleanCode(),
  ...security(),
  ...vue(),
  ...(await pinia()),
];

Estendendo Configurações Externas

Adicione regras e plugins externos diretamente pela chave extend:

// eslint.config.js
import { createKitsuneConfig } from 'kitsune-lint/eslint';
import eslintConfigPrettier from 'eslint-config-prettier';

export default await createKitsuneConfig({
  vue: true,
  extend: [
    eslintConfigPrettier,
  ],
});

Prettier

Configuração com regras estritas para consistência visual.

Instalação

npm install --save-dev prettier

Uso Padrão

// prettier.config.mjs ou .prettierrc.mjs
import prettierConfig from 'kitsune-lint/prettier';

export default prettierConfig;

Com Overrides

Utilize a factory createPrettierKitsuneConfig:

// prettier.config.mjs
import { createPrettierKitsuneConfig } from 'kitsune-lint/prettier';

export default createPrettierKitsuneConfig({
  overrides: {
    printWidth: 120,
    singleQuote: true,
  },
  vue: true, // ativa indentação em <script> e <style>
});

Stylelint

Configuração focada em SCSS e SFCs do Vue, aplicando arquitetura de classes BEM por padrão.

Instalação

npm install --save-dev stylelint stylelint-config-standard-scss stylelint-config-recommended-vue postcss-html

Uso Padrão

// stylelint.config.mjs
import stylelintConfig from 'kitsune-lint/stylelint';

export default stylelintConfig;

Com Overrides

// stylelint.config.mjs
import { createStylelintKitsuneConfig } from 'kitsune-lint/stylelint';

export default createStylelintKitsuneConfig({
  classPattern: 'BEM', // 'BEM' | null
  rules: {
    'color-hex-length': 'short',
  },
});

CLI e Utilitários

O pacote inclui um utilitário CLI para sincronizar o .prettierignore recomendado em seu projeto:

npx kitsune-prettierignore

Para sobrescrever um arquivo existente:

npx kitsune-prettierignore --force

Referência dos Módulos

Visão Geral

| Módulo | Padrão | Descrição | | :--- | :---: | :--- | | base | ✅ Ativo | Globais de ambiente (browser, node, etc.) | | typescript | ✅ Ativo | Boas práticas TS, naming conventions, regras de imports | | security | ✅ Ativo | Prevenção contra injeções, eval e XSS (eslint-plugin-security) | | cleanCode | ✅ Ativo | Limites de complexidade, tamanho de função e aninhamento | | vue | ❌ Inativo | Vue 3 SFCs, template casing, ordem de blocos, tipagem | | pinia | ❌ Inativo | Padrões e boas práticas para stores do Pinia | | tests | ❌ Inativo | Relaxamento de regras rígidas de produção em pastas de teste | | vitest | ❌ Inativo | Validação semântica e boas práticas para suites Vitest |


Opções Detalhadas

base

| Opção | Tipo | Padrão | Descrição | | :--- | :--- | :--- | :--- | | files | string[] | undefined | Sobrescreve os padrões de arquivos | | environment | string | 'browser' | Ambientes: 'browser', 'node', 'shared-node-browser', 'worker', 'serviceworker' |

typescript

| Opção | Tipo | Padrão | Descrição | | :--- | :--- | :--- | :--- | | files | string[] | undefined | Sobrescreve os padrões de arquivos | | ignores | string[] | ['dist/**', ...] | Padrões adicionais a ignorar | | replaceIgnores | string[] | undefined | Substitui integralmente a lista de ignores | | rules | object | {} | Regras adicionais ou overrides |

security

| Opção | Tipo | Padrão | Descrição | | :--- | :--- | :--- | :--- | | files | string[] | undefined | Sobrescreve os padrões de arquivos | | pluginEnabled | boolean | true | Habilita regras de eslint-plugin-security | | rules | object | {} | Regras adicionais ou overrides |

cleanCode

| Opção | Tipo | Padrão | Descrição | | :--- | :--- | :--- | :--- | | files | string[] | undefined | Sobrescreve os padrões de arquivos | | maxDepth | number | 4 | Profundidade máxima de aninhamento de blocos | | maxParams | number | 4 | Quantidade máxima de parâmetros por função | | complexity | number | 10 | Complexidade ciclomática máxima por função | | maxLines | number | 400 | Máximo de linhas por arquivo (ignora comentários/espaços) | | maxLinesPerFunction | number | 80 | Máximo de linhas por corpo de função | | rules | object | {} | Regras adicionais ou overrides |

vue

| Opção | Tipo | Padrão | Descrição | | :--- | :--- | :--- | :--- | | files | string[] | undefined | Sobrescreve os padrões de arquivos | | apiStyle | string | 'script-setup' | Estilo de API: 'script-setup', 'composition', 'options' | | componentsNameCasing | string | 'PascalCase' | Nomenclatura de tags de componentes no template | | componentsNameCasingIgnores | string[] | [] | Componentes ignorados na verificação de nomenclatura | | propNameCasing | string | 'camelCase' | Nomenclatura das props | | slotNameCasing | string | 'kebab-case' | Nomenclatura de slots | | maxTemplateDepth | number | 6 | Profundidade máxima de aninhamento no template | | rules | object | {} | Regras adicionais ou overrides |

pinia

| Opção | Tipo | Padrão | Descrição | | :--- | :--- | :--- | :--- | | files | string[] | ['src/state/**/*.ts'] | Arquivos de stores analisados | | path | string \| string[] | undefined | Caminhos adicionais de stores | | rules | object | {} | Regras adicionais ou overrides |

tests

| Opção | Tipo | Padrão | Descrição | | :--- | :--- | :--- | :--- | | files | string[] | ['tests/**/*.{js,mjs,cjs,ts}'] | Arquivos considerados testes | | rules | object | {} | Regras adicionais ou overrides |

vitest

| Opção | Tipo | Padrão | Descrição | | :--- | :--- | :--- | :--- | | files | string[] | undefined | Sobrescreve os padrões de arquivos | | fn | string | 'test' | Função de teste preferida: 'test' ou 'it' | | titlePattern | string | Gherkin PT-BR | Regex para títulos de teste | | titleMessage | string | Mensagem PT-BR | Mensagem emitida para títulos fora do padrão | | maxNestedDescribe | number | 3 | Limite de describe() aninhados | | rules | object | {} | Regras adicionais ou overrides |


Estrutura do Pacote

kitsune-lint/
├── bin/
│   └── copy-prettierignore.mjs   # CLI npx kitsune-prettierignore
├── eslint/
│   ├── index.mjs                 # Factory createKitsuneConfig + re-exports
│   ├── index.d.mts               # Tipos TypeScript das configurações
│   ├── plugin.mjs                # Plugin ESLint interno 'kitsune'
│   ├── utils.mjs                 # Utilitários compartilhados
│   ├── configs/                  # Módulos independentes de regras
│   │   ├── base.mjs
│   │   ├── clean-code.mjs
│   │   ├── pinia.mjs
│   │   ├── security.mjs
│   │   ├── tests.mjs
│   │   ├── typescript.mjs
│   │   ├── vitest.mjs
│   │   └── vue.mjs
│   └── rules/                    # Regras customizadas AST
│       ├── alias-imports.mjs
│       └── no-null-in-types.mjs
├── prettier/
│   ├── index.mjs                 # Configuração Prettier e factory
│   └── index.d.mts
├── stylelint/
│   ├── index.mjs                 # Configuração Stylelint e factory
│   └── index.d.mts
├── LICENSE
├── README.md                     # Documentação (Inglês)
├── README.pt-BR.md               # Documentação (Português)
└── package.json

Licença e Governança

Distribuído sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.

Desenvolvido e mantido pela Polariens — Instituição sem fins lucrativos comprometida com a sustentabilidade de ferramentas open-source para a comunidade.