npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@mazinsw/cogen

v2.4.3

Published

A code generator from SQL to any language

Readme

Cogen - Code generator

A code generator from SQL to any language

Example

Convert SQL table to typescript class

Model

CREATE TABLE MyTable (
  name TEXT COMMENT 'Field comment[S]',
  age BOOL NOT NULL DEFAULT 0 COMMENT 'Field comment[F:false]'
) COMMENT = 'Table comment[N:My Table|My tables]';

Template filename: src/models/$[table.unix].ts

/** $[table.comment] */
export class $[Table.norm] {
$[field.each]
  /** $[field.comment] */
  public $[field.norm]: $[field.if(boolean)]boolean$[field.else]string$[field.end];
$[field.end]
}

Result filename: src/models/my_table.ts

/** Table comment */
export class MyTable {
  /** Field comment */
  public name: string;
  /** Field comment */
  public age: boolean;
}

Modeling

Append these command to end of each comment of each field or table

format: [command:options]

  • example: 'Any comment[N:name|names]'

Commands:

  • [D] Default field, with this flag, the field must not be filled by the user
  • [E:Apple|Orange|Banana] Informs enum beautiful names
  • [F:false] describe the field or table
  • [G:a] or [G:o] name gender
  • [H:table name] Define inheritance
  • [I:64x64|user|default.png] Treats that field as image url, options sets the image dimension, base directory and default image name
  • [K:package.io|package/io/] define a package name and its directory
  • [L:form-control|extra style] field style and extra style
  • [M:999-9999] set field as masked by option
  • [N:name|names] set the beautiful name and/or plural name
  • [P] Treats that field as password field
  • [R] mark enum field as a radio
  • [S] as searchable descriptor or [S:S] as searchable only
  • [T] mark field to be filled as textarea element
  • [U:unixname|unixnames] set the unix name and/or plural unix name
  • [ID:identifier] set some identifier to field or table

Template

format: $[source.attribute] or $[source.function(expression)]

expression operators: ~ = not, | = or, & = and, ( ) priority

parent access: .

  • example: class $[Table..norm] {}
  • output: class MyParentTable {}

commands:

  • $[table] database table name

    • $[table.unix] Table name in unix format
    • $[table.unix.replace(s$)] Remove plural from table name after convert to unix format
    • $[table.unix.plural] database table name on plural
    • $[table.norm] Table name normalized and despluralized
    • $[table.norm.default] Table name normalized without despluralize
    • $[table.name] Beautiful name of table
    • $[table.name.plural] Beautiful name of table on plural
    • $[table.style] css style of table
    • $[table.style.extra] css extra style of table
    • $[table.info] Describe the table functionality
    • $[table.comment] Comment of table or each comment line wrapped when in loop
    • $[table.gender] table gender
    • $[table.chars] all word first characters of table name
    • $[table.letter] first char of table name
    • $[table.package] defined package for table
    • $[table.inherited] defined package for table
    • $[table.path] defined path for class file
    • $[table.order] left zero padded table order
    • $[table.if(attribute)] table condition, attributes:
      • comment
      • depends: check if current table depends on its parent
      • index
      • inherited
      • package
      • path
      • pluralizable
      • unique
      • unpluralizable
    • $[table.exists(type|attribute)] check if the table contains a field with matching type or attribute example: $[table.~exists(comment)] check if table doesn't have a commentary
    • $[table..match(regex)] test if regex match parent table name
    • $[table.finds(column_name)] check if the table contains a field called column_name example: $[table.finds(.*_at)] check if table has field name as date
    • $[table.each] for each all tables example: table.each(index), for each all index example: table.each(unique), for each unique index including primary example: table.each(primary), for each primary key index example: table.each(constraint), for each all constraint including primary and unique index example: table.each(foreign), for each all foreign key example: table.each(comment), for each comment line wrapped
    • $[table.end] end table exists condition or each loop
  • $[index] index field name

    • $[index.name] index name
    • $[index.each(type|attribute)] for each field of index
    • $[index.if(attribute)] few_fields, fulltext
  • $[unique] unique field name

    • $[unique.name] unique index name
    • $[unique.each(type|attribute)] for each field of unique index
  • $[primarykey] primary key field name

    • $[primarykey.name] primary key index name
  • $[primary.each(type|attribute)] for each field of primary key index

  • $[constraint] first constraint field name

    • $[constraint.name] constraint name
    • $[constraint.each(type|attribute)] for each field of constraint
  • $[foreign] first foreign field name

    • $[foreign.name] foreign key name
    • $[foreign.each(type|attribute)] for each field of foreign key
  • $[inherited] inherited table

  • $[primary] primary key field have all field properties, when primary key have only one field

  • $[descriptor] main field of table, have all field properties

  • $[comment.each] each line of comment

  • $[comment] single line of comment break by 72 chars

  • $[description.each] each line of comment with ' escaped

  • $[description] single line of comment with ' escaped break by 72 chars

  • $[reference] referenced table by field or constraint, have all table commands

    • $[reference.match(regex)] test if regex match referenced table name
    • $[reference.finds(column_name)] check if the referenced table contains a field called column_name example: $[reference.finds(.*_at)] check if referenced table has field name as date pattern
    • $[reference.reverse_each] reverse for each field process content
    • $[reference.each(type|attribute&all)] for each field of referenced constraint table
  • $[field] name of table field

    • $[field.replace(_url,_file)] replace field name from ie. image_url to image_file
    • $[field.unix] name of field in unix format
    • $[field.norm] name of field normalized
    • $[field.norm.singular] Table name normalized on singular
    • $[field.name] Beautiful name of table field
    • $[field.info] Describe the field functionality
    • $[field.comment] Comment of the field or each comment line wrapped when in loop
    • $[field.content] fill with each field template generated
    • $[field.mask] mask informed on model for the field
    • $[field.style] css style of field
    • $[field.gender] field gender
    • $[field.chars] all word first characters of field name
    • $[field.letter] first char of field name
    • $[field.array.count] number of common fields, i.e, same name with different number
    • $[field.array.index] current index of common field, start from 0
    • $[field.array.number] current number of common field, start from 1
    • $[field.size] Size of the field in bytes
    • $[field.length] Length of the string field
    • $[field.each] for each table field or each field of source on legacy
      • legacy example: $[field.each(primary)] for each primary key fields
      • example: $[field.each(reference & required)]
      • legacy example: $[field.each(comment)],for each comment line wrapped
      • example: $[field.each(search)]
      • legacy example: $[field.each(option)],for each option of field(enum items)
      • example: $[field.each(all)] for each all table field
    • $[field.end] end each loop
    • $[field.if(type|attribute&~(type|~attribute))] test if field is type or has attributes, example: $[field.if(reference)] attributes:
      • array
      • bigint
      • blob
      • boolean
      • comment
      • currency
      • date
      • datetime
      • default
      • depends: check if field references its parent table
      • description
      • descriptor
      • double
      • enum
      • feminine
      • few_fields
      • first
      • float
      • image
      • info
      • integer
      • many
      • masculine
      • masked
      • non_first
      • non_null
      • not_null
      • null
      • optional
      • pluralizable
      • primary
      • radio
      • reference
      • repeated
      • required
      • searchable
      • self_reference
      • single
      • string
      • text
      • time
      • unique
      • unpluralizable
      • unsigned
    • $[field.else] when if condition is false (must be the last before field.end)
    • $[field.else.if(type|attribute)] when if condition is false and make a test if field type or has attributes
    • $[field.end] end if
    • $[field.match(regex)] test if regex match field SQL name
    • $[field.end] end match
    • $[field.contains(text)] test if field SQL name contains "text"
    • $[field.end] end contains
  • $[option] or $[field.option] enum item value

    • $[option.unix] enum item value as unix name
    • $[option.norm] enum item value normalized
    • $[option.low] first enum item index, start from 0
    • $[option.high] last enum item index, start from 0
    • $[option.index] current index of option, start from 0
    • $[option.number] current number of option, start from 1
    • $[option.count] count of enum items
  • $[image] or $[field.image] first image field of table [I]

    • $[image.width] recommended image width
    • $[image.height] recommended image height
    • $[image.folder] image folder to upload
    • $[image.default] default image url

Tip: all command allow case formatting

  • example: for table name category, $[Table.name] outputs: Category
  • example: for table name Category, $[table.name] outputs: category
  • example: for table name category, $[TABLE.name] outputs: CATEGORY
  • example: for table name CaTeGoRy, $[tAble.name] outputs: CaTeGoRy

Command line

Usage: cogen [options] input.sql

Options:

  • (-d | --despluralize) "match1|match2/slice_end/[replacement[/min_length]];ms|ls/1/s/4": set the despluralization database rules
  • (-f | --file | -i | --input) input.sql: set the input sql file
  • (-h | --help): show this help
  • (-l | --legacy): use legacy loops instead of as filter
  • (-o | --output) storage/generated: set the output directory
  • (-p | --project) cogen.properties: read a project from file
  • (-s | --silent): run without print anything
  • (-t | --template) scripts/template/: set the template input directory
  • (-u | --uppercase) "|USA|W3C|": set the uppercase database names
  • (-w | --write) cogen.properties: save configuration to file when finishes