qstd 0.2.27 → 0.3.0
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.
- package/README.md +52 -0
- package/dist/client/index.cjs +22 -5
- package/dist/client/index.js +22 -5
- package/dist/server/aws/ddb/domain.d.ts +257 -0
- package/dist/server/aws/ddb/domain.d.ts.map +1 -0
- package/dist/server/aws/ddb/fns.d.ts +25 -0
- package/dist/server/aws/ddb/fns.d.ts.map +1 -0
- package/dist/server/aws/ddb/index.d.ts +4 -0
- package/dist/server/aws/ddb/index.d.ts.map +1 -0
- package/dist/server/aws/ddb/literals.d.ts +30 -0
- package/dist/server/aws/ddb/literals.d.ts.map +1 -0
- package/dist/server/aws/ddb/types.d.ts +216 -0
- package/dist/server/aws/ddb/types.d.ts.map +1 -0
- package/dist/server/index.cjs +623 -7
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +623 -8
- package/dist/shared/log.d.ts +0 -10
- package/dist/shared/log.d.ts.map +1 -1
- package/dist/shared/time.d.ts +36 -0
- package/dist/shared/time.d.ts.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import type { NativeAttributeValue } from "@aws-sdk/lib-dynamodb";
|
|
2
|
+
import type { DynamoDBClient, DynamoDBClientConfig } from "@aws-sdk/client-dynamodb";
|
|
3
|
+
export type TableClient = DynamoDBClient;
|
|
4
|
+
export type Credentials = DynamoDBClientConfig["credentials"];
|
|
5
|
+
export type Key = {
|
|
6
|
+
pk: Pk;
|
|
7
|
+
sk: Sk;
|
|
8
|
+
};
|
|
9
|
+
export type StrWithAutocomplete<T> = T | (string & Record<never, never>);
|
|
10
|
+
export type Pk = StrWithAutocomplete<"pk" | "gsi-pk" | "gsi2-pk" | "gsi-2-pk">;
|
|
11
|
+
export type Sk = StrWithAutocomplete<"sk" | "gsi-sk" | "gsi2-sk" | "gsi-2-sk">;
|
|
12
|
+
export type RawResponse<T> = {
|
|
13
|
+
lastEvaluatedKey?: Record<string, unknown> | undefined;
|
|
14
|
+
scannedCount: number;
|
|
15
|
+
count: number;
|
|
16
|
+
items: T[];
|
|
17
|
+
};
|
|
18
|
+
type RecursiveFn<T> = (page: RawResponse<T>, pageCount: number, totalItems: number) => boolean;
|
|
19
|
+
export type SkCond = {
|
|
20
|
+
key?: Sk;
|
|
21
|
+
op: "=" | ">=" | ">" | "<=" | "<";
|
|
22
|
+
value: string;
|
|
23
|
+
} | {
|
|
24
|
+
key?: Sk;
|
|
25
|
+
op: "begins_with";
|
|
26
|
+
value: string;
|
|
27
|
+
} | {
|
|
28
|
+
key?: Sk;
|
|
29
|
+
op: "between";
|
|
30
|
+
value: [string, string];
|
|
31
|
+
} | {
|
|
32
|
+
key?: Sk;
|
|
33
|
+
value: string;
|
|
34
|
+
valueBeginsWith?: never;
|
|
35
|
+
} | {
|
|
36
|
+
key?: Sk;
|
|
37
|
+
valueBeginsWith: string;
|
|
38
|
+
value?: never;
|
|
39
|
+
};
|
|
40
|
+
type StrKey<T> = Extract<keyof T, string>;
|
|
41
|
+
type Comparable = string | number | bigint;
|
|
42
|
+
type AllowsOrder<V> = V extends Comparable ? true : false;
|
|
43
|
+
type AllowsBeginsWith<V> = V extends string ? true : false;
|
|
44
|
+
type AllowsContains<V> = V extends string ? true : V extends ReadonlyArray<unknown> | Array<unknown> | ReadonlySet<unknown> | Set<unknown> ? true : false;
|
|
45
|
+
type AllowsBetween<V> = V extends Comparable ? true : false;
|
|
46
|
+
type AllowsIn<V> = V extends Comparable ? true : false;
|
|
47
|
+
type EqNeClause<T, K extends StrKey<T>> = {
|
|
48
|
+
key: K;
|
|
49
|
+
op: "=" | "<>";
|
|
50
|
+
value: T[K];
|
|
51
|
+
};
|
|
52
|
+
type OrdClause<T, K extends StrKey<T>> = AllowsOrder<T[K]> extends true ? {
|
|
53
|
+
key: K;
|
|
54
|
+
op: ">" | ">=" | "<" | "<=";
|
|
55
|
+
value: Extract<T[K], Comparable>;
|
|
56
|
+
} : never;
|
|
57
|
+
type BeginsWithClause<T, K extends StrKey<T>> = AllowsBeginsWith<T[K]> extends true ? {
|
|
58
|
+
key: K;
|
|
59
|
+
op: "begins_with";
|
|
60
|
+
value: Extract<T[K], string>;
|
|
61
|
+
} : never;
|
|
62
|
+
type ContainsClause<T, K extends StrKey<T>> = AllowsContains<T[K]> extends true ? T[K] extends string ? {
|
|
63
|
+
key: K;
|
|
64
|
+
op: "contains";
|
|
65
|
+
value: string;
|
|
66
|
+
} : T[K] extends ReadonlyArray<infer U> | Array<infer U> | ReadonlySet<infer U> | Set<infer U> ? {
|
|
67
|
+
key: K;
|
|
68
|
+
op: "contains";
|
|
69
|
+
value: U;
|
|
70
|
+
} : never : never;
|
|
71
|
+
type BetweenClause<T, K extends StrKey<T>> = AllowsBetween<T[K]> extends true ? {
|
|
72
|
+
key: K;
|
|
73
|
+
op: "between";
|
|
74
|
+
value: readonly [Extract<T[K], Comparable>, Extract<T[K], Comparable>];
|
|
75
|
+
} : never;
|
|
76
|
+
type InClause<T, K extends StrKey<T>> = AllowsIn<T[K]> extends true ? {
|
|
77
|
+
key: K;
|
|
78
|
+
op: "in";
|
|
79
|
+
value: ReadonlyArray<Extract<T[K], Comparable>>;
|
|
80
|
+
} : never;
|
|
81
|
+
type ExistsClause<T, K extends StrKey<T>> = {
|
|
82
|
+
key: K;
|
|
83
|
+
op: "attribute_exists" | "attribute_not_exists";
|
|
84
|
+
};
|
|
85
|
+
type FilterClauseForKey<T, K extends StrKey<T>> = EqNeClause<T, K> | OrdClause<T, K> | BeginsWithClause<T, K> | ContainsClause<T, K> | BetweenClause<T, K> | InClause<T, K> | ExistsClause<T, K>;
|
|
86
|
+
/** One clause type that's keyed & value-typed from T */
|
|
87
|
+
export type FilterClause<T extends object> = {
|
|
88
|
+
[K in StrKey<T>]: FilterClauseForKey<T, K>;
|
|
89
|
+
}[StrKey<T>];
|
|
90
|
+
/** Shared props between Query and Scan operations */
|
|
91
|
+
type BaseFindProps<T extends object = Record<string, unknown>> = {
|
|
92
|
+
/** Table name override (optional, defaults to main table) */
|
|
93
|
+
tableName?: string;
|
|
94
|
+
/**
|
|
95
|
+
* Type-safe filter clauses for post-query/scan filtering (optional)
|
|
96
|
+
* Array of filter clauses, all combined with AND logic
|
|
97
|
+
*
|
|
98
|
+
* Examples:
|
|
99
|
+
* ```ts
|
|
100
|
+
* // Equality check
|
|
101
|
+
* filters: [{ key: 'status', op: '=', value: 'active' }]
|
|
102
|
+
*
|
|
103
|
+
* // Multiple filters (AND logic)
|
|
104
|
+
* filters: [
|
|
105
|
+
* { key: 'status', op: '=', value: 'active' },
|
|
106
|
+
* { key: 'age', op: '>=', value: 18 },
|
|
107
|
+
* { key: 'score', op: '>', value: 80 }
|
|
108
|
+
* ]
|
|
109
|
+
*
|
|
110
|
+
* // Existence checks
|
|
111
|
+
* filters: [
|
|
112
|
+
* { key: 'email', op: 'attribute_exists' },
|
|
113
|
+
* { key: 'deletedAt', op: 'attribute_not_exists' }
|
|
114
|
+
* ]
|
|
115
|
+
*
|
|
116
|
+
* // String operations
|
|
117
|
+
* filters: [
|
|
118
|
+
* { key: 'name', op: 'begins_with', value: 'John' },
|
|
119
|
+
* { key: 'description', op: 'contains', value: 'urgent' }
|
|
120
|
+
* ]
|
|
121
|
+
*
|
|
122
|
+
* // Range and list operations
|
|
123
|
+
* filters: [
|
|
124
|
+
* { key: 'age', op: 'between', value: [18, 65] },
|
|
125
|
+
* { key: 'status', op: 'in', value: ['active', 'pending', 'approved'] }
|
|
126
|
+
* ]
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
filters?: ReadonlyArray<FilterClause<T>>;
|
|
130
|
+
/** Limit number of items returned per page (optional) */
|
|
131
|
+
limit?: number;
|
|
132
|
+
/** Pagination token from previous query/scan (optional) */
|
|
133
|
+
startKey?: Record<string, NativeAttributeValue>;
|
|
134
|
+
/** Fetch all pages recursively; pass function to control continuation (optional) */
|
|
135
|
+
recursive?: boolean | RecursiveFn<T>;
|
|
136
|
+
/** Maximum items to fetch when using recursive (optional) */
|
|
137
|
+
maxItems?: number;
|
|
138
|
+
/** Maximum pages to fetch when using recursive (optional) */
|
|
139
|
+
maxPages?: number;
|
|
140
|
+
/** Use consistent reads (slower but guaranteed up-to-date, only works on tables not indexes) */
|
|
141
|
+
strong?: boolean;
|
|
142
|
+
/** Projection: specific attributes to retrieve (reduces data transfer) */
|
|
143
|
+
projection?: (keyof T)[];
|
|
144
|
+
debug?: boolean;
|
|
145
|
+
};
|
|
146
|
+
/** Query-specific props (default, scan is undefined or false) */
|
|
147
|
+
type QueryFindProps<T extends object = Record<string, unknown>> = BaseFindProps<T> & {
|
|
148
|
+
/** Use Scan instead of Query (default: false) */
|
|
149
|
+
scan?: false | undefined;
|
|
150
|
+
/** Primary key condition (required for Query) */
|
|
151
|
+
pk: {
|
|
152
|
+
key?: string;
|
|
153
|
+
value: string;
|
|
154
|
+
};
|
|
155
|
+
/** Sort key condition (optional) */
|
|
156
|
+
sk?: SkCond;
|
|
157
|
+
/** Global secondary index name (optional) */
|
|
158
|
+
indexName?: string;
|
|
159
|
+
/** Sort order: ascending or descending (default: asc). Only available for Query. */
|
|
160
|
+
sort?: "asc" | "desc";
|
|
161
|
+
};
|
|
162
|
+
/** Scan-specific props (scan: true) */
|
|
163
|
+
type ScanFindProps<T extends object = Record<string, unknown>> = BaseFindProps<T> & {
|
|
164
|
+
/** Use Scan instead of Query - scans entire table with optional filters */
|
|
165
|
+
scan: true;
|
|
166
|
+
/** pk is not allowed in scan mode - use filters instead */
|
|
167
|
+
pk?: never;
|
|
168
|
+
/** sk is not allowed in scan mode - use filters instead */
|
|
169
|
+
sk?: never;
|
|
170
|
+
/** Index to scan (optional, rarely needed for scans) */
|
|
171
|
+
indexName?: string;
|
|
172
|
+
/** sort is not available for Scan - DynamoDB returns items in storage order */
|
|
173
|
+
sort?: never;
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* Find props - discriminated union between Query and Scan modes
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* // Query mode (default) - pk required
|
|
180
|
+
* const items = await find<User>(doc, {
|
|
181
|
+
* tableName: 'users',
|
|
182
|
+
* pk: { value: 'user#123' },
|
|
183
|
+
* sk: { op: 'begins_with', value: 'profile#' },
|
|
184
|
+
* sort: 'desc',
|
|
185
|
+
* });
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* // Scan mode - no pk/sk, can filter on any attribute
|
|
189
|
+
* const items = await find<User>(doc, {
|
|
190
|
+
* tableName: 'users',
|
|
191
|
+
* scan: true,
|
|
192
|
+
* filters: [
|
|
193
|
+
* { key: 'pk', op: 'begins_with', value: 'user#' },
|
|
194
|
+
* { key: 'status', op: '=', value: 'active' },
|
|
195
|
+
* ],
|
|
196
|
+
* });
|
|
197
|
+
*/
|
|
198
|
+
export type FindProps<T extends object = Record<string, unknown>> = QueryFindProps<T> | ScanFindProps<T>;
|
|
199
|
+
export type BatchGetResult<T> = {
|
|
200
|
+
items: T[];
|
|
201
|
+
count: number;
|
|
202
|
+
missing: number;
|
|
203
|
+
consumedCapacity?: number | undefined;
|
|
204
|
+
};
|
|
205
|
+
export type BatchWriteResult = {
|
|
206
|
+
processed: number;
|
|
207
|
+
failed: number;
|
|
208
|
+
consumedCapacity?: number | undefined;
|
|
209
|
+
};
|
|
210
|
+
export type BatchDeleteResult = {
|
|
211
|
+
processed: number;
|
|
212
|
+
failed: number;
|
|
213
|
+
consumedCapacity?: number | undefined;
|
|
214
|
+
};
|
|
215
|
+
export {};
|
|
216
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/server/aws/ddb/types.ts"],"names":[],"mappings":"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"}
|