@efebia/pino-mongodb 0.0.2 → 1.0.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/lib/index.d.ts CHANGED
@@ -6,8 +6,12 @@ export type Options = {
6
6
  collection?: string;
7
7
  unified?: boolean;
8
8
  clientOptions?: MongoClientOptions;
9
+ onError?: (messages: unknown[], error: unknown) => void;
10
+ } & ({
9
11
  queueOptions?: Omit<QueueOptions<unknown>, 'callback'>;
10
- };
12
+ } | {
13
+ immediate: true;
14
+ });
11
15
  export declare const defaultOption: Options;
12
16
  declare const bulkTransport: (opts: Options) => Promise<import("stream").Transform & import("pino-abstract-transport").OnUnknown>;
13
17
  export default bulkTransport;
package/lib/index.js CHANGED
@@ -1,4 +1,11 @@
1
1
  "use strict";
2
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
3
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
4
+ var m = o[Symbol.asyncIterator], i;
5
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
6
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
7
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
8
+ };
2
9
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
10
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
11
  };
@@ -20,7 +27,8 @@ exports.defaultOption = {
20
27
  }
21
28
  };
22
29
  const bulkTransport = async (opts) => {
23
- const { uri, database: databaseName, collection: collectionName, clientOptions, queueOptions } = Object.assign(Object.assign({}, exports.defaultOption), opts);
30
+ const { uri, database: databaseName, collection: collectionName, clientOptions, queueOptions, onError } = Object.assign(Object.assign({}, exports.defaultOption), opts);
31
+ const isImmediate = 'immediate' in opts && opts.immediate;
24
32
  if (!uri)
25
33
  throw new Error(`@efebia/pino-mongodb: URI_NOT_SPECIFIED`);
26
34
  if (!collectionName)
@@ -29,11 +37,45 @@ const bulkTransport = async (opts) => {
29
37
  await client.connect();
30
38
  const db = client.db(databaseName);
31
39
  const collection = db.collection(collectionName);
40
+ if (isImmediate) {
41
+ return (0, pino_abstract_transport_1.default)(async (source) => {
42
+ var _a, e_1, _b, _c;
43
+ try {
44
+ for (var _d = true, source_1 = __asyncValues(source), source_1_1; source_1_1 = await source_1.next(), _a = source_1_1.done, !_a;) {
45
+ _c = source_1_1.value;
46
+ _d = false;
47
+ try {
48
+ let obj = _c;
49
+ await collection.insertOne((0, log_js_1.default)(obj), { forceServerObjectId: true }).catch((e) => {
50
+ if (e instanceof Error) {
51
+ console.error(e);
52
+ }
53
+ });
54
+ }
55
+ finally {
56
+ _d = true;
57
+ }
58
+ }
59
+ }
60
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
61
+ finally {
62
+ try {
63
+ if (!_d && !_a && (_b = source_1.return)) await _b.call(source_1);
64
+ }
65
+ finally { if (e_1) throw e_1.error; }
66
+ }
67
+ }, {
68
+ async close(_err) {
69
+ await client.close();
70
+ }
71
+ });
72
+ }
32
73
  const messageQueue = (0, queue_js_1.createMessageQueue)(Object.assign({ callback: (messages, errorCallback) => collection.bulkWrite(messages.map(e => ({
33
74
  insertOne: {
34
75
  document: (0, log_js_1.default)(e)
35
76
  }
36
77
  })), { forceServerObjectId: true }).catch((e) => {
78
+ onError === null || onError === void 0 ? void 0 : onError(messages, e);
37
79
  if (e instanceof Error) {
38
80
  errorCallback === null || errorCallback === void 0 ? void 0 : errorCallback(e);
39
81
  }
@@ -45,9 +87,7 @@ const bulkTransport = async (opts) => {
45
87
  messageQueue.push(chunk, callback);
46
88
  },
47
89
  destroy(err, cb) {
48
- client.close((closeErr) => {
49
- cb(err || closeErr || null);
50
- });
90
+ client.close();
51
91
  }
52
92
  });
53
93
  return (0, pino_abstract_transport_1.default)((source) => {
package/lib/log.js CHANGED
@@ -7,6 +7,10 @@ function default_1(data) {
7
7
  if (log.time) {
8
8
  log.time = new Date(log.time);
9
9
  }
10
+ if (log._id) {
11
+ log.__id = log._id;
12
+ delete log._id;
13
+ }
10
14
  }
11
15
  catch (e) {
12
16
  log = {
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@efebia/pino-mongodb",
3
- "version": "0.0.2",
3
+ "version": "1.0.0",
4
4
  "license": "MIT",
5
5
  "dependencies": {
6
- "mongodb": "^4.8.1",
6
+ "mongodb": "^6.15.0",
7
7
  "pino-abstract-transport": "^1.0.0"
8
8
  },
9
9
  "devDependencies": {