@slango/mangusta 2.0.2 → 2.1.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.
@@ -1,4 +1,4 @@
1
1
 
2
- > @slango/mangusta@2.0.2 build /home/runner/work/slango/slango/packages/mangusta
2
+ > @slango/mangusta@2.1.0 build /home/runner/work/slango/slango/packages/mangusta
3
3
  > tsc -p tsconfig.build.json
4
4
 
@@ -1,4 +1,4 @@
1
1
 
2
- > @slango/mangusta@2.0.2 lint /home/runner/work/slango/slango/packages/mangusta
2
+ > @slango/mangusta@2.1.0 lint /home/runner/work/slango/slango/packages/mangusta
3
3
  > eslint . --max-warnings 0
4
4
 
@@ -1,29 +1,29 @@
1
1
 
2
- > @slango/mangusta@2.0.2 test /home/runner/work/slango/slango/packages/mangusta
2
+ > @slango/mangusta@2.1.0 test /home/runner/work/slango/slango/packages/mangusta
3
3
  > vitest --run
4
4
 
5
5
 
6
6
   RUN  v4.0.16 /home/runner/work/slango/slango/packages/mangusta
7
7
 
8
- stdout | src/middleware/compactId.spec.ts
8
+ stdout | src/middleware/tags.spec.ts
9
9
  Downloading MongoDB "8.2.1": 0% (0mb / 122mb)
10
10
 
11
- stdout | src/middleware/compactId.spec.ts
11
+ stdout | src/middleware/tags.spec.ts
12
12
  Downloading MongoDB "8.2.1": 100% (122mb / 122mb)
13
13
 
14
- stdout | src/middleware/compactId.spec.ts
14
+ stdout | src/middleware/tags.spec.ts
15
15
  Downloading MongoDB "8.2.1": 100% (0mb / 0mb)
16
16
 
17
- ✓ src/middleware/compactId.spec.ts (6 tests) 4824ms
18
- ✓ src/middleware/email.spec.ts (7 tests) 260ms
19
- ✓ src/middleware/owner.spec.ts (6 tests) 224ms
20
- ✓ src/middleware/tags.spec.ts (8 tests) 6310ms
21
- ✓ src/middleware/reactions.spec.ts (7 tests) 6387ms
22
- ✓ src/middleware/password.spec.ts (4 tests) 566ms
23
- ✓ src/middleware/timestamps.spec.ts (3 tests) 251ms
17
+ ✓ src/middleware/tags.spec.ts (8 tests) 4371ms
18
+ ✓ src/middleware/email.spec.ts (7 tests) 251ms
19
+ ✓ src/middleware/owner.spec.ts (6 tests) 221ms
20
+ ✓ src/middleware/compactId.spec.ts (6 tests) 6391ms
21
+ ✓ src/middleware/reactions.spec.ts (7 tests) 6374ms
22
+ ✓ src/middleware/password.spec.ts (4 tests) 598ms
23
+ ✓ src/middleware/timestamps.spec.ts (3 tests) 221ms
24
24
 
25
25
   Test Files  7 passed (7)
26
26
   Tests  41 passed (41)
27
-  Start at  21:54:08
28
-  Duration  8.27s (transform 459ms, setup 0ms, import 3.75s, tests 18.82s, environment 1ms)
27
+  Start at  13:49:30
28
+  Duration  8.30s (transform 482ms, setup 0ms, import 3.57s, tests 18.43s, environment 3ms)
29
29
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @slango/mangusta
2
2
 
3
+ ## 2.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 3b574f4: mangusta now export mongoose test environment
8
+
3
9
  ## 2.0.2
4
10
 
5
11
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slango/mangusta",
3
- "version": "2.0.2",
3
+ "version": "2.1.0",
4
4
  "private": false,
5
5
  "description": "Mongoose middlewares and utilities",
6
6
  "type": "module",
@@ -8,14 +8,25 @@
8
8
  "./*": {
9
9
  "import": "./dist/*.js",
10
10
  "types": "./dist/*.d.ts"
11
+ },
12
+ "./test-utils/*": {
13
+ "import": "./dist/test-utils/*.js",
14
+ "types": "./dist/test-utils/*.d.ts"
11
15
  }
12
16
  },
13
17
  "dependencies": {
14
18
  "bcrypt": "6.0.0",
19
+ "mongodb-memory-server": "11.0.0",
15
20
  "nanoid": "5.1.6"
16
21
  },
17
22
  "peerDependencies": {
18
- "mongoose": "^9.0.2"
23
+ "mongoose": "^9.0.2",
24
+ "vitest": "^4.0.0"
25
+ },
26
+ "peerDependenciesMeta": {
27
+ "vitest": {
28
+ "optional": true
29
+ }
19
30
  },
20
31
  "devDependencies": {
21
32
  "@types/bcrypt": "6.0.0",
@@ -25,9 +36,9 @@
25
36
  "mongoose": "9.0.2",
26
37
  "typescript": "5.9.3",
27
38
  "vitest": "4.0.16",
28
- "@slango.configs/eslint": "1.1.34",
39
+ "@slango.configs/eslint": "1.1.35",
29
40
  "@slango.configs/typescript": "1.0.7",
30
- "@slango.configs/vitest": "1.0.49"
41
+ "@slango.configs/vitest": "2.0.0"
31
42
  },
32
43
  "scripts": {
33
44
  "build": "tsc -p tsconfig.build.json",
@@ -1,8 +1,8 @@
1
- import { setupMongoTestEnvironment } from '@slango.configs/vitest/helpers/mongooseTestEnvironment';
2
1
  import { Document } from 'mongoose';
3
2
  import { describe, expect, it } from 'vitest';
4
3
 
5
4
  import { createModelWithPlugin } from '../test-utils/model.js';
5
+ import { setupMongoTestEnvironment } from '../test-utils/mongooseTestEnvironment.js';
6
6
  import { PluginFunction } from '../types.js';
7
7
  import compactIdMiddleware, { CompactIdMiddlewareOptions, WithCompactId } from './compactId.js';
8
8
 
@@ -1,7 +1,7 @@
1
- import { setupMongoTestEnvironment } from '@slango.configs/vitest/helpers/mongooseTestEnvironment';
2
1
  import mongoose, { Document, model, Schema } from 'mongoose';
3
2
  import { describe, expect, it } from 'vitest';
4
3
 
4
+ import { setupMongoTestEnvironment } from '../test-utils/mongooseTestEnvironment.js';
5
5
  import emailMiddleware from './email.js';
6
6
 
7
7
  setupMongoTestEnvironment();
@@ -1,8 +1,8 @@
1
- import { setupMongoTestEnvironment } from '@slango.configs/vitest/helpers/mongooseTestEnvironment';
2
1
  import mongoose, { Document, Types } from 'mongoose';
3
2
  import { describe, expect, it } from 'vitest';
4
3
 
5
4
  import { createModelWithPlugin } from '../test-utils/model.js';
5
+ import { setupMongoTestEnvironment } from '../test-utils/mongooseTestEnvironment.js';
6
6
  import { PluginFunction } from '../types.js';
7
7
  import ownerMiddleware, { OwnerMiddlewareOptions, WithOwner } from './owner.js';
8
8
 
@@ -1,9 +1,9 @@
1
- import { setupMongoTestEnvironment } from '@slango.configs/vitest/helpers/mongooseTestEnvironment';
2
1
  import mongoose, { Document, model, Schema } from 'mongoose';
3
2
  import { describe, expect, it } from 'vitest';
4
3
 
5
4
  import type { PluginFunction } from '../types.js';
6
5
 
6
+ import { setupMongoTestEnvironment } from '../test-utils/mongooseTestEnvironment.js';
7
7
  import passwordMiddleware, { PasswordMiddlewareOptions, WithPassword } from './password.js';
8
8
 
9
9
  setupMongoTestEnvironment();
@@ -1,10 +1,10 @@
1
- import { setupMongoTestEnvironment } from '@slango.configs/vitest/helpers/mongooseTestEnvironment';
2
1
  import { Document, Schema, Types } from 'mongoose';
3
2
  import { describe, expect, it } from 'vitest';
4
3
 
5
4
  import type { PluginFunction } from '../types.js';
6
5
 
7
6
  import { createModelWithPlugin } from '../test-utils/model.js';
7
+ import { setupMongoTestEnvironment } from '../test-utils/mongooseTestEnvironment.js';
8
8
  import reactionsMiddleware, {
9
9
  defaultReactionTypes,
10
10
  ReactionCountSummary,
@@ -1,8 +1,8 @@
1
- import { setupMongoTestEnvironment } from '@slango.configs/vitest/helpers/mongooseTestEnvironment';
2
1
  import mongoose, { Document } from 'mongoose';
3
2
  import { describe, expect, it } from 'vitest';
4
3
 
5
4
  import { createModelWithPlugin } from '../test-utils/model.js';
5
+ import { setupMongoTestEnvironment } from '../test-utils/mongooseTestEnvironment.js';
6
6
  import { PluginFunction } from '../types.js';
7
7
  import tagsMiddleware, { TagsMiddlewareOptions, WithTags } from './tags.js';
8
8
 
@@ -1,9 +1,9 @@
1
- import { setupMongoTestEnvironment } from '@slango.configs/vitest/helpers/mongooseTestEnvironment';
2
1
  import { Document } from 'mongoose';
3
2
  import { setTimeout as delay } from 'node:timers/promises';
4
3
  import { describe, expect, it } from 'vitest';
5
4
 
6
5
  import { createModelWithPlugin } from '../test-utils/model.js';
6
+ import { setupMongoTestEnvironment } from '../test-utils/mongooseTestEnvironment.js';
7
7
  import timestampsMiddleware, { TimestampsMiddlewareOptions, WithTimestamps } from './timestamps.js';
8
8
 
9
9
  setupMongoTestEnvironment();
@@ -0,0 +1,54 @@
1
+ import { MongoMemoryServer } from 'mongodb-memory-server';
2
+ import mongoose from 'mongoose';
3
+ import { afterAll, afterEach, beforeAll } from 'vitest';
4
+
5
+ const ConnectionStates = mongoose.ConnectionStates;
6
+
7
+ type SetupMongoTestEnvironmentOptions = {
8
+ preserveCollections?: string[];
9
+ };
10
+
11
+ export function setupMongoTestEnvironment({
12
+ preserveCollections = [],
13
+ }: SetupMongoTestEnvironmentOptions = {}) {
14
+ let mongoServer: MongoMemoryServer;
15
+
16
+ beforeAll(async () => {
17
+ mongoServer = await MongoMemoryServer.create();
18
+ const uri = mongoServer.getUri();
19
+ process.env.MONGO_URI = uri;
20
+ await mongoose.connect(uri, { dbName: 'test-db' });
21
+
22
+ await waitForDatabaseConnection();
23
+ });
24
+
25
+ afterAll(async () => {
26
+ await mongoose.disconnect();
27
+ await mongoServer.stop();
28
+ });
29
+
30
+ afterEach(async () => {
31
+ if (mongoose.connection.db) {
32
+ const collections = await mongoose.connection.db.collections();
33
+ for (const collection of collections) {
34
+ if (!preserveCollections.includes(collection.collectionName)) {
35
+ await collection.deleteMany({});
36
+ }
37
+ }
38
+ }
39
+ });
40
+ }
41
+
42
+ async function waitForDatabaseConnection(maxRetries = 5, interval = 1000) {
43
+ let retries = 0;
44
+
45
+ while (mongoose.connection.readyState !== ConnectionStates.connected && retries < maxRetries) {
46
+ await new Promise((resolve) => setTimeout(resolve, interval));
47
+ retries++;
48
+ console.log(`Retrying database connection (${retries}/${maxRetries})...`);
49
+ }
50
+
51
+ if (mongoose.connection.readyState !== ConnectionStates.connected) {
52
+ throw new Error('Failed to connect to the database within the allowed retries.');
53
+ }
54
+ }