diff --git a/lib/cache.ts b/lib/cache.ts
index ad2b07c..feb0254 100644
--- a/lib/cache.ts
+++ b/lib/cache.ts
@@ -78,9 +78,9 @@ export async function acquireLock(
value: token,
expire: new Date(now + ttl + CLOCK_SKEW_TOLERANCE),
},
- $currentDate: { timestamp: true },
+ $currentDate: { timestamp: (true as unknown) as Date },
},
- { upsert: true, returnOriginal: false }
+ { upsert: true, returnDocument: "after" }
);
const v = r.value;
if (Math.abs(v["timestamp"].getTime() - now) > CLOCK_SKEW_TOLERANCE)
@@ -114,5 +114,5 @@ export async function releaseLock(
_id: lockName,
value: token,
});
- if (res["result"]["n"] !== 1) throw new Error("Lock expired");
+ if (res.deletedCount !== 1) throw new Error("Lock expired");
}
diff --git a/lib/db.ts b/lib/db.ts
index acd52dd..71ece72 100644
--- a/lib/db.ts
+++ b/lib/db.ts
@@ -17,7 +17,7 @@
* along with GenieACS. If not, see .
*/
-import { MongoClient, ObjectID, Collection, Db } from "mongodb";
+import { MongoClient, ObjectId, Collection, Db } from "mongodb";
import { get } from "./config";
import { decodeTag, encodeTag, escapeRegExp } from "./common";
import { parse } from "./common/expression-parser";
@@ -61,10 +61,7 @@ export function onConnect(callback: (db: Db) => Promise): void {
}
export async function connect(): Promise {
- clientPromise = MongoClient.connect("" + get("MONGODB_CONNECTION_URL"), {
- useNewUrlParser: true,
- useUnifiedTopology: true,
- });
+ clientPromise = MongoClient.connect("" + get("MONGODB_CONNECTION_URL"));
const client = await clientPromise;
const db = client.db();
@@ -623,7 +620,7 @@ export async function saveDevice(
upsert: isNew,
});
- if (result.result.n !== 1)
+ if (!result.matchedCount && !result.upsertedCount)
throw new Error(`Device ${deviceId} not found in database`);
if (update2) {
@@ -647,7 +644,7 @@ export async function getFaults(
delete r.device;
r.timestamp = +r.timestamp;
r.provisions = JSON.parse(r.provisions);
- faults[channel] = r;
+ faults[channel] = r as SessionFault;
}
return faults;
@@ -688,13 +685,13 @@ export async function getDueTasks(
if (task.timestamp >= timestamp) return [tasks, +task.timestamp];
task._id = String(task._id);
- tasks.push(task);
+ tasks.push(task as Task);
// For API compatibility
if (task.name === "download" && task.file) {
let q;
- if (ObjectID.isValid(task.file))
- q = { _id: { $in: [task.file, new ObjectID(task.file)] } };
+ if (ObjectId.isValid(task.file))
+ q = { _id: { $in: [task.file, new ObjectId(task.file)] } };
else q = { _id: task.file };
const res = await filesCollection.find(q).toArray();
@@ -715,7 +712,7 @@ export async function clearTasks(
taskIds: string[]
): Promise {
await tasksCollection.deleteMany({
- _id: { $in: taskIds.map((id) => new ObjectID(id)) },
+ _id: { $in: taskIds.map((id) => new ObjectId(id)) },
});
}
@@ -732,14 +729,14 @@ export async function getOperations(
delete r._id;
// Workaround for a bug in v1.2.1 where operation object is saved without deserialization
if (typeof r.provisions !== "string") {
- operations[commandKey] = r;
+ operations[commandKey] = r as Operation;
continue;
}
r.timestamp = +r.timestamp;
if (r.args) r.args = JSON.parse(r.args);
r.provisions = JSON.parse(r.provisions);
r.retries = JSON.parse(r.retries);
- operations[commandKey] = r;
+ operations[commandKey] = r as Operation;
}
return operations;
}
@@ -807,7 +804,7 @@ interface Permission {
}
export async function getPermissions(): Promise {
- return permissionsCollection.find().toArray();
+ return (permissionsCollection.find().toArray() as unknown) as Permission[];
}
interface User {
@@ -818,5 +815,5 @@ interface User {
}
export async function getUsers(): Promise {
- return usersCollection.find().toArray();
+ return (usersCollection.find().toArray() as unknown) as User[];
}
diff --git a/lib/fs.ts b/lib/fs.ts
index 7c41797..22a6f66 100644
--- a/lib/fs.ts
+++ b/lib/fs.ts
@@ -35,7 +35,7 @@ onConnect(async (db) => {
});
const getFile = memoize(
- (md5: string, size: number, filename: string): Promise => {
+ (uploadDate: number, size: number, filename: string): Promise => {
return new Promise((resolve, reject) => {
const buffer = Buffer.allocUnsafe(size);
let i = 0;
@@ -82,10 +82,14 @@ export async function listener(
return;
}
- const buffer = await getFile(file.md5, file.length, filename);
+ const buffer = await getFile(
+ file["uploadDate"].getTime(),
+ file.length,
+ filename
+ );
response.writeHead(200, {
- "Content-Type": file.contentType || "application/octet-stream",
+ "Content-Type": "application/octet-stream",
"Content-Length": file.length,
});
diff --git a/lib/local-cache.ts b/lib/local-cache.ts
index e5207e0..66b1612 100644
--- a/lib/local-cache.ts
+++ b/lib/local-cache.ts
@@ -325,8 +325,6 @@ async function fetchFiles(): Promise {
const id = r["filename"] || r["_id"].toString();
files[id] = {};
files[id].length = r["length"];
- files[id].md5 = r["md5"];
- files[id].contentType = r["contentType"];
}
return files;
diff --git a/lib/mongodb-functions.ts b/lib/mongodb-functions.ts
index f933ac0..fe2920f 100644
--- a/lib/mongodb-functions.ts
+++ b/lib/mongodb-functions.ts
@@ -17,7 +17,7 @@
* along with GenieACS. If not, see .
*/
-import { ObjectID } from "mongodb";
+import { ObjectId } from "mongodb";
import { map, parse, stringify, parseList } from "./common/expression-parser";
import { likePatternToRegExp } from "./common/expression";
import { Expression, Fault, Task } from "./types";
@@ -90,7 +90,7 @@ export function processTasksFilter(filter: Expression): Expression {
if (!isArray(exp)) return exp;
if (["=", "<>", ">", ">=", "<", "<="].includes(exp[0])) {
const e = exp.slice();
- if (e[1][0] === "PARAM" && e[1][1] === "_id") e[2] = new ObjectID(e[2]);
+ if (e[1][0] === "PARAM" && e[1][1] === "_id") e[2] = new ObjectId(e[2]);
else if (e[1][0] === "PARAM" && e[1][1] === "timestamp")
e[2] = new Date(e[2]);
else if (e[1][0] === "PARAM" && e[1][1] === "expiry")
diff --git a/lib/nbi.ts b/lib/nbi.ts
index a03edfd..1c8e0c0 100644
--- a/lib/nbi.ts
+++ b/lib/nbi.ts
@@ -45,7 +45,7 @@ const PROVISIONS_REGEX = /^\/provisions\/([a-zA-Z0-9\-_%]+)\/?$/;
const VIRTUAL_PARAMETERS_REGEX = /^\/virtual_parameters\/([a-zA-Z0-9\-_%]+)\/?$/;
const FAULTS_REGEX = /^\/faults\/([a-zA-Z0-9\-_%:]+)\/?$/;
-const collections = {
+const collections: Record = {
tasks: null as Collection,
devices: null as Collection,
presets: null as Collection,
@@ -662,7 +662,7 @@ export function listener(
};
filesBucket.delete((filename as unknown) as ObjectId, () => {
const uploadStream = filesBucket.openUploadStreamWithId(
- filename,
+ (filename as unknown) as ObjectId,
filename,
{
metadata: metadata,
@@ -813,13 +813,7 @@ export function listener(
cur.sort(sort);
}
- if (urlParts.query.skip)
- cur.skip(parseInt(urlParts.query.skip as string));
-
- if (urlParts.query.limit)
- cur.limit(parseInt(urlParts.query.limit as string));
-
- cur.count(false, (err, total) => {
+ cur.count((err, total) => {
if (err) return void throwError(err);
response.writeHead(200, {
@@ -832,6 +826,12 @@ export function listener(
return;
}
+ if (urlParts.query.skip)
+ cur.skip(parseInt(urlParts.query.skip as string));
+
+ if (urlParts.query.limit)
+ cur.limit(parseInt(urlParts.query.limit as string));
+
response.write("[\n");
i = 0;
cur.forEach(
diff --git a/lib/types.ts b/lib/types.ts
index 0defd88..1f41836 100644
--- a/lib/types.ts
+++ b/lib/types.ts
@@ -477,7 +477,7 @@ export interface VirtualParameters {
}
export interface Files {
- [name: string]: { length: number; md5: string; contentType: string };
+ [name: string]: { length: number };
}
export interface Users {
diff --git a/lib/ui/api-functions.ts b/lib/ui/api-functions.ts
index b382a45..40823dd 100644
--- a/lib/ui/api-functions.ts
+++ b/lib/ui/api-functions.ts
@@ -17,7 +17,7 @@
* along with GenieACS. If not, see .
*/
-import { ObjectID } from "mongodb";
+import { ObjectId } from "mongodb";
import * as db from "./db";
import { del } from "../cache";
import { getUsers } from "../local-cache";
@@ -38,7 +38,7 @@ async function deleteFault(id): Promise {
await Promise.all([
db.deleteFault(id),
channel.startsWith("task_")
- ? db.deleteTask(new ObjectID(channel.slice(5)))
+ ? db.deleteTask(new ObjectId(channel.slice(5)))
: null,
]);
@@ -108,7 +108,7 @@ export async function postTasks(
const lastInform = Date.now();
const notInSession = await awaitSessionEnd(deviceId, 30000);
if (!notInSession) {
- await Promise.all(statuses.map((t) => db.deleteTask(new ObjectID(t._id))));
+ await Promise.all(statuses.map((t) => db.deleteTask(new ObjectId(t._id))));
return {
connectionRequest: "Session took too long to complete",
tasks: statuses,
@@ -120,7 +120,7 @@ export async function postTasks(
const status = await connectionRequest(deviceId, device);
if (status) {
- await Promise.all(statuses.map((t) => db.deleteTask(new ObjectID(t._id))));
+ await Promise.all(statuses.map((t) => db.deleteTask(new ObjectId(t._id))));
return {
connectionRequest: status,
tasks: statuses,
@@ -129,7 +129,7 @@ export async function postTasks(
const sessionStarted = await awaitSessionStart(deviceId, lastInform, timeout);
if (!sessionStarted) {
- await Promise.all(statuses.map((t) => db.deleteTask(new ObjectID(t._id))));
+ await Promise.all(statuses.map((t) => db.deleteTask(new ObjectId(t._id))));
return {
connectionRequest: "No contact from CPE",
tasks: statuses,
@@ -138,7 +138,7 @@ export async function postTasks(
const sessionEnded = await awaitSessionEnd(deviceId, 120000);
if (!sessionEnded) {
- await Promise.all(statuses.map((t) => db.deleteTask(new ObjectID(t._id))));
+ await Promise.all(statuses.map((t) => db.deleteTask(new ObjectId(t._id))));
return {
connectionRequest: "Session took too long to complete",
tasks: statuses,
@@ -163,7 +163,7 @@ export async function postTasks(
}
}
- await Promise.all(statuses.map((t) => db.deleteTask(new ObjectID(t._id))));
+ await Promise.all(statuses.map((t) => db.deleteTask(new ObjectId(t._id))));
return { connectionRequest: "OK", tasks: statuses };
}
diff --git a/lib/ui/db.ts b/lib/ui/db.ts
index 50fb934..8167441 100644
--- a/lib/ui/db.ts
+++ b/lib/ui/db.ts
@@ -17,13 +17,13 @@
* along with GenieACS. If not, see .
*/
-import { Db, GridFSBucket, ObjectID } from "mongodb";
+import { Db, GridFSBucket, ObjectId } from "mongodb";
import { Script } from "vm";
import { onConnect } from "../db";
import * as mongodbFunctions from "../mongodb-functions";
import * as expression from "../common/expression";
import { QueryOptions, Expression } from "../types";
-import { Readable } from "stream";
+import { Readable, Writable } from "stream";
import { minimize } from "../common/boolean-expression";
const RESOURCE_COLLECTION = {
@@ -208,7 +208,7 @@ function putResource(resource, id, object): Promise {
function deleteResource(
resource: string,
- id: string | ObjectID
+ id: string | ObjectId
): Promise {
return new Promise((resolve, reject) => {
const collection = db.collection(RESOURCE_COLLECTION[resource] || resource);
@@ -338,13 +338,17 @@ export function putFile(
): Promise {
return new Promise((resolve, reject) => {
const bucket = new GridFSBucket(db);
- const uploadStream = bucket.openUploadStreamWithId(filename, filename, {
- metadata: metadata,
- });
+ const uploadStream = bucket.openUploadStreamWithId(
+ (filename as unknown) as ObjectId,
+ filename,
+ {
+ metadata: metadata,
+ }
+ );
uploadStream.on("error", reject);
contentStream.on("error", reject);
uploadStream.on("finish", resolve);
- contentStream.pipe(uploadStream);
+ contentStream.pipe(uploadStream as Writable);
});
}
@@ -362,6 +366,6 @@ export function deleteFault(id: string): Promise {
return deleteResource("faults", id);
}
-export function deleteTask(id: ObjectID): Promise {
+export function deleteTask(id: ObjectId): Promise {
return deleteResource("tasks", id);
}
diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json
index 9948681..971a8c8 100644
--- a/npm-shrinkwrap.json
+++ b/npm-shrinkwrap.json
@@ -315,15 +315,6 @@
"@types/node": "*"
}
},
- "@types/bson": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz",
- "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
"@types/codemirror": {
"version": "0.0.108",
"resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.108.tgz",
@@ -497,21 +488,10 @@
"integrity": "sha512-QzVV70DqUhWfLFpMFDBI9rRxtzeUUpbhiFDpUJYSV92AePgl+Qfficgv2MOb1Ceb+lBOQU8+L+Hjf2UielQjEw==",
"dev": true
},
- "@types/mongodb": {
- "version": "3.6.9",
- "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.9.tgz",
- "integrity": "sha512-2XSGr/+IOKeFQ5tU9ATcIiIr7bpHqWyOXNGLOOhp0kg2NnfEvoKZF1SZ25j4zvJRqM2WeSUjfWSvymFJ3HBGJQ==",
- "dev": true,
- "requires": {
- "@types/bson": "*",
- "@types/node": "*"
- }
- },
"@types/node": {
"version": "14.14.34",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.34.tgz",
- "integrity": "sha512-dBPaxocOK6UVyvhbnpFIj2W+S+1cBTkHQbFQfeeJhoKFbzYcVUGHvddeWPSucKATb3F0+pgDq0i6ghEaZjsugA==",
- "dev": true
+ "integrity": "sha512-dBPaxocOK6UVyvhbnpFIj2W+S+1cBTkHQbFQfeeJhoKFbzYcVUGHvddeWPSucKATb3F0+pgDq0i6ghEaZjsugA=="
},
"@types/normalize-package-data": {
"version": "2.4.0",
@@ -577,6 +557,20 @@
"@types/estree": "*"
}
},
+ "@types/webidl-conversions": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz",
+ "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q=="
+ },
+ "@types/whatwg-url": {
+ "version": "8.2.1",
+ "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz",
+ "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==",
+ "requires": {
+ "@types/node": "*",
+ "@types/webidl-conversions": "*"
+ }
+ },
"@typescript-eslint/eslint-plugin": {
"version": "4.17.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.17.0.tgz",
@@ -1091,8 +1085,7 @@
"base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"binary-extensions": {
"version": "2.2.0",
@@ -1100,15 +1093,6 @@
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true
},
- "bl": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
- "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
- "requires": {
- "readable-stream": "^2.3.5",
- "safe-buffer": "^5.1.1"
- }
- },
"blueimp-md5": {
"version": "2.18.0",
"resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.18.0.tgz",
@@ -1178,15 +1162,17 @@
}
},
"bson": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz",
- "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg=="
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-4.4.1.tgz",
+ "integrity": "sha512-Uu4OCZa0jouQJCKOk1EmmyqtdWAP5HVLru4lQxTwzJzxT+sJ13lVpEZU/MATDxtHiekWMAL84oQY3Xn1LpJVSg==",
+ "requires": {
+ "buffer": "^5.6.0"
+ }
},
"buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
"requires": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
@@ -1726,11 +1712,6 @@
"resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz",
"integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU="
},
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
"cosmiconfig": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
@@ -3477,8 +3458,7 @@
"ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
"ignore": {
"version": "5.1.8",
@@ -3835,11 +3815,6 @@
"integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
"dev": true
},
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -4186,8 +4161,7 @@
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"lodash._reinterpolate": {
"version": "3.0.0",
@@ -4470,18 +4444,25 @@
}
},
"mongodb": {
- "version": "3.6.3",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.3.tgz",
- "integrity": "sha512-rOZuR0QkodZiM+UbQE5kDsJykBqWi0CL4Ec2i1nrGrUI3KO11r6Fbxskqmq3JK2NH7aW4dcccBuUujAP0ERl5w==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.1.0.tgz",
+ "integrity": "sha512-Gx9U9MsFWgJ3E0v4oHAdWvYTGBznNYPCkhmD/3i/kPTY/URnPfHD5/6VoKUFrdgQTK3icFiM9976hVbqCRBO9Q==",
"requires": {
- "bl": "^2.2.1",
- "bson": "^1.1.4",
- "denque": "^1.4.1",
- "require_optional": "^1.0.1",
- "safe-buffer": "^5.1.2",
+ "bson": "^4.4.0",
+ "denque": "^1.5.0",
+ "mongodb-connection-string-url": "^1.0.1",
"saslprep": "^1.0.0"
}
},
+ "mongodb-connection-string-url": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-1.1.2.tgz",
+ "integrity": "sha512-mp5lv4guWuykOpkwNNqQ0tKKytuJUjL/aC/bu/DqoJVWL5NSh4j/u+gJ+EiOdweLujHyq6JZZqcTVipHhL5xRg==",
+ "requires": {
+ "@types/whatwg-url": "^8.0.0",
+ "whatwg-url": "^8.4.0"
+ }
+ },
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -10065,11 +10046,6 @@
"parse-ms": "^2.1.0"
}
},
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
"progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -10089,8 +10065,7 @@
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
"pupa": {
"version": "2.1.1",
@@ -10234,27 +10209,6 @@
}
}
},
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- }
- }
- },
"readdirp": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
@@ -10300,15 +10254,6 @@
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true
},
- "require_optional": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
- "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
- "requires": {
- "resolve-from": "^2.0.0",
- "semver": "^5.1.0"
- }
- },
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@@ -10336,11 +10281,6 @@
}
}
},
- "resolve-from": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
- "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
- },
"resolve-path": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz",
@@ -10735,6 +10675,7 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
"requires": {
"safe-buffer": "~5.1.0"
},
@@ -10742,7 +10683,8 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
}
}
},
@@ -11095,6 +11037,14 @@
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
},
+ "tr46": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
+ "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
+ "requires": {
+ "punycode": "^2.1.1"
+ }
+ },
"trim-off-newlines": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz",
@@ -11271,7 +11221,8 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
},
"util.promisify": {
"version": "1.0.1",
@@ -11321,12 +11272,27 @@
"defaults": "^1.0.3"
}
},
+ "webidl-conversions": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
+ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w=="
+ },
"well-known-symbols": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz",
"integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==",
"dev": true
},
+ "whatwg-url": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
+ "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
+ "requires": {
+ "lodash": "^4.7.0",
+ "tr46": "^2.1.0",
+ "webidl-conversions": "^6.1.0"
+ }
+ },
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
diff --git a/package.json b/package.json
index 30a6d49..77fcc64 100644
--- a/package.json
+++ b/package.json
@@ -30,7 +30,7 @@
"koa-router": "^10.0.0",
"koa-static": "^5.0.0",
"later": "^1.2.0",
- "mongodb": "^3.6.3",
+ "mongodb": "^4.1.0",
"parsimmon": "^1.16.0",
"seedrandom": "^3.0.5"
},
@@ -46,7 +46,6 @@
"@types/koa-router": "^7.4.1",
"@types/koa-static": "^4.0.1",
"@types/mithril": "^2.0.8",
- "@types/mongodb": "^3.6.9",
"@types/node": "^14.14.34",
"@types/parsimmon": "^1.10.6",
"@types/seedrandom": "^3.0.0",
diff --git a/test/mongodb-functions.ts b/test/mongodb-functions.ts
index e636d9c..8a59887 100644
--- a/test/mongodb-functions.ts
+++ b/test/mongodb-functions.ts
@@ -49,8 +49,16 @@ ava("convertOldPrecondition", (t) => {
];
t.plan(tests.length + 2 * shouldFailTests.length);
- for (const test of tests)
- t.is(stringify(mongodbFunctions.convertOldPrecondition(test[0])), test[1]);
+ for (const test of tests) {
+ t.is(
+ stringify(
+ mongodbFunctions.convertOldPrecondition(
+ test[0] as Record
+ )
+ ),
+ test[1]
+ );
+ }
for (const test of shouldFailTests) {
const func = (): void => {