9.0.7 • Published 7 months ago

single-table-dynamo v9.0.7

Weekly downloads
52
License
MIT
Repository
-
Last release
7 months ago

single-table-dynamo

A simple strongly typed dynamodb client that stores all items in a single table

Getting started

yarn add single-table-dynamo zod

Example

import { DynamoDBDocumentClient as DocumentClient } from "@aws-sdk/lib-dynamodb";
import { z } from "zod";
import { Repository, InferObjectType, InferIdType } from "single-table-dynamo";

const repo = new Repository({
  // a unique type name to distinguish this entity type from other types
  typeName: "Note",

  // create a schema for the entity
  schema: z.object({
    id: z.string().default(() => uuid()),
    owner: z.string(),
    text: z.string().min(0).max(1000).default(""),
  }),

  // primary index fields are required to get this object
  primaryIndex: {
    fields: ["id"],
  },

  // can be used query by other ids
  secondaryIndexes: {
    byOwner: {
      fields: ["owner"],
      indexName: "gsi1",
    },
  },

  tableConfig: TableConfig,

  documentClient: new DocumentClient(),
});

// write
const note = await repo.put({ owner: "harold" });
// { id: "123", owner: "harold", text: "" }

// read
const note = await repo.get({ id: "123" });
// { id: "123", owner: "harold", text: "" }

// update
const note = await repo.mutate({ id: "123", text: "this is my note" });
// { id: "123", owner: "harold", text: "this is my note" }

// query
const { Items } = await repo.query("byOwner").where({ owner: "harold" }).exec();
// [{ id: "123", owner: "harold", text: "this is my note" }]

// delete
await repo.delete({ id: "123" });

// infer object type from repo
type NoteObject = InferObjectType<typeof repo>;
// { id: string, owner: string, text: string }

type NoteId = InferIdType<typeof repo>;
// {id: string}

var TableConfig = {
  tableName: "GenericTable",
  primaryIndex: {
    pk: "pk1",
    sk: "sk0",
  },
  secondaryIndexes: [
    {
      indexName: "gsi1",
      pk: "pk1",
      sk: "sk1",
    },
    {
      indexName: "gsi2",
      pk: "pk2",
      sk: "sk2",
    },
  ],
};
9.0.7

7 months ago

9.0.6

7 months ago

9.0.5

7 months ago

9.0.4

8 months ago

9.0.3

9 months ago

9.0.2

9 months ago

9.0.1

9 months ago

8.4.3

11 months ago

8.4.2

12 months ago

8.3.6

1 year ago

8.3.5

1 year ago

8.3.8

1 year ago

8.3.7

1 year ago

8.3.4

1 year ago

8.3.3

1 year ago

8.3.9

1 year ago

8.3.10

12 months ago

8.3.11

12 months ago

8.3.12

12 months ago

8.3.13

12 months ago

8.3.14

12 months ago

8.3.15

12 months ago

8.3.16

12 months ago

8.2.1

1 year ago

8.4.1

12 months ago

8.4.0

12 months ago

8.1.13

2 years ago

8.1.12

2 years ago

8.1.15

2 years ago

8.1.14

2 years ago

8.1.17

2 years ago

8.1.16

2 years ago

8.1.19

2 years ago

8.1.18

2 years ago

8.1.8

2 years ago

8.1.9

2 years ago

8.1.6

2 years ago

8.1.0

2 years ago

8.1.2

2 years ago

8.1.1

2 years ago

8.1.3

2 years ago

8.0.1

2 years ago

8.0.2

2 years ago

7.1.3

2 years ago

7.1.2

2 years ago

7.1.1

2 years ago

7.1.0

2 years ago

7.1.4

2 years ago

8.0.0

2 years ago

7.0.14

2 years ago

7.0.15

2 years ago

7.0.12

3 years ago

7.0.10

3 years ago

7.0.11

3 years ago

7.0.9

3 years ago

7.0.8

3 years ago

7.0.7

3 years ago

7.0.6

3 years ago

7.0.5

3 years ago

7.0.4

3 years ago

7.0.3

3 years ago

7.0.0

3 years ago

7.0.2

3 years ago

7.0.1

3 years ago

6.3.4

3 years ago

6.3.3

3 years ago

6.3.2

3 years ago

6.3.1

3 years ago

6.3.0

3 years ago

6.2.19

3 years ago

6.2.18

3 years ago

6.2.17

3 years ago

6.2.16

3 years ago

6.2.15

3 years ago

6.2.14

3 years ago

6.2.13

3 years ago

6.2.10

3 years ago

6.2.11

3 years ago

6.2.12

3 years ago

6.2.7

3 years ago

6.2.9

3 years ago

6.2.8

3 years ago

6.2.6

3 years ago

6.2.5

3 years ago

6.1.5

3 years ago

6.1.4

3 years ago

6.1.3

3 years ago

6.1.2

3 years ago

6.1.1

3 years ago

5.1.0

3 years ago

6.1.0

3 years ago

4.1.0

4 years ago

4.0.2

4 years ago

4.0.1

4 years ago

4.0.0

4 years ago

2.0.6

4 years ago

2.0.5

4 years ago

2.0.3

4 years ago

2.0.4

4 years ago

2.0.2

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.2

4 years ago

1.0.3

4 years ago

1.0.1

4 years ago