Skip to content

@snailicide/build-config 🐌

NPMLicense: MITcode style: prettier

Provides repository with base configurations that can be extended in new packages.


TypeScriptESLintRollupJSNPMViteVitestZod

Repository

Author

👤 Gillian Tunney

Recommended package manager is pnpm

PNPM

@snailicide/build-config 🐌


This package provides reusable configuration files for commonly used tooling. It aims to define,extend, and manage build settings , ensuring consistency across different environments, projects and packages.

@snailicide/build-config contains configurations for:

Build Tooling

Eslint Plugins

  • typescript-eslintProvides linting rules for TypeScript code.
  • eslint-commentsEnforces best practices for ESLint directive comments.
  • filenames-simpleEnsures consistent and simple file naming conventions.
  • importSupports linting of ES2015+ import/export syntax, and prevent issues with misspelling of file paths and import names.
  • jsdocEnforces JSDoc comments and validates their syntax.
  • sortProvides rules for sorting various code elements, including: exports, object properties, TypeScript type properties, and string unions.
  • unused-importsIdentifies and removes unused imports in your code.
  • vitestContains linting rules for Vitest, a Vite-native testing framework.

Rollup Plugins

Installation

sh
#pnpm
$ pnpm add @snailicide/build-config -D

#yarn
$ yarn add @snailicide/build-config -D

#npm
$ npm install @snailicide/build-config --development

Examples

Typescript

json5
/* @file tsconfig.json */

{
  extends: '@snailicide/build-config/tsconfig-base',
  compilerOptions: {
    outDir: './../types',
    rootDir: '.',
    declarationDir: './../types',
  },
  exclude: ['**/*.test.ts'],
  include: ['**/*.ts', '**/*.cts', '**/*.mts'],
}

Eslint

ts
/* @file eslint.config.js */

import { EsLint } from '@snailicide/build-config'

const FLAT_CONFIG = await EsLint.flatConfig()

export default [
  ...FLAT_CONFIG,
  {
    ignores: ['packages/**/docs/**/*'],
  },
]

Prettier

json5
/* @file package.json (include prettier property) */
{
  prettier: '@snailicide/build-config/prettier',
}

OR

ts
/** @file Prettier.config.cjs Extend the base configuration */
const { Prettier, merge } = require('@snailicide/build-config')
const options = {
  plugins: ['@shopify/prettier-plugin-liquid'],
  overrides: [
    {
      files: '*.liquid',
      options: {
        tabWidth: 2,
      },
    },
  ],
}
module.exports = merge(Prettier.config, options)

Typedoc

ts
/** @file Typedoc.config.ts Basic Typedoc Config using Material Theme */
import { typedoc } from '@snailicide/build-config'
import url from 'node:url'
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))

const typeDocConfig = typedoc.configMaterialTheme(__dirname, {})

export default typeDocConfig

OR

ts
/** @file Typedoc.config.ts Basic Typedoc Markdown Config */
import path from 'node:path'
import url from 'node:url'
import { typedoc } from './types/index.js'
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))

/** Custom properties to override */
const newTypeDocConfig = {
  githubPages: false,
  useCodeBlocks: true,
}
const typeDocConfig = {
  /** Markdown Configuration */
  ...typedoc.configMarkdown(__dirname, newTypeDocConfig),

  /** Entrypoint and excludes array is overwritten */
  entryPoints: [
    path.resolve(`${__dirname}/src/**/index.ts`),
    path.resolve(`${__dirname}/src/utilities.ts`),
  ],
  exclude: [path.resolve(`${__dirname}/src/index.ts`)],
}

export default typeDocConfig

Modules

ModuleDescription
commitlint-
eslint-
markdownlint-
npm-
prettier-
rollup-
tsconfig-
typedoc-
utilities-
viteVite Configuration ( only docserver for now )
vitepress-
vitest-