dynamodb-reactive 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,23 @@
1
1
  import { z } from 'zod';
2
2
 
3
3
  // ../core/src/table.ts
4
+ function getSchemaFields(schema) {
5
+ const fields = /* @__PURE__ */ new Set();
6
+ if ("options" in schema && Array.isArray(schema.options)) {
7
+ for (const option of schema.options) {
8
+ if ("shape" in option && typeof option.shape === "object") {
9
+ for (const key of Object.keys(option.shape)) {
10
+ fields.add(key);
11
+ }
12
+ }
13
+ }
14
+ } else if ("shape" in schema && typeof schema.shape === "object") {
15
+ for (const key of Object.keys(schema.shape)) {
16
+ fields.add(key);
17
+ }
18
+ }
19
+ return fields;
20
+ }
4
21
  var DynamoTable = class {
5
22
  tableName;
6
23
  schema;
@@ -17,9 +34,9 @@ var DynamoTable = class {
17
34
  this.field = this.createFieldRefs();
18
35
  }
19
36
  createFieldRefs() {
20
- const shape = this.schema.shape;
37
+ const fields = getSchemaFields(this.schema);
21
38
  const refs = {};
22
- for (const key of Object.keys(shape)) {
39
+ for (const key of fields) {
23
40
  refs[key] = {
24
41
  fieldName: key,
25
42
  _type: void 0
@@ -58,13 +75,15 @@ var DynamoTable = class {
58
75
  * Get the list of field names in the schema
59
76
  */
60
77
  getFieldNames() {
61
- return Object.keys(this.schema.shape);
78
+ return Array.from(
79
+ getSchemaFields(this.schema)
80
+ );
62
81
  }
63
82
  /**
64
83
  * Check if a field exists in the schema
65
84
  */
66
85
  hasField(fieldName) {
67
- return fieldName in this.schema.shape;
86
+ return getSchemaFields(this.schema).has(fieldName);
68
87
  }
69
88
  };
70
89
  function defineSchema(config) {
@@ -127,5 +146,5 @@ var SystemTableNames = {
127
146
  };
128
147
 
129
148
  export { DynamoTable, SystemSchemas, SystemTableNames, defineSchema };
130
- //# sourceMappingURL=chunk-HZ6JHAJJ.js.map
131
- //# sourceMappingURL=chunk-HZ6JHAJJ.js.map
149
+ //# sourceMappingURL=chunk-L4NOAOXX.js.map
150
+ //# sourceMappingURL=chunk-L4NOAOXX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../core/src/table.ts","../../core/src/schema.ts"],"names":[],"mappings":"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","file":"chunk-L4NOAOXX.js","sourcesContent":["import type { z } from 'zod';\n\nimport type {\n DynamoTableConfig,\n FieldRef,\n IndexDefinition,\n SupportedSchema,\n} from './types.js';\n\n/**\n * Extract all field names from a schema (handles both ZodObject and ZodDiscriminatedUnion)\n */\nfunction getSchemaFields(schema: SupportedSchema): Set<string> {\n const fields = new Set<string>();\n\n // Check if it's a discriminated union by looking for 'options' property\n if ('options' in schema && Array.isArray(schema.options)) {\n // It's a discriminated union - collect fields from all options\n for (const option of schema.options) {\n if ('shape' in option && typeof option.shape === 'object') {\n for (const key of Object.keys(option.shape)) {\n fields.add(key);\n }\n }\n }\n } else if ('shape' in schema && typeof schema.shape === 'object') {\n // It's a regular ZodObject\n for (const key of Object.keys(schema.shape)) {\n fields.add(key);\n }\n }\n\n return fields;\n}\n\n/**\n * Creates field references for type-safe query building\n */\ntype FieldRefs<TSchema extends SupportedSchema> = {\n [K in keyof z.infer<TSchema>]: FieldRef<K & string, z.infer<TSchema>[K]>;\n};\n\n/**\n * DynamoTable - Defines a DynamoDB table with type-safe schema\n *\n * Supports both ZodObject and ZodDiscriminatedUnion schemas for single-table design patterns.\n *\n * @example\n * ```ts\n * // Simple schema\n * const TodoTable = new DynamoTable({\n * tableName: 'prod-todo-table',\n * schema: z.object({\n * PK: z.string(),\n * SK: z.string(),\n * text: z.string(),\n * isDone: z.boolean(),\n * }),\n * pk: 'PK',\n * sk: 'SK',\n * });\n *\n * // Discriminated union for single-table design\n * const MultiEntityTable = new DynamoTable({\n * tableName: 'prod-entities',\n * schema: z.discriminatedUnion('entityType', [\n * z.object({ PK: z.string(), SK: z.string(), entityType: z.literal('USER'), name: z.string() }),\n * z.object({ PK: z.string(), SK: z.string(), entityType: z.literal('ITEM'), title: z.string() }),\n * ]),\n * pk: 'PK',\n * sk: 'SK',\n * });\n * ```\n */\nexport class DynamoTable<\n TSchema extends SupportedSchema,\n TPk extends keyof z.infer<TSchema>,\n TSk extends keyof z.infer<TSchema> | undefined = undefined,\n TIndexes extends Record<string, IndexDefinition> = Record<\n string,\n IndexDefinition\n >,\n> {\n public readonly tableName: string;\n public readonly schema: TSchema;\n public readonly pk: TPk;\n public readonly sk: TSk;\n public readonly indexes: TIndexes;\n public readonly field: FieldRefs<TSchema>;\n\n constructor(config: DynamoTableConfig<TSchema, TPk, TSk, TIndexes>) {\n this.tableName = config.tableName;\n this.schema = config.schema;\n this.pk = config.pk;\n this.sk = config.sk as TSk;\n this.indexes = (config.indexes ?? {}) as TIndexes;\n\n // Create field references for query building\n this.field = this.createFieldRefs();\n }\n\n private createFieldRefs(): FieldRefs<TSchema> {\n const fields = getSchemaFields(this.schema);\n const refs: Record<string, FieldRef<string, unknown>> = {};\n\n for (const key of fields) {\n refs[key] = {\n fieldName: key,\n _type: undefined as unknown,\n };\n }\n\n return refs as FieldRefs<TSchema>;\n }\n\n /**\n * Validate an item against the schema\n */\n validate(item: unknown): z.infer<TSchema> {\n return this.schema.parse(item);\n }\n\n /**\n * Safely validate an item, returning a result object\n */\n safeParse(item: unknown): z.SafeParseReturnType<unknown, z.infer<TSchema>> {\n return this.schema.safeParse(item);\n }\n\n /**\n * Get the partition key value from an item\n */\n getPk(item: z.infer<TSchema>): z.infer<TSchema>[TPk] {\n return item[this.pk];\n }\n\n /**\n * Get the sort key value from an item (if defined)\n */\n getSk(\n item: z.infer<TSchema>,\n ): TSk extends keyof z.infer<TSchema> ? z.infer<TSchema>[TSk] : undefined {\n if (this.sk === undefined) {\n return undefined as TSk extends keyof z.infer<TSchema>\n ? z.infer<TSchema>[TSk]\n : undefined;\n }\n return item[\n this.sk as keyof z.infer<TSchema>\n ] as TSk extends keyof z.infer<TSchema> ? z.infer<TSchema>[TSk] : undefined;\n }\n\n /**\n * Get the list of field names in the schema\n */\n getFieldNames(): (keyof z.infer<TSchema>)[] {\n return Array.from(\n getSchemaFields(this.schema),\n ) as (keyof z.infer<TSchema>)[];\n }\n\n /**\n * Check if a field exists in the schema\n */\n hasField(fieldName: string): fieldName is keyof z.infer<TSchema> & string {\n return getSchemaFields(this.schema).has(fieldName);\n }\n}\n\n/**\n * Helper type to extract the shape from a Zod schema\n */\nexport type InferSchema<T> =\n T extends DynamoTable<infer TSchema, any, any, any>\n ? z.infer<TSchema>\n : never;\n\n/**\n * Helper type to extract field names from a table\n */\nexport type TableFields<T> =\n T extends DynamoTable<infer TSchema, any, any, any>\n ? keyof z.infer<TSchema>\n : never;\n\n/**\n * Helper type to get the pk field name\n */\nexport type TablePk<T> =\n T extends DynamoTable<any, infer TPk, any, any> ? TPk : never;\n\n/**\n * Helper type to get the sk field name\n */\nexport type TableSk<T> =\n T extends DynamoTable<any, any, infer TSk, any> ? TSk : never;\n\n/**\n * Helper type to get indexes\n */\nexport type TableIndexes<T> =\n T extends DynamoTable<any, any, any, infer TIndexes> ? TIndexes : never;\n","import { z } from 'zod';\n\nimport { DynamoTable } from './table.js';\nimport type { IndexDefinition, SupportedSchema } from './types.js';\n\n/**\n * Helper function to define a schema with type inference\n * This provides a cleaner API for defining tables\n *\n * Supports both ZodObject and ZodDiscriminatedUnion schemas.\n *\n * @example\n * ```ts\n * // Simple schema\n * const TodoTable = defineSchema({\n * tableName: 'prod-todo-table',\n * schema: z.object({\n * id: z.string(),\n * taskListId: z.string(),\n * text: z.string(),\n * isDone: z.boolean(),\n * }),\n * pk: 'id',\n * indexes: {\n * byTaskId: { name: 'gsi_by_task_id', pk: 'taskListId' }\n * }\n * });\n *\n * // Discriminated union for single-table design\n * const MultiEntityTable = defineSchema({\n * tableName: 'prod-entities',\n * schema: z.discriminatedUnion('entityType', [\n * z.object({ PK: z.string(), SK: z.string(), entityType: z.literal('USER'), name: z.string() }),\n * z.object({ PK: z.string(), SK: z.string(), entityType: z.literal('ITEM'), title: z.string() }),\n * ]),\n * pk: 'PK',\n * sk: 'SK',\n * });\n * ```\n */\nexport function defineSchema<\n TSchema extends SupportedSchema,\n TPk extends keyof z.infer<TSchema> & string,\n TSk extends (keyof z.infer<TSchema> & string) | undefined = undefined,\n TIndexes extends Record<string, IndexDefinition> = Record<\n string,\n IndexDefinition\n >,\n>(config: {\n tableName: string;\n schema: TSchema;\n pk: TPk;\n sk?: TSk;\n indexes?: TIndexes;\n}): DynamoTable<TSchema, TPk, TSk, TIndexes> {\n return new DynamoTable(config);\n}\n\n/**\n * System table schemas for the reactive engine\n */\nexport const SystemSchemas = {\n /**\n * ReactiveConnections - Tracks active WebSocket connections\n */\n connections: z.object({\n connectionId: z.string(),\n context: z.record(z.unknown()).optional(),\n connectedAt: z.number(),\n ttl: z.number(),\n }),\n\n /**\n * ReactiveDependencies - The inverted index for O(1) lookups\n */\n dependencies: z.object({\n pk: z.string(), // Format: \"TableName#FieldName#FieldValue\"\n sk: z.string(), // ConnectionID#SubscriptionID\n connectionId: z.string(),\n subscriptionId: z.string(),\n tableName: z.string(),\n fieldName: z.string(),\n fieldValue: z.string(),\n ttl: z.number(),\n }),\n\n /**\n * ReactiveConnectionQueries - Stores subscription state for diffing\n */\n queries: z.object({\n pk: z.string(), // ConnectionID\n sk: z.string(), // SubscriptionID\n connectionId: z.string(),\n subscriptionId: z.string(),\n queryMetadata: z.object({\n tableName: z.string(),\n indexName: z.string().optional(),\n filterConditions: z.array(z.unknown()),\n sortField: z.string().optional(),\n sortOrder: z.enum(['asc', 'desc']).optional(),\n limit: z.number().optional(),\n }),\n lastResult: z.array(z.unknown()),\n dependencies: z.array(z.string()),\n createdAt: z.number(),\n updatedAt: z.number(),\n ttl: z.number(),\n }),\n};\n\n/**\n * System table names\n */\nexport const SystemTableNames = {\n connections: 'ReactiveConnections',\n dependencies: 'ReactiveDependencies',\n queries: 'ReactiveConnectionQueries',\n} as const;\n"]}
package/dist/core.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { SystemSchemas, SystemTableNames, defineSchema } from './index.js';
2
- export { D as DynamoTable, I as InferSchema, T as TableFields, a as TableIndexes, b as TablePk, c as TableSk } from './table-CfIWxbuJ.js';
3
- export { A as AnyDynamoTable, C as ConnectionEntry, b as DependencyEntry, D as DynamoTableConfig, F as FieldRef, a as FilterCondition, I as IndexDefinition, J as JsonPatch, c as QueryEntry, Q as QueryMetadata, S as SubscriptionMessage } from './types-DeshTSf5.js';
2
+ export { D as DynamoTable, I as InferSchema, T as TableFields, a as TableIndexes, b as TablePk, c as TableSk } from './table-DjeyVXYp.js';
3
+ export { A as AnyDynamoTable, C as ConnectionEntry, b as DependencyEntry, D as DynamoTableConfig, F as FieldRef, a as FilterCondition, I as IndexDefinition, c as InferSupportedSchema, J as JsonPatch, d as QueryEntry, Q as QueryMetadata, e as SubscriptionMessage, S as SupportedSchema } from './types-2EfCnE0c.js';
4
4
  import 'zod';
package/dist/core.js CHANGED
@@ -1,3 +1,3 @@
1
- export { DynamoTable, SystemSchemas, SystemTableNames, defineSchema } from './chunk-HZ6JHAJJ.js';
1
+ export { DynamoTable, SystemSchemas, SystemTableNames, defineSchema } from './chunk-L4NOAOXX.js';
2
2
  //# sourceMappingURL=core.js.map
3
3
  //# sourceMappingURL=core.js.map
package/dist/index.d.ts CHANGED
@@ -1,15 +1,18 @@
1
- import { D as DynamoTable } from './table-CfIWxbuJ.js';
2
- export { I as InferSchema, T as TableFields, a as TableIndexes, b as TablePk, c as TableSk } from './table-CfIWxbuJ.js';
3
- import { I as IndexDefinition } from './types-DeshTSf5.js';
4
- export { A as AnyDynamoTable, C as ConnectionEntry, b as DependencyEntry, D as DynamoTableConfig, F as FieldRef, a as FilterCondition, J as JsonPatch, c as QueryEntry, Q as QueryMetadata, S as SubscriptionMessage } from './types-DeshTSf5.js';
1
+ import { D as DynamoTable } from './table-DjeyVXYp.js';
2
+ export { I as InferSchema, T as TableFields, a as TableIndexes, b as TablePk, c as TableSk } from './table-DjeyVXYp.js';
3
+ import { S as SupportedSchema, I as IndexDefinition } from './types-2EfCnE0c.js';
4
+ export { A as AnyDynamoTable, C as ConnectionEntry, b as DependencyEntry, D as DynamoTableConfig, F as FieldRef, a as FilterCondition, c as InferSupportedSchema, J as JsonPatch, d as QueryEntry, Q as QueryMetadata, e as SubscriptionMessage } from './types-2EfCnE0c.js';
5
5
  import { z } from 'zod';
6
6
 
7
7
  /**
8
8
  * Helper function to define a schema with type inference
9
9
  * This provides a cleaner API for defining tables
10
10
  *
11
+ * Supports both ZodObject and ZodDiscriminatedUnion schemas.
12
+ *
11
13
  * @example
12
14
  * ```ts
15
+ * // Simple schema
13
16
  * const TodoTable = defineSchema({
14
17
  * tableName: 'prod-todo-table',
15
18
  * schema: z.object({
@@ -23,9 +26,20 @@ import { z } from 'zod';
23
26
  * byTaskId: { name: 'gsi_by_task_id', pk: 'taskListId' }
24
27
  * }
25
28
  * });
29
+ *
30
+ * // Discriminated union for single-table design
31
+ * const MultiEntityTable = defineSchema({
32
+ * tableName: 'prod-entities',
33
+ * schema: z.discriminatedUnion('entityType', [
34
+ * z.object({ PK: z.string(), SK: z.string(), entityType: z.literal('USER'), name: z.string() }),
35
+ * z.object({ PK: z.string(), SK: z.string(), entityType: z.literal('ITEM'), title: z.string() }),
36
+ * ]),
37
+ * pk: 'PK',
38
+ * sk: 'SK',
39
+ * });
26
40
  * ```
27
41
  */
28
- declare function defineSchema<TSchema extends z.ZodObject<z.ZodRawShape>, TPk extends keyof z.infer<TSchema> & string, TSk extends (keyof z.infer<TSchema> & string) | undefined = undefined, TIndexes extends Record<string, IndexDefinition> = Record<string, IndexDefinition>>(config: {
42
+ declare function defineSchema<TSchema extends SupportedSchema, TPk extends keyof z.infer<TSchema> & string, TSk extends (keyof z.infer<TSchema> & string) | undefined = undefined, TIndexes extends Record<string, IndexDefinition> = Record<string, IndexDefinition>>(config: {
29
43
  tableName: string;
30
44
  schema: TSchema;
31
45
  pk: TPk;
@@ -168,4 +182,4 @@ declare const SystemTableNames: {
168
182
  readonly queries: "ReactiveConnectionQueries";
169
183
  };
170
184
 
171
- export { DynamoTable, IndexDefinition, SystemSchemas, SystemTableNames, defineSchema };
185
+ export { DynamoTable, IndexDefinition, SupportedSchema, SystemSchemas, SystemTableNames, defineSchema };
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { DynamoTable, SystemSchemas, SystemTableNames, defineSchema } from './chunk-HZ6JHAJJ.js';
1
+ export { DynamoTable, SystemSchemas, SystemTableNames, defineSchema } from './chunk-L4NOAOXX.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
package/dist/infra.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { A as AnyDynamoTable } from './types-DeshTSf5.js';
1
+ import { A as AnyDynamoTable } from './types-2EfCnE0c.js';
2
2
  import * as cdk from 'aws-cdk-lib';
3
3
  import * as apigatewayv2 from 'aws-cdk-lib/aws-apigatewayv2';
4
4
  import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
package/dist/infra.js CHANGED
@@ -1,4 +1,4 @@
1
- import { SystemTableNames } from './chunk-HZ6JHAJJ.js';
1
+ import { SystemTableNames } from './chunk-L4NOAOXX.js';
2
2
  import * as fs from 'fs';
3
3
  import * as path from 'path';
4
4
  import * as cdk2 from 'aws-cdk-lib';
package/dist/server.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
- import { D as DynamoTable } from './table-CfIWxbuJ.js';
3
- import { A as AnyDynamoTable, F as FieldRef, a as FilterCondition, Q as QueryMetadata, J as JsonPatch } from './types-DeshTSf5.js';
2
+ import { D as DynamoTable } from './table-DjeyVXYp.js';
3
+ import { A as AnyDynamoTable, F as FieldRef, a as FilterCondition, Q as QueryMetadata, J as JsonPatch } from './types-2EfCnE0c.js';
4
4
  import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
5
5
  import { DynamoDBStreamEvent, APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
6
6
 
package/dist/server.js CHANGED
@@ -1,4 +1,4 @@
1
- import { SystemTableNames } from './chunk-HZ6JHAJJ.js';
1
+ import { SystemTableNames } from './chunk-L4NOAOXX.js';
2
2
  import { DynamoDBClient, ExecuteStatementCommand } from '@aws-sdk/client-dynamodb';
3
3
  import { UpdateCommand, DeleteCommand, PutCommand, GetCommand, DynamoDBDocumentClient, QueryCommand } from '@aws-sdk/lib-dynamodb';
4
4
  import { unmarshall } from '@aws-sdk/util-dynamodb';
@@ -1,33 +1,45 @@
1
1
  import { z } from 'zod';
2
- import { I as IndexDefinition, F as FieldRef, D as DynamoTableConfig } from './types-DeshTSf5.js';
2
+ import { S as SupportedSchema, I as IndexDefinition, F as FieldRef, D as DynamoTableConfig } from './types-2EfCnE0c.js';
3
3
 
4
4
  /**
5
5
  * Creates field references for type-safe query building
6
6
  */
7
- type FieldRefs<TSchema extends z.ZodObject<z.ZodRawShape>> = {
7
+ type FieldRefs<TSchema extends SupportedSchema> = {
8
8
  [K in keyof z.infer<TSchema>]: FieldRef<K & string, z.infer<TSchema>[K]>;
9
9
  };
10
10
  /**
11
11
  * DynamoTable - Defines a DynamoDB table with type-safe schema
12
12
  *
13
+ * Supports both ZodObject and ZodDiscriminatedUnion schemas for single-table design patterns.
14
+ *
13
15
  * @example
14
16
  * ```ts
17
+ * // Simple schema
15
18
  * const TodoTable = new DynamoTable({
16
19
  * tableName: 'prod-todo-table',
17
20
  * schema: z.object({
18
- * id: z.string(),
19
- * taskListId: z.string(),
21
+ * PK: z.string(),
22
+ * SK: z.string(),
20
23
  * text: z.string(),
21
24
  * isDone: z.boolean(),
22
25
  * }),
23
- * pk: 'id',
24
- * indexes: {
25
- * byTaskId: { name: 'gsi_by_task_id', pk: 'taskListId' }
26
- * }
26
+ * pk: 'PK',
27
+ * sk: 'SK',
28
+ * });
29
+ *
30
+ * // Discriminated union for single-table design
31
+ * const MultiEntityTable = new DynamoTable({
32
+ * tableName: 'prod-entities',
33
+ * schema: z.discriminatedUnion('entityType', [
34
+ * z.object({ PK: z.string(), SK: z.string(), entityType: z.literal('USER'), name: z.string() }),
35
+ * z.object({ PK: z.string(), SK: z.string(), entityType: z.literal('ITEM'), title: z.string() }),
36
+ * ]),
37
+ * pk: 'PK',
38
+ * sk: 'SK',
27
39
  * });
28
40
  * ```
29
41
  */
30
- declare class DynamoTable<TSchema extends z.ZodObject<z.ZodRawShape>, TPk extends keyof z.infer<TSchema>, TSk extends keyof z.infer<TSchema> | undefined = undefined, TIndexes extends Record<string, IndexDefinition> = Record<string, IndexDefinition>> {
42
+ declare class DynamoTable<TSchema extends SupportedSchema, TPk extends keyof z.infer<TSchema>, TSk extends keyof z.infer<TSchema> | undefined = undefined, TIndexes extends Record<string, IndexDefinition> = Record<string, IndexDefinition>> {
31
43
  readonly tableName: string;
32
44
  readonly schema: TSchema;
33
45
  readonly pk: TPk;
@@ -8,6 +8,15 @@ interface IndexDefinition {
8
8
  pk: string;
9
9
  sk?: string;
10
10
  }
11
+ /**
12
+ * Supported schema types for DynamoTable
13
+ * Accepts both ZodObject and ZodDiscriminatedUnion
14
+ */
15
+ type SupportedSchema = z.ZodObject<z.ZodRawShape> | z.ZodDiscriminatedUnion<string, z.ZodDiscriminatedUnionOption<string>[]>;
16
+ /**
17
+ * Extract the inferred type from a supported schema
18
+ */
19
+ type InferSupportedSchema<T extends SupportedSchema> = z.infer<T>;
11
20
  /**
12
21
  * Base interface for any DynamoTable - used for generic constraints
13
22
  * Defines the minimal shape that all DynamoTable instances satisfy
@@ -31,8 +40,9 @@ interface AnyDynamoTable {
31
40
  }
32
41
  /**
33
42
  * Configuration for DynamoTable
43
+ * Supports both ZodObject and ZodDiscriminatedUnion schemas
34
44
  */
35
- interface DynamoTableConfig<TSchema extends z.ZodObject<z.ZodRawShape>, TPk extends keyof z.infer<TSchema>, TSk extends keyof z.infer<TSchema> | undefined = undefined, TIndexes extends Record<string, IndexDefinition> = Record<string, IndexDefinition>> {
45
+ interface DynamoTableConfig<TSchema extends SupportedSchema, TPk extends keyof z.infer<TSchema>, TSk extends keyof z.infer<TSchema> | undefined = undefined, TIndexes extends Record<string, IndexDefinition> = Record<string, IndexDefinition>> {
36
46
  tableName: string;
37
47
  schema: TSchema;
38
48
  pk: TPk;
@@ -138,4 +148,4 @@ interface QueryEntry {
138
148
  ttl: number;
139
149
  }
140
150
 
141
- export type { AnyDynamoTable as A, ConnectionEntry as C, DynamoTableConfig as D, FieldRef as F, IndexDefinition as I, JsonPatch as J, QueryMetadata as Q, SubscriptionMessage as S, FilterCondition as a, DependencyEntry as b, QueryEntry as c };
151
+ export type { AnyDynamoTable as A, ConnectionEntry as C, DynamoTableConfig as D, FieldRef as F, IndexDefinition as I, JsonPatch as J, QueryMetadata as Q, SupportedSchema as S, FilterCondition as a, DependencyEntry as b, InferSupportedSchema as c, QueryEntry as d, SubscriptionMessage as e };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dynamodb-reactive",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "type": "module",
5
5
  "description": "A Serverless, Reactive tRPC replacement for AWS DynamoDB",
6
6
  "keywords": [
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../core/src/table.ts","../../core/src/schema.ts"],"names":[],"mappings":"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","file":"chunk-HZ6JHAJJ.js","sourcesContent":["import type { z } from 'zod';\n\nimport type { DynamoTableConfig, FieldRef, IndexDefinition } from './types.js';\n\n/**\n * Creates field references for type-safe query building\n */\ntype FieldRefs<TSchema extends z.ZodObject<z.ZodRawShape>> = {\n [K in keyof z.infer<TSchema>]: FieldRef<K & string, z.infer<TSchema>[K]>;\n};\n\n/**\n * DynamoTable - Defines a DynamoDB table with type-safe schema\n *\n * @example\n * ```ts\n * const TodoTable = new DynamoTable({\n * tableName: 'prod-todo-table',\n * schema: z.object({\n * id: z.string(),\n * taskListId: z.string(),\n * text: z.string(),\n * isDone: z.boolean(),\n * }),\n * pk: 'id',\n * indexes: {\n * byTaskId: { name: 'gsi_by_task_id', pk: 'taskListId' }\n * }\n * });\n * ```\n */\nexport class DynamoTable<\n TSchema extends z.ZodObject<z.ZodRawShape>,\n TPk extends keyof z.infer<TSchema>,\n TSk extends keyof z.infer<TSchema> | undefined = undefined,\n TIndexes extends Record<string, IndexDefinition> = Record<\n string,\n IndexDefinition\n >,\n> {\n public readonly tableName: string;\n public readonly schema: TSchema;\n public readonly pk: TPk;\n public readonly sk: TSk;\n public readonly indexes: TIndexes;\n public readonly field: FieldRefs<TSchema>;\n\n constructor(config: DynamoTableConfig<TSchema, TPk, TSk, TIndexes>) {\n this.tableName = config.tableName;\n this.schema = config.schema;\n this.pk = config.pk;\n this.sk = config.sk as TSk;\n this.indexes = (config.indexes ?? {}) as TIndexes;\n\n // Create field references for query building\n this.field = this.createFieldRefs();\n }\n\n private createFieldRefs(): FieldRefs<TSchema> {\n const shape = this.schema.shape;\n const refs: Record<string, FieldRef<string, unknown>> = {};\n\n for (const key of Object.keys(shape)) {\n refs[key] = {\n fieldName: key,\n _type: undefined as unknown,\n };\n }\n\n return refs as FieldRefs<TSchema>;\n }\n\n /**\n * Validate an item against the schema\n */\n validate(item: unknown): z.infer<TSchema> {\n return this.schema.parse(item);\n }\n\n /**\n * Safely validate an item, returning a result object\n */\n safeParse(item: unknown): z.SafeParseReturnType<unknown, z.infer<TSchema>> {\n return this.schema.safeParse(item);\n }\n\n /**\n * Get the partition key value from an item\n */\n getPk(item: z.infer<TSchema>): z.infer<TSchema>[TPk] {\n return item[this.pk];\n }\n\n /**\n * Get the sort key value from an item (if defined)\n */\n getSk(\n item: z.infer<TSchema>,\n ): TSk extends keyof z.infer<TSchema> ? z.infer<TSchema>[TSk] : undefined {\n if (this.sk === undefined) {\n return undefined as TSk extends keyof z.infer<TSchema>\n ? z.infer<TSchema>[TSk]\n : undefined;\n }\n return item[\n this.sk as keyof z.infer<TSchema>\n ] as TSk extends keyof z.infer<TSchema> ? z.infer<TSchema>[TSk] : undefined;\n }\n\n /**\n * Get the list of field names in the schema\n */\n getFieldNames(): (keyof z.infer<TSchema>)[] {\n return Object.keys(this.schema.shape) as (keyof z.infer<TSchema>)[];\n }\n\n /**\n * Check if a field exists in the schema\n */\n hasField(fieldName: string): fieldName is keyof z.infer<TSchema> & string {\n return fieldName in this.schema.shape;\n }\n}\n\n/**\n * Helper type to extract the shape from a Zod schema\n */\nexport type InferSchema<T> =\n T extends DynamoTable<infer TSchema, any, any, any>\n ? z.infer<TSchema>\n : never;\n\n/**\n * Helper type to extract field names from a table\n */\nexport type TableFields<T> =\n T extends DynamoTable<infer TSchema, any, any, any>\n ? keyof z.infer<TSchema>\n : never;\n\n/**\n * Helper type to get the pk field name\n */\nexport type TablePk<T> =\n T extends DynamoTable<any, infer TPk, any, any> ? TPk : never;\n\n/**\n * Helper type to get the sk field name\n */\nexport type TableSk<T> =\n T extends DynamoTable<any, any, infer TSk, any> ? TSk : never;\n\n/**\n * Helper type to get indexes\n */\nexport type TableIndexes<T> =\n T extends DynamoTable<any, any, any, infer TIndexes> ? TIndexes : never;\n","import { z } from 'zod';\n\nimport { DynamoTable } from './table.js';\nimport type { IndexDefinition } from './types.js';\n\n/**\n * Helper function to define a schema with type inference\n * This provides a cleaner API for defining tables\n *\n * @example\n * ```ts\n * const TodoTable = defineSchema({\n * tableName: 'prod-todo-table',\n * schema: z.object({\n * id: z.string(),\n * taskListId: z.string(),\n * text: z.string(),\n * isDone: z.boolean(),\n * }),\n * pk: 'id',\n * indexes: {\n * byTaskId: { name: 'gsi_by_task_id', pk: 'taskListId' }\n * }\n * });\n * ```\n */\nexport function defineSchema<\n TSchema extends z.ZodObject<z.ZodRawShape>,\n TPk extends keyof z.infer<TSchema> & string,\n TSk extends (keyof z.infer<TSchema> & string) | undefined = undefined,\n TIndexes extends Record<string, IndexDefinition> = Record<\n string,\n IndexDefinition\n >,\n>(config: {\n tableName: string;\n schema: TSchema;\n pk: TPk;\n sk?: TSk;\n indexes?: TIndexes;\n}): DynamoTable<TSchema, TPk, TSk, TIndexes> {\n return new DynamoTable(config);\n}\n\n/**\n * System table schemas for the reactive engine\n */\nexport const SystemSchemas = {\n /**\n * ReactiveConnections - Tracks active WebSocket connections\n */\n connections: z.object({\n connectionId: z.string(),\n context: z.record(z.unknown()).optional(),\n connectedAt: z.number(),\n ttl: z.number(),\n }),\n\n /**\n * ReactiveDependencies - The inverted index for O(1) lookups\n */\n dependencies: z.object({\n pk: z.string(), // Format: \"TableName#FieldName#FieldValue\"\n sk: z.string(), // ConnectionID#SubscriptionID\n connectionId: z.string(),\n subscriptionId: z.string(),\n tableName: z.string(),\n fieldName: z.string(),\n fieldValue: z.string(),\n ttl: z.number(),\n }),\n\n /**\n * ReactiveConnectionQueries - Stores subscription state for diffing\n */\n queries: z.object({\n pk: z.string(), // ConnectionID\n sk: z.string(), // SubscriptionID\n connectionId: z.string(),\n subscriptionId: z.string(),\n queryMetadata: z.object({\n tableName: z.string(),\n indexName: z.string().optional(),\n filterConditions: z.array(z.unknown()),\n sortField: z.string().optional(),\n sortOrder: z.enum(['asc', 'desc']).optional(),\n limit: z.number().optional(),\n }),\n lastResult: z.array(z.unknown()),\n dependencies: z.array(z.string()),\n createdAt: z.number(),\n updatedAt: z.number(),\n ttl: z.number(),\n }),\n};\n\n/**\n * System table names\n */\nexport const SystemTableNames = {\n connections: 'ReactiveConnections',\n dependencies: 'ReactiveDependencies',\n queries: 'ReactiveConnectionQueries',\n} as const;\n"]}