quis

1.0.1 • Public • Published

Quis

Lightweight (~12 KiB) data sorting DSL.

Based on the Latin word quis, this project, like its origin, implies a question of existing complex data. Quis provides a domain specific language (DSL) for performing comparisons on values within a collection using string-based comparisons.

Quis is designed for story sorting with dynamic narrative structures where comparisons are needed to select or sort content. It uses a Parsing Expression Grammar (PEG) to define possible JavaScript and shorthand conditional comparisons:

Comparisons

  • == / is Equality.
  • != / is not Inequality.
  • > / gt Greater than.
  • < / lt Less than.
  • <= / lte Less than or equal.
  • >= / gte Greater than or equal.
  • and Boolean AND
  • or Boolean OR

Values Collection

To be as lightweight as possible, Quis does not contain state or database functionality. This must be provided by developers while also matching the expected callback structure expected.

Based on the underlining PEG compilation process, Quis expects a values() callback function returning values based on the passed-in variable name. For example, a simple collection returning specific values based on labels might be the following:

const values = (name) => {

    // Establish a default value. 
    let result = null;

    // Return value based on 'example'.
    if (name === 'example') {
        result = 2;
    }
    
    // Return value based on 'example2'.
    if (name === 'example2') {
        result = 5;
    }

    // Return either default or set value.
    return result;
};

Example

// Import parse() function.
const { parse } = require('quis');

// Create a values function. (This must be a callback returning a value.)
const values = (label) => {
    if(label == 'example') {
        return 2;
    }
};

// Example contents array.
const content = [
    {
        condition: "$example > 3",
        text: "A"
    },
    {
        condition: "$example == 2",
        text: "B"
    }
];

// filter() the array based on values + parse().
const results = content.filter(
    (entry) => parse(entry.condition, { values: values } ) == true
);

// Single result.
// [ { condition: '$example == 2', text: 'B' } ]
console.log(results);

Readme

Keywords

none

Package Sidebar

Install

npm i quis

Weekly Downloads

1

Version

1.0.1

License

MIT

Unpacked Size

71.8 kB

Total Files

12

Last publish

Collaborators

  • videlais