mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-10-13 09:06:10 +08:00
test: use mongodb testcontainer (@fehmer) (#6808)
This commit is contained in:
parent
5af3a81467
commit
d9009e51cc
11 changed files with 446 additions and 372 deletions
|
@ -3,10 +3,8 @@ import { ObjectId } from "mongodb";
|
|||
import * as UserDal from "../../../src/dal/user";
|
||||
import * as LeaderboardsDal from "../../../src/dal/leaderboards";
|
||||
import * as PublicDal from "../../../src/dal/public";
|
||||
import * as Configuration from "../../../src/init/configuration";
|
||||
import type { DBLeaderboardEntry } from "../../../src/dal/leaderboards";
|
||||
import type { PersonalBest } from "@monkeytype/schemas/shared";
|
||||
const configuration = Configuration.getCachedConfiguration();
|
||||
|
||||
import * as DB from "../../../src/init/db";
|
||||
import { LbPersonalBests } from "../../../src/utils/pb";
|
||||
|
@ -14,6 +12,9 @@ import { describeIntegration } from "..";
|
|||
import { pb } from "../../__testData__/users";
|
||||
|
||||
describeIntegration()("LeaderboardsDal", () => {
|
||||
afterEach(async () => {
|
||||
await DB.collection("users").deleteMany({});
|
||||
});
|
||||
describe("update", () => {
|
||||
it("should ignore unapplicable users on leaderboard", async () => {
|
||||
//GIVEN
|
||||
|
@ -216,22 +217,24 @@ describeIntegration()("LeaderboardsDal", () => {
|
|||
]);
|
||||
});
|
||||
|
||||
it("should create leaderboard with premium", async () => {
|
||||
await enablePremiumFeatures(true);
|
||||
//TODO figure out why premium with expireTimestamp is not working
|
||||
it.skip("should create leaderboard with premium", async () => {
|
||||
//GIVEN
|
||||
const noPremium = await createUser(lbBests(pb(4)));
|
||||
const lifetime = await createUser(lbBests(pb(3)), premium(-1));
|
||||
const validPremium = await createUser(lbBests(pb(2)), premium(10));
|
||||
const validPremium = await createUser(lbBests(pb(2)), premium(1000));
|
||||
const expiredPremium = await createUser(lbBests(pb(1)), premium(-10));
|
||||
|
||||
//WHEN
|
||||
await LeaderboardsDal.update("time", "15", "english");
|
||||
|
||||
const result = (await LeaderboardsDal.get(
|
||||
"time",
|
||||
"15",
|
||||
"english",
|
||||
0,
|
||||
50
|
||||
50,
|
||||
true
|
||||
)) as DBLeaderboardEntry[];
|
||||
|
||||
//THEN
|
||||
|
@ -253,7 +256,6 @@ describeIntegration()("LeaderboardsDal", () => {
|
|||
]);
|
||||
});
|
||||
it("should create leaderboard without premium if feature disabled", async () => {
|
||||
await enablePremiumFeatures(false);
|
||||
//GIVEN
|
||||
// const lifetime = await createUser(lbBests(pb(3)), premium(-1));
|
||||
|
||||
|
@ -264,7 +266,8 @@ describeIntegration()("LeaderboardsDal", () => {
|
|||
"15",
|
||||
"english",
|
||||
0,
|
||||
50
|
||||
50,
|
||||
false
|
||||
)) as DBLeaderboardEntry[];
|
||||
|
||||
//THEN
|
||||
|
@ -348,13 +351,3 @@ type ExpectedLbEntry = {
|
|||
badgeId?: number;
|
||||
isPremium?: boolean;
|
||||
};
|
||||
|
||||
async function enablePremiumFeatures(premium: boolean): Promise<void> {
|
||||
const mockConfig = _.merge(await configuration, {
|
||||
users: { premium: { enabled: premium } },
|
||||
});
|
||||
|
||||
vi.spyOn(Configuration, "getCachedConfiguration").mockResolvedValue(
|
||||
mockConfig
|
||||
);
|
||||
}
|
||||
|
|
|
@ -7,12 +7,12 @@ import { PersonalBest, PersonalBests } from "@monkeytype/schemas/shared";
|
|||
import { CustomThemeColors } from "@monkeytype/schemas/configs";
|
||||
import { describeIntegration } from "..";
|
||||
|
||||
const mockPersonalBest = {
|
||||
const mockPersonalBest: PersonalBest = {
|
||||
acc: 1,
|
||||
consistency: 1,
|
||||
difficulty: "normal" as const,
|
||||
lazyMode: true,
|
||||
language: "no",
|
||||
language: "polish",
|
||||
punctuation: false,
|
||||
raw: 230,
|
||||
wpm: 215,
|
||||
|
@ -86,18 +86,19 @@ const mockResultFilter: ResultFilters = {
|
|||
|
||||
const mockDbResultFilter = { ...mockResultFilter, _id: new ObjectId() };
|
||||
|
||||
describeIntegration()("UserDal", () => {
|
||||
describeIntegration().sequential("UserDal", () => {
|
||||
it("should be able to insert users", async () => {
|
||||
// given
|
||||
const uid = new ObjectId().toHexString();
|
||||
const newUser = {
|
||||
name: "Test",
|
||||
email: "mockemail@email.com",
|
||||
uid: "userId",
|
||||
uid,
|
||||
};
|
||||
|
||||
// when
|
||||
await UserDAL.addUser(newUser.name, newUser.email, newUser.uid);
|
||||
const insertedUser = await UserDAL.getUser("userId", "test");
|
||||
const insertedUser = await UserDAL.getUser(newUser.uid, "test");
|
||||
|
||||
// then
|
||||
expect(insertedUser.email).toBe(newUser.email);
|
||||
|
@ -107,10 +108,11 @@ describeIntegration()("UserDal", () => {
|
|||
|
||||
it("should error if the user already exists", async () => {
|
||||
// given
|
||||
const uid = new ObjectId().toHexString();
|
||||
const newUser = {
|
||||
name: "Test",
|
||||
email: "mockemail@email.com",
|
||||
uid: "userId",
|
||||
uid: uid,
|
||||
};
|
||||
|
||||
// when
|
||||
|
@ -125,23 +127,23 @@ describeIntegration()("UserDal", () => {
|
|||
|
||||
it("isNameAvailable should correctly check if a username is available", async () => {
|
||||
// given
|
||||
await UserDAL.addUser("user1", "user1@email.com", "userId1");
|
||||
await UserDAL.addUser("user2", "user2@email.com", "userId2");
|
||||
const { uid: user1 } = await UserTestData.createUser({ name: "user1" });
|
||||
await UserTestData.createUser({ name: "user2" });
|
||||
|
||||
const testCases = [
|
||||
{
|
||||
name: "user1",
|
||||
whosChecking: "userId1",
|
||||
whosChecking: user1,
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "USER1",
|
||||
whosChecking: "userId1",
|
||||
whosChecking: user1,
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "user2",
|
||||
whosChecking: "userId1",
|
||||
whosChecking: user1,
|
||||
expected: false,
|
||||
},
|
||||
];
|
||||
|
@ -155,57 +157,35 @@ describeIntegration()("UserDal", () => {
|
|||
|
||||
it("updatename should not allow unavailable usernames", async () => {
|
||||
// given
|
||||
const mockUsers = [...Array(3).keys()]
|
||||
.map((id) => ({
|
||||
name: `Test${id}`,
|
||||
email: `mockemail@email.com${id}`,
|
||||
uid: `userId${id}`,
|
||||
}))
|
||||
.map(({ name, email, uid }) => UserDAL.addUser(name, email, uid));
|
||||
await Promise.all(mockUsers);
|
||||
|
||||
const userToUpdateNameFor = await UserDAL.getUser("userId0", "test");
|
||||
const userWithNameTaken = await UserDAL.getUser("userId1", "test");
|
||||
const user1 = await UserTestData.createUser({ name: "bob" });
|
||||
const user2 = await UserTestData.createUser({ name: "kevin" });
|
||||
const _decoy = await UserTestData.createUser();
|
||||
|
||||
// when, then
|
||||
await expect(
|
||||
UserDAL.updateName(
|
||||
userToUpdateNameFor.uid,
|
||||
userWithNameTaken.name,
|
||||
userToUpdateNameFor.name
|
||||
)
|
||||
UserDAL.updateName(user1.uid, user2.name, user1.name)
|
||||
).rejects.toThrow("Username already taken");
|
||||
});
|
||||
|
||||
it("same usernames (different casing) should be available only for the same user", async () => {
|
||||
await UserDAL.addUser("User1", "user1@test.com", "uid1");
|
||||
const user1 = await UserTestData.createUser({ name: "bob" });
|
||||
const user2 = await UserTestData.createUser({ name: "kevin" });
|
||||
|
||||
await UserDAL.addUser("User2", "user2@test.com", "uid2");
|
||||
await UserDAL.updateName(user1.uid, "BOB", user1.name);
|
||||
|
||||
const user1 = await UserDAL.getUser("uid1", "test");
|
||||
const user2 = await UserDAL.getUser("uid2", "test");
|
||||
|
||||
await UserDAL.updateName(user1.uid, "user1", user1.name);
|
||||
|
||||
const updatedUser1 = await UserDAL.getUser("uid1", "test");
|
||||
const updatedUser1 = await UserDAL.getUser(user1.uid, "test");
|
||||
|
||||
// when, then
|
||||
expect(updatedUser1.name).toBe("user1");
|
||||
expect(updatedUser1.name).toBe("BOB");
|
||||
|
||||
await expect(
|
||||
UserDAL.updateName(user2.uid, "USER1", user2.name)
|
||||
UserDAL.updateName(user2.uid, "bob", user2.name)
|
||||
).rejects.toThrow("Username already taken");
|
||||
});
|
||||
|
||||
it("UserDAL.updateName should change the name of a user", async () => {
|
||||
// given
|
||||
const testUser = {
|
||||
name: "Test",
|
||||
email: "mockemail@email.com",
|
||||
uid: "userId",
|
||||
};
|
||||
|
||||
await UserDAL.addUser(testUser.name, testUser.email, testUser.uid);
|
||||
const testUser = await UserTestData.createUser({ name: "bob" });
|
||||
|
||||
// when
|
||||
await UserDAL.updateName(testUser.uid, "renamedTestUser", testUser.name);
|
||||
|
@ -217,12 +197,7 @@ describeIntegration()("UserDal", () => {
|
|||
|
||||
it("clearPb should clear the personalBests of a user", async () => {
|
||||
// given
|
||||
const testUser = {
|
||||
name: "Test",
|
||||
email: "mockemail@email.com",
|
||||
uid: "userId",
|
||||
};
|
||||
await UserDAL.addUser(testUser.name, testUser.email, testUser.uid);
|
||||
const testUser = await UserTestData.createUser({ name: "bob" });
|
||||
await UserDAL.getUsersCollection().updateOne(
|
||||
{ uid: testUser.uid },
|
||||
{
|
||||
|
@ -259,13 +234,7 @@ describeIntegration()("UserDal", () => {
|
|||
|
||||
it("autoBan should automatically ban after configured anticheat triggers", async () => {
|
||||
// given
|
||||
const testUser = {
|
||||
name: "Test",
|
||||
email: "mockemail@email.com",
|
||||
uid: "userId",
|
||||
};
|
||||
|
||||
await UserDAL.addUser(testUser.name, testUser.email, testUser.uid);
|
||||
const testUser = await UserTestData.createUser({ name: "bob" });
|
||||
|
||||
// when
|
||||
Date.now = vi.fn(() => 0);
|
||||
|
@ -281,13 +250,7 @@ describeIntegration()("UserDal", () => {
|
|||
|
||||
it("autoBan should not ban ban if triggered once", async () => {
|
||||
// given
|
||||
const testUser = {
|
||||
name: "Test",
|
||||
email: "mockemail@email.com",
|
||||
uid: "userId",
|
||||
};
|
||||
|
||||
await UserDAL.addUser(testUser.name, testUser.email, testUser.uid);
|
||||
const testUser = await UserTestData.createUser({ name: "bob" });
|
||||
|
||||
// when
|
||||
Date.now = vi.fn(() => 0);
|
||||
|
@ -301,13 +264,7 @@ describeIntegration()("UserDal", () => {
|
|||
|
||||
it("autoBan should correctly remove old anticheat triggers", async () => {
|
||||
// given
|
||||
const testUser = {
|
||||
name: "Test",
|
||||
email: "mockemail@email.com",
|
||||
uid: "userId",
|
||||
};
|
||||
|
||||
await UserDAL.addUser(testUser.name, testUser.email, testUser.uid);
|
||||
const testUser = await UserTestData.createUser({ name: "bob" });
|
||||
|
||||
// when
|
||||
Date.now = vi.fn(() => 0);
|
||||
|
@ -656,10 +613,11 @@ describeIntegration()("UserDal", () => {
|
|||
});
|
||||
|
||||
it("updateProfile should appropriately handle multiple profile updates", async () => {
|
||||
await UserDAL.addUser("test name", "test email", "TestID");
|
||||
const uid = new ObjectId().toHexString();
|
||||
await UserDAL.addUser("test name", "test email", uid);
|
||||
|
||||
await UserDAL.updateProfile(
|
||||
"TestID",
|
||||
uid,
|
||||
{
|
||||
bio: "test bio",
|
||||
},
|
||||
|
@ -668,7 +626,7 @@ describeIntegration()("UserDal", () => {
|
|||
}
|
||||
);
|
||||
|
||||
const user = await UserDAL.getUser("TestID", "test add result filters");
|
||||
const user = await UserDAL.getUser(uid, "test add result filters");
|
||||
expect(user.profileDetails).toStrictEqual({
|
||||
bio: "test bio",
|
||||
});
|
||||
|
@ -677,7 +635,7 @@ describeIntegration()("UserDal", () => {
|
|||
});
|
||||
|
||||
await UserDAL.updateProfile(
|
||||
"TestID",
|
||||
uid,
|
||||
{
|
||||
keyboard: "test keyboard",
|
||||
socialProfiles: {
|
||||
|
@ -694,10 +652,7 @@ describeIntegration()("UserDal", () => {
|
|||
}
|
||||
);
|
||||
|
||||
const updatedUser = await UserDAL.getUser(
|
||||
"TestID",
|
||||
"test add result filters"
|
||||
);
|
||||
const updatedUser = await UserDAL.getUser(uid, "test add result filters");
|
||||
expect(updatedUser.profileDetails).toStrictEqual({
|
||||
bio: "test bio",
|
||||
keyboard: "test keyboard",
|
||||
|
@ -715,7 +670,7 @@ describeIntegration()("UserDal", () => {
|
|||
});
|
||||
|
||||
await UserDAL.updateProfile(
|
||||
"TestID",
|
||||
uid,
|
||||
{
|
||||
bio: "test bio 2",
|
||||
socialProfiles: {
|
||||
|
@ -732,10 +687,7 @@ describeIntegration()("UserDal", () => {
|
|||
}
|
||||
);
|
||||
|
||||
const updatedUser2 = await UserDAL.getUser(
|
||||
"TestID",
|
||||
"test add result filters"
|
||||
);
|
||||
const updatedUser2 = await UserDAL.getUser(uid, "test add result filters");
|
||||
expect(updatedUser2.profileDetails).toStrictEqual({
|
||||
bio: "test bio 2",
|
||||
keyboard: "test keyboard",
|
||||
|
@ -755,10 +707,11 @@ describeIntegration()("UserDal", () => {
|
|||
});
|
||||
|
||||
it("resetUser should reset user", async () => {
|
||||
await UserDAL.addUser("test name", "test email", "TestID");
|
||||
const uid = new ObjectId().toHexString();
|
||||
await UserDAL.addUser("test name", "test email", uid);
|
||||
|
||||
await UserDAL.updateProfile(
|
||||
"TestID",
|
||||
uid,
|
||||
{
|
||||
bio: "test bio",
|
||||
keyboard: "test keyboard",
|
||||
|
@ -772,14 +725,11 @@ describeIntegration()("UserDal", () => {
|
|||
}
|
||||
);
|
||||
|
||||
await UserDAL.incrementBananas("TestID", 100);
|
||||
await UserDAL.incrementXp("TestID", 15);
|
||||
await UserDAL.incrementBananas(uid, 100);
|
||||
await UserDAL.incrementXp(uid, 15);
|
||||
|
||||
await UserDAL.resetUser("TestID");
|
||||
const resetUser = await UserDAL.getUser(
|
||||
"TestID",
|
||||
"test add result filters"
|
||||
);
|
||||
await UserDAL.resetUser(uid);
|
||||
const resetUser = await UserDAL.getUser(uid, "test add result filters");
|
||||
|
||||
expect(resetUser.profileDetails).toStrictEqual({
|
||||
bio: "",
|
||||
|
@ -801,14 +751,15 @@ describeIntegration()("UserDal", () => {
|
|||
});
|
||||
|
||||
it("getInbox should return the user's inbox", async () => {
|
||||
await UserDAL.addUser("test name", "test email", "TestID");
|
||||
const uid = new ObjectId().toHexString();
|
||||
await UserDAL.addUser("test name", "test email", uid);
|
||||
|
||||
const emptyInbox = await UserDAL.getInbox("TestID");
|
||||
const emptyInbox = await UserDAL.getInbox(uid);
|
||||
|
||||
expect(emptyInbox).toStrictEqual([]);
|
||||
|
||||
await UserDAL.addToInbox(
|
||||
"TestID",
|
||||
uid,
|
||||
[
|
||||
{
|
||||
subject: `Hello!`,
|
||||
|
@ -820,7 +771,7 @@ describeIntegration()("UserDal", () => {
|
|||
}
|
||||
);
|
||||
|
||||
const inbox = await UserDAL.getInbox("TestID");
|
||||
const inbox = await UserDAL.getInbox(uid);
|
||||
|
||||
expect(inbox).toStrictEqual([
|
||||
{
|
||||
|
@ -830,7 +781,8 @@ describeIntegration()("UserDal", () => {
|
|||
});
|
||||
|
||||
it("addToInbox discards mail if inbox is full", async () => {
|
||||
await UserDAL.addUser("test name", "test email", "TestID");
|
||||
const uid = new ObjectId().toHexString();
|
||||
await UserDAL.addUser("test name", "test email", uid);
|
||||
|
||||
const config = {
|
||||
enabled: true,
|
||||
|
@ -838,7 +790,7 @@ describeIntegration()("UserDal", () => {
|
|||
};
|
||||
|
||||
await UserDAL.addToInbox(
|
||||
"TestID",
|
||||
uid,
|
||||
[
|
||||
{
|
||||
subject: "Hello 1!",
|
||||
|
@ -848,7 +800,7 @@ describeIntegration()("UserDal", () => {
|
|||
);
|
||||
|
||||
await UserDAL.addToInbox(
|
||||
"TestID",
|
||||
uid,
|
||||
[
|
||||
{
|
||||
subject: "Hello 2!",
|
||||
|
@ -857,7 +809,7 @@ describeIntegration()("UserDal", () => {
|
|||
config
|
||||
);
|
||||
|
||||
const inbox = await UserDAL.getInbox("TestID");
|
||||
const inbox = await UserDAL.getInbox(uid);
|
||||
|
||||
expect(inbox).toStrictEqual([
|
||||
{
|
||||
|
@ -867,13 +819,13 @@ describeIntegration()("UserDal", () => {
|
|||
});
|
||||
|
||||
it("addToInboxBulk should add mail to multiple users", async () => {
|
||||
await UserDAL.addUser("test name", "test email", "TestID");
|
||||
await UserDAL.addUser("test name 2", "test email 2", "TestID2");
|
||||
const { uid: user1 } = await UserTestData.createUser();
|
||||
const { uid: user2 } = await UserTestData.createUser();
|
||||
|
||||
await UserDAL.addToInboxBulk(
|
||||
[
|
||||
{
|
||||
uid: "TestID",
|
||||
uid: user1,
|
||||
mail: [
|
||||
{
|
||||
subject: `Hello!`,
|
||||
|
@ -881,7 +833,7 @@ describeIntegration()("UserDal", () => {
|
|||
],
|
||||
},
|
||||
{
|
||||
uid: "TestID2",
|
||||
uid: user2,
|
||||
mail: [
|
||||
{
|
||||
subject: `Hello 2!`,
|
||||
|
@ -895,8 +847,8 @@ describeIntegration()("UserDal", () => {
|
|||
}
|
||||
);
|
||||
|
||||
const inbox = await UserDAL.getInbox("TestID");
|
||||
const inbox2 = await UserDAL.getInbox("TestID2");
|
||||
const inbox = await UserDAL.getInbox(user1);
|
||||
const inbox2 = await UserDAL.getInbox(user2);
|
||||
|
||||
expect(inbox).toStrictEqual([
|
||||
{
|
||||
|
@ -955,7 +907,7 @@ describeIntegration()("UserDal", () => {
|
|||
|
||||
const streak = await UserDAL.updateStreak(uid, milis);
|
||||
|
||||
await expect(streak).toBe(expectedStreak);
|
||||
expect(streak).toBe(expectedStreak);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -1013,7 +965,7 @@ describeIntegration()("UserDal", () => {
|
|||
|
||||
const streak = await UserDAL.updateStreak(uid, milis);
|
||||
|
||||
await expect(streak).toBe(expectedStreak);
|
||||
expect(streak).toBe(expectedStreak);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -1055,7 +1007,7 @@ describeIntegration()("UserDal", () => {
|
|||
|
||||
const streak = await UserDAL.updateStreak(uid, milis);
|
||||
|
||||
await expect(streak).toBe(expectedStreak);
|
||||
expect(streak).toBe(expectedStreak);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,17 +1,8 @@
|
|||
import { Collection, Db, MongoClient, WithId } from "mongodb";
|
||||
import { afterAll, beforeAll, afterEach } from "vitest";
|
||||
import * as MongoDbMock from "vitest-mongodb";
|
||||
import { MongoDbMockConfig } from "../global-setup";
|
||||
import { isIntegrationTest } from ".";
|
||||
import { setupCommonMocks } from "../setup-common-mocks";
|
||||
|
||||
process.env["MODE"] = "dev";
|
||||
//process.env["MONGOMS_DISTRO"] = "ubuntu-22.04";
|
||||
|
||||
if (!isIntegrationTest) {
|
||||
console.error("wrong environment");
|
||||
process.exit();
|
||||
}
|
||||
|
||||
if (!process.env["REDIS_URI"]) {
|
||||
// use mock if not set
|
||||
|
@ -20,15 +11,9 @@ if (!process.env["REDIS_URI"]) {
|
|||
|
||||
let db: Db;
|
||||
let client: MongoClient;
|
||||
const collectionsForCleanUp = ["users"];
|
||||
|
||||
beforeAll(async () => {
|
||||
//don't add any configuration here, add to global-setup.ts instead.
|
||||
|
||||
console.log("integration setup mongo");
|
||||
await MongoDbMock.setup(MongoDbMockConfig);
|
||||
|
||||
client = new MongoClient(globalThis.__MONGO_URI__);
|
||||
client = new MongoClient(process.env["TEST_DB_URL"] as string);
|
||||
await client.connect();
|
||||
db = client.db();
|
||||
|
||||
|
@ -41,22 +26,16 @@ beforeAll(async () => {
|
|||
//
|
||||
},
|
||||
}));
|
||||
|
||||
setupCommonMocks();
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
if (globalThis.__MONGO_URI__) {
|
||||
await Promise.all(
|
||||
collectionsForCleanUp.map((collection) =>
|
||||
db.collection(collection).deleteMany({})
|
||||
)
|
||||
);
|
||||
}
|
||||
//nothing
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await client?.close();
|
||||
await MongoDbMock.teardown();
|
||||
// @ts-ignore
|
||||
db = undefined;
|
||||
//@ts-ignore
|
||||
|
|
|
@ -100,7 +100,8 @@ describe("Loaderboard Controller", () => {
|
|||
"60",
|
||||
"english",
|
||||
0,
|
||||
50
|
||||
50,
|
||||
false
|
||||
);
|
||||
});
|
||||
|
||||
|
@ -139,7 +140,8 @@ describe("Loaderboard Controller", () => {
|
|||
"60",
|
||||
"english",
|
||||
page,
|
||||
pageSize
|
||||
pageSize,
|
||||
false
|
||||
);
|
||||
});
|
||||
|
||||
|
|
|
@ -1,23 +1,32 @@
|
|||
import * as MongoDbMock from "vitest-mongodb";
|
||||
import { GenericContainer, StartedTestContainer, Wait } from "testcontainers";
|
||||
import { isIntegrationTest } from "./__integration__";
|
||||
|
||||
let startedMongoContainer: StartedTestContainer | undefined;
|
||||
|
||||
export async function setup(): Promise<void> {
|
||||
process.env.TZ = "UTC";
|
||||
|
||||
if (isIntegrationTest) {
|
||||
console.log("integration download mongomock");
|
||||
await MongoDbMock.setup(MongoDbMockConfig);
|
||||
//use testcontainer to start mongodb
|
||||
//const network = await new Network(new RandomUuid()).start();
|
||||
const mongoContainer = new GenericContainer("mongo:5.0.13")
|
||||
//.withName("monkeytype-mongo-test")
|
||||
.withExposedPorts(27017)
|
||||
// .withNetwork(network)
|
||||
//.withNetworkMode(network.getName())
|
||||
.withWaitStrategy(Wait.forListeningPorts());
|
||||
|
||||
startedMongoContainer = await mongoContainer.start();
|
||||
|
||||
const mongoUrl = `mongodb://${startedMongoContainer?.getHost()}:${startedMongoContainer?.getMappedPort(
|
||||
27017
|
||||
)}`;
|
||||
process.env["TEST_DB_URL"] = mongoUrl;
|
||||
}
|
||||
}
|
||||
|
||||
export async function teardown(): Promise<void> {
|
||||
if (isIntegrationTest) {
|
||||
await MongoDbMock.teardown();
|
||||
await startedMongoContainer?.stop();
|
||||
}
|
||||
}
|
||||
|
||||
export const MongoDbMockConfig = {
|
||||
serverOptions: {
|
||||
binary: {
|
||||
version: "6.0.12",
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
@ -1,15 +1,8 @@
|
|||
import { afterAll, beforeAll, afterEach } from "vitest";
|
||||
import { isIntegrationTest } from "./__integration__";
|
||||
import { BASE_CONFIGURATION } from "../src/constants/base-configuration";
|
||||
import { setupCommonMocks } from "./setup-common-mocks";
|
||||
|
||||
process.env["MODE"] = "dev";
|
||||
//process.env["MONGOMS_DISTRO"] = "ubuntu-22.04";
|
||||
|
||||
if (isIntegrationTest) {
|
||||
console.error("wrong environment");
|
||||
process.exit();
|
||||
}
|
||||
|
||||
if (!process.env["REDIS_URI"]) {
|
||||
// use mock if not set
|
||||
|
@ -43,7 +36,7 @@ beforeAll(async () => {
|
|||
});
|
||||
|
||||
afterEach(async () => {
|
||||
//noting
|
||||
//nothing
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
|
|
|
@ -98,9 +98,9 @@
|
|||
"oxlint": "1.8.0",
|
||||
"readline-sync": "1.4.10",
|
||||
"supertest": "6.2.3",
|
||||
"testcontainers": "11.4.0",
|
||||
"tsx": "4.16.2",
|
||||
"typescript": "5.5.4",
|
||||
"vitest": "2.1.9",
|
||||
"vitest-mongodb": "1.0.0"
|
||||
"vitest": "2.1.9"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,7 +45,8 @@ export async function getLeaderboard(
|
|||
mode2,
|
||||
language,
|
||||
page,
|
||||
pageSize
|
||||
pageSize,
|
||||
req.ctx.configuration.users.premium.enabled
|
||||
);
|
||||
|
||||
if (leaderboard === false) {
|
||||
|
|
|
@ -33,7 +33,8 @@ export async function get(
|
|||
mode2: string,
|
||||
language: string,
|
||||
page: number,
|
||||
pageSize: number
|
||||
pageSize: number,
|
||||
premiumFeaturesEnabled: boolean = false
|
||||
): Promise<DBLeaderboardEntry[] | false> {
|
||||
if (page < 0 || pageSize < 0) {
|
||||
throw new MonkeyError(500, "Invalid page or pageSize");
|
||||
|
@ -50,9 +51,6 @@ export async function get(
|
|||
.limit(limit)
|
||||
.toArray();
|
||||
|
||||
const premiumFeaturesEnabled = (await getCachedConfiguration(true)).users
|
||||
.premium.enabled;
|
||||
|
||||
if (!premiumFeaturesEnabled) {
|
||||
return preset.map((it) => omit(it, "isPremium"));
|
||||
}
|
||||
|
|
|
@ -9,8 +9,14 @@ export default defineConfig({
|
|||
setupFiles: isIntegrationTest
|
||||
? ["__tests__/__integration__/setup-integration-tests.ts"]
|
||||
: ["__tests__/setup-tests.ts"],
|
||||
pool: "forks", //this should be the default value, however the CI fails without this set.
|
||||
|
||||
//pool: "forks", //this should be the default value, however the CI fails without this set.
|
||||
// run integration tests single threaded bevcause they share the same mongodb
|
||||
pool: isIntegrationTest ? "threads" : "forks",
|
||||
poolOptions: {
|
||||
threads: {
|
||||
singleThread: true,
|
||||
},
|
||||
},
|
||||
coverage: {
|
||||
include: ["**/*.ts"],
|
||||
},
|
||||
|
|
519
pnpm-lock.yaml
generated
519
pnpm-lock.yaml
generated
|
@ -267,6 +267,9 @@ importers:
|
|||
supertest:
|
||||
specifier: 6.2.3
|
||||
version: 6.2.3
|
||||
testcontainers:
|
||||
specifier: 11.4.0
|
||||
version: 11.4.0
|
||||
tsx:
|
||||
specifier: 4.16.2
|
||||
version: 4.16.2
|
||||
|
@ -276,9 +279,6 @@ importers:
|
|||
vitest:
|
||||
specifier: 2.1.9
|
||||
version: 2.1.9(@types/node@20.14.11)(happy-dom@15.10.2)(sass@1.70.0)(terser@5.43.1)
|
||||
vitest-mongodb:
|
||||
specifier: 1.0.0
|
||||
version: 1.0.0
|
||||
|
||||
frontend:
|
||||
dependencies:
|
||||
|
@ -1338,6 +1338,9 @@ packages:
|
|||
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@balena/dockerignore@1.0.2':
|
||||
resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==}
|
||||
|
||||
'@bcoe/v8-coverage@0.2.3':
|
||||
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
|
||||
|
||||
|
@ -2929,6 +2932,12 @@ packages:
|
|||
'@types/damerau-levenshtein@1.0.0':
|
||||
resolution: {integrity: sha512-8XQ1jJHlOl6HjZ3/fU9Yrm/14jxM4gXVezPWiwkyiG0GnYROsI6wdh8DwKccAFGDNiNYBooTZkRXVe4du6plKA==}
|
||||
|
||||
'@types/docker-modem@3.0.6':
|
||||
resolution: {integrity: sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==}
|
||||
|
||||
'@types/dockerode@3.3.42':
|
||||
resolution: {integrity: sha512-U1jqHMShibMEWHdxYhj3rCMNCiLx5f35i4e3CEUuW+JSSszc/tVqc6WCAPdhwBymG5R/vgbcceagK0St7Cq6Eg==}
|
||||
|
||||
'@types/eslint@8.56.11':
|
||||
resolution: {integrity: sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==}
|
||||
|
||||
|
@ -3007,6 +3016,9 @@ packages:
|
|||
'@types/node-fetch@2.6.1':
|
||||
resolution: {integrity: sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==}
|
||||
|
||||
'@types/node@18.19.121':
|
||||
resolution: {integrity: sha512-bHOrbyztmyYIi4f1R0s17QsPs1uyyYnGcXeZoGEd227oZjry0q6XQBQxd82X1I57zEfwO8h9Xo+Kl5gX1d9MwQ==}
|
||||
|
||||
'@types/node@20.14.11':
|
||||
resolution: {integrity: sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==}
|
||||
|
||||
|
@ -3049,6 +3061,15 @@ packages:
|
|||
'@types/sizzle@2.3.8':
|
||||
resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==}
|
||||
|
||||
'@types/ssh2-streams@0.1.12':
|
||||
resolution: {integrity: sha512-Sy8tpEmCce4Tq0oSOYdfqaBpA3hDM8SoxoFh5vzFsu2oL+znzGz8oVWW7xb4K920yYMUY+PIG31qZnFMfPWNCg==}
|
||||
|
||||
'@types/ssh2@0.5.52':
|
||||
resolution: {integrity: sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg==}
|
||||
|
||||
'@types/ssh2@1.15.5':
|
||||
resolution: {integrity: sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==}
|
||||
|
||||
'@types/string-similarity@4.0.2':
|
||||
resolution: {integrity: sha512-LkJQ/jsXtCVMK+sKYAmX/8zEq+/46f1PTQw7YtmQwb74jemS1SlNLmARM2Zml9DgdDTWKAtc5L13WorpHPDjDA==}
|
||||
|
||||
|
@ -3091,9 +3112,6 @@ packages:
|
|||
'@types/whatwg-url@11.0.5':
|
||||
resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==}
|
||||
|
||||
'@types/whatwg-url@8.2.2':
|
||||
resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==}
|
||||
|
||||
'@typescript-eslint/eslint-plugin@8.0.1':
|
||||
resolution: {integrity: sha512-5g3Y7GDFsJAnY4Yhvk8sZtFfV6YNF2caLzjrRPUBzewjPCaj0yokePB4LJSobyCzGMzjZZYFbwuzbfDHlimXbQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
@ -3522,6 +3540,9 @@ packages:
|
|||
asap@2.0.6:
|
||||
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
|
||||
|
||||
asn1@0.2.6:
|
||||
resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==}
|
||||
|
||||
assertion-error@2.0.1:
|
||||
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -3559,9 +3580,6 @@ packages:
|
|||
async-lock@1.4.1:
|
||||
resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==}
|
||||
|
||||
async-mutex@0.4.1:
|
||||
resolution: {integrity: sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA==}
|
||||
|
||||
async-retry@1.3.3:
|
||||
resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==}
|
||||
|
||||
|
@ -3649,6 +3667,36 @@ packages:
|
|||
bare-events@2.4.2:
|
||||
resolution: {integrity: sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==}
|
||||
|
||||
bare-events@2.6.0:
|
||||
resolution: {integrity: sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg==}
|
||||
|
||||
bare-fs@4.1.6:
|
||||
resolution: {integrity: sha512-25RsLF33BqooOEFNdMcEhMpJy8EoR88zSMrnOQOaM3USnOK2VmaJ1uaQEwPA6AQjrv1lXChScosN6CzbwbO9OQ==}
|
||||
engines: {bare: '>=1.16.0'}
|
||||
peerDependencies:
|
||||
bare-buffer: '*'
|
||||
peerDependenciesMeta:
|
||||
bare-buffer:
|
||||
optional: true
|
||||
|
||||
bare-os@3.6.1:
|
||||
resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==}
|
||||
engines: {bare: '>=1.14.0'}
|
||||
|
||||
bare-path@3.0.0:
|
||||
resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
|
||||
|
||||
bare-stream@2.6.5:
|
||||
resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==}
|
||||
peerDependencies:
|
||||
bare-buffer: '*'
|
||||
bare-events: '*'
|
||||
peerDependenciesMeta:
|
||||
bare-buffer:
|
||||
optional: true
|
||||
bare-events:
|
||||
optional: true
|
||||
|
||||
base64-arraybuffer@1.0.2:
|
||||
resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==}
|
||||
engines: {node: '>= 0.6.0'}
|
||||
|
@ -3671,6 +3719,9 @@ packages:
|
|||
resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==}
|
||||
engines: {node: '>=10.0.0'}
|
||||
|
||||
bcrypt-pbkdf@1.0.2:
|
||||
resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
|
||||
|
||||
bcrypt@5.1.1:
|
||||
resolution: {integrity: sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
|
@ -3752,18 +3803,11 @@ packages:
|
|||
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
|
||||
hasBin: true
|
||||
|
||||
bson@5.5.1:
|
||||
resolution: {integrity: sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==}
|
||||
engines: {node: '>=14.20.1'}
|
||||
|
||||
bson@6.8.0:
|
||||
resolution: {integrity: sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==}
|
||||
engines: {node: '>=16.20.1'}
|
||||
deprecated: a critical bug affecting only useBigInt64=true deserialization usage is fixed in bson@6.10.3
|
||||
|
||||
buffer-crc32@0.2.13:
|
||||
resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
|
||||
|
||||
buffer-crc32@1.0.0:
|
||||
resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
|
||||
engines: {node: '>=8.0.0'}
|
||||
|
@ -3784,6 +3828,10 @@ packages:
|
|||
buffer@6.0.3:
|
||||
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
|
||||
|
||||
buildcheck@0.0.6:
|
||||
resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==}
|
||||
engines: {node: '>=10.0.0'}
|
||||
|
||||
builtin-modules@1.1.1:
|
||||
resolution: {integrity: sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
@ -3801,6 +3849,10 @@ packages:
|
|||
peerDependencies:
|
||||
esbuild: '>=0.18'
|
||||
|
||||
byline@5.0.0:
|
||||
resolution: {integrity: sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
bytes@3.0.0:
|
||||
resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
|
||||
engines: {node: '>= 0.8'}
|
||||
|
@ -3948,6 +4000,9 @@ packages:
|
|||
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
|
||||
engines: {node: '>= 14.16.0'}
|
||||
|
||||
chownr@1.1.4:
|
||||
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
|
||||
|
||||
chownr@2.0.0:
|
||||
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
|
||||
engines: {node: '>=10'}
|
||||
|
@ -4345,6 +4400,10 @@ packages:
|
|||
typescript:
|
||||
optional: true
|
||||
|
||||
cpu-features@0.0.10:
|
||||
resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==}
|
||||
engines: {node: '>=10.0.0'}
|
||||
|
||||
crc-32@1.2.2:
|
||||
resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
|
||||
engines: {node: '>=0.8'}
|
||||
|
@ -4685,6 +4744,18 @@ packages:
|
|||
discontinuous-range@1.0.0:
|
||||
resolution: {integrity: sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==}
|
||||
|
||||
docker-compose@1.2.0:
|
||||
resolution: {integrity: sha512-wIU1eHk3Op7dFgELRdmOYlPYS4gP8HhH1ZmZa13QZF59y0fblzFDFmKPhyc05phCy2hze9OEvNZAsoljrs+72w==}
|
||||
engines: {node: '>= 6.0.0'}
|
||||
|
||||
docker-modem@5.0.6:
|
||||
resolution: {integrity: sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==}
|
||||
engines: {node: '>= 8.0'}
|
||||
|
||||
dockerode@4.0.7:
|
||||
resolution: {integrity: sha512-R+rgrSRTRdU5mH14PZTCPZtW/zw3HDWNTS/1ZAQpL/5Upe/ye5K9WQkIysu4wBoiMwKynsz0a8qWuGsHgEvSAA==}
|
||||
engines: {node: '>= 8.0'}
|
||||
|
||||
doctrine@2.1.0:
|
||||
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
@ -5289,10 +5360,6 @@ packages:
|
|||
resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
|
||||
engines: {node: '>= 0.8'}
|
||||
|
||||
find-cache-dir@3.3.2:
|
||||
resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
find-my-way@4.5.1:
|
||||
resolution: {integrity: sha512-kE0u7sGoUFbMXcOG/xpkmz4sRLCklERnBcg7Ftuu1iAxsfEt2S46RLJ3Sq7vshsEy2wJT2hZxE58XZK27qa8kg==}
|
||||
engines: {node: '>=10'}
|
||||
|
@ -5440,6 +5507,9 @@ packages:
|
|||
resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
|
||||
engines: {node: '>= 0.8'}
|
||||
|
||||
fs-constants@1.0.0:
|
||||
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
|
||||
|
||||
fs-extra@10.1.0:
|
||||
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -5552,6 +5622,10 @@ packages:
|
|||
resolution: {integrity: sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==}
|
||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||
|
||||
get-port@7.1.0:
|
||||
resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==}
|
||||
engines: {node: '>=16'}
|
||||
|
||||
get-proto@1.0.1:
|
||||
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
@ -7267,6 +7341,9 @@ packages:
|
|||
resolution: {integrity: sha512-vAeqvq915Qgdn0sYxwldsVSIKNn2HAzUHXG7orgYTrMUD7Vfq3B1W5WYsa0oV/JRgLR6SH5MrFPsvckgc4mxxg==}
|
||||
hasBin: true
|
||||
|
||||
mkdirp-classic@0.5.3:
|
||||
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
|
||||
|
||||
mkdirp@0.5.6:
|
||||
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
|
||||
hasBin: true
|
||||
|
@ -7323,41 +7400,9 @@ packages:
|
|||
moment@2.30.1:
|
||||
resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==}
|
||||
|
||||
mongodb-connection-string-url@2.6.0:
|
||||
resolution: {integrity: sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==}
|
||||
|
||||
mongodb-connection-string-url@3.0.1:
|
||||
resolution: {integrity: sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==}
|
||||
|
||||
mongodb-memory-server-core@9.4.1:
|
||||
resolution: {integrity: sha512-lobapXaysH64zrn521NTkmqHc3krSPUFkuuZ8A/BmQV8ON7p2SzAEvpoJPDXIeJkxIzYw06dYL6Gn5OcZdEElA==}
|
||||
engines: {node: '>=14.20.1'}
|
||||
|
||||
mongodb-memory-server@9.4.1:
|
||||
resolution: {integrity: sha512-qONlW4sKPbtk9pqFnlPn7R73G3Q4TuebJJ5pHfoiKTqVJquojQ8xWmkCyz+/YnpA2vYBo/jib+nXvjfKwh7cjg==}
|
||||
engines: {node: '>=14.20.1'}
|
||||
|
||||
mongodb@5.9.2:
|
||||
resolution: {integrity: sha512-H60HecKO4Bc+7dhOv4sJlgvenK4fQNqqUIlXxZYQNbfEWSALGAwGoyJd/0Qwk4TttFXUOHJ2ZJQe/52ScaUwtQ==}
|
||||
engines: {node: '>=14.20.1'}
|
||||
peerDependencies:
|
||||
'@aws-sdk/credential-providers': ^3.188.0
|
||||
'@mongodb-js/zstd': ^1.0.0
|
||||
kerberos: ^1.0.0 || ^2.0.0
|
||||
mongodb-client-encryption: '>=2.3.0 <3'
|
||||
snappy: ^7.2.2
|
||||
peerDependenciesMeta:
|
||||
'@aws-sdk/credential-providers':
|
||||
optional: true
|
||||
'@mongodb-js/zstd':
|
||||
optional: true
|
||||
kerberos:
|
||||
optional: true
|
||||
mongodb-client-encryption:
|
||||
optional: true
|
||||
snappy:
|
||||
optional: true
|
||||
|
||||
mongodb@6.3.0:
|
||||
resolution: {integrity: sha512-tt0KuGjGtLUhLoU263+xvQmPHEGTw5LbcNC73EoFRYgSHwZt5tsoJC110hDyO1kjQzpgNrpdcSza9PknWN4LrA==}
|
||||
engines: {node: '>=16.20.1'}
|
||||
|
@ -7465,10 +7510,6 @@ packages:
|
|||
resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==}
|
||||
engines: {node: '>= 0.4.0'}
|
||||
|
||||
new-find-package-json@2.0.0:
|
||||
resolution: {integrity: sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew==}
|
||||
engines: {node: '>=12.22.0'}
|
||||
|
||||
next-tick@1.1.0:
|
||||
resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
|
||||
|
||||
|
@ -7989,9 +8030,6 @@ packages:
|
|||
resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
|
||||
engines: {node: '>= 14.16'}
|
||||
|
||||
pend@1.2.0:
|
||||
resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
|
||||
|
||||
perfect-debounce@1.0.0:
|
||||
resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
|
||||
|
||||
|
@ -8078,10 +8116,6 @@ packages:
|
|||
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
|
||||
engines: {node: '>= 6'}
|
||||
|
||||
pkg-dir@4.2.0:
|
||||
resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
plugin-error@2.0.1:
|
||||
resolution: {integrity: sha512-zMakqvIDyY40xHOvzXka0kUvf40nYIuwRE8dWhti2WtjQZ31xAgBZBhxsK7vK3QbRXS1Xms/LO7B5cuAsfB2Gg==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
|
@ -8239,6 +8273,13 @@ packages:
|
|||
prop-types@15.8.1:
|
||||
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
|
||||
|
||||
proper-lockfile@4.1.2:
|
||||
resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==}
|
||||
|
||||
properties-reader@2.3.0:
|
||||
resolution: {integrity: sha512-z597WicA7nDZxK12kZqHr2TcvwNU1GCfA5UwfDY/HDp3hXPoPlb5rlEx9bwGTiJnc0OqbBTkU975jDToth8Gxw==}
|
||||
engines: {node: '>=14'}
|
||||
|
||||
proto-list@1.2.4:
|
||||
resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
|
||||
|
||||
|
@ -9021,6 +9062,7 @@ packages:
|
|||
source-map@0.8.0-beta.0:
|
||||
resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
|
||||
engines: {node: '>= 8'}
|
||||
deprecated: The work that was done in this beta branch won't be included in future versions
|
||||
|
||||
sourcemap-codec@1.4.8:
|
||||
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
|
||||
|
@ -9048,6 +9090,9 @@ packages:
|
|||
spdx-license-ids@3.0.18:
|
||||
resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==}
|
||||
|
||||
split-ca@1.0.1:
|
||||
resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==}
|
||||
|
||||
split-string@3.1.0:
|
||||
resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
@ -9066,6 +9111,13 @@ packages:
|
|||
resolution: {integrity: sha512-pNxSMf5DtwhpZ8gUcOGCGZIWtCcyAUx9oLgAtlO4ag7DvlfnETL0BGqXaISc84pNrXvTWmt8Wal1FWKxdTsL3Q==}
|
||||
hasBin: true
|
||||
|
||||
ssh-remote-port-forward@1.0.4:
|
||||
resolution: {integrity: sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==}
|
||||
|
||||
ssh2@1.16.0:
|
||||
resolution: {integrity: sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==}
|
||||
engines: {node: '>=10.16.0'}
|
||||
|
||||
ssri@10.0.6:
|
||||
resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==}
|
||||
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
|
||||
|
@ -9129,6 +9181,9 @@ packages:
|
|||
streamx@2.18.0:
|
||||
resolution: {integrity: sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==}
|
||||
|
||||
streamx@2.22.1:
|
||||
resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==}
|
||||
|
||||
string-argv@0.3.2:
|
||||
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
|
||||
engines: {node: '>=0.6.19'}
|
||||
|
@ -9315,6 +9370,16 @@ packages:
|
|||
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
tar-fs@2.1.3:
|
||||
resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==}
|
||||
|
||||
tar-fs@3.1.0:
|
||||
resolution: {integrity: sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==}
|
||||
|
||||
tar-stream@2.2.0:
|
||||
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
tar-stream@3.1.7:
|
||||
resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
|
||||
|
||||
|
@ -9360,6 +9425,9 @@ packages:
|
|||
resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
testcontainers@11.4.0:
|
||||
resolution: {integrity: sha512-eX5nc/Fi5I0LHqwxw6BuUvWNfdl+M2sKX6fX/47RP89Xs5nU6smd0iD7dpFogxy8/wACjlucLoutJc7b5mtq7w==}
|
||||
|
||||
text-decoder@1.1.1:
|
||||
resolution: {integrity: sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==}
|
||||
|
||||
|
@ -9508,10 +9576,6 @@ packages:
|
|||
tr46@1.0.1:
|
||||
resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
|
||||
|
||||
tr46@3.0.0:
|
||||
resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
tr46@4.1.1:
|
||||
resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==}
|
||||
engines: {node: '>=14'}
|
||||
|
@ -9634,6 +9698,9 @@ packages:
|
|||
resolution: {integrity: sha512-DUHWQAcC8BTiUZDRzAYGvpSpGLiaOQPfYXlCieQbwUvmml/LRGIe3raKdrOPOoiX0DYlzxs2nH6BoWJoZrj8hA==}
|
||||
hasBin: true
|
||||
|
||||
tweetnacl@0.14.5:
|
||||
resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
|
||||
|
||||
type-check@0.4.0:
|
||||
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
|
@ -9763,6 +9830,10 @@ packages:
|
|||
resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==}
|
||||
engines: {node: '>=14.0'}
|
||||
|
||||
undici@7.12.0:
|
||||
resolution: {integrity: sha512-GrKEsc3ughskmGA9jevVlIOPMiiAHJ4OFUtaAH+NhfTUSiZ1wMPIQqQvAJUrJspFXJt3EBWgpAeoHEDVT1IBug==}
|
||||
engines: {node: '>=20.18.1'}
|
||||
|
||||
unescape-js@1.1.4:
|
||||
resolution: {integrity: sha512-42SD8NOQEhdYntEiUQdYq/1V/YHwr1HLwlHuTJB5InVVdOSbgI6xu8jK5q65yIzuFCfczzyDF/7hbGzVbyCw0g==}
|
||||
|
||||
|
@ -10140,9 +10211,6 @@ packages:
|
|||
yaml:
|
||||
optional: true
|
||||
|
||||
vitest-mongodb@1.0.0:
|
||||
resolution: {integrity: sha512-IG39uQ4JpJf62rx9H0FUYwluXVQI5/Am6yrD9dE92SwJnFsJwpN4AynZkBbDuedvqFzG2GWK6mzzwU3vq28N0w==}
|
||||
|
||||
vitest@2.1.9:
|
||||
resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==}
|
||||
engines: {node: ^18.0.0 || >=20.0.0}
|
||||
|
@ -10251,10 +10319,6 @@ packages:
|
|||
resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
whatwg-url@11.0.0:
|
||||
resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
whatwg-url@13.0.0:
|
||||
resolution: {integrity: sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==}
|
||||
engines: {node: '>=16'}
|
||||
|
@ -10481,10 +10545,6 @@ packages:
|
|||
yargs@7.1.2:
|
||||
resolution: {integrity: sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==}
|
||||
|
||||
yauzl@3.1.3:
|
||||
resolution: {integrity: sha512-JCCdmlJJWv7L0q/KylOekyRaUrdEoUxWkWVcgorosTROCFWiS9p2NNPE9Yb91ak7b1N5SxAZEliWpspbZccivw==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
yn@3.1.1:
|
||||
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
|
||||
engines: {node: '>=6'}
|
||||
|
@ -11312,6 +11372,8 @@ snapshots:
|
|||
'@babel/helper-string-parser': 7.27.1
|
||||
'@babel/helper-validator-identifier': 7.27.1
|
||||
|
||||
'@balena/dockerignore@1.0.2': {}
|
||||
|
||||
'@bcoe/v8-coverage@0.2.3': {}
|
||||
|
||||
'@colors/colors@1.5.0':
|
||||
|
@ -12998,6 +13060,17 @@ snapshots:
|
|||
|
||||
'@types/damerau-levenshtein@1.0.0': {}
|
||||
|
||||
'@types/docker-modem@3.0.6':
|
||||
dependencies:
|
||||
'@types/node': 20.14.11
|
||||
'@types/ssh2': 1.15.5
|
||||
|
||||
'@types/dockerode@3.3.42':
|
||||
dependencies:
|
||||
'@types/docker-modem': 3.0.6
|
||||
'@types/node': 20.14.11
|
||||
'@types/ssh2': 1.15.5
|
||||
|
||||
'@types/eslint@8.56.11':
|
||||
dependencies:
|
||||
'@types/estree': 1.0.7
|
||||
|
@ -13083,6 +13156,10 @@ snapshots:
|
|||
'@types/node': 20.14.11
|
||||
form-data: 3.0.1
|
||||
|
||||
'@types/node@18.19.121':
|
||||
dependencies:
|
||||
undici-types: 5.26.5
|
||||
|
||||
'@types/node@20.14.11':
|
||||
dependencies:
|
||||
undici-types: 5.26.5
|
||||
|
@ -13127,6 +13204,19 @@ snapshots:
|
|||
|
||||
'@types/sizzle@2.3.8': {}
|
||||
|
||||
'@types/ssh2-streams@0.1.12':
|
||||
dependencies:
|
||||
'@types/node': 20.14.11
|
||||
|
||||
'@types/ssh2@0.5.52':
|
||||
dependencies:
|
||||
'@types/node': 20.14.11
|
||||
'@types/ssh2-streams': 0.1.12
|
||||
|
||||
'@types/ssh2@1.15.5':
|
||||
dependencies:
|
||||
'@types/node': 18.19.121
|
||||
|
||||
'@types/string-similarity@4.0.2': {}
|
||||
|
||||
'@types/stylis@4.2.5': {}
|
||||
|
@ -13175,11 +13265,6 @@ snapshots:
|
|||
dependencies:
|
||||
'@types/webidl-conversions': 7.0.3
|
||||
|
||||
'@types/whatwg-url@8.2.2':
|
||||
dependencies:
|
||||
'@types/node': 20.14.11
|
||||
'@types/webidl-conversions': 7.0.3
|
||||
|
||||
'@typescript-eslint/eslint-plugin@8.0.1(@typescript-eslint/parser@8.2.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4)':
|
||||
dependencies:
|
||||
'@eslint-community/regexpp': 4.11.0
|
||||
|
@ -13579,7 +13664,7 @@ snapshots:
|
|||
archiver@7.0.1:
|
||||
dependencies:
|
||||
archiver-utils: 5.0.2
|
||||
async: 3.2.5
|
||||
async: 3.2.6
|
||||
buffer-crc32: 1.0.0
|
||||
readable-stream: 4.5.2
|
||||
readdir-glob: 1.1.3
|
||||
|
@ -13713,6 +13798,10 @@ snapshots:
|
|||
|
||||
asap@2.0.6: {}
|
||||
|
||||
asn1@0.2.6:
|
||||
dependencies:
|
||||
safer-buffer: 2.1.2
|
||||
|
||||
assertion-error@2.0.1: {}
|
||||
|
||||
assign-symbols@1.0.0: {}
|
||||
|
@ -13742,10 +13831,6 @@ snapshots:
|
|||
|
||||
async-lock@1.4.1: {}
|
||||
|
||||
async-mutex@0.4.1:
|
||||
dependencies:
|
||||
tslib: 2.6.3
|
||||
|
||||
async-retry@1.3.3:
|
||||
dependencies:
|
||||
retry: 0.13.1
|
||||
|
@ -13851,6 +13936,31 @@ snapshots:
|
|||
bare-events@2.4.2:
|
||||
optional: true
|
||||
|
||||
bare-events@2.6.0:
|
||||
optional: true
|
||||
|
||||
bare-fs@4.1.6:
|
||||
dependencies:
|
||||
bare-events: 2.6.0
|
||||
bare-path: 3.0.0
|
||||
bare-stream: 2.6.5(bare-events@2.6.0)
|
||||
optional: true
|
||||
|
||||
bare-os@3.6.1:
|
||||
optional: true
|
||||
|
||||
bare-path@3.0.0:
|
||||
dependencies:
|
||||
bare-os: 3.6.1
|
||||
optional: true
|
||||
|
||||
bare-stream@2.6.5(bare-events@2.6.0):
|
||||
dependencies:
|
||||
streamx: 2.22.1
|
||||
optionalDependencies:
|
||||
bare-events: 2.6.0
|
||||
optional: true
|
||||
|
||||
base64-arraybuffer@1.0.2: {}
|
||||
|
||||
base64-js@1.5.1: {}
|
||||
|
@ -13873,6 +13983,10 @@ snapshots:
|
|||
|
||||
basic-ftp@5.0.5: {}
|
||||
|
||||
bcrypt-pbkdf@1.0.2:
|
||||
dependencies:
|
||||
tweetnacl: 0.14.5
|
||||
|
||||
bcrypt@5.1.1(encoding@0.1.13):
|
||||
dependencies:
|
||||
'@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13)
|
||||
|
@ -14020,12 +14134,8 @@ snapshots:
|
|||
node-releases: 2.0.19
|
||||
update-browserslist-db: 1.1.3(browserslist@4.25.1)
|
||||
|
||||
bson@5.5.1: {}
|
||||
|
||||
bson@6.8.0: {}
|
||||
|
||||
buffer-crc32@0.2.13: {}
|
||||
|
||||
buffer-crc32@1.0.0: {}
|
||||
|
||||
buffer-equal-constant-time@1.0.1: {}
|
||||
|
@ -14044,6 +14154,9 @@ snapshots:
|
|||
base64-js: 1.5.1
|
||||
ieee754: 1.2.1
|
||||
|
||||
buildcheck@0.0.6:
|
||||
optional: true
|
||||
|
||||
builtin-modules@1.1.1: {}
|
||||
|
||||
bullmq@1.91.1:
|
||||
|
@ -14069,6 +14182,8 @@ snapshots:
|
|||
esbuild: 0.25.0
|
||||
load-tsconfig: 0.2.5
|
||||
|
||||
byline@5.0.0: {}
|
||||
|
||||
bytes@3.0.0: {}
|
||||
|
||||
bytes@3.1.2: {}
|
||||
|
@ -14259,6 +14374,8 @@ snapshots:
|
|||
dependencies:
|
||||
readdirp: 4.1.2
|
||||
|
||||
chownr@1.1.4: {}
|
||||
|
||||
chownr@2.0.0: {}
|
||||
|
||||
ci-info@2.0.0: {}
|
||||
|
@ -14667,6 +14784,12 @@ snapshots:
|
|||
optionalDependencies:
|
||||
typescript: 5.5.4
|
||||
|
||||
cpu-features@0.0.10:
|
||||
dependencies:
|
||||
buildcheck: 0.0.6
|
||||
nan: 2.20.0
|
||||
optional: true
|
||||
|
||||
crc-32@1.2.2: {}
|
||||
|
||||
crc32-stream@6.0.0:
|
||||
|
@ -14982,6 +15105,31 @@ snapshots:
|
|||
|
||||
discontinuous-range@1.0.0: {}
|
||||
|
||||
docker-compose@1.2.0:
|
||||
dependencies:
|
||||
yaml: 2.5.0
|
||||
|
||||
docker-modem@5.0.6:
|
||||
dependencies:
|
||||
debug: 4.4.1
|
||||
readable-stream: 3.6.2
|
||||
split-ca: 1.0.1
|
||||
ssh2: 1.16.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
dockerode@4.0.7:
|
||||
dependencies:
|
||||
'@balena/dockerignore': 1.0.2
|
||||
'@grpc/grpc-js': 1.11.1
|
||||
'@grpc/proto-loader': 0.7.13
|
||||
docker-modem: 5.0.6
|
||||
protobufjs: 7.3.2
|
||||
tar-fs: 2.1.3
|
||||
uuid: 10.0.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
doctrine@2.1.0:
|
||||
dependencies:
|
||||
esutils: 2.0.3
|
||||
|
@ -15967,12 +16115,6 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
find-cache-dir@3.3.2:
|
||||
dependencies:
|
||||
commondir: 1.0.1
|
||||
make-dir: 3.1.0
|
||||
pkg-dir: 4.2.0
|
||||
|
||||
find-my-way@4.5.1:
|
||||
dependencies:
|
||||
fast-decode-uri-component: 1.0.1
|
||||
|
@ -16170,10 +16312,6 @@ snapshots:
|
|||
optionalDependencies:
|
||||
debug: 4.3.6(supports-color@5.5.0)
|
||||
|
||||
follow-redirects@1.15.6(debug@4.4.1):
|
||||
optionalDependencies:
|
||||
debug: 4.4.1
|
||||
|
||||
fontawesome-subset@4.4.0(@fortawesome/fontawesome-free@5.15.4):
|
||||
dependencies:
|
||||
lodash: 4.17.21
|
||||
|
@ -16248,6 +16386,8 @@ snapshots:
|
|||
|
||||
fresh@2.0.0: {}
|
||||
|
||||
fs-constants@1.0.0: {}
|
||||
|
||||
fs-extra@10.1.0:
|
||||
dependencies:
|
||||
graceful-fs: 4.2.11
|
||||
|
@ -16398,6 +16538,8 @@ snapshots:
|
|||
|
||||
get-port@6.1.2: {}
|
||||
|
||||
get-port@7.1.0: {}
|
||||
|
||||
get-proto@1.0.1:
|
||||
dependencies:
|
||||
dunder-proto: 1.0.1
|
||||
|
@ -18458,6 +18600,8 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- encoding
|
||||
|
||||
mkdirp-classic@0.5.3: {}
|
||||
|
||||
mkdirp@0.5.6:
|
||||
dependencies:
|
||||
minimist: 1.2.8
|
||||
|
@ -18498,58 +18642,11 @@ snapshots:
|
|||
|
||||
moment@2.30.1: {}
|
||||
|
||||
mongodb-connection-string-url@2.6.0:
|
||||
dependencies:
|
||||
'@types/whatwg-url': 8.2.2
|
||||
whatwg-url: 11.0.0
|
||||
|
||||
mongodb-connection-string-url@3.0.1:
|
||||
dependencies:
|
||||
'@types/whatwg-url': 11.0.5
|
||||
whatwg-url: 13.0.0
|
||||
|
||||
mongodb-memory-server-core@9.4.1:
|
||||
dependencies:
|
||||
async-mutex: 0.4.1
|
||||
camelcase: 6.3.0
|
||||
debug: 4.4.1
|
||||
find-cache-dir: 3.3.2
|
||||
follow-redirects: 1.15.6(debug@4.4.1)
|
||||
https-proxy-agent: 7.0.5
|
||||
mongodb: 5.9.2
|
||||
new-find-package-json: 2.0.0
|
||||
semver: 7.6.3
|
||||
tar-stream: 3.1.7
|
||||
tslib: 2.6.3
|
||||
yauzl: 3.1.3
|
||||
transitivePeerDependencies:
|
||||
- '@aws-sdk/credential-providers'
|
||||
- '@mongodb-js/zstd'
|
||||
- kerberos
|
||||
- mongodb-client-encryption
|
||||
- snappy
|
||||
- supports-color
|
||||
|
||||
mongodb-memory-server@9.4.1:
|
||||
dependencies:
|
||||
mongodb-memory-server-core: 9.4.1
|
||||
tslib: 2.6.3
|
||||
transitivePeerDependencies:
|
||||
- '@aws-sdk/credential-providers'
|
||||
- '@mongodb-js/zstd'
|
||||
- kerberos
|
||||
- mongodb-client-encryption
|
||||
- snappy
|
||||
- supports-color
|
||||
|
||||
mongodb@5.9.2:
|
||||
dependencies:
|
||||
bson: 5.5.1
|
||||
mongodb-connection-string-url: 2.6.0
|
||||
socks: 2.8.3
|
||||
optionalDependencies:
|
||||
'@mongodb-js/saslprep': 1.1.8
|
||||
|
||||
mongodb@6.3.0(socks@2.8.3):
|
||||
dependencies:
|
||||
'@mongodb-js/saslprep': 1.1.8
|
||||
|
@ -18646,12 +18743,6 @@ snapshots:
|
|||
|
||||
netmask@2.0.2: {}
|
||||
|
||||
new-find-package-json@2.0.0:
|
||||
dependencies:
|
||||
debug: 4.4.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
next-tick@1.1.0: {}
|
||||
|
||||
nice-try@1.0.5: {}
|
||||
|
@ -19225,8 +19316,6 @@ snapshots:
|
|||
|
||||
pathval@2.0.0: {}
|
||||
|
||||
pend@1.2.0: {}
|
||||
|
||||
perfect-debounce@1.0.0: {}
|
||||
|
||||
perfect-scrollbar@1.5.5: {}
|
||||
|
@ -19300,10 +19389,6 @@ snapshots:
|
|||
|
||||
pirates@4.0.6: {}
|
||||
|
||||
pkg-dir@4.2.0:
|
||||
dependencies:
|
||||
find-up: 4.1.0
|
||||
|
||||
plugin-error@2.0.1:
|
||||
dependencies:
|
||||
ansi-colors: 1.1.0
|
||||
|
@ -19449,6 +19534,16 @@ snapshots:
|
|||
object-assign: 4.1.1
|
||||
react-is: 16.13.1
|
||||
|
||||
proper-lockfile@4.1.2:
|
||||
dependencies:
|
||||
graceful-fs: 4.2.11
|
||||
retry: 0.12.0
|
||||
signal-exit: 3.0.7
|
||||
|
||||
properties-reader@2.3.0:
|
||||
dependencies:
|
||||
mkdirp: 1.0.4
|
||||
|
||||
proto-list@1.2.4: {}
|
||||
|
||||
proto3-json-serializer@2.0.2:
|
||||
|
@ -19906,8 +20001,7 @@ snapshots:
|
|||
- encoding
|
||||
- supports-color
|
||||
|
||||
retry@0.12.0:
|
||||
optional: true
|
||||
retry@0.12.0: {}
|
||||
|
||||
retry@0.13.1: {}
|
||||
|
||||
|
@ -20474,6 +20568,8 @@ snapshots:
|
|||
|
||||
spdx-license-ids@3.0.18: {}
|
||||
|
||||
split-ca@1.0.1: {}
|
||||
|
||||
split-string@3.1.0:
|
||||
dependencies:
|
||||
extend-shallow: 3.0.2
|
||||
|
@ -20492,6 +20588,19 @@ snapshots:
|
|||
get-stdin: 8.0.0
|
||||
nearley: 2.20.1
|
||||
|
||||
ssh-remote-port-forward@1.0.4:
|
||||
dependencies:
|
||||
'@types/ssh2': 0.5.52
|
||||
ssh2: 1.16.0
|
||||
|
||||
ssh2@1.16.0:
|
||||
dependencies:
|
||||
asn1: 0.2.6
|
||||
bcrypt-pbkdf: 1.0.2
|
||||
optionalDependencies:
|
||||
cpu-features: 0.0.10
|
||||
nan: 2.20.0
|
||||
|
||||
ssri@10.0.6:
|
||||
dependencies:
|
||||
minipass: 7.1.2
|
||||
|
@ -20553,6 +20662,14 @@ snapshots:
|
|||
optionalDependencies:
|
||||
bare-events: 2.4.2
|
||||
|
||||
streamx@2.22.1:
|
||||
dependencies:
|
||||
fast-fifo: 1.3.2
|
||||
text-decoder: 1.1.1
|
||||
optionalDependencies:
|
||||
bare-events: 2.6.0
|
||||
optional: true
|
||||
|
||||
string-argv@0.3.2: {}
|
||||
|
||||
string-similarity@4.0.4: {}
|
||||
|
@ -20827,6 +20944,31 @@ snapshots:
|
|||
|
||||
tapable@2.2.1: {}
|
||||
|
||||
tar-fs@2.1.3:
|
||||
dependencies:
|
||||
chownr: 1.1.4
|
||||
mkdirp-classic: 0.5.3
|
||||
pump: 3.0.0
|
||||
tar-stream: 2.2.0
|
||||
|
||||
tar-fs@3.1.0:
|
||||
dependencies:
|
||||
pump: 3.0.0
|
||||
tar-stream: 3.1.7
|
||||
optionalDependencies:
|
||||
bare-fs: 4.1.6
|
||||
bare-path: 3.0.0
|
||||
transitivePeerDependencies:
|
||||
- bare-buffer
|
||||
|
||||
tar-stream@2.2.0:
|
||||
dependencies:
|
||||
bl: 4.1.0
|
||||
end-of-stream: 1.4.4
|
||||
fs-constants: 1.0.0
|
||||
inherits: 2.0.4
|
||||
readable-stream: 3.6.2
|
||||
|
||||
tar-stream@3.1.7:
|
||||
dependencies:
|
||||
b4a: 1.6.6
|
||||
|
@ -20904,6 +21046,27 @@ snapshots:
|
|||
glob: 10.4.5
|
||||
minimatch: 9.0.5
|
||||
|
||||
testcontainers@11.4.0:
|
||||
dependencies:
|
||||
'@balena/dockerignore': 1.0.2
|
||||
'@types/dockerode': 3.3.42
|
||||
archiver: 7.0.1
|
||||
async-lock: 1.4.1
|
||||
byline: 5.0.0
|
||||
debug: 4.4.1
|
||||
docker-compose: 1.2.0
|
||||
dockerode: 4.0.7
|
||||
get-port: 7.1.0
|
||||
proper-lockfile: 4.1.2
|
||||
properties-reader: 2.3.0
|
||||
ssh-remote-port-forward: 1.0.4
|
||||
tar-fs: 3.1.0
|
||||
tmp: 0.2.3
|
||||
undici: 7.12.0
|
||||
transitivePeerDependencies:
|
||||
- bare-buffer
|
||||
- supports-color
|
||||
|
||||
text-decoder@1.1.1:
|
||||
dependencies:
|
||||
b4a: 1.6.6
|
||||
|
@ -21042,10 +21205,6 @@ snapshots:
|
|||
dependencies:
|
||||
punycode: 2.3.1
|
||||
|
||||
tr46@3.0.0:
|
||||
dependencies:
|
||||
punycode: 2.3.1
|
||||
|
||||
tr46@4.1.1:
|
||||
dependencies:
|
||||
punycode: 2.3.1
|
||||
|
@ -21169,6 +21328,8 @@ snapshots:
|
|||
turbo-windows-64: 2.3.3
|
||||
turbo-windows-arm64: 2.3.3
|
||||
|
||||
tweetnacl@0.14.5: {}
|
||||
|
||||
type-check@0.4.0:
|
||||
dependencies:
|
||||
prelude-ls: 1.2.1
|
||||
|
@ -21322,6 +21483,8 @@ snapshots:
|
|||
dependencies:
|
||||
'@fastify/busboy': 2.1.1
|
||||
|
||||
undici@7.12.0: {}
|
||||
|
||||
unescape-js@1.1.4:
|
||||
dependencies:
|
||||
string.fromcodepoint: 0.2.1
|
||||
|
@ -21746,18 +21909,6 @@ snapshots:
|
|||
tsx: 4.16.2
|
||||
yaml: 2.5.0
|
||||
|
||||
vitest-mongodb@1.0.0:
|
||||
dependencies:
|
||||
debug: 4.3.6(supports-color@5.5.0)
|
||||
mongodb-memory-server: 9.4.1
|
||||
transitivePeerDependencies:
|
||||
- '@aws-sdk/credential-providers'
|
||||
- '@mongodb-js/zstd'
|
||||
- kerberos
|
||||
- mongodb-client-encryption
|
||||
- snappy
|
||||
- supports-color
|
||||
|
||||
vitest@2.1.9(@types/node@20.14.11)(happy-dom@15.10.2)(sass@1.70.0)(terser@5.43.1):
|
||||
dependencies:
|
||||
'@vitest/expect': 2.1.9
|
||||
|
@ -21910,11 +22061,6 @@ snapshots:
|
|||
|
||||
whatwg-mimetype@3.0.0: {}
|
||||
|
||||
whatwg-url@11.0.0:
|
||||
dependencies:
|
||||
tr46: 3.0.0
|
||||
webidl-conversions: 7.0.0
|
||||
|
||||
whatwg-url@13.0.0:
|
||||
dependencies:
|
||||
tr46: 4.1.1
|
||||
|
@ -22265,11 +22411,6 @@ snapshots:
|
|||
y18n: 3.2.2
|
||||
yargs-parser: 5.0.1
|
||||
|
||||
yauzl@3.1.3:
|
||||
dependencies:
|
||||
buffer-crc32: 0.2.13
|
||||
pend: 1.2.0
|
||||
|
||||
yn@3.1.1: {}
|
||||
|
||||
yocto-queue@0.1.0: {}
|
||||
|
|
Loading…
Add table
Reference in a new issue