fix(ci): remove mongodb example

This commit is contained in:
Elian Doran 2024-12-12 18:49:58 +02:00
parent 19d6f10ccb
commit 12fd5364ae
No known key found for this signature in database
9 changed files with 14 additions and 233 deletions

View File

@ -1,5 +1,4 @@
{
"editor.formatOnSave": true,
"cSpell.words": ["Gujar", "Sukant", "copyfiles", "sukantgujar"],
"eslint.validate": ["javascript", "typescript"]
}

View File

@ -81,10 +81,9 @@ From the `express-file-server` example:
# Examples
There are two examples in the `src/examples` folder:
There one examples in the `src/examples` folder:
1. `express-file-server`: Implements a file based `ContentProvider`.
2. `express-mongo-server`: Implements a mongodb based `ContentProvider`.
## Running the examples:
@ -94,19 +93,6 @@ There are two examples in the `src/examples` folder:
yarn copy-assets
yarn run:examples:file
2. `express-mongo-server`:
1. Run your own Mongo instance first or create one in https://mlab.com.
2. Setup the connection string in `MongoUrl` environment variable:
export MongoUrl=mongodb+srv://username:password@mongoserver/dbname?retryWrites=true
3. Build and run the example, the server will listen on http://localhost:8080/.
yarn build:dev
yarn copy-assets
yarn run:examples:file
## Connecting to the running server:
Browse to `https://localhost:8080/files/readme.txt`

View File

@ -15,8 +15,7 @@
"build:dev": "npx tsc && yarn copy-assets",
"build:prod": "yarn clean && cross-env NODE_ENV=production tsc -p ./tsconfig.production.json",
"push": "yarn test && yarn build:prod && yarn publish",
"run:examples:file": "node ./dist/examples/express-file-server/index.js",
"run:examples:mongo": "node ./dist/examples/express-mongo-server/index.js"
"run:examples:file": "node ./dist/examples/express-file-server/index.js"
},
"bugs": {
"email": "sukantgujar@yahoo.com",
@ -32,7 +31,6 @@
"@types/chai": "^4.1.7",
"@types/express": "^4.16.1",
"@types/mocha": "^5.2.6",
"@types/mongodb": "^3.1.22",
"@types/sinon": "^7.0.9",
"@typescript-eslint/eslint-plugin": "^1.5.0",
"@typescript-eslint/parser": "^1.5.0",
@ -42,7 +40,6 @@
"eslint": "^5.15.3",
"express": "^4.16.4",
"mocha": "^6.0.2",
"mongodb": "^3.1.13",
"nyc": "^17.1.0",
"rimraf": "^2.6.3",
"sinon": "^7.2.7",

View File

@ -1,6 +0,0 @@
export interface MongoFileDocument {
_id: string;
contentType: string;
filename: string;
size: number;
}

View File

@ -1,15 +0,0 @@
import express from "express";
import { createPartialContentHandler } from "../../index";
import { mongoContentProvider } from "./mongoContentProvider";
import { logger } from "./logger";
const handler = createPartialContentHandler(mongoContentProvider, logger);
const app = express();
const port = 8080;
app.get("/files/:name", handler);
app.listen(port, () => {
logger.debug("Server started!");
});

View File

@ -1,9 +0,0 @@
export const logger = {
debug(message: string, extra?: any) {
if (extra) {
console.log(`[debug]: ${message}`, extra);
} else {
console.log(`[debug]: ${message}`);
}
}
};

View File

@ -1,72 +0,0 @@
import { Request } from "express";
import fs from "fs";
import path from "path";
import { MongoClient, Db, GridFSBucket } from "mongodb";
import { Range, ContentDoesNotExistError, ContentProvider } from "../../index";
import { getFileMeta } from "./utils";
import { logger } from "./logger";
import { MongoFileDocument } from "./MongoFileDocument";
const connectionString = process.env["MongoUrl"];
if (!connectionString) {
throw new Error("MongoUrl env var is not defined!");
}
const client = new MongoClient(connectionString, { useNewUrlParser: true });
let db: Db;
let bucket: GridFSBucket;
client.connect(error => {
if (error) {
throw error;
}
db = client.db("test");
bucket = new GridFSBucket(db);
bucket.drop(error => {
if (error && error.message !== "ns not found") {
throw error;
}
console.info("Dropped bucket.");
const fileName = "readme.txt";
const readStream = fs.createReadStream(path.join(__dirname, "..", "sample-files", fileName));
readStream.on("close", () => {
console.log("readme.txt uploaded to gridfs.");
});
const writeStream = bucket.openUploadStream(fileName, { contentType: "text/plain" });
readStream.pipe(writeStream);
});
});
export const mongoContentProvider: ContentProvider = async (req: Request) => {
const fileName = req.params.name;
const file = await getFileMeta(fileName, db);
if (!file) {
throw new ContentDoesNotExistError(`File doesn't exist: ${fileName}`);
}
const totalSize = file.size;
const mimeType = file.contentType;
const getStream = (range?: Range) => {
if (!range) {
return bucket.openDownloadStreamByName(fileName);
}
const { start, end } = range;
logger.debug(`start: ${start}, end: ${end}`);
// Note: The `end` offset in Mongo stream isn't inclusive, need to append 1 to it to ensure it returns
// the right sized content. Otherwise the stream size will be one byte short of the expected value.
return bucket.openDownloadStreamByName(fileName, { start, end: end + 1, revision: -1 });
};
return {
fileName,
totalSize,
mimeType,
getStream
};
};

View File

@ -1,17 +0,0 @@
import { Db } from "mongodb";
import { MongoFileDocument } from "./MongoFileDocument";
import { logger } from "./logger";
export const getFileMeta = async (fileName: string, db: Db) => {
logger.debug(`Fetching file information for ${fileName}`);
const result = await db.collection("fs.files").findOne({ filename: fileName });
logger.debug(`File meta: `, result);
return result
? {
_id: result._id,
contentType: result.contentType,
fileName,
size: result.length
}
: null;
};

106
yarn.lock
View File

@ -229,13 +229,6 @@
"@types/connect" "*"
"@types/node" "*"
"@types/bson@*":
version "4.2.4"
resolved "https://registry.yarnpkg.com/@types/bson/-/bson-4.2.4.tgz#3bb08ab0de5dd07103fba355361814019ba2ae88"
integrity sha512-SG23E3JDH6y8qF20a4G9txLuUl+TCV16gxsKyntmGiJez2V9VBJr1Y8WxTBBD6OgBVcvspQ7sxgdNMkXFVcaEA==
dependencies:
bson "*"
"@types/chai@^4.1.7":
version "4.3.20"
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.20.tgz#cb291577ed342ca92600430841a00329ba05cecc"
@ -293,14 +286,6 @@
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.7.tgz#315d570ccb56c53452ff8638738df60726d5b6ea"
integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==
"@types/mongodb@^3.1.22":
version "3.6.20"
resolved "https://registry.yarnpkg.com/@types/mongodb/-/mongodb-3.6.20.tgz#b7c5c580644f6364002b649af1c06c3c0454e1d2"
integrity sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ==
dependencies:
"@types/bson" "*"
"@types/node" "*"
"@types/node@*":
version "22.10.2"
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.2.tgz#a485426e6d1fdafc7b0d4c7b24e2c78182ddabb9"
@ -539,14 +524,6 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
bl@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.1.tgz#8c11a7b730655c5d56898cdc871224f40fd901d5"
integrity sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==
dependencies:
readable-stream "^2.3.5"
safe-buffer "^5.1.1"
body-parser@1.20.3:
version "1.20.3"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6"
@ -588,16 +565,6 @@ browserslist@^4.24.0:
node-releases "^2.0.18"
update-browserslist-db "^1.1.1"
bson@*:
version "6.10.1"
resolved "https://registry.yarnpkg.com/bson/-/bson-6.10.1.tgz#dcd04703178f5ecf5b25de04edd2a95ec79385d3"
integrity sha512-P92xmHDQjSKPLHqFxefqMxASNq/aWJMEZugpCjf+AF/pgcUpMMQCg7t7+ewko0/u8AapvF3luf/FoehddEK+sA==
bson@^1.1.4:
version "1.1.6"
resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.6.tgz#fb819be9a60cd677e0853aee4ca712a785d6618a"
integrity sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==
bytes@3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
@ -933,11 +900,6 @@ define-properties@^1.1.2, define-properties@^1.2.0, define-properties@^1.2.1:
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
denque@^1.4.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf"
integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==
depd@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
@ -2073,11 +2035,6 @@ media-typer@0.3.0:
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
memory-pager@^1.0.2:
version "1.5.0"
resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5"
integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==
merge-descriptors@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5"
@ -2177,19 +2134,6 @@ mocha@^6.0.2:
yargs-parser "13.1.2"
yargs-unparser "1.6.0"
mongodb@^3.1.13:
version "3.7.4"
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.7.4.tgz#119530d826361c3e12ac409b769796d6977037a4"
integrity sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw==
dependencies:
bl "^2.2.1"
bson "^1.1.4"
denque "^1.4.1"
optional-require "^1.1.8"
safe-buffer "^5.1.2"
optionalDependencies:
saslprep "^1.0.0"
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@ -2361,13 +2305,6 @@ onetime@^2.0.0:
dependencies:
mimic-fn "^1.0.0"
optional-require@^1.1.8:
version "1.1.8"
resolved "https://registry.yarnpkg.com/optional-require/-/optional-require-1.1.8.tgz#16364d76261b75d964c482b2406cb824d8ec44b7"
integrity sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==
dependencies:
require-at "^1.0.6"
optionator@^0.8.2:
version "0.8.3"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
@ -2561,7 +2498,17 @@ raw-body@2.5.2:
iconv-lite "0.4.24"
unpipe "1.0.0"
readable-stream@^2.3.5, readable-stream@~2.3.6:
readable-stream@~1.0.31:
version "1.0.34"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "0.0.1"
string_decoder "~0.10.x"
readable-stream@~2.3.6:
version "2.3.8"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
@ -2574,16 +2521,6 @@ readable-stream@^2.3.5, readable-stream@~2.3.6:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
readable-stream@~1.0.31:
version "1.0.34"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "0.0.1"
string_decoder "~0.10.x"
reflect.getprototypeof@^1.0.6:
version "1.0.8"
resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz#c58afb17a4007b4d1118c07b92c23fca422c5d82"
@ -2620,11 +2557,6 @@ release-zalgo@^1.0.0:
dependencies:
es6-error "^4.0.1"
require-at@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/require-at/-/require-at-1.0.6.tgz#9eb7e3c5e00727f5a4744070a7f560d4de4f6e6a"
integrity sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
@ -2697,7 +2629,7 @@ safe-array-concat@^1.1.2:
has-symbols "^1.1.0"
isarray "^2.0.5"
safe-buffer@5.2.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2:
safe-buffer@5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
@ -2721,13 +2653,6 @@ safe-regex-test@^1.0.3:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
saslprep@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226"
integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==
dependencies:
sparse-bitfield "^3.0.3"
semver@5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
@ -2910,13 +2835,6 @@ source-map@^0.6.1:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
sparse-bitfield@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11"
integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==
dependencies:
memory-pager "^1.0.2"
spawn-wrap@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e"