Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@gjuchault/typescript-service-starter

Package Overview
Dependencies
Maintainers
1
Versions
46
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@gjuchault/typescript-service-starter

Yet another typescript service starter template

  • 5.4.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
3
Maintainers
1
Weekly downloads
 
Created
Source

TypeScript Service Starter

NPM NPM GitHub Workflow Status

Yet another (opinionated) TypeScript service starter template.

Opinions and limitations

  1. Tries to follow Domain Driven Development and 3 Layers architecture
  2. As little of externalities requirements as possible (outputs to stdout/stderr, no auth management, etc.)
  3. No dependency on node_modules folder and filesystem at runtime, to allow bundling & small Docker image
  4. Config should not default to either development or production (link)

And extends the ones from typescript-library-starter

  1. Relies as much as possible on each included library's defaults
  2. Only relies on GitHub Actions
  3. Does not include documentation generation
  4. Always set NODE_ENV to production and use ENV_NAME for logging purposes

Getting started

  1. npx degit gjuchault/typescript-service-starter my-project or click on the Use this template button on GitHub!
  2. cd my-project
  3. npm install
  4. git init (if you used degit)
  5. npm run setup

To enable deployment, you will need to:

  1. Set up the NPM_TOKEN secret in GitHub Actions (Settings > Secrets > Actions)
  2. Give GITHUB_TOKEN write permissions for GitHub releases (Settings > Actions > General > Workflow permissions)

Features

Ecosystem

This template is based on Fastify with some nice defaults (circuit breaker, redis rate limit, etc.). ts-rest is used to have nice routes & automatic client generations with zod and TypeScript. It leverages PostgreSQL as a storage (through slonik), Redis as a cache through ioredis).

For the logging & telemetry part, it uses pino and OpenTelemetry (for both prometheus-like metrics & tracing). To handle distributed tracing, it expects W3C's traceparent header to carry trace id & parent span id.

To run tasks & crons, this package leverages BullMQ.

This template also tries to be easy to deploy through esbuild's bundling. This means you can not leverage node_modules and file system at runtime: reading static files from node_modules, hooking require, etc. ill not be possible. This implies to be mindful on libraries (that would read static files from there older), or automatic instrumentation (that hook require). Yet it comes with super small Docker images hat are fast to deploy.

We also have a very simple singleton-object dependency injection. This allows for simple retrieval of dependencies without imports (which avoids module mocking).

Layers & folder structure

migrations         # database migrations (.sql files, no rollback)
src/
├── application    # service code
├── domain         # pure functions & TypeScript models of your entities
├── presentation   # communication layer (http)
├── repository     # storage of your entities
├── infrastructure # technical components (cache, database connection, etc.) — most of it should be outsourced to a shared SDK library
├── helpers        # utilities functions & non-domain code
└── test-helpers   # test utilities (starting default port, resetting database, etc.)

Client generation

You can check ts-rest's documentation to have an automatic client with typing. routerContract is exported on the index file.

Node.js, npm version

TypeScript Service Starter relies on Volta to ensure Node.js version to be consistent across developers. It's also used in the GitHub workflow file.

TypeScript

Leverages esbuild for blazing fast builds, but keeps tsc to generate .d.ts files. Generates a single ESM build.

Commands:

  • build: runs type checking then ESM and d.ts files in the build/ directory
  • clean: removes the build/ directory
  • type:dts: only generates d.ts
  • type:check: only runs type checking
  • type:build: only generates ESM

Tests

TypeScript Library Starter uses Node.js's native test runner. Coverage is done using c8 but will switch to Node.js's one once out.

Commands:

  • test: runs test runner for both unit and integration tests
  • test:unit: runs test runner for unit tests only
  • test:integration: runs test runner for integration tests only
  • test:watch: runs test runner in watch mode
  • test:coverage: runs test runner and generates coverage reports

Format & lint

This template relies on the combination of ESLint — through Typescript-ESLint for linting and Prettier for formatting. It also uses cspell to ensure correct spelling.

Commands:

  • format: runs Prettier with automatic fixing
  • format:check: runs Prettier without automatic fixing (used in CI)
  • lint: runs ESLint with automatic fixing
  • lint:check: runs ESLint without automatic fixing (used in CI)
  • spell:check: runs spell checking

Releasing

Under the hood, this service uses semantic-release and Commitizen. The goal is to avoid manual release processes. Using semantic-release will automatically create a GitHub release (hence tags) as well as an npm release. Based on your commit history, semantic-release will automatically create a patch, feature or breaking release.

Commands:

  • cz: interactive CLI that helps you generate a proper git commit message, using Commitizen
  • semantic-release: triggers a release (used in CI)

Keywords

FAQs

Package last updated on 15 Jan 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc