nx-mongo 3.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/IMPROVEMENT_PLAN.md +223 -0
- package/PROVIDER_INSTRUCTIONS.md +460 -0
- package/README.md +1144 -0
- package/dist/simpleMongoHelper.d.ts +366 -0
- package/dist/simpleMongoHelper.d.ts.map +1 -0
- package/dist/simpleMongoHelper.js +1333 -0
- package/dist/simpleMongoHelper.js.map +1 -0
- package/dist/test.d.ts +2 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +179 -0
- package/dist/test.js.map +1 -0
- package/package.json +41 -0
- package/src/simpleMongoHelper.ts +1660 -0
- package/src/test.ts +209 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { Db, Filter, UpdateFilter, OptionalUnlessRequiredId, Document, WithId, ClientSession, Sort, IndexSpecification, CreateIndexesOptions } from 'mongodb';
|
|
2
|
+
export interface PaginationOptions {
|
|
3
|
+
page?: number;
|
|
4
|
+
limit?: number;
|
|
5
|
+
sort?: Sort;
|
|
6
|
+
}
|
|
7
|
+
export interface PaginatedResult<T> {
|
|
8
|
+
data: WithId<T>[];
|
|
9
|
+
total: number;
|
|
10
|
+
page: number;
|
|
11
|
+
limit: number;
|
|
12
|
+
totalPages: number;
|
|
13
|
+
hasNext: boolean;
|
|
14
|
+
hasPrev: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface RetryOptions {
|
|
17
|
+
maxRetries?: number;
|
|
18
|
+
retryDelay?: number;
|
|
19
|
+
exponentialBackoff?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface InputConfig {
|
|
22
|
+
ref: string;
|
|
23
|
+
collection: string;
|
|
24
|
+
query?: Filter<any>;
|
|
25
|
+
}
|
|
26
|
+
export interface OutputConfig {
|
|
27
|
+
ref: string;
|
|
28
|
+
collection: string;
|
|
29
|
+
keys?: string[];
|
|
30
|
+
mode?: 'append' | 'replace';
|
|
31
|
+
}
|
|
32
|
+
export interface HelperConfig {
|
|
33
|
+
inputs: InputConfig[];
|
|
34
|
+
outputs: OutputConfig[];
|
|
35
|
+
output?: {
|
|
36
|
+
mode?: 'append' | 'replace';
|
|
37
|
+
};
|
|
38
|
+
progress?: {
|
|
39
|
+
collection?: string;
|
|
40
|
+
uniqueIndexKeys?: string[];
|
|
41
|
+
provider?: string;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export interface WriteByRefResult {
|
|
45
|
+
inserted: number;
|
|
46
|
+
updated: number;
|
|
47
|
+
errors: Array<{
|
|
48
|
+
index: number;
|
|
49
|
+
error: Error;
|
|
50
|
+
doc?: any;
|
|
51
|
+
}>;
|
|
52
|
+
indexCreated: boolean;
|
|
53
|
+
}
|
|
54
|
+
export interface EnsureSignatureIndexResult {
|
|
55
|
+
created: boolean;
|
|
56
|
+
indexName: string;
|
|
57
|
+
}
|
|
58
|
+
export interface StageIdentity {
|
|
59
|
+
key: string;
|
|
60
|
+
process?: string;
|
|
61
|
+
provider?: string;
|
|
62
|
+
name?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface StageMetadata {
|
|
65
|
+
itemCount?: number;
|
|
66
|
+
errorCount?: number;
|
|
67
|
+
durationMs?: number;
|
|
68
|
+
[key: string]: any;
|
|
69
|
+
}
|
|
70
|
+
export interface StageRecord extends StageIdentity {
|
|
71
|
+
completed: boolean;
|
|
72
|
+
startedAt?: Date;
|
|
73
|
+
completedAt?: Date;
|
|
74
|
+
metadata?: StageMetadata;
|
|
75
|
+
}
|
|
76
|
+
export type ProgressSessionOptions = {
|
|
77
|
+
session?: ClientSession;
|
|
78
|
+
};
|
|
79
|
+
export interface ProgressAPI {
|
|
80
|
+
isCompleted(key: string, options?: ProgressSessionOptions & {
|
|
81
|
+
process?: string;
|
|
82
|
+
provider?: string;
|
|
83
|
+
}): Promise<boolean>;
|
|
84
|
+
start(identity: StageIdentity, options?: ProgressSessionOptions): Promise<void>;
|
|
85
|
+
complete(identity: StageIdentity & {
|
|
86
|
+
metadata?: StageMetadata;
|
|
87
|
+
}, options?: ProgressSessionOptions): Promise<void>;
|
|
88
|
+
getCompleted(options?: ProgressSessionOptions & {
|
|
89
|
+
process?: string;
|
|
90
|
+
provider?: string;
|
|
91
|
+
}): Promise<Array<Pick<StageRecord, 'key' | 'name' | 'completedAt'>>>;
|
|
92
|
+
getProgress(options?: ProgressSessionOptions & {
|
|
93
|
+
process?: string;
|
|
94
|
+
provider?: string;
|
|
95
|
+
}): Promise<StageRecord[]>;
|
|
96
|
+
reset(key: string, options?: ProgressSessionOptions & {
|
|
97
|
+
process?: string;
|
|
98
|
+
provider?: string;
|
|
99
|
+
}): Promise<void>;
|
|
100
|
+
}
|
|
101
|
+
export interface WriteStageOptions {
|
|
102
|
+
ensureIndex?: boolean;
|
|
103
|
+
session?: ClientSession;
|
|
104
|
+
complete?: {
|
|
105
|
+
key: string;
|
|
106
|
+
process?: string;
|
|
107
|
+
name?: string;
|
|
108
|
+
provider?: string;
|
|
109
|
+
metadata?: StageMetadata;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export interface WriteStageResult extends WriteByRefResult {
|
|
113
|
+
completed?: boolean;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Extracts values from an object using dot-notation paths with array wildcard support.
|
|
117
|
+
* Supports nested object paths (dot notation) and array wildcards ([]) to collect values from all array elements.
|
|
118
|
+
* @param value - The object to extract values from
|
|
119
|
+
* @param path - Dot-notation path (e.g., "meta.id", "edges[].from", "segments[]")
|
|
120
|
+
* @returns Array of extracted values (flattened and deduplicated for arrays)
|
|
121
|
+
* @example
|
|
122
|
+
* getByDotPath({ segments: [1, 2, 3] }, "segments[]") // [1, 2, 3]
|
|
123
|
+
* getByDotPath({ edges: [{ from: "A" }, { from: "B" }] }, "edges[].from") // ["A", "B"]
|
|
124
|
+
* getByDotPath({ meta: { id: "123" } }, "meta.id") // ["123"]
|
|
125
|
+
*/
|
|
126
|
+
export declare function getByDotPath(value: any, path: string): any[];
|
|
127
|
+
/**
|
|
128
|
+
* Computes a deterministic signature for a document based on specified keys.
|
|
129
|
+
* The signature is a SHA-256 hash of a canonical representation of the key values.
|
|
130
|
+
* @param doc - The document to compute signature for
|
|
131
|
+
* @param keys - Array of dot-notation paths to extract values from
|
|
132
|
+
* @param options - Optional configuration
|
|
133
|
+
* @param options.algorithm - Hash algorithm to use (default: "sha256")
|
|
134
|
+
* @returns Hex string signature
|
|
135
|
+
* @example
|
|
136
|
+
* computeSignature({ segments: [1, 2], role: "admin" }, ["segments[]", "role"])
|
|
137
|
+
*/
|
|
138
|
+
export declare function computeSignature(doc: any, keys: string[], options?: {
|
|
139
|
+
algorithm?: 'sha256' | 'sha1' | 'md5';
|
|
140
|
+
}): string;
|
|
141
|
+
export declare class SimpleMongoHelper {
|
|
142
|
+
private connectionString;
|
|
143
|
+
private client;
|
|
144
|
+
protected db: Db | null;
|
|
145
|
+
private isInitialized;
|
|
146
|
+
private retryOptions;
|
|
147
|
+
private config;
|
|
148
|
+
readonly progress: ProgressAPI;
|
|
149
|
+
constructor(connectionString: string, retryOptions?: RetryOptions, config?: HelperConfig);
|
|
150
|
+
/**
|
|
151
|
+
* Sets or updates the configuration for ref-based operations.
|
|
152
|
+
* @param config - Configuration object with inputs and outputs
|
|
153
|
+
* @returns This instance for method chaining
|
|
154
|
+
*/
|
|
155
|
+
useConfig(config: HelperConfig): this;
|
|
156
|
+
/**
|
|
157
|
+
* Tests the MongoDB connection and returns detailed error information if it fails.
|
|
158
|
+
* This method does not establish a persistent connection - use initialize() for that.
|
|
159
|
+
* @returns Object with success status and optional error details
|
|
160
|
+
*/
|
|
161
|
+
testConnection(): Promise<{
|
|
162
|
+
success: boolean;
|
|
163
|
+
error?: {
|
|
164
|
+
type: 'missing_credentials' | 'invalid_connection_string' | 'connection_failed' | 'authentication_failed' | 'config_error' | 'unknown';
|
|
165
|
+
message: string;
|
|
166
|
+
details?: string;
|
|
167
|
+
};
|
|
168
|
+
}>;
|
|
169
|
+
/**
|
|
170
|
+
* Establishes MongoDB connection internally with retry logic.
|
|
171
|
+
* Must be called before using other methods.
|
|
172
|
+
* @throws Error if connection fails or if already initialized
|
|
173
|
+
*/
|
|
174
|
+
initialize(): Promise<void>;
|
|
175
|
+
/**
|
|
176
|
+
* Loads data from a collection with optional query filter.
|
|
177
|
+
* @param collectionName - Name of the collection to query
|
|
178
|
+
* @param query - Optional MongoDB query filter
|
|
179
|
+
* @param options - Optional pagination and sorting options
|
|
180
|
+
* @returns Array of documents matching the query or paginated result
|
|
181
|
+
* @throws Error if not initialized or if query fails
|
|
182
|
+
*/
|
|
183
|
+
loadCollection<T extends Document = Document>(collectionName: string, query?: Filter<T>, options?: PaginationOptions): Promise<WithId<T>[] | PaginatedResult<T>>;
|
|
184
|
+
/**
|
|
185
|
+
* Finds a single document in a collection.
|
|
186
|
+
* @param collectionName - Name of the collection to query
|
|
187
|
+
* @param query - MongoDB query filter
|
|
188
|
+
* @param options - Optional find options (e.g., sort, projection)
|
|
189
|
+
* @returns Single document matching the query or null
|
|
190
|
+
* @throws Error if not initialized or if query fails
|
|
191
|
+
*/
|
|
192
|
+
findOne<T extends Document = Document>(collectionName: string, query: Filter<T>, options?: {
|
|
193
|
+
sort?: Sort;
|
|
194
|
+
projection?: Document;
|
|
195
|
+
}): Promise<WithId<T> | null>;
|
|
196
|
+
/**
|
|
197
|
+
* Inserts data into a collection.
|
|
198
|
+
* @param collectionName - Name of the collection to insert into
|
|
199
|
+
* @param data - Single document or array of documents to insert
|
|
200
|
+
* @param options - Optional insert options (e.g., session for transactions)
|
|
201
|
+
* @returns Insert result(s)
|
|
202
|
+
* @throws Error if not initialized or if insert fails
|
|
203
|
+
*/
|
|
204
|
+
insert<T extends Document = Document>(collectionName: string, data: OptionalUnlessRequiredId<T> | OptionalUnlessRequiredId<T>[], options?: {
|
|
205
|
+
session?: ClientSession;
|
|
206
|
+
}): Promise<any>;
|
|
207
|
+
/**
|
|
208
|
+
* Updates records in a collection.
|
|
209
|
+
* @param collectionName - Name of the collection to update
|
|
210
|
+
* @param filter - MongoDB query filter to match documents
|
|
211
|
+
* @param updateData - Update operations to apply
|
|
212
|
+
* @param options - Optional update options (e.g., upsert, multi, session for transactions)
|
|
213
|
+
* @returns Update result
|
|
214
|
+
* @throws Error if not initialized or if update fails
|
|
215
|
+
*/
|
|
216
|
+
update<T extends Document = Document>(collectionName: string, filter: Filter<T>, updateData: UpdateFilter<T>, options?: {
|
|
217
|
+
upsert?: boolean;
|
|
218
|
+
multi?: boolean;
|
|
219
|
+
session?: ClientSession;
|
|
220
|
+
}): Promise<any>;
|
|
221
|
+
/**
|
|
222
|
+
* Deletes documents from a collection.
|
|
223
|
+
* @param collectionName - Name of the collection to delete from
|
|
224
|
+
* @param filter - MongoDB query filter to match documents
|
|
225
|
+
* @param options - Optional delete options (multi: true for deleteMany, false for deleteOne)
|
|
226
|
+
* @returns Delete result
|
|
227
|
+
* @throws Error if not initialized or if delete fails
|
|
228
|
+
*/
|
|
229
|
+
delete<T extends Document = Document>(collectionName: string, filter: Filter<T>, options?: {
|
|
230
|
+
multi?: boolean;
|
|
231
|
+
}): Promise<any>;
|
|
232
|
+
/**
|
|
233
|
+
* Counts documents in a collection matching a query.
|
|
234
|
+
* @param collectionName - Name of the collection to count
|
|
235
|
+
* @param query - Optional MongoDB query filter
|
|
236
|
+
* @returns Number of documents matching the query
|
|
237
|
+
* @throws Error if not initialized or if count fails
|
|
238
|
+
*/
|
|
239
|
+
countDocuments<T extends Document = Document>(collectionName: string, query?: Filter<T>): Promise<number>;
|
|
240
|
+
/**
|
|
241
|
+
* Gets an estimated document count for a collection (faster but less accurate).
|
|
242
|
+
* @param collectionName - Name of the collection to count
|
|
243
|
+
* @returns Estimated number of documents
|
|
244
|
+
* @throws Error if not initialized or if count fails
|
|
245
|
+
*/
|
|
246
|
+
estimatedDocumentCount(collectionName: string): Promise<number>;
|
|
247
|
+
/**
|
|
248
|
+
* Runs an aggregation pipeline on a collection.
|
|
249
|
+
* @param collectionName - Name of the collection to aggregate
|
|
250
|
+
* @param pipeline - Array of aggregation pipeline stages
|
|
251
|
+
* @returns Array of aggregated results
|
|
252
|
+
* @throws Error if not initialized or if aggregation fails
|
|
253
|
+
*/
|
|
254
|
+
aggregate<T extends Document = Document>(collectionName: string, pipeline: Document[]): Promise<T[]>;
|
|
255
|
+
/**
|
|
256
|
+
* Creates an index on a collection.
|
|
257
|
+
* @param collectionName - Name of the collection
|
|
258
|
+
* @param indexSpec - Index specification (field name or index spec object)
|
|
259
|
+
* @param options - Optional index creation options
|
|
260
|
+
* @returns Index name
|
|
261
|
+
* @throws Error if not initialized or if index creation fails
|
|
262
|
+
*/
|
|
263
|
+
createIndex(collectionName: string, indexSpec: IndexSpecification, options?: CreateIndexesOptions): Promise<string>;
|
|
264
|
+
/**
|
|
265
|
+
* Drops an index from a collection.
|
|
266
|
+
* @param collectionName - Name of the collection
|
|
267
|
+
* @param indexName - Name of the index to drop
|
|
268
|
+
* @returns Result object
|
|
269
|
+
* @throws Error if not initialized or if index drop fails
|
|
270
|
+
*/
|
|
271
|
+
dropIndex(collectionName: string, indexName: string): Promise<any>;
|
|
272
|
+
/**
|
|
273
|
+
* Lists all indexes on a collection.
|
|
274
|
+
* @param collectionName - Name of the collection
|
|
275
|
+
* @returns Array of index information
|
|
276
|
+
* @throws Error if not initialized or if listing fails
|
|
277
|
+
*/
|
|
278
|
+
listIndexes(collectionName: string): Promise<Document[]>;
|
|
279
|
+
/**
|
|
280
|
+
* Starts a new client session for transactions.
|
|
281
|
+
* @returns Client session
|
|
282
|
+
* @throws Error if not initialized
|
|
283
|
+
*/
|
|
284
|
+
startSession(): ClientSession;
|
|
285
|
+
/**
|
|
286
|
+
* Executes a function within a transaction.
|
|
287
|
+
* @param callback - Function to execute within the transaction
|
|
288
|
+
* @returns Result of the callback function
|
|
289
|
+
* @throws Error if not initialized or if transaction fails
|
|
290
|
+
*/
|
|
291
|
+
withTransaction<T>(callback: (session: ClientSession) => Promise<T>): Promise<T>;
|
|
292
|
+
/**
|
|
293
|
+
* Loads data from a collection using a ref name from the configuration.
|
|
294
|
+
* @param ref - Application-level reference name (must exist in config.inputs)
|
|
295
|
+
* @param options - Optional pagination and session options
|
|
296
|
+
* @returns Array of documents or paginated result
|
|
297
|
+
* @throws Error if ref not found in config, not initialized, or query fails
|
|
298
|
+
*/
|
|
299
|
+
loadByRef<T extends Document = Document>(ref: string, options?: PaginationOptions & {
|
|
300
|
+
session?: ClientSession;
|
|
301
|
+
}): Promise<WithId<T>[] | PaginatedResult<T>>;
|
|
302
|
+
/**
|
|
303
|
+
* Ensures a unique index exists on the _sig field for signature-based deduplication.
|
|
304
|
+
* @param collectionName - Name of the collection
|
|
305
|
+
* @param options - Optional configuration
|
|
306
|
+
* @param options.fieldName - Field name for signature (default: "_sig")
|
|
307
|
+
* @param options.unique - Whether index should be unique (default: true)
|
|
308
|
+
* @returns Result object with creation status and index name
|
|
309
|
+
* @throws Error if not initialized or if index creation fails (with permission hints)
|
|
310
|
+
*/
|
|
311
|
+
ensureSignatureIndex(collectionName: string, options?: {
|
|
312
|
+
fieldName?: string;
|
|
313
|
+
unique?: boolean;
|
|
314
|
+
}): Promise<EnsureSignatureIndexResult>;
|
|
315
|
+
/**
|
|
316
|
+
* Writes documents to a collection using a ref name from the configuration.
|
|
317
|
+
* Supports signature-based deduplication and append/replace modes.
|
|
318
|
+
* @param ref - Application-level reference name (must exist in config.outputs)
|
|
319
|
+
* @param documents - Array of documents to write
|
|
320
|
+
* @param options - Optional write options
|
|
321
|
+
* @param options.session - Transaction session
|
|
322
|
+
* @param options.ensureIndex - Whether to ensure signature index exists (default: true)
|
|
323
|
+
* @returns Result object with counts and errors
|
|
324
|
+
* @throws Error if ref not found in config or not initialized
|
|
325
|
+
*/
|
|
326
|
+
writeByRef(ref: string, documents: any[], options?: {
|
|
327
|
+
session?: ClientSession;
|
|
328
|
+
ensureIndex?: boolean;
|
|
329
|
+
}): Promise<WriteByRefResult>;
|
|
330
|
+
/**
|
|
331
|
+
* Writes documents to a collection using a ref name and optionally marks a stage as complete.
|
|
332
|
+
* Combines writeByRef() with progress.complete() for atomic write-and-complete operations.
|
|
333
|
+
* @param ref - Application-level reference name (must exist in config.outputs)
|
|
334
|
+
* @param documents - Array of documents to write
|
|
335
|
+
* @param options - Optional write and completion options
|
|
336
|
+
* @param options.ensureIndex - Whether to ensure signature index exists (default: true)
|
|
337
|
+
* @param options.session - Transaction session (if provided, write and complete are atomic)
|
|
338
|
+
* @param options.complete - Stage completion information (optional)
|
|
339
|
+
* @returns Result object with write counts, errors, and completion status
|
|
340
|
+
* @throws Error if ref not found in config or not initialized
|
|
341
|
+
*/
|
|
342
|
+
writeStage(ref: string, documents: any[], options?: WriteStageOptions): Promise<WriteStageResult>;
|
|
343
|
+
/**
|
|
344
|
+
* Closes the MongoDB connection and cleans up resources.
|
|
345
|
+
* @throws Error if disconnect fails
|
|
346
|
+
*/
|
|
347
|
+
disconnect(): Promise<void>;
|
|
348
|
+
/**
|
|
349
|
+
* Ensures the helper is initialized before performing operations.
|
|
350
|
+
* @throws Error if not initialized
|
|
351
|
+
* @internal
|
|
352
|
+
*/
|
|
353
|
+
ensureInitialized(): void;
|
|
354
|
+
/**
|
|
355
|
+
* Gets the database instance. Public for use by internal classes.
|
|
356
|
+
* @internal
|
|
357
|
+
*/
|
|
358
|
+
getDb(): Db;
|
|
359
|
+
/**
|
|
360
|
+
* Extracts database name from MongoDB connection string.
|
|
361
|
+
* @param connectionString - MongoDB connection string
|
|
362
|
+
* @returns Database name or 'test' as default
|
|
363
|
+
*/
|
|
364
|
+
private extractDatabaseName;
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=simpleMongoHelper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simpleMongoHelper.d.ts","sourceRoot":"","sources":["../src/simpleMongoHelper.ts"],"names":[],"mappings":"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"}
|