gts is Google's opinionated TypeScript style guide, formatter, and linter that provides zero-configuration setup for TypeScript projects. It integrates ESLint and Prettier to enforce consistent code style with automatic formatting, linting, and code fixing capabilities through both CLI commands and programmatic APIs.
npm install gtsFor ESLint configuration:
const gtsConfig = require("gts");For programmatic API (requires direct module imports):
import { run, Options, Logger, VerbFilesFunction } from "gts/build/src/cli";
import { init } from "gts/build/src/init";
import { clean } from "gts/build/src/clean";
import { addScripts, addDependencies, installDefaultTemplate } from "gts/build/src/init";
import { getTSConfig, isYarnUsed, getPkgManagerCommand, readJsonp } from "gts/build/src/util";# Initialize gts in a TypeScript project
gts init
# Lint TypeScript files
gts lint
# Fix formatting and linting issues
gts fix
# Clean build artifacts
gts cleanimport { init } from "gts/build/src/init";
import { Options } from "gts/build/src/cli";
const options: Options = {
dryRun: false,
gtsRootDir: "/path/to/gts",
targetRootDir: process.cwd(),
yes: false,
no: false,
logger: console,
};
// Initialize gts programmatically
await init(options);gts is built around several key components:
init, lint, fix, and clean commandsMain command-line interface providing TypeScript project initialization, linting, fixing, and cleanup operations.
function run(verb: string, files: string[]): Promise<boolean>;
interface Options {
dryRun: boolean;
gtsRootDir: string;
targetRootDir: string;
yes: boolean;
no: boolean;
logger: Logger;
yarn?: boolean;
}
interface Logger {
log: (...args: Array<{}>) => void;
error: (...args: Array<{}>) => void;
dir: (obj: {}, options?: {}) => void;
}Project setup functionality for adding gts configuration, scripts, and dependencies to TypeScript projects.
function init(options: Options): Promise<boolean>;
function addScripts(
packageJson: PackageJSON,
options: Options
): Promise<boolean>;
function addDependencies(
packageJson: PackageJSON,
options: Options
): Promise<boolean>;Build artifact management and cleanup functionality.
function clean(options: Options): Promise<boolean>;Helper functions for configuration management, package detection, and file operations.
function getTSConfig(
rootDir: string,
customReadFilep?: ReadFileP
): Promise<ConfigFile>;
function isYarnUsed(existsSync?: Function): boolean;
function getPkgManagerCommand(isYarnUsed?: boolean): string;interface Options {
dryRun: boolean;
gtsRootDir: string;
targetRootDir: string;
yes: boolean;
no: boolean;
logger: Logger;
yarn?: boolean;
}
interface Logger {
log: (...args: Array<{}>) => void;
error: (...args: Array<{}>) => void;
dir: (obj: {}, options?: {}) => void;
}
interface ConfigFile {
files?: string[];
compilerOptions?: {};
include?: string[];
exclude?: string[];
extends?: string[];
}
interface DefaultPackage {
gts: string;
typescript: string;
'@types/node': string;
}
type VerbFilesFunction = (
options: Options,
files: string[],
fix?: boolean
) => Promise<boolean>;
interface ReadFileP {
(path: string, encoding: string): Promise<string>;
}
interface Bag<T> {
[script: string]: T;
}
type PackageJSON = {
name?: string;
version?: string;
description?: string;
main?: string;
types?: string;
files?: string[];
license?: string;
keywords?: string[];
scripts?: { [key: string]: string };
devDependencies?: { [key: string]: string };
dependencies?: { [key: string]: string };
engines?: { [key: string]: string };
[key: string]: any;
}