3.0.2 • Published 5 years ago

@typemon/dynamodb-expression v3.0.2

Weekly downloads
90
License
MIT
Repository
gitlab
Last release
5 years ago

DynamoDB Expression - npm-version npm-downloads

DynamoDB expression builder for TypeScript

Features

  • Support almost all expressions
  • Automatic key mapping and anti-collision

Installation

$ npm install @typemon/dynamodb-expression
import {
    /* Expression Classes */
    Expression,
    UpdateExpression,

    /* Logical Expressions */
    not,
    and,
    or,
    parentheses,

    /* Comparison Expressions */
    equal,
    notEqual,
    lessThan,
    lessThanOrEqual,
    greaterThan,
    greaterThanOrEqual,

    betweenAnd,
    inList,

    /* Function Expressions */
    attributeExists,
    attributeNotExists,
    attributeType,
    beginsWith,
    contains,
    size,

    /* Update Expressions */
    set,
    remove,
    increment,
    decrement,
    listAppend,
    ifNotExists,

    /* Alias Helper */
    Alias,

    /* Types */
    Value,
    Binary,
    Set

    /* Expressions Classes */
    . . .
} from '@typemon/dynamodb-expression';

Usage

Condition

const client: DocumentClient = new DocumentClient();
const keyConditionExpression: Expression = equal('partition', 'monster');
const filterExpression: Expression = and(
    equal('name', 'typemon'),
    contains('packages', 'dynamodb-expression')
);

const result: DocumentClient.QueryOutput = await client.query({
    TableName: 'monster-space-network',
    KeyConditionExpression: keyConditionExpression.expression,
    FilterExpression: filterExpression.expression,
    ExpressionAttributeNames: Object.assign(keyConditionExpression.names, filterExpression.names),
    ExpressionAttributeValues: Object.assign(keyConditionExpression.values, filterExpression.values)
}).promise();

Update

const client: DocumentClient = new DocumentClient();
const primaryKey: object = { name: 'typemon' };
const updateExpression: Expression = UpdateExpression.build([
    set('foo', 'bar'),
    increment('count', 1),
    remove('temp')
]);

const result: DocumentClient.UpdateItemOutput = await client.update({
    TableName: 'monster-space-network',
    Key: primaryKey,
    UpdateExpression: updateExpression.expression,
    ExpressionAttributeNames: updateExpression.names,
    ExpressionAttributeValues: updateExpression.values
}).promise();

Expression Example

Condition

and(
    equal('foo', 'bar'),
    greaterThanOrEqual(size('items'), 100)
);
{
    expression: '#dTwHE = :rYXbz AND size (#Pgcou) >= :TjhDs',
    names: {
        '#dTwHE': 'foo',
        '#Pgcou': 'items'
    },
    values: {
        ':rYXbz': 'bar',
        ':TjhDs': 100
    }
}

Update

UpdateExpression.build([
    set('foo.0.1.2', 'bar'),
    remove('temp[0]'),
    increment('count', 1)
]);
{
    expression: 'SET #YarFm[0][1][2] = :vhBOn, #sQYcx = #sQYcx + :nBhjy REMOVE #rkvSt[0]',
    names: {
        '#YarFm': 'foo',
        '#sQYcx': 'count',
        '#rkvSt': 'temp'
    },
    values: {
        ':vhBOn': 'bar',
        ':nBhjy': 1
    }
}