bun-gridfs-storage 1.1.1 → 1.1.3

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/dist/index.d.ts CHANGED
@@ -7,5 +7,5 @@
7
7
  * @license MIT
8
8
  */
9
9
  export { BunGridFSStorage } from "./storage";
10
- export type { GridFSFile, FileConfig, FileConfigCallback, BunGridFSStorageOptions, BunGridFSStorageEvents, MulterFile, } from "./types";
10
+ export type { GridFSFile, FileConfig, FileConfigCallback, BunGridFSStorageOptions, BunGridFSStorageEvents, MulterFile, MongoDbLike, } from "./types";
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EACV,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,UAAU,GACX,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EACV,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -57,12 +57,17 @@ class BunGridFSStorage extends import_events.EventEmitter {
57
57
  connected = false;
58
58
  defaultBucketName = "fs";
59
59
  defaultChunkSize = 255 * 1024;
60
+ mongoClient = null;
60
61
  constructor(options) {
61
62
  super();
62
- if (options.db instanceof Promise) {
63
+ if (options.url) {
64
+ this.dbPromise = this.connectWithUrl(options.url);
65
+ } else if (options.db instanceof Promise) {
63
66
  this.dbPromise = options.db;
64
- } else {
67
+ } else if (options.db) {
65
68
  this.dbPromise = Promise.resolve(options.db);
69
+ } else {
70
+ throw new Error("Either 'db' or 'url' must be provided");
66
71
  }
67
72
  this.fileConfig = options.file || ((_req, file) => ({
68
73
  filename: file.originalname,
@@ -70,6 +75,12 @@ class BunGridFSStorage extends import_events.EventEmitter {
70
75
  }));
71
76
  this.initConnection();
72
77
  }
78
+ async connectWithUrl(url) {
79
+ const { MongoClient } = await import("mongodb");
80
+ this.mongoClient = new MongoClient(url);
81
+ await this.mongoClient.connect();
82
+ return this.mongoClient.db();
83
+ }
73
84
  async initConnection() {
74
85
  try {
75
86
  this.db = await this.dbPromise;
@@ -187,4 +198,12 @@ class BunGridFSStorage extends import_events.EventEmitter {
187
198
  setDefaultChunkSize(size) {
188
199
  this.defaultChunkSize = size;
189
200
  }
201
+ async close() {
202
+ if (this.mongoClient) {
203
+ await this.mongoClient.close();
204
+ this.mongoClient = null;
205
+ this.connected = false;
206
+ this.bucket = null;
207
+ }
208
+ }
190
209
  }
package/dist/index.mjs CHANGED
@@ -28,12 +28,17 @@ class BunGridFSStorage extends EventEmitter {
28
28
  connected = false;
29
29
  defaultBucketName = "fs";
30
30
  defaultChunkSize = 255 * 1024;
31
+ mongoClient = null;
31
32
  constructor(options) {
32
33
  super();
33
- if (options.db instanceof Promise) {
34
+ if (options.url) {
35
+ this.dbPromise = this.connectWithUrl(options.url);
36
+ } else if (options.db instanceof Promise) {
34
37
  this.dbPromise = options.db;
35
- } else {
38
+ } else if (options.db) {
36
39
  this.dbPromise = Promise.resolve(options.db);
40
+ } else {
41
+ throw new Error("Either 'db' or 'url' must be provided");
37
42
  }
38
43
  this.fileConfig = options.file || ((_req, file) => ({
39
44
  filename: file.originalname,
@@ -41,6 +46,12 @@ class BunGridFSStorage extends EventEmitter {
41
46
  }));
42
47
  this.initConnection();
43
48
  }
49
+ async connectWithUrl(url) {
50
+ const { MongoClient } = await import("mongodb");
51
+ this.mongoClient = new MongoClient(url);
52
+ await this.mongoClient.connect();
53
+ return this.mongoClient.db();
54
+ }
44
55
  async initConnection() {
45
56
  try {
46
57
  this.db = await this.dbPromise;
@@ -158,6 +169,14 @@ class BunGridFSStorage extends EventEmitter {
158
169
  setDefaultChunkSize(size) {
159
170
  this.defaultChunkSize = size;
160
171
  }
172
+ async close() {
173
+ if (this.mongoClient) {
174
+ await this.mongoClient.close();
175
+ this.mongoClient = null;
176
+ this.connected = false;
177
+ this.bucket = null;
178
+ }
179
+ }
161
180
  }
162
181
  export {
163
182
  BunGridFSStorage
package/dist/storage.d.ts CHANGED
@@ -37,7 +37,13 @@ export declare class BunGridFSStorage extends EventEmitter {
37
37
  private connected;
38
38
  private defaultBucketName;
39
39
  private defaultChunkSize;
40
+ private mongoClient;
40
41
  constructor(options: BunGridFSStorageOptions);
42
+ /**
43
+ * Connect to MongoDB using a connection URI
44
+ * @private
45
+ */
46
+ private connectWithUrl;
41
47
  /**
42
48
  * Initialize database connection and GridFS bucket
43
49
  * @private
@@ -87,6 +93,11 @@ export declare class BunGridFSStorage extends EventEmitter {
87
93
  * @param size - Chunk size in bytes
88
94
  */
89
95
  setDefaultChunkSize(size: number): void;
96
+ /**
97
+ * Close the MongoDB connection (only if connected via URL)
98
+ * Call this when shutting down your application
99
+ */
100
+ close(): Promise<void>;
90
101
  }
91
102
  export {};
92
103
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,EACV,uBAAuB,EAGvB,UAAU,EACV,UAAU,EACX,MAAM,SAAS,CAAC;AAGjB,KAAK,gBAAgB,GAAG,YAAY,CAAC,cAAc,SAAS,EAAE,YAAY,CAAC,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,gBAAgB,CAAsB;gBAElC,OAAO,EAAE,uBAAuB;IAsB5C;;;OAGG;YACW,cAAc;IAgC5B;;;;;;;OAOG;IACG,WAAW,CACf,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,GAC7D,OAAO,CAAC,IAAI,CAAC;IAkEhB;;;;;;;OAOG;IACG,WAAW,CACf,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,GACjC,OAAO,CAAC,IAAI,CAAC;IAiBhB;;;;OAIG;YACW,iBAAiB;IAsB/B;;;OAGG;IACH,OAAO,IAAI,OAAO;IAIlB;;;OAGG;IACH,SAAS,IAAI,gBAAgB,GAAG,IAAI;IAIpC;;;OAGG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC;;;OAGG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAGxC"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,EACV,uBAAuB,EAGvB,UAAU,EACV,UAAU,EACX,MAAM,SAAS,CAAC;AAGjB,KAAK,gBAAgB,GAAG,YAAY,CAAC,cAAc,SAAS,EAAE,YAAY,CAAC,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,WAAW,CAAa;gBAEpB,OAAO,EAAE,uBAAuB;IA2B5C;;;OAGG;YACW,cAAc;IAO5B;;;OAGG;YACW,cAAc;IAgC5B;;;;;;;OAOG;IACG,WAAW,CACf,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,GAC7D,OAAO,CAAC,IAAI,CAAC;IAkEhB;;;;;;;OAOG;IACG,WAAW,CACf,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,GACjC,OAAO,CAAC,IAAI,CAAC;IAiBhB;;;;OAIG;YACW,iBAAiB;IAsB/B;;;OAGG;IACH,OAAO,IAAI,OAAO;IAIlB;;;OAGG;IACH,SAAS,IAAI,gBAAgB,GAAG,IAAI;IAIpC;;;OAGG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC;;;OAGG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIvC;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ7B"}
package/dist/types.d.ts CHANGED
@@ -47,7 +47,7 @@ export interface FileConfig {
47
47
  contentType?: string;
48
48
  }
49
49
  /**
50
- * Multer file type
50
+ * Multer file type - compatible with Express.Multer.File
51
51
  */
52
52
  export interface MulterFile {
53
53
  fieldname: string;
@@ -56,25 +56,40 @@ export interface MulterFile {
56
56
  mimetype: string;
57
57
  size: number;
58
58
  stream: NodeJS.ReadableStream;
59
- destination: string;
60
- filename: string;
61
- path: string;
62
- buffer: Buffer;
59
+ destination?: string;
60
+ filename?: string;
61
+ path?: string;
62
+ buffer?: Buffer;
63
63
  }
64
64
  /**
65
65
  * Callback function to configure file storage
66
66
  * Can return a promise or the configuration directly
67
67
  */
68
68
  export type FileConfigCallback = (req: Request, file: MulterFile) => Promise<FileConfig> | FileConfig;
69
+ /**
70
+ * MongoDB Db interface - compatible with any mongodb version
71
+ */
72
+ export interface MongoDbLike {
73
+ collection: (name: string) => unknown;
74
+ databaseName?: string;
75
+ }
69
76
  /**
70
77
  * Options for initializing BunGridFSStorage
71
78
  */
72
79
  export interface BunGridFSStorageOptions {
73
80
  /**
74
- * MongoDB database connection
75
- * Can be a Promise (for deferred connection) or direct Db instance
81
+ * MongoDB database connection - supports multiple formats:
82
+ * - Direct Db instance (mongoose.connection.db)
83
+ * - Promise that resolves to Db instance
84
+ * - MongoDB connection URI string (e.g., "mongodb://localhost:27017/mydb")
85
+ */
86
+ db?: Promise<MongoDbLike> | MongoDbLike;
87
+ /**
88
+ * MongoDB connection URI string
89
+ * Use this if you don't have a mongoose connection
90
+ * Example: "mongodb://localhost:27017/mydb"
76
91
  */
77
- db: Promise<import("mongodb").Db> | import("mongodb").Db;
92
+ url?: string;
78
93
  /**
79
94
  * Optional callback to configure file storage
80
95
  * If not provided, uses original filename and default bucket
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,EAAE,EAAE,QAAQ,CAAC;IAEb,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IAEjB,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IAErB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IAEjB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IAEb,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IAEnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE/B,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sCAAsC;IACtC,UAAU,CAAC,EAAE,IAAI,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IAEjB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IAEnB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE/B,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,UAAU,KACb,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,EAAE,EAAE,OAAO,CAAC,OAAO,SAAS,EAAE,EAAE,CAAC,GAAG,OAAO,SAAS,EAAE,EAAE,CAAC;IAEzD;;;OAGG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,sDAAsD;IACtD,UAAU,EAAE,CAAC,EAAE,EAAE,OAAO,SAAS,EAAE,EAAE,KAAK,IAAI,CAAC;IAE/C,iDAAiD;IACjD,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAEjC,yCAAyC;IACzC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAErE,6CAA6C;IAC7C,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC1C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,EAAE,EAAE,QAAQ,CAAC;IAEb,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IAEjB,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IAErB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IAEjB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IAEb,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IAEnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE/B,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sCAAsC;IACtC,UAAU,CAAC,EAAE,IAAI,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IAEjB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IAEnB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE/B,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,UAAU,KACb,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;;OAKG;IACH,EAAE,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;IAExC;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,sDAAsD;IACtD,UAAU,EAAE,CAAC,EAAE,EAAE,OAAO,SAAS,EAAE,EAAE,KAAK,IAAI,CAAC;IAE/C,iDAAiD;IACjD,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAEjC,yCAAyC;IACzC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAErE,6CAA6C;IAC7C,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC1C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bun-gridfs-storage",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "A Multer storage engine for GridFS that works with both Bun and Node.js",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",