1.0.1 • Published 9 months ago

gen-sql-type v1.0.1

Weekly downloads
136
License
BSD-2-Clause
Repository
github
Last release
9 months ago

gen-sql-type

Generate Typescript Types from raw SQL statements

npm Package Version

Playground: https://gen-sql-type.surge.sh/

How it works

This library scan the plain sql statements then auto generate Typescript types of the result row and named parameters. (Also supports prepared statement)

Features

  • Extract types from sql statement
    • Support alias column name
    • Support function call (e.g. COUNT(*))
    • Support quoted column name with escape sequence (e.g. treat 'can''t' as "can't")
    • Support named parameters (e.g. :id and @username)
    • Supported statement types:
      • SELECT
      • UPDATE
      • DELETE
      • INSERT
    • Support select from WITH-clause
  • Generate Typescript type for:
    • Row of select result
    • Named parameters for prepared statement
  • Isomorphic, support both node.js and browser

Usage Example

Given user-service.ts:

const sqlTypeFile = SqlTypeFile.withPrefix(__filename)

export class UserService {
  async login(parameters: LoginUserParameters): Promise<LoginUserRow> {
    const sql: string = sqlTypeFile.wrapSql(
      'LoginUser',
      'select password_hash from user where id = :id',
    )
    return mockExec(sql, parameters)[0]
  }

  async logout(parameters: LogoutUserParameters) {
    const sql: string = sqlTypeFile.wrapSql(
      'LogoutUser',
      'update session set active = false where token = :token',
    )
    return mockExec(sql, parameters)
  }
}

Upon execution, it will auto generate user-service.types.ts:

export type LoginUserParameters = {
  id: any
}
export type LoginUserRow = {
  password_hash: any
}

export type LogoutUserParameters = {
  token: any
}

Complete example refers to ./examples/user-service.ts

License

This is free and open-source software (FOSS) with BSD-2-Clause License

1.0.1

9 months ago

1.0.0

9 months ago

0.3.0

4 years ago

0.3.2

4 years ago

0.3.1

4 years ago

0.2.2

4 years ago

0.2.1

4 years ago

0.2.0

4 years ago

0.1.3

4 years ago

0.1.2

4 years ago

0.1.1

4 years ago

0.1.0

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago