@izeau/typesql
TypeScript icon, indicating that this package has built-in type declarations

1.0.0 • Public • Published

TypeSQL

What?!

TypeSQL extracts type definitions from inline SQL CREATE TABLE statements. SQLite was used as a baseline dialect. Things may work for other dialects too, maybe?

Implementation details

Screenshots below are taken from SQLite’s CREATE TABLE documentation. Dashed shapes are not implemented.

create-table-stmt

Note: unlike SQLite, TypeSQL accepts trailing commas after column definitions.

column-def

column-constraint

type-name

Note: unlike SQLite, TypeSQL has no limit for the number of type parameters.

Why?!

Oh! It has future applications in propulsion, energy creation, data transmission, you name it!

Usage

import { GetType } from "@izeau/typesql";

type ExampleType = GetType<SQL, Table, Options>;
// type ExampleType = {
//   id: number,
//   isOk?: boolean | null | undefined
// }

// SQL must be a const string containing at least one CREATE TABLE statement:
const sql = `create table example (id int not null, is_ok boolean);` as const;

// Table can be either a ["schema-name", "table-name"] tuple, or a "table-name":
type Table = "example";

// Options is an optional parameter with the following properties:
//   - camelCase (boolean, defaults to false): wether to export column names as camelCased properties
type Options = { camelCase: true };

Live demo

You can try it out on the TypeScript Playground.

Type mappings

SQLite’s determination of column affinity rules are used.

Rule order SQL type TypeScript type
1 contains INT number
2 contains CHAR, CLOB or TEXT string
3 contains BLOB Uint8Array
4 contains REAL, FLOA or DOUB number
5† contains BOOL boolean
6† contains DATE or TIME Date
99 otherwise number

†: behavior deviates from SQLite’s in order to accomodate standard JS types

Inspiration

  • HypeScript, a simplified implementation of TypeScript’s type system written in TypeScript’s type annotations. TypeSQL borrows primitives and general principles from HypeScript.
  • ts-sql, a crazy SQL database implemented purely in TypeScript type annotations.

Readme

Keywords

Package Sidebar

Install

npm i @izeau/typesql

Weekly Downloads

0

Version

1.0.0

License

MIT

Unpacked Size

29.5 kB

Total Files

9

Last publish

Collaborators

  • izeau