Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

igniculus

Package Overview
Dependencies
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

igniculus

SQL Syntax Highlighter and Logger. Unadorned and customizable.

  • 0.4.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
11K
decreased by-60.16%
Maintainers
1
Weekly downloads
 
Created
Source

Igniculus

SQL Syntax Highlighter and Logger. Unadorned and customizable.

version node downloads license

Install

$ npm install igniculus

Usage

const igniculus = require('igniculus')();

igniculus('SELECT [port] AS Printer, \'on fire\' AS Status FROM [Printers] P WHERE P."online" AND P."check"');

Simple Query Default

Options

A default color scheme is provided. However, you can define the highlight style for each rule, passing them along when instantiating the logger function:

const igniculus = require('igniculus');
/* White constants over red background using inverse mode.
 * Gray keywords.
 * Prefixed by white '(query)' message.
 */
const options = {
    constants:         { mode: 'inverse', fg: 'red', bg: 'white' },
    standardKeywords:  { mode: 'bold', fg: 'black' },
    lesserKeywords:    { mode: 'bold', fg: 'black' },
    prefix:            { mode: 'bold', fg: 'white', text: '(query) '}
};
const illumine = igniculus(options);

illumine('SELECT * FROM Student s WHERE s.programme = \'IT\' AND EXISTS (SELECT * FROM Enrolled e JOIN Class c ON c.code = e.code JOIN Tutor t ON t.tid = c.tid WHERE e.sid = s.sid AND t.name LIKE \'%Hoffman\')');

Simple Query Custom

The options argument is optional and each property should be one of the following.

Rules

  • options.constants - Values surrounded by single quotes. E.g: 'static'
  • options.numbers - Numeric values. E.g: 2.5
  • options.operators - Arithmetic, Bitwise and Comparison operators. E.g: + or >=
  • options.delimitedIdentifiers - Text between brackets or double quotes. E.g: [Employee] or "salary"
  • options.dataTypes - One of the included data types. For now it contains those defined in T-SQL. E.g: INTEGER or VARCHAR
  • options.standardKeywords - One the included keywords. Contains the most widely used T-SQL and SQL-92 Standard keywords. E.g: SELECT or CONSTRAINT
  • options.lesserKeywords - One of the included subset of keywords. E.g: ANY, AVG or DESC
  • options.prefix
    • prefix.text - A prefix can be appended to every log through this option. This prefix can be styled like any previous options.
    • prefix.replace - Also, a string or regular expression can be provided and it will replace (if a prefix.text was given) or remove a prefix that matches such parameter. E.g: Sequelize prefixes every SQL statement with Executing (default): This is removed by default by the option prefix: { replace: /.*?: / }
  • options.postfix
    • postfix.text - A postfix can be appended to every log through this option. This postfix can be styled like any previous options.

If defined, the options argument takes precedence over default options. If a rule or it´s style is missing it won't be applied. This allows to "enable" or "disable" certain syntax highlighting as you see fit. (Examples below)

Styles

All of the previous rule styles can be defined like this:

/* options = {"rule": style, ... } where
 * style = { mode: "modifier", fg: "color", bg: "color"}
 */
const options = {
    constants: {
        mode: 'inverse',
        fg: 'red',
        bg: 'white'
    },
    ...
};

Each style having an optional:

  • style.mode - Modifier. E.g: 'bold'
  • style.fg - Foreground text color. E.g: 'red'
  • style.bg - Background color. E.g: 'black'

These can be one of the following.

Modifiers

  • reset
  • bold
  • dim
  • italic
  • underline
  • blink
  • inverse
  • hidden
  • strikethrough

Colors (Foreground and Background)

  • black
  • red
  • green
  • yellow
  • blue
  • magenta
  • cyan
  • white

Examples

/* Predifined style */
const defaults = {
    constants:              { mode: 'dim', fg: 'red' },
    delimitedIdentifiers:   { mode: 'dim', fg: 'yellow' },
    dataTypes:              { mode: 'dim', fg: 'green' },
    standardKeywords:       { mode: 'dim', fg: 'cyan' },
    lesserKeywords:         { mode: 'bold', fg: 'black' },
    prefix:                 { replace: /.*?: / }
};

Defaults

const igniculus = require('igniculus')(
    {
        constants:             { mode: 'bold', fg: 'yellow' },
        numbers:               { mode: 'bold', fg: 'magenta' },
        delimitedIdentifiers:  { mode: 'bold', fg: 'red' },
        standardKeywords:      { mode: 'bold', fg: 'blue' }
    }
);

igniculus("INSERT INTO [Printers] ([port], [name], [ready], [online], [check]) VALUES ('lp0', 'Bob Marley', 0, 1, 1)");

Custom Insert

Integration

Igniculus' logger is a drop in replacement on any tool that passes the logging function either a string or Object paramater. In the latest case the toString() method will be called to obtain a string primitive.

Sequelize

Using igniculus with sequelize is straightforward.

const Sequelize = require('sequelize');
const igniculus = require('igniculus')();

const sequelize = new Sequelize('database', 'username', 'password', {
    logging: igniculus
});
/* Or add some customizations */
const Sequelize = require('sequelize');
const igniculus = require('igniculus')(
    {
        constants:             { fg: 'red' },
        delimitedIdentifiers:  { fg: 'yellow' },
        dataTypes:             { fg: 'red' },
        standardKeywords:      { fg: 'magenta' },
        lesserKeywords:        { mode: 'bold', fg: 'black' },
        prefix:                {
                                   mode: 'bold',
                                   fg: 'white',
                                   replace: /.*?:/,
                                   text: '(Sequelize)'
                               },
        postfix:               { text:'\r\n' }
    }
);
const sequelize = new Sequelize('database', 'username', 'password',
{
    logging: igniculus
});

...

sequelize.sync({ logging: igniculus});
Before

Before

After

After

Future Upgrades

  • Custom keywords
  • Custom rules
  • Selecting log stream E.g: process.stdout

Maintainers

License

MIT

Keywords

FAQs

Package last updated on 29 Jul 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc