Skip to content

template repository for projects using typescript and nodejs.

Notifications You must be signed in to change notification settings

probablyArth/typescript-nodejs-zod

Repository files navigation

server

Template for express, typescript, zod projects.

Glossary

  • Absolute imports

    non-library imports that use absolute path instead of relative.

    for ex:

    .
    ├── apps
    │   └── server.ts
    ├── env
    │   └── index.ts
    ├── folder1
    │   └── folder2
    │       └── a.ts
    ├── index.ts
    └── middlewares
        └── logger.middleware.ts
    
    // folder1/folder2/a.ts
    
    // this is a relative import
    import { getEnv } from '../../env/index.ts';
    
    // this is an absolute import
    import { getEnv } from 'env/index.ts';

Features

  • support for absolute imports in both development and build using tscpaths and tsconfig-paths
  • zod for validating .env vars.
  • dotenv for parsing .env files.
  • morgan for logging.
  • jest and supertest for tests.
  • express for http server.
  • prettier for formatting.
  • eslint for linting and forcing code styles.

How-to(s)

  • How to use absolute imports

    Absolute imports are not resolved by the default typescript build tool, tscpaths takes care of it.

    if you want to create imports from a folder let's say src/folder1 and name it folder1

    add this entry in the tsconfig.json

    {
      //tsconfig.json
      "compilerOptions": {
        //...rest of the config
    
        "paths": {
          //..other paths
    
          "folder1/*": ["folder1/*"],
        },
      },
    }

    you don't need to mention src/folder1/* because the baseUrl is set to ./src which is changeable in the tsconfig.json

    //tsconfig.json
    {
      "compilerOptions": {
        "baseUrl": "./src", // <--change here
      },
    }
  • How to add env vars to the pre-existing zod schema

    just add the key in the envSchema object in ./src/env/index.ts and give it the value of z.string()

    // ./src/env/index.ts
    .
    .
    .
    .
    
    const envSchema = z.object({
      // other variables
      yourKey: z.string(),
    });

setup

  • Install the dependencies

    npm i
  • create a .env file from .env.example

    cp .env.example .env

Running the server

  • Follow the instructions mentioned in setup

  • for development server

    npm run dev
  • for running production build

    npm run build && npm start
  • using Docker

    builidng docker image

    docker build -t <image_name> .

    running docker image

    docker run -e PORT=4000 -p 4000:4000 <image_name>
    
    Note: PORT is an env variable

Running tests

npm run test

Linting

npm run lint

About

template repository for projects using typescript and nodejs.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published