https://github.com/awslabs/dynamodb-data-mapper-js

A schema-based data mapper for Amazon DynamoDB.

https://github.com/awslabs/dynamodb-data-mapper-js

Science Score: 13.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic publication links
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (9.1%) to scientific vocabulary
Last synced: 10 months ago · JSON representation

Repository

A schema-based data mapper for Amazon DynamoDB.

Basic Info
Statistics
  • Stars: 818
  • Watchers: 22
  • Forks: 107
  • Open Issues: 81
  • Releases: 0
Archived
Created almost 9 years ago · Last pushed over 3 years ago
Metadata Files
Readme License

README.md

Amazon DynamoDB DataMapper For JavaScript

Apache 2 License

This repository hosts several packages that collectively make up an object to document mapper for JavaScript applications using Amazon DynamoDB.

Getting started

The @aws/dynamodb-data-mapper package provides a simple way to persist and load an application's domain objects to and from Amazon DynamoDB. When used together with the decorators provided by the @aws/dynamodb-data-mapper-annotations package, you can describe the relationship between a class and its representation in DynamoDB by adding a few decorators:

```typescript import { attribute, hashKey, rangeKey, table, } from '@aws/dynamodb-data-mapper-annotations';

@table('table_name') class MyDomainObject { @hashKey() id: string;

@rangeKey({defaultProvider: () => new Date()})
createdAt: Date;

@attribute()
completed?: boolean;

} ```

With domain classes defined, you can interact with records in DynamoDB via an instance of DataMapper:

```typescript import {DataMapper} from '@aws/dynamodb-data-mapper'; import DynamoDB = require('aws-sdk/clients/dynamodb');

const mapper = new DataMapper({ client: new DynamoDB({region: 'us-west-2'}), // the SDK client used to execute operations tableNamePrefix: 'dev_' // optionally, you can provide a table prefix to keep your dev and prod tables separate }); ```

Supported operations

Using the mapper object and MyDomainObject class defined above, you can perform the following operations:

put

Creates (or overwrites) an item in the table

typescript const toSave = Object.assign(new MyDomainObject, {id: 'foo'}); mapper.put(toSave).then(objectSaved => { // the record has been saved });

get

Retrieves an item from DynamoDB

typescript mapper.get(Object.assign(new MyDomainObject, {id: 'foo', createdAt: new Date(946684800000)})) .then(myItem => { // the item was found }) .catch(err => { // the item was not found })

NB: The promise returned by the mapper will be rejected with an ItemNotFoundException if the item sought is not found.

update

Updates an item in the table

```typescript const myItem = await mapper.get(Object.assign( new MyDomainObject, {id: 'foo', createdAt: new Date(946684800000)} )); myItem.completed = true;

await mapper.update(myItem); ```

delete

Removes an item from the table

typescript await mapper.delete(Object.assign( new MyDomainObject, {id: 'foo', createdAt: new Date(946684800000)} ));

scan

Lists the items in a table or index

```typescript for await (const item of mapper.scan(MyDomainObject)) { // individual items will be yielded as the scan is performed }

// Optionally, scan an index instead of the table: for await (const item of mapper.scan(MyDomainObject, {indexName: 'myIndex'})) { // individual items will be yielded as the scan is performed } ```

query

Finds a specific item (or range of items) in a table or index

typescript for await (const foo of mapper.query(MyDomainObject, {id: 'foo'})) { // individual items with a hash key of "foo" will be yielded as the query is performed }

Batch operations

The mapper also supports batch operations. Under the hood, the batch will automatically be split into chunks that fall within DynamoDB's limits (25 for batchPut and batchDelete, 100 for batchGet). The items can belong to any number of tables, and exponential backoff for unprocessed items is handled automatically.

batchPut

Creates (or overwrites) multiple items in the table

typescript const toSave = [ Object.assign(new MyDomainObject, {id: 'foo', completed: false}), Object.assign(new MyDomainObject, {id: 'bar', completed: false}) ]; for await (const persisted of mapper.batchPut(toSave)) { // items will be yielded as they are successfully written }

batchGet

Fetches multiple items from the table

typescript const toGet = [ Object.assign(new MyDomainObject, {id: 'foo', createdAt: new Date(946684800000)}), Object.assign(new MyDomainObject, {id: 'bar', createdAt: new Date(946684800001)}) ]; for await (const found of mapper.batchGet(toGet)) { // items will be yielded as they are successfully retrieved }

NB: Only items that exist in the table will be retrieved. If a key is not found, it will be omitted from the result.

batchDelete

Removes multiple items from the table

typescript const toRemove = [ Object.assign(new MyDomainObject, {id: 'foo', createdAt: new Date(946684800000)}), Object.assign(new MyDomainObject, {id: 'bar', createdAt: new Date(946684800001)}) ]; for await (const found of mapper.batchDelete(toRemove)) { // items will be yielded as they are successfully removed }

Operations with Expressions

Aplication example

```js import { AttributePath, FunctionExpression, UpdateExpression, } from '@aws/dynamodb-expressions';

const expr = new UpdateExpression();

// given the anotation bellow @table('tableName') class MyRecord { @hashKey() email?: string;

@attribute()
passwordHash?: string;

@attribute()
passwordSalt?: string;

@attribute()
verified?: boolean;

@attribute()
verifyToken?: string;

}

// you make a mapper operation as follows const aRecord = Object.assign(new MyRecord(), { email, passwordHash: password, passwordSalt: salt, verified: false, verifyToken: token, }); mapper.put(aRecord, { condition: new FunctionExpression('attributenotexists', new AttributePath('email') }).then( /* result handler */ ); ```

Table lifecycle operations

createTable

Creates a table for the mapped class and waits for it to be initialized:

typescript mapper.createTable(MyDomainObject, {readCapacityUnits: 5, writeCapacityUnits: 5}) .then(() => { // the table has been provisioned and is ready for use! })

ensureTableExists

Like createTable, but only creates the table if it doesn't already exist:

typescript mapper.ensureTableExists(MyDomainObject, {readCapacityUnits: 5, writeCapacityUnits: 5}) .then(() => { // the table has been provisioned and is ready for use! })

deleteTable

Deletes the table for the mapped class and waits for it to be removed:

typescript await mapper.deleteTable(MyDomainObject)

ensureTableNotExists

Like deleteTable, but only deletes the table if it exists:

typescript await mapper.ensureTableNotExists(MyDomainObject)

Constituent packages

The DataMapper is developed as a monorepo using lerna. More detailed documentation about the mapper's constituent packages is available by viewing those packages directly.

Owner

  • Name: Amazon Web Services - Labs
  • Login: awslabs
  • Kind: organization
  • Location: Seattle, WA

AWS Labs

GitHub Events

Total
Last Year

Committers

Last synced: about 3 years ago

All Time
  • Total Commits: 141
  • Total Committers: 16
  • Avg Commits per committer: 8.813
  • Development Distribution Score (DDS): 0.355
Past Year
  • Commits: 0
  • Committers: 0
  • Avg Commits per committer: 0.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Jonathan Eskew e****j@a****m 91
Jonathan Eskew j****n@j****t 26
Jonathan Eskew j****w@u****m 10
sh1n1chi8acker s****a@j****m 2
aregier a****r@r****m 1
Brandon L b****h@g****m 1
CarsonBradshaw c****w@g****m 1
Travis Webb me@t****m 1
Ofek Bashan o****y@g****m 1
Hassan Khan h****n@u****m 1
Lucas Badico l****a@g****m 1
acheronfail a****l@g****m 1
Doug Winter d****r@i****m 1
Adam Clark a****k@g****m 1
Pieter Raubenheimer p****r@w****m 1
Chris c****s@t****m 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 11 months ago

All Time
  • Total issues: 79
  • Total pull requests: 21
  • Average time to close issues: about 1 month
  • Average time to close pull requests: 6 months
  • Total issue authors: 74
  • Total pull request authors: 19
  • Average comments per issue: 2.72
  • Average comments per pull request: 1.24
  • Merged pull requests: 7
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • HHK1 (2)
  • hassankhan (2)
  • ajhool (2)
  • jaiminvaja-cue (2)
  • thrixton (2)
  • tsheaff (1)
  • wakeupmh (1)
  • ziggy6792 (1)
  • mischuler (1)
  • antogyn (1)
  • acheronfail (1)
  • krishmakochhar (1)
  • LucasBadico (1)
  • maufarinelli (1)
  • krazibit (1)
Pull Request Authors
  • jeskew (3)
  • aregier (1)
  • adamclerk (1)
  • sh1n1chi8acker (1)
  • dnafication (1)
  • adrianpanicek (1)
  • ofekray (1)
  • matt-downs (1)
  • ptejada (1)
  • acomagu (1)
  • perrin4869 (1)
  • christopheranderson (1)
  • krazibit (1)
  • etiennenoel (1)
  • haochang (1)
Top Labels
Issue Labels
guidance (8) feature-request (7) good-1st-issue (1)
Pull Request Labels

Packages

  • Total packages: 23
  • Total downloads:
    • npm 928,582 last-month
  • Total docker downloads: 6,364
  • Total dependent packages: 244
    (may contain duplicates)
  • Total dependent repositories: 1,216
    (may contain duplicates)
  • Total versions: 111
  • Total maintainers: 29
npmjs.org: @aws/dynamodb-auto-marshaller

A data marshaller that converts JavaScript types into Amazon DynamoDB AttributeValues

  • Versions: 11
  • Dependent Packages: 54
  • Dependent Repositories: 248
  • Downloads: 253,896 Last month
  • Docker Downloads: 3,971
Rankings
Downloads: 0.4%
Dependent packages count: 0.6%
Docker downloads count: 0.8%
Dependent repos count: 1.0%
Average: 1.4%
Stargazers count: 2.5%
Forks count: 2.9%
Last synced: 10 months ago
npmjs.org: @aws/dynamodb-data-mapper

A schema-based data mapper for Amazon DynamoDB

  • Versions: 17
  • Dependent Packages: 46
  • Dependent Repositories: 160
  • Downloads: 94,324 Last month
  • Docker Downloads: 443
Rankings
Downloads: 0.6%
Dependent packages count: 0.6%
Docker downloads count: 1.0%
Dependent repos count: 1.2%
Average: 1.5%
Stargazers count: 2.5%
Forks count: 2.9%
Last synced: 11 months ago
npmjs.org: @aws/dynamodb-expressions

Composable expression objects for Amazon DynamoDB

  • Versions: 13
  • Dependent Packages: 35
  • Dependent Repositories: 178
  • Downloads: 146,814 Last month
  • Docker Downloads: 443
Rankings
Downloads: 0.6%
Dependent packages count: 0.9%
Docker downloads count: 1.0%
Dependent repos count: 1.2%
Average: 1.5%
Stargazers count: 2.6%
Forks count: 3.0%
Last synced: 10 months ago
npmjs.org: @aws/dynamodb-data-marshaller

A schema-based data marshaller for Amazon DynamoDB

  • Versions: 13
  • Dependent Packages: 19
  • Dependent Repositories: 162
  • Downloads: 116,263 Last month
  • Docker Downloads: 443
Rankings
Downloads: 0.6%
Docker downloads count: 1.0%
Dependent repos count: 1.2%
Dependent packages count: 1.3%
Average: 1.6%
Stargazers count: 2.5%
Forks count: 2.9%
Last synced: 11 months ago
npmjs.org: @aws/dynamodb-data-mapper-annotations

Annotations providing easy integration between TypeScript domain objects and the @aws/dynamodb-data-mapper library

  • Versions: 18
  • Dependent Packages: 42
  • Dependent Repositories: 136
  • Downloads: 81,513 Last month
Rankings
Downloads: 0.7%
Dependent packages count: 0.7%
Dependent repos count: 1.3%
Average: 1.6%
Stargazers count: 2.5%
Forks count: 2.9%
Last synced: 10 months ago
npmjs.org: @aws/dynamodb-batch-iterator

Abstraction for DynamoDB batch reads and writes for that handles batch splitting and partial retries with exponential backoff

  • Versions: 9
  • Dependent Packages: 9
  • Dependent Repositories: 159
  • Downloads: 129,844 Last month
  • Docker Downloads: 443
Rankings
Downloads: 0.6%
Docker downloads count: 1.0%
Dependent repos count: 1.2%
Average: 1.8%
Dependent packages count: 2.5%
Stargazers count: 2.5%
Forks count: 2.9%
Last synced: about 1 year ago
npmjs.org: @aws/dynamodb-query-iterator

Abstraction for DynamoDB queries and scans that handles pagination and parallel worker coordination

  • Versions: 4
  • Dependent Packages: 7
  • Dependent Repositories: 165
  • Downloads: 105,707 Last month
  • Docker Downloads: 621
Rankings
Downloads: 0.6%
Docker downloads count: 0.9%
Dependent repos count: 1.2%
Average: 1.9%
Stargazers count: 2.5%
Forks count: 2.9%
Dependent packages count: 3.2%
Last synced: 10 months ago
npmjs.org: @spreen/dynamodb-data-mapper

A schema-based data mapper for Amazon DynamoDB

  • Versions: 1
  • Dependent Packages: 3
  • Dependent Repositories: 0
  • Downloads: 2 Last month
Rankings
Stargazers count: 3.3%
Forks count: 3.7%
Dependent packages count: 6.9%
Average: 9.9%
Downloads: 10.3%
Dependent repos count: 25.3%
Maintainers (1)
Last synced: 11 months ago
npmjs.org: @spreen/dynamodb-data-mapper-annotations

Annotations providing easy integration between TypeScript domain objects and the @aws/dynamodb-data-mapper library

  • Versions: 1
  • Dependent Packages: 2
  • Dependent Repositories: 0
  • Downloads: 2 Last month
Rankings
Stargazers count: 3.3%
Forks count: 3.7%
Dependent packages count: 9.5%
Downloads: 10.3%
Average: 10.4%
Dependent repos count: 25.3%
Maintainers (1)
Last synced: 11 months ago
npmjs.org: aws-dynamodb-data-mapper

A schema-based data mapper for Amazon DynamoDB

  • Versions: 4
  • Dependent Packages: 2
  • Dependent Repositories: 1
  • Downloads: 89 Last month
Rankings
Stargazers count: 2.6%
Forks count: 2.9%
Dependent repos count: 10.4%
Average: 11.8%
Dependent packages count: 21.0%
Downloads: 22.0%
Maintainers (1)
Last synced: 11 months ago
npmjs.org: @nandangk95/dynamodb-query-iterator

Abstraction for DynamoDB queries and scans that handles pagination and parallel worker coordination

  • Versions: 2
  • Dependent Packages: 2
  • Dependent Repositories: 0
  • Downloads: 17 Last month
Rankings
Stargazers count: 3.3%
Forks count: 3.7%
Dependent packages count: 9.5%
Average: 14.1%
Dependent repos count: 25.3%
Downloads: 28.6%
Maintainers (1)
Last synced: 11 months ago
npmjs.org: aws-dynamodb-expressions

Composable expression objects for Amazon DynamoDB

  • Versions: 2
  • Dependent Packages: 2
  • Dependent Repositories: 1
  • Downloads: 20 Last month
Rankings
Stargazers count: 2.6%
Forks count: 2.9%
Dependent repos count: 10.4%
Average: 16.8%
Dependent packages count: 21.0%
Downloads: 47.4%
Maintainers (1)
Last synced: 11 months ago
npmjs.org: @spreen/dynamodb-batch-iterator

Abstraction for DynamoDB batch reads and writes for that handles batch splitting and partial retries with exponential backoff

  • Versions: 1
  • Dependent Packages: 2
  • Dependent Repositories: 0
  • Downloads: 2 Last month
Rankings
Stargazers count: 3.3%
Forks count: 3.7%
Dependent packages count: 9.5%
Average: 17.5%
Dependent repos count: 25.3%
Downloads: 45.7%
Maintainers (1)
Last synced: 11 months ago
npmjs.org: @spreen/dynamodb-expressions

Composable expression objects for Amazon DynamoDB

  • Versions: 1
  • Dependent Packages: 2
  • Dependent Repositories: 0
  • Downloads: 2 Last month
Rankings
Stargazers count: 3.3%
Forks count: 3.7%
Dependent packages count: 9.5%
Average: 18.0%
Dependent repos count: 25.3%
Downloads: 48.3%
Maintainers (1)
Last synced: 11 months ago
npmjs.org: @spreen/dynamodb-query-iterator

Abstraction for DynamoDB queries and scans that handles pagination and parallel worker coordination

  • Versions: 1
  • Dependent Packages: 2
  • Dependent Repositories: 0
  • Downloads: 2 Last month
Rankings
Stargazers count: 3.3%
Forks count: 3.7%
Dependent packages count: 9.5%
Average: 18.0%
Dependent repos count: 25.3%
Downloads: 48.3%
Maintainers (1)
Last synced: 11 months ago
npmjs.org: @spreen/dynamodb-data-marshaller

A schema-based data marshaller for Amazon DynamoDB

  • Versions: 1
  • Dependent Packages: 2
  • Dependent Repositories: 0
  • Downloads: 2 Last month
Rankings
Stargazers count: 3.3%
Forks count: 3.7%
Dependent packages count: 9.5%
Average: 18.6%
Dependent repos count: 25.3%
Downloads: 51.2%
Maintainers (1)
Last synced: 11 months ago
npmjs.org: aws-dynamodb-batch-iterator

Abstraction for DynamoDB batch reads and writes for that handles batch splitting and partial retries with exponential backoff

  • Versions: 2
  • Dependent Packages: 2
  • Dependent Repositories: 1
  • Downloads: 19 Last month
Rankings
Stargazers count: 2.6%
Forks count: 2.9%
Dependent repos count: 10.4%
Average: 18.7%
Dependent packages count: 21.0%
Downloads: 56.6%
Maintainers (1)
Last synced: 11 months ago
npmjs.org: aws-dynamodb-data-mapper-annotations

Annotations providing easy integration between TypeScript domain objects and the @aws/dynamodb-data-mapper library

  • Versions: 2
  • Dependent Packages: 2
  • Dependent Repositories: 1
  • Downloads: 22 Last month
Rankings
Stargazers count: 2.6%
Forks count: 2.9%
Dependent repos count: 10.4%
Average: 19.4%
Dependent packages count: 21.0%
Downloads: 60.0%
Maintainers (1)
Last synced: 11 months ago
npmjs.org: aws-dynamodb-auto-marshaller

A data marshaller that converts JavaScript types into Amazon DynamoDB AttributeValues

  • Versions: 2
  • Dependent Packages: 2
  • Dependent Repositories: 1
  • Downloads: 17 Last month
Rankings
Stargazers count: 2.6%
Forks count: 2.9%
Dependent repos count: 10.4%
Average: 19.4%
Dependent packages count: 21.0%
Downloads: 60.0%
Maintainers (1)
Last synced: 11 months ago
npmjs.org: @isotoma/dynamodb-data-mapper

A schema-based data mapper for Amazon DynamoDB

  • Versions: 1
  • Dependent Packages: 1
  • Dependent Repositories: 1
  • Downloads: 1 Last month
Rankings
Stargazers count: 2.6%
Forks count: 2.9%
Dependent repos count: 10.4%
Average: 19.4%
Dependent packages count: 21.0%
Downloads: 60.0%
Last synced: 11 months ago
npmjs.org: aws-dynamodb-data-marshaller

A schema-based data marshaller for Amazon DynamoDB

  • Versions: 2
  • Dependent Packages: 2
  • Dependent Repositories: 1
  • Downloads: 5 Last month
Rankings
Stargazers count: 2.6%
Forks count: 2.9%
Dependent repos count: 10.4%
Average: 19.4%
Dependent packages count: 21.0%
Downloads: 60.0%
Maintainers (1)
Last synced: 11 months ago
npmjs.org: @spreen/dynamodb-auto-marshaller

A data marshaller that converts JavaScript types into Amazon DynamoDB AttributeValues

  • Versions: 1
  • Dependent Packages: 2
  • Dependent Repositories: 0
  • Downloads: 2 Last month
Rankings
Stargazers count: 3.3%
Forks count: 3.7%
Dependent packages count: 9.5%
Average: 19.7%
Dependent repos count: 25.3%
Downloads: 56.5%
Maintainers (1)
Last synced: 11 months ago
npmjs.org: aws-dynamodb-query-iterator

Abstraction for DynamoDB queries and scans that handles pagination and parallel worker coordination

  • Versions: 2
  • Dependent Packages: 2
  • Dependent Repositories: 1
  • Downloads: 17 Last month
Rankings
Stargazers count: 2.6%
Forks count: 2.9%
Dependent repos count: 10.4%
Average: 20.1%
Dependent packages count: 21.0%
Downloads: 63.8%
Maintainers (1)
Last synced: 11 months ago

Dependencies

package.json npm
  • @types/jest ^24 development
  • @types/node ^8.0.4 development
  • jest ^24 development
  • lerna ^3.13 development
  • typedoc ^0.14.0 development
  • typescript ^3.4 development
  • aws-sdk ^2.7.0
packages/dynamodb-auto-marshaller/package.json npm
  • @types/jest ^24 development
  • @types/node ^8.0.4 development
  • aws-sdk ^2.7.0 development
  • jest ^24 development
  • typedoc ^0.14.0 development
  • typescript ^3.4 development
  • tslib ^1.9
packages/dynamodb-batch-iterator/package.json npm
  • @types/jest ^24 development
  • @types/node ^8.0.4 development
  • aws-sdk ^2.7.0 development
  • jest ^24 development
  • typedoc ^0.14.0 development
  • typescript ^3.4 development
  • tslib ^1.9
  • utf8-bytes ^0.0.1
packages/dynamodb-data-mapper/package.json npm
  • @types/jest ^24 development
  • @types/node ^8.0.4 development
  • aws-sdk ^2.7.0 development
  • jest ^24 development
  • typedoc ^0.14.0 development
  • typescript ^3.4 development
  • @aws/dynamodb-auto-marshaller ^0.7.1
  • @aws/dynamodb-batch-iterator ^0.7.1
  • @aws/dynamodb-data-marshaller ^0.7.3
  • @aws/dynamodb-expressions ^0.7.3
  • @aws/dynamodb-query-iterator ^0.7.1
  • tslib ^1.9
packages/dynamodb-data-mapper-annotations/package.json npm
  • @types/jest ^24 development
  • @types/node ^8.0.4 development
  • @types/uuid ^3.0.0 development
  • aws-sdk ^2.7.0 development
  • jest ^24 development
  • typedoc ^0.14.0 development
  • typescript ^3.4 development
  • @aws/dynamodb-auto-marshaller ^0.7.1
  • @aws/dynamodb-data-mapper ^0.7.3
  • @aws/dynamodb-data-marshaller ^0.7.3
  • reflect-metadata ^0.1.10
  • tslib ^1.9
  • uuid ^3.0.0
packages/dynamodb-data-marshaller/package.json npm
  • @types/jest ^24 development
  • @types/node ^8.0.4 development
  • aws-sdk ^2.7.0 development
  • jest ^24 development
  • typedoc ^0.14.0 development
  • typescript ^3.4 development
  • @aws/dynamodb-auto-marshaller ^0.7.1
  • @aws/dynamodb-expressions ^0.7.3
  • tslib ^1.9
  • utf8-bytes ^0.0.1
packages/dynamodb-expressions/package.json npm
  • @types/jest ^24 development
  • @types/node ^8.0.4 development
  • aws-sdk ^2.7.0 development
  • jest ^24 development
  • typedoc ^0.14.0 development
  • typescript ^3.4 development
  • @aws/dynamodb-auto-marshaller ^0.7.1
  • tslib ^1.9
packages/dynamodb-query-iterator/package.json npm
  • @types/jest ^24 development
  • @types/node ^8.0.4 development
  • aws-sdk ^2.7.0 development
  • jest ^24 development
  • typedoc ^0.14.0 development
  • typescript ^3.4 development
  • tslib ^1.9