mongodash 2.0.0 → 2.1.1

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.
Files changed (165) hide show
  1. package/README.md +107 -23
  2. package/dist/dashboard/index.html +40 -0
  3. package/dist/lib/playground/server.js +124 -0
  4. package/dist/lib/playground/server.js.map +1 -0
  5. package/dist/lib/src/ConcurrentRunner.js +141 -0
  6. package/dist/lib/src/ConcurrentRunner.js.map +1 -0
  7. package/dist/lib/{OnError.js → src/OnError.js} +2 -9
  8. package/dist/lib/src/OnError.js.map +1 -0
  9. package/dist/lib/{OnInfo.js → src/OnInfo.js} +5 -9
  10. package/dist/lib/src/OnInfo.js.map +1 -0
  11. package/dist/lib/{createContinuousLock.js → src/createContinuousLock.js} +4 -9
  12. package/dist/lib/src/createContinuousLock.js.map +1 -0
  13. package/dist/lib/{cronTasks.js → src/cronTasks.js} +128 -79
  14. package/dist/lib/src/cronTasks.js.map +1 -0
  15. package/dist/lib/{getCollection.js → src/getCollection.js} +1 -8
  16. package/dist/lib/src/getCollection.js.map +1 -0
  17. package/dist/lib/{getMongoClient.js → src/getMongoClient.js} +1 -8
  18. package/dist/lib/src/getMongoClient.js.map +1 -0
  19. package/dist/lib/src/globalsCollection.js +3 -0
  20. package/dist/lib/src/globalsCollection.js.map +1 -0
  21. package/dist/lib/src/index.js +94 -0
  22. package/dist/lib/src/index.js.map +1 -0
  23. package/dist/lib/src/initPromise.js +9 -0
  24. package/dist/lib/src/initPromise.js.map +1 -0
  25. package/dist/lib/src/mongoCompatibility.js +3 -0
  26. package/dist/lib/src/mongoCompatibility.js.map +1 -0
  27. package/dist/lib/src/parseInterval.js +53 -0
  28. package/dist/lib/src/parseInterval.js.map +1 -0
  29. package/dist/lib/src/prefixFilterKeys.js +62 -0
  30. package/dist/lib/src/prefixFilterKeys.js.map +1 -0
  31. package/dist/lib/src/processInBatches.js +39 -0
  32. package/dist/lib/src/processInBatches.js.map +1 -0
  33. package/dist/lib/src/reactiveTasks/LeaderElector.js +148 -0
  34. package/dist/lib/src/reactiveTasks/LeaderElector.js.map +1 -0
  35. package/dist/lib/src/reactiveTasks/MetricsCollector.js +403 -0
  36. package/dist/lib/src/reactiveTasks/MetricsCollector.js.map +1 -0
  37. package/dist/lib/src/reactiveTasks/ReactiveTaskManager.js +281 -0
  38. package/dist/lib/src/reactiveTasks/ReactiveTaskManager.js.map +1 -0
  39. package/dist/lib/src/reactiveTasks/ReactiveTaskOps.js +178 -0
  40. package/dist/lib/src/reactiveTasks/ReactiveTaskOps.js.map +1 -0
  41. package/dist/lib/src/reactiveTasks/ReactiveTaskPlanner.js +436 -0
  42. package/dist/lib/src/reactiveTasks/ReactiveTaskPlanner.js.map +1 -0
  43. package/dist/lib/src/reactiveTasks/ReactiveTaskReconciler.js +211 -0
  44. package/dist/lib/src/reactiveTasks/ReactiveTaskReconciler.js.map +1 -0
  45. package/dist/lib/src/reactiveTasks/ReactiveTaskRegistry.js +177 -0
  46. package/dist/lib/src/reactiveTasks/ReactiveTaskRegistry.js.map +1 -0
  47. package/dist/lib/src/reactiveTasks/ReactiveTaskRepository.js +348 -0
  48. package/dist/lib/src/reactiveTasks/ReactiveTaskRepository.js.map +1 -0
  49. package/dist/lib/src/reactiveTasks/ReactiveTaskRetryStrategy.js +146 -0
  50. package/dist/lib/src/reactiveTasks/ReactiveTaskRetryStrategy.js.map +1 -0
  51. package/dist/lib/src/reactiveTasks/ReactiveTaskTypes.js +27 -0
  52. package/dist/lib/src/reactiveTasks/ReactiveTaskTypes.js.map +1 -0
  53. package/dist/lib/src/reactiveTasks/ReactiveTaskWorker.js +179 -0
  54. package/dist/lib/src/reactiveTasks/ReactiveTaskWorker.js.map +1 -0
  55. package/dist/lib/src/reactiveTasks/compileWatchProjection.js +58 -0
  56. package/dist/lib/src/reactiveTasks/compileWatchProjection.js.map +1 -0
  57. package/dist/lib/src/reactiveTasks/index.js +291 -0
  58. package/dist/lib/src/reactiveTasks/index.js.map +1 -0
  59. package/dist/lib/src/reactiveTasks/queryToExpression.js +153 -0
  60. package/dist/lib/src/reactiveTasks/queryToExpression.js.map +1 -0
  61. package/dist/lib/src/reactiveTasks/validateTaskFilter.js +81 -0
  62. package/dist/lib/src/reactiveTasks/validateTaskFilter.js.map +1 -0
  63. package/dist/lib/src/task-management/OperationalTaskController.js +155 -0
  64. package/dist/lib/src/task-management/OperationalTaskController.js.map +1 -0
  65. package/dist/lib/src/task-management/index.js +20 -0
  66. package/dist/lib/src/task-management/index.js.map +1 -0
  67. package/dist/lib/src/task-management/serveDashboard.js +142 -0
  68. package/dist/lib/src/task-management/serveDashboard.js.map +1 -0
  69. package/dist/lib/src/task-management/types.js +3 -0
  70. package/dist/lib/src/task-management/types.js.map +1 -0
  71. package/dist/lib/{withLock.js → src/withLock.js} +2 -10
  72. package/dist/lib/src/withLock.js.map +1 -0
  73. package/dist/lib/{withTransaction.js → src/withTransaction.js} +3 -10
  74. package/dist/lib/src/withTransaction.js.map +1 -0
  75. package/dist/lib/tools/check-db-connection.js +21 -0
  76. package/dist/lib/tools/check-db-connection.js.map +1 -0
  77. package/dist/lib/tools/clean-testing-databases.js +5 -0
  78. package/dist/lib/tools/clean-testing-databases.js.map +1 -0
  79. package/dist/lib/tools/prepare-republish.js +20 -0
  80. package/dist/lib/tools/prepare-republish.js.map +1 -0
  81. package/dist/lib/tools/test-matrix-local.js +205 -0
  82. package/dist/lib/tools/test-matrix-local.js.map +1 -0
  83. package/dist/lib/tools/testingDatabase.js +48 -0
  84. package/dist/lib/tools/testingDatabase.js.map +1 -0
  85. package/dist/types/playground/server.d.ts +1 -0
  86. package/dist/types/src/ConcurrentRunner.d.ts +30 -0
  87. package/dist/types/{OnInfo.d.ts → src/OnInfo.d.ts} +1 -1
  88. package/dist/types/{cronTasks.d.ts → src/cronTasks.d.ts} +44 -1
  89. package/dist/types/src/globalsCollection.d.ts +4 -0
  90. package/dist/types/src/index.d.ts +28 -0
  91. package/dist/types/src/mongoCompatibility.d.ts +29 -0
  92. package/dist/types/src/parseInterval.d.ts +12 -0
  93. package/dist/types/src/prefixFilterKeys.d.ts +11 -0
  94. package/dist/types/src/processInBatches.d.ts +10 -0
  95. package/dist/types/src/reactiveTasks/LeaderElector.d.ts +42 -0
  96. package/dist/types/src/reactiveTasks/MetricsCollector.d.ts +73 -0
  97. package/dist/types/src/reactiveTasks/ReactiveTaskManager.d.ts +18 -0
  98. package/dist/types/src/reactiveTasks/ReactiveTaskOps.d.ts +17 -0
  99. package/dist/types/src/reactiveTasks/ReactiveTaskPlanner.d.ts +62 -0
  100. package/dist/types/src/reactiveTasks/ReactiveTaskReconciler.d.ts +29 -0
  101. package/dist/types/src/reactiveTasks/ReactiveTaskRegistry.d.ts +34 -0
  102. package/dist/types/src/reactiveTasks/ReactiveTaskRepository.d.ts +59 -0
  103. package/dist/types/src/reactiveTasks/ReactiveTaskRetryStrategy.d.ts +21 -0
  104. package/dist/types/src/reactiveTasks/ReactiveTaskTypes.d.ts +389 -0
  105. package/dist/types/src/reactiveTasks/ReactiveTaskWorker.d.ts +36 -0
  106. package/dist/types/src/reactiveTasks/compileWatchProjection.d.ts +12 -0
  107. package/dist/types/src/reactiveTasks/index.d.ts +82 -0
  108. package/dist/types/src/reactiveTasks/queryToExpression.d.ts +13 -0
  109. package/dist/types/src/reactiveTasks/validateTaskFilter.d.ts +10 -0
  110. package/dist/types/src/task-management/OperationalTaskController.d.ts +59 -0
  111. package/dist/types/src/task-management/index.d.ts +3 -0
  112. package/dist/types/src/task-management/serveDashboard.d.ts +12 -0
  113. package/dist/types/src/task-management/types.d.ts +95 -0
  114. package/dist/types/tools/check-db-connection.d.ts +2 -0
  115. package/dist/types/tools/clean-testing-databases.d.ts +1 -0
  116. package/dist/types/tools/prepare-republish.d.ts +2 -0
  117. package/dist/types/tools/test-matrix-local.d.ts +1 -0
  118. package/dist/types/tools/testingDatabase.d.ts +2 -0
  119. package/docs/.vitepress/cache/deps/_metadata.json +31 -0
  120. package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js +12824 -0
  121. package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js.map +7 -0
  122. package/docs/.vitepress/cache/deps/package.json +3 -0
  123. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +4505 -0
  124. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +7 -0
  125. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +9731 -0
  126. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +7 -0
  127. package/docs/.vitepress/cache/deps/vue.js +347 -0
  128. package/docs/.vitepress/cache/deps/vue.js.map +7 -0
  129. package/docs/.vitepress/config.mts +50 -0
  130. package/docs/.vitepress/theme/index.ts +4 -0
  131. package/docs/.vitepress/theme/style.css +21 -0
  132. package/docs/assets/dashboard.png +0 -0
  133. package/docs/cron-tasks.md +172 -0
  134. package/docs/dashboard.md +117 -0
  135. package/docs/getters.md +31 -0
  136. package/docs/getting-started.md +186 -0
  137. package/docs/index.md +32 -0
  138. package/docs/initialization.md +59 -0
  139. package/docs/process-in-batches.md +73 -0
  140. package/docs/public/logo.png +0 -0
  141. package/docs/reactive-tasks.md +913 -0
  142. package/docs/with-lock.md +45 -0
  143. package/docs/with-transaction.md +65 -0
  144. package/grafana/reactive_tasks.json +765 -0
  145. package/package.json +131 -116
  146. package/dist/lib/OnError.js.map +0 -1
  147. package/dist/lib/OnInfo.js.map +0 -1
  148. package/dist/lib/createContinuousLock.js.map +0 -1
  149. package/dist/lib/cronTasks.js.map +0 -1
  150. package/dist/lib/getCollection.js.map +0 -1
  151. package/dist/lib/getMongoClient.js.map +0 -1
  152. package/dist/lib/index.js +0 -64
  153. package/dist/lib/index.js.map +0 -1
  154. package/dist/lib/initPromise.js +0 -17
  155. package/dist/lib/initPromise.js.map +0 -1
  156. package/dist/lib/withLock.js.map +0 -1
  157. package/dist/lib/withTransaction.js.map +0 -1
  158. package/dist/types/index.d.ts +0 -17
  159. /package/dist/types/{OnError.d.ts → src/OnError.d.ts} +0 -0
  160. /package/dist/types/{createContinuousLock.d.ts → src/createContinuousLock.d.ts} +0 -0
  161. /package/dist/types/{getCollection.d.ts → src/getCollection.d.ts} +0 -0
  162. /package/dist/types/{getMongoClient.d.ts → src/getMongoClient.d.ts} +0 -0
  163. /package/dist/types/{initPromise.d.ts → src/initPromise.d.ts} +0 -0
  164. /package/dist/types/{withLock.d.ts → src/withLock.d.ts} +0 -0
  165. /package/dist/types/{withTransaction.d.ts → src/withTransaction.d.ts} +0 -0
package/README.md CHANGED
@@ -1,15 +1,15 @@
1
1
  <br>
2
2
 
3
- <img src="https://raw.githubusercontent.com/VaclavObornik/mongodash/master/logo.png" alt="Mongodash" height="150" />
3
+ <img src="logo.png" alt="Mongodash" height="150" />
4
4
 
5
- A modern JavaScript & Typescript MongoDB-based utility library allowing to develop common app requirements incredible simple.
5
+ A modern JavaScript & Typescript MongoDB-based utility library. Includes [**Reactive Tasks**](https://vaclavobornik.github.io/mongodash/reactive-tasks), [**Cron Tasks**](https://vaclavobornik.github.io/mongodash/cron-tasks), [**Distributed Locks**](https://vaclavobornik.github.io/mongodash/with-lock), [**Transactions**](https://vaclavobornik.github.io/mongodash/with-transaction), and a [**Dashboard**](https://vaclavobornik.github.io/mongodash/dashboard).
6
6
 
7
7
  [![Coverage Status](https://coveralls.io/repos/github/VaclavObornik/mongodash/badge.svg?branch=master)](https://coveralls.io/github/VaclavObornik/mongodash?branch=master)
8
8
  [![Mutation testing badge](https://img.shields.io/endpoint?style=flat&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2FVaclavObornik%2Fmongodash%2Fmaster)](https://dashboard.stryker-mutator.io/reports/github.com/VaclavObornik/mongodash/master)
9
9
  ![Types](https://badgen.net/npm/types/tslib)
10
10
 
11
11
 
12
- See full documentation on [http://mongodash.com](http://mongodash.com)
12
+ See full documentation [here](https://vaclavobornik.github.io/mongodash/getting-started)
13
13
 
14
14
  ---
15
15
 
@@ -21,20 +21,38 @@ npm install mongodash
21
21
  ```
22
22
 
23
23
  Initialization
24
- ```javascript
25
- const mongodash = require('mongodash');
24
+ ```typescript
25
+ import mongodash from 'mongodash';
26
26
 
27
27
  await mongodash.init({
28
28
  uri: 'mongodb://mongodb0.example.com:27017/myDatabase'
29
29
  });
30
30
  ```
31
- See more initialization options [here](https://mongodash.readme.io/docs/initialization).
31
+ See more initialization options [here](https://vaclavobornik.github.io/mongodash/initialization).
32
+
33
+ <br>
34
+
35
+ ## Reactive Tasks
36
+
37
+ ```typescript
38
+ import { reactiveTask } from 'mongodash';
39
+
40
+ // Trigger a task when a user is updated
41
+ await reactiveTask({
42
+ task: 'on-user-update',
43
+ collection: 'users',
44
+ handler: async ({ docId }) => {
45
+ console.log('User changed:', docId);
46
+ }
47
+ });
48
+ ```
49
+ See detailed description [here](https://vaclavobornik.github.io/mongodash/reactive-tasks).
32
50
 
33
51
  <br>
34
52
 
35
53
  ## cronTask
36
- ```javascript
37
- const { cronTask } = require('mongodash');
54
+ ```typescript
55
+ import { cronTask } from 'mongodash';
38
56
 
39
57
  await cronTask('my-task-id', '5m 20s', async () => {
40
58
 
@@ -42,14 +60,14 @@ await cronTask('my-task-id', '5m 20s', async () => {
42
60
 
43
61
  });
44
62
  ```
45
- See detailed description and more cron tasks methods [here](https://mongodash.readme.io/docs/cron-tasks).
63
+ See detailed description and more cron tasks methods [here](https://vaclavobornik.github.io/mongodash/cron-tasks).
46
64
 
47
65
  <br>
48
66
 
49
67
  ## withLock
50
68
 
51
- ```javascript
52
- const { withLock } from 'mongodash';
69
+ ```typescript
70
+ import { withLock } from 'mongodash';
53
71
 
54
72
  await withLock('my-lock-id', async () => {
55
73
 
@@ -61,13 +79,13 @@ await withLock('my-lock-id', async () => {
61
79
 
62
80
  });
63
81
  ```
64
- See detailed description [here](https://mongodash.readme.io/docs/withlock).
82
+ See detailed description [here](https://vaclavobornik.github.io/mongodash/with-lock).
65
83
 
66
84
  <br>
67
85
 
68
86
  ## withTransaction
69
- ```javascript
70
- const { withTransaction, getCollection } = require('mongodash');
87
+ ```typescript
88
+ import { withTransaction, getCollection } from 'mongodash';
71
89
 
72
90
  const createdDocuments = await withTransaction(async (session) => {
73
91
 
@@ -75,30 +93,96 @@ const createdDocuments = await withTransaction(async (session) => {
75
93
  const myDocument2 = { value: 2 };
76
94
 
77
95
  const collection = getCollection('myCollection');
78
- await testCollection.insertOne(myDocument1, { session });
79
- await testCollection.insertOne(myDocument2, { session });
96
+ await collection.insertOne(myDocument1, { session });
97
+ await collection.insertOne(myDocument2, { session });
80
98
 
81
99
  return [myDocument1, myDocument2];
82
100
  });
83
101
  ```
84
- See detailed description [here](https://mongodash.readme.io/docs/withtransaction).
102
+ See detailed description [here](https://vaclavobornik.github.io/mongodash/with-transaction).
85
103
 
86
104
  <br>
87
105
 
88
106
  ## getCollection
89
- ```javascript
90
- const { getCollection } = require('mongodash');
107
+ ```typescript
108
+ import { getCollection } from 'mongodash';
91
109
 
92
110
  const myCollection = getCollection('myCollectionName');
93
111
  ```
94
- See detailed description [here](https://mongodash.readme.io/docs/getters).
112
+ See detailed description [here](https://vaclavobornik.github.io/mongodash/getters).
95
113
 
96
114
  <br>
97
115
 
98
116
  ## getMongoClient
99
- ```javascript
100
- const { getMongoClient } = require('mongodash');
117
+ ```typescript
118
+ import { getMongoClient } from 'mongodash';
101
119
 
102
120
  const mongoClient = getMongoClient();
103
121
  ```
104
- See detailed description [here](https://mongodash.readme.io/docs/getters).
122
+ See detailed description [here](https://vaclavobornik.github.io/mongodash/getters).
123
+
124
+ <br>
125
+
126
+ ## processInBatches
127
+
128
+ ```typescript
129
+ import { processInBatches } from 'mongodash';
130
+
131
+ await processInBatches(
132
+ db.collection('users'),
133
+ { status: 'active' },
134
+ async (user) => {
135
+ // Transform user data
136
+ return {
137
+ updateOne: {
138
+ filter: { _id: user._id },
139
+ update: { $set: { processed: true } }
140
+ }
141
+ };
142
+ },
143
+ async (batchOps) => {
144
+ // Execute batch
145
+ await db.collection('users').bulkWrite(batchOps);
146
+ }
147
+ );
148
+ ```
149
+ See detailed description [here](https://vaclavobornik.github.io/mongodash/process-in-batches).
150
+
151
+ <br>
152
+
153
+ ## Dashboard
154
+
155
+ ![Dashboard Screenshot](docs/assets/dashboard.png)
156
+
157
+ ```typescript
158
+ import * as express from 'express';
159
+ import { serveDashboard } from 'mongodash';
160
+
161
+ const app = express();
162
+
163
+ app.use('/dashboard', async (req, res, next) => {
164
+ // Check if mongodash handled the request
165
+ const handled = await serveDashboard(req, res);
166
+ if (!handled) {
167
+ next();
168
+ }
169
+ });
170
+
171
+ app.listen(3000);
172
+ ```
173
+
174
+ See detailed description [here](https://vaclavobornik.github.io/mongodash/dashboard).
175
+
176
+ <br>
177
+
178
+ ## getPrometheusMetrics
179
+
180
+ ```typescript
181
+ import { getPrometheusMetrics } from 'mongodash';
182
+
183
+ app.get('/metrics', async (req, res) => {
184
+ const registry = await getPrometheusMetrics();
185
+ res.set('Content-Type', registry.contentType);
186
+ res.end(await registry.metrics());
187
+ });
188
+ ```