1.0.0 • Published 2 years ago

@izeau/typesql v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

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?

npm.io


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

create-table-stmt

npm.io

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

column-def

npm.io

column-constraint

npm.io

type-name

npm.io

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 orderSQL typeTypeScript type
1contains INTnumber
2contains CHAR, CLOB or TEXTstring
3contains BLOBUint8Array
4contains REAL, FLOA or DOUBnumber
5†contains BOOLboolean
6†contains DATE or TIMEDate
99otherwisenumber

†: 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.