Project Structure
Understanding the ts-package-template directory structure
The ts-package-template follows a well-organized directory structure designed for TypeScript package development. Here's a comprehensive overview of the project layout:
Directory Overview
./
├── ./.vscode/
│ └── settings.json
├── ./src/
│ └── index.ts
├── ./test/
│ └── index.test.ts
├── ./scripts/
│ └── git-cliff.toml
├── biome.json
├── CHANGELOG.md
├── cliff.toml
├── lefthook.yml
├── LICENSE
├── package.json
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
├── tsconfig.json
├── tsconfig.build.json
├── tsdown.config.ts
└── vitest.config.jsRoot Directory Files
Configuration Files
| File | Purpose | Description |
|---|---|---|
package.json | Project metadata | Contains package information, dependencies, and npm scripts |
pnpm-lock.yaml | Dependency lock file | Ensures consistent dependency versions |
pnpm-workspace.yaml | Workspace configuration | Configures pnpm workspace settings |
tsconfig.json | TypeScript configuration | Main TypeScript compiler options |
tsconfig.build.json | Build configuration | TypeScript configuration specifically for build process |
tsdown.config.ts | Bundler configuration | Configuration for tsdown/Rolldown bundler |
vitest.config.js | Test configuration | Configuration for Vitest testing framework |
biome.json | Code quality configuration | Configuration for Biome linter and formatter |
cliff.toml | Changelog configuration | Configuration for git-cliff changelog generator |
lefthook.yml | Git hooks configuration | Configuration for lefthook git hooks |
Documentation Files
| File | Purpose |
|---|---|
README.md | Project documentation |
CHANGELOG.md | Change history |
LICENSE | License |
IDE Configuration
| File | Purpose |
|---|---|
.vscode/settings.json | VSCode settings |
Source Code Structure
/src/ Directory
The main source code directory where your TypeScript package code resides.
src/
└── index.tsindex.ts: The main entry point of your package. This is where you export your public API.- Add additional TypeScript files as needed for your package functionality.
The template includes sample math utility functions (sum, subtract, multiply, divide) in the index.ts file as examples. You can replace these with your own code.
/test/ Directory
The test directory containing your unit tests.
test/
└── index.test.tsindex.test.ts: Test file for the main index.ts module.- Add additional test files as needed for your package.
/scripts/ Directory
Additional configuration files and scripts.
scripts/
└── git-cliff.tomlgit-cliff.toml: Additional git-cliff configuration (referenced in package.json scripts).
Key Configuration Files Explained
TypeScript Configuration
The template uses two TypeScript configuration files:
-
tsconfig.json: Main configuration with development settings- Target: ESNext
- Module: ESNext
- Strict mode enabled
- Bundler mode settings
- Path aliases configured
-
tsconfig.build.json: Build-specific configuration- Extends main tsconfig.json
- Sets output directory to
dist - Additional strict null checks
Bundler Configuration
tsdown.config.ts: Configuration for the Rolldown bundler with tsdown plugin
- Entry point:
src/index.ts - Output format: ESM (ECMAScript Modules)
- TypeScript declaration files: Enabled
- Source maps: Disabled (for production)
Testing Configuration
vitest.config.js: Configuration for Vitest
- Test file pattern:
**/*.test.ts - Global test environment variables enabled
Code Quality Configuration
biome.json: Configuration for Biome
- Extends ultracite/biome/core configuration
- VCS integration enabled
- File includes:
src/**/*.ts - Assist features enabled
Git Hooks Configuration
lefthook.yml: Configuration for lefthook
- Pre-commit hooks configured
- Runs ultracite fix on staged files
- Supports various file types (JS, TS, JSON, CSS)
File Patterns and Conventions
Naming Conventions
- TypeScript files: Use
.tsextension - Test files: Use
.test.tssuffix - Configuration files: Use appropriate extensions (
.json,.toml,.yml)
Import Paths
The template configures path aliases for easier imports:
// Instead of relative paths
import { sum } from '../../src/index';
// You can use path aliases
import { sum } from '~/src/index';
// or
import { sum } from '@/index';Module Resolution
- Uses TypeScript's
moduleResolution: "bundler" - Supports ES modules with
"type": "module"in package.json - Uses
verbatimModuleSyntaxfor accurate module syntax
Adding New Files
When adding new files to your project:
- Source files: Add to
/src/directory - Test files: Add to
/test/directory with.test.tssuffix - Configuration files: Add to root or appropriate subdirectories
- TypeScript files: Ensure they're included in tsconfig.json
Remember to update the tsconfig.json include array if you add TypeScript files outside the standard directories.