Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade to ts v5 #76

Open
wants to merge 30 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
79898b7
fixed _flush issue
Dec 17, 2021
71d1806
updated
Dec 21, 2021
2c168ae
updated
Dec 21, 2021
281f08d
disable test build
Dec 21, 2021
c30e4a3
updated
Dec 21, 2021
a137c6a
added @types/node
Dec 21, 2021
67808a7
revert to old files
Dec 21, 2021
e0d9376
reverting back to orginal file
Dec 21, 2021
be7d6bf
Started fixing vulnerabilities
klexysmile Mar 29, 2023
7aa565c
Updated nyc
klexysmile Mar 29, 2023
25409b4
before major updates
klexysmile Mar 29, 2023
3cd4342
update 1 complete
klexysmile Mar 30, 2023
163015c
update 1 complete
klexysmile Mar 30, 2023
2d6c121
changed server port
klexysmile Mar 30, 2023
d05e56b
Merge pull request #1 from WeatherFX/STRY0013221-fix_vunerabilities
klexysmile Mar 30, 2023
b1a83f8
added middleware param to server creation
klexysmile Aug 29, 2023
2ca077f
Merge pull request #2 from WeatherFX/route_middleware
klexysmile Aug 29, 2023
0fd44ab
added middleware param to server creation
klexysmile Aug 29, 2023
390823d
Merge pull request #3 from WeatherFX/route_middleware
klexysmile Aug 29, 2023
93f9afa
added middleware param to server creation
klexysmile Aug 29, 2023
784c60b
Merge pull request #4 from WeatherFX/route_middleware
klexysmile Aug 29, 2023
294524d
Added serving static files
klexysmile Aug 30, 2023
8f7464b
Merge pull request #5 from WeatherFX/route_middleware
klexysmile Aug 30, 2023
2ab6632
Updated dependencies and breaking code
klexysmile Nov 14, 2024
f620ce5
Updated dependencies and breaking code WIP
klexysmile Nov 14, 2024
0243192
Updated version in package.json
klexysmile Nov 14, 2024
ae1e606
Updated version in package.json
klexysmile Nov 14, 2024
3566b6b
WIP
klexysmile Nov 14, 2024
aa28138
Updated package version definition
klexysmile Nov 15, 2024
763ad2d
WIP remove test step for npm prepare script
klexysmile Nov 18, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16,373 changes: 9,292 additions & 7,081 deletions package-lock.json

Large diffs are not rendered by default.

51 changes: 25 additions & 26 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "odata-v4-server",
"version": "0.2.13",
"version": "3.0.2",
"description": "OData V4 Server",
"main": "build/lib/index.js",
"typings": "build/lib/index",
Expand All @@ -21,7 +21,7 @@
"test:metadata": "nyc mocha --reporter mochawesome --reporter-options reportDir=report,reportName=odata-v4-server,reportTitle=\"OData V4 Server\" src/test/**/metadata.spec.ts",
"test:validator": "nyc mocha --reporter mochawesome --reporter-options reportDir=report,reportName=odata-v4-server,reportTitle=\"OData V4 Server\" src/test/**/validator.spec.ts",
"test:projection": "nyc mocha --reporter mochawesome --reporter-options reportDir=report,reportName=odata-v4-server,reportTitle=\"OData V4 Server\" src/test/**/projection.spec.ts",
"prepare": "npm test && npm run build",
"prepare": "npm run build",
"typedoc": "rimraf docs && typedoc --name \"JayStack OData v4 Server\" --exclude \"**/?(utils|index).ts\" --excludeExternals --excludeNotExported --hideGenerator --excludePrivate --out docs src/lib"
},
"watch": {
Expand Down Expand Up @@ -81,18 +81,18 @@
"dependencies": {
"@types/body-parser": "1.17.0",
"@types/cors": "2.8.4",
"@types/express": "^4.16.0",
"@types/qs": "^6.5.1",
"body-parser": "^1.18.3",
"@types/express-serve-static-core": "^5.0.1",
"@types/qs": "^6.9.17",
"body-parser": "1.20.3",
"cors": "^2.8.4",
"deepmerge": "^2.1.1",
"express": "^4.16.3",
"express": "^5.0.1",
"odata-v4-literal": "^0.1.1",
"odata-v4-metadata": "^0.1.5",
"odata-v4-parser": "^0.1.29",
"odata-v4-service-document": "0.0.3",
"odata-v4-service-metadata": "^0.1.6",
"qs": "^6.5.2",
"qs": "^6.13.0",
"reflect-metadata": "^0.1.12",
"tslib": "^1.9.3"
},
Expand All @@ -103,37 +103,36 @@
"@types/jsonstream": "^0.8.30",
"@types/lodash": "^4.14.112",
"@types/mocha": "^5.2.5",
"@types/mongodb": "^3.1.1",
"@types/node": "^10.5.2",
"@types/request": "^2.47.1",
"@types/request-promise": "^4.1.42",
"@types/mongodb": "^4.0.7",
"@types/node": "^20.17.6",
"@types/request": "^2.48.12",
"@types/request-promise": "^4.1.51",
"@types/stream-buffers": "^3.0.2",
"JSONStream": "^1.3.3",
"benchmark": "^2.1.4",
"chai": "^4.1.2",
"copyfiles": "^2.0.0",
"copyfiles": "^2.4.1",
"event-stream": "^3.3.4",
"istanbul": "^1.1.0-alpha.1",
"mocha": "^5.2.0",
"mochawesome": "^3.0.2",
"mongodb": "^3.1.1",
"JSONStream": "^1.3.3",
"mocha": "^7.2.0",
"mochawesome": "^7.1.3",
"mongodb": "^6.10.0",
"mssql": "^4.1.0",
"npm-watch": "^0.3.0",
"nyc": "^12.0.2",
"npm-watch": "^0.11.0",
"nyc": "^15.1.0",
"odata-v4-inmemory": "^0.1.9",
"odata-v4-mongodb": "^0.1.12",
"remap-istanbul": "^0.11.1",
"request": "^2.87.0",
"request-promise": "^4.2.2",
"odata-v4-mongodb": "git+https://git@github.com/WeatherFX/odata-v4-mongodb.git#v0.2.0",
"remap-istanbul": "^0.13.0",
"request": "^2.88.2",
"request-promise": "^4.2.6",
"rimraf": "^2.6.2",
"source-map-support": "^0.5.6",
"stream-buffers": "^3.0.2",
"ts-node": "^7.0.0",
"ts-node": "^10.9.2",
"tslint": "^5.11.0",
"typedoc": "^0.11.1",
"typedoc": "^0.26.11",
"typedoc-default-themes": "^0.5.0",
"typedoc-plugin-external-module-name": "^1.1.1",
"typescript": "^2.9.2",
"typescript": "^4.9.5",
"xml-beautifier": "^0.4.0"
}
}
12 changes: 6 additions & 6 deletions src/example/advanced.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { MongoClient, ObjectID, Db } from "mongodb";
import { MongoClient, ObjectId as ObjectID, Db } from "mongodb";
import { createQuery } from "odata-v4-mongodb";
import { Edm, odata, ODataController, ODataServer, ODataQuery, createODataServer, ODataErrorHandler } from "../lib/index";
import { Category, Product, NorthwindTypes } from "./model";
Expand All @@ -22,8 +22,8 @@ export class ProductsController extends ODataController{
@odata.GET
async findOne(@odata.key key:string, @odata.query query:ODataQuery){
let mongodbQuery = createQuery(query);
return (await mongodb()).collection("Products").findOne({ _id: key }, {
fields: mongodbQuery.projection
return (await mongodb()).collection("Products").findOne({ _id: new ObjectID(key) }, {
fieldsAsRaw: mongodbQuery.projection
});
}

Expand All @@ -45,8 +45,8 @@ export class CategoriesController extends ODataController{
@odata.GET
async findOne(@odata.key() key:string, @odata.query query:ODataQuery){
let mongodbQuery = createQuery(query);
return (await mongodb()).collection("Categories").findOne({ _id: key }, {
fields: mongodbQuery.projection
return (await mongodb()).collection("Categories").findOne({ _id: new ObjectID(key) }, {
fieldsAsRaw: mongodbQuery.projection
});
}

Expand Down Expand Up @@ -93,4 +93,4 @@ process.on("warning", warning => {
console.log(warning.stack);
});

Error.stackTraceLimit = -1;
Error.stackTraceLimit = -1;
4 changes: 2 additions & 2 deletions src/example/categories.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ObjectID } from "mongodb";
import { ObjectId as ObjectID } from "mongodb";

export = [
{"_id": new ObjectID("578f2baa12eaebabec4af289"),"Description":"Soft drinks","Name":"Beverages"},
Expand All @@ -9,4 +9,4 @@ export = [
{"_id": new ObjectID("578f2baa12eaebabec4af28e"),"Description":"Sweet and savory sauces","Name":"Condiments"},
{"_id": new ObjectID("578f2baa12eaebabec4af28f"),"Description":"Cheeses","Name":"Dairy Products"},
{"_id": new ObjectID("578f2baa12eaebabec4af290"),"Description":"Desserts","Name":"Confections"}
];
];
4 changes: 2 additions & 2 deletions src/example/model.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ObjectID } from "mongodb";
import { ObjectId as ObjectID } from "mongodb";
import { Edm } from "../lib/index";

const toObjectID = _id => _id && !(_id instanceof ObjectID) ? ObjectID.createFromHexString(_id) : _id;
Expand Down Expand Up @@ -113,4 +113,4 @@ export class NorthwindTypes extends Edm.ContainerBase{
@Edm.URLDeserialize((value:string) => new ObjectID(value))
@Edm.Deserialize(value => new ObjectID(value))
ObjectID = ObjectID
}
}
10 changes: 5 additions & 5 deletions src/example/northwind.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { MongoClient, Db, ObjectID } from "mongodb";
import { MongoClient, Db, ObjectId as ObjectID } from "mongodb";
import { createQuery } from "odata-v4-mongodb";
import { Token } from "odata-v4-parser/lib/lexer";
import { ODataServer, ODataController, odata } from "../lib/index";
Expand Down Expand Up @@ -31,15 +31,15 @@ class ProductsController extends ODataController {
let db: Db = yield mongodb();
let mongodbQuery = createQuery(query);
return db.collection("Products").findOne({ _id: new ObjectID(key) }, {
fields: mongodbQuery.projection
fieldsAsRaw: mongodbQuery.projection
});
}

@odata.POST
async insert( @odata.body data: any) {
let db = await mongodb();
if (data.CategoryId) data.CategoryId = new ObjectID(data.CategoryId);
return await db.collection("Products").insert(data).then((result) => {
return await db.collection("Products").insertOne(data).then((result) => {
data._id = result.insertedId;
return data;
});
Expand All @@ -66,7 +66,7 @@ class CategoriesController extends ODataController {
let db: Db = yield mongodb();
let mongodbQuery = createQuery(query);
return db.collection("Categories").findOne({ _id: new ObjectID(key) }, {
fields: mongodbQuery.projection
fieldsAsRaw: mongodbQuery.projection
});
}
}
Expand All @@ -84,4 +84,4 @@ class NorthwindServer extends ODataServer {
}
}
NorthwindServer.$metadata(schemaJson);
NorthwindServer.create("/odata", 3000);
NorthwindServer.create("/odata", 3000);
4 changes: 2 additions & 2 deletions src/example/products.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ObjectID } from "mongodb";
import { ObjectId as ObjectID } from "mongodb";

export = [
{"_id": new ObjectID("578f2b8c12eaebabec4af23c"),"QuantityPerUnit":"10 boxes x 20 bags","UnitPrice":39,"CategoryId": new ObjectID("578f2baa12eaebabec4af289"),"Name":"Chai","Discontinued":false},
Expand Down Expand Up @@ -77,4 +77,4 @@ export = [
{"_id": new ObjectID("578f2b8c12eaebabec4af286"),"QuantityPerUnit":"24 - 0.5 l bottles","UnitPrice":7.75,"CategoryId": new ObjectID("578f2baa12eaebabec4af289"),"Name":"Rhönbräu Klosterbier","Discontinued":true},
{"_id": new ObjectID("578f2b8c12eaebabec4af287"),"QuantityPerUnit":"500 ml","UnitPrice":18.0,"CategoryId": new ObjectID("578f2baa12eaebabec4af289"),"Name":"Lakkalikööri","Discontinued":false},
{"_id": new ObjectID("578f2b8c12eaebabec4af288"),"QuantityPerUnit":"12 boxes","UnitPrice":13.0,"CategoryId": new ObjectID("578f2baa12eaebabec4af28e"),"Name":"Original Frankfurter grüne Soße","Discontinued":false}
];
];
4 changes: 2 additions & 2 deletions src/example/simple.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ObjectID } from "mongodb";
import { ObjectId as ObjectID } from "mongodb";
import { createFilter } from "odata-v4-inmemory";
import { odata, ODataController, ODataServer, ODataQuery } from "../lib/index";
let categories = require("./categories").map((category) => {
Expand Down Expand Up @@ -81,4 +81,4 @@ export class CategoriesController extends ODataController{
@odata.controller(ProductsController, true)
@odata.controller(CategoriesController, true)
export class NorthwindODataServer extends ODataServer{}
NorthwindODataServer.create("/odata", 3000);
NorthwindODataServer.create("/odata", 3000);
13 changes: 7 additions & 6 deletions src/example/stream.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as fs from "fs";
import * as path from "path";
import { Writable } from "stream";
import { MongoClient, Db, ObjectID } from "mongodb";
import { MongoClient, Db, ObjectId as ObjectID } from "mongodb";
import { createQuery, createFilter } from "odata-v4-mongodb";
import { Readable, PassThrough } from "stream";
import { ODataServer, ODataController, Edm, odata, ODataStream, ODataQuery, ODataHttpContext } from "../lib";
Expand Down Expand Up @@ -60,15 +60,16 @@ class ProductsController extends ODataController{
let db:Db = yield mongodb();
let mongodbQuery = createQuery(query);
return db.collection("Products").findOne({ _id: new ObjectID(key) }, {
fields: mongodbQuery.projection
fieldsAsRaw: mongodbQuery.projection
});
}

@odata.POST
async insert(@odata.body data:any){
let db = await mongodb();
if (data.CategoryId) data.CategoryId = new ObjectID(data.CategoryId);
return await db.collection("Products").insert(data).then((result) => {
return await db.collection("Products").insertOne(data).then((result) => {
// @ts-ignore
data._id = result.insertedId;
return data;
});
Expand All @@ -91,7 +92,7 @@ class CategoriesController extends ODataController{
}
);
let result = yield cursor.toArray();
result.inlinecount = yield cursor.count(false);
result.inlinecount = result.length;
return result;
}

Expand All @@ -100,7 +101,7 @@ class CategoriesController extends ODataController{
let db:Db = yield mongodb();
let mongodbQuery = createQuery(query);
return db.collection("Categories").findOne({ _id: new ObjectID(key) }, {
fields: mongodbQuery.projection
fieldsAsRaw: mongodbQuery.projection
});
}
}
Expand Down Expand Up @@ -299,4 +300,4 @@ class StreamServer extends ODataServer{
//console.dir(createMetadataJSON(StreamServer).dataServices.schema[0]["function"][1].parameter);
//console.log(createMetadataJSON(StreamServer).dataServices.schema[0].entityType[2]);
//console.log(StreamServer.$metadata().edmx.dataServices.schemas[0].typeDefinitions);
StreamServer.create("/odata", 3000);
StreamServer.create("/odata", 3000);
9 changes: 5 additions & 4 deletions src/lib/processor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,7 @@ class ODataStreamWrapper extends Transform {
if (typeof done == "function") done();
}

protected _flush(done?: Function) {
_flush(done?: Function) {
if (typeof done == "function") done();
}

Expand Down Expand Up @@ -581,7 +581,7 @@ export class ODataProcessor extends Transform {
}
}

protected _flush(done?: Function) {
_flush(done?: Function) {
if (this.streamEnabled && this.streamObject) {
if (this.options.objectMode) {
let flushObject: any = {
Expand Down Expand Up @@ -1065,7 +1065,7 @@ export class ODataProcessor extends Transform {
return new Promise(async (resolve, reject) => {
try{
this.__enableStreaming(part);
if (!result) return resolve();
if (!result) return resolve(null);

let boundOpName = part.name.split(".").pop();
let elementType = result.elementType;
Expand Down Expand Up @@ -1597,6 +1597,7 @@ export class ODataProcessor extends Transform {
let filterAst = queryString;
let resourceFilterAst = this.resourcePath.ast.value.query && this.resourcePath.ast.value.query.value.options && this.resourcePath.ast.value.query.value.options.find(t => t.type == TokenType.Filter);
if (typeof filterAst == "string") {
// @ts-ignore
filterAst = qs.parse(filterAst).$filter;
if (typeof filterAst == "string") {
filterAst = this.serverType.parser.filter(filterAst, { metadata: this.resourcePath.ast.metadata || this.serverType.$metadata().edmx });
Expand Down Expand Up @@ -1656,4 +1657,4 @@ export class ODataProcessor extends Transform {
}
return next;
}
}
}
11 changes: 9 additions & 2 deletions src/lib/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,15 +260,16 @@ export class ODataServerBase extends Transform{
static create(port:number):http.Server;
static create(path:string, port:number):http.Server;
static create(port:number, hostname:string):http.Server;
static create(path?:string | RegExp | number, port?:number | string, hostname?:string):http.Server;
static create(path?:string | RegExp | number, port?:number | string, hostname?:string):http.Server | express.Router{
static create(path?:string | RegExp | number, port?:number | string, hostname?:string, middleware?: any[]):http.Server;
static create(path?:string | RegExp | number, port?:number | string, hostname?:string, middleware?: any[]):http.Server | express.Router{
let server = this;
let router = express.Router();
router.use((req, _, next) => {
req.url = req.url.replace(/[\/]+/g, "/").replace(":/", "://");
if (req.headers["odata-maxversion"] && req.headers["odata-maxversion"] < "4.0") return next(new HttpRequestError(500, "Only OData version 4.0 supported"));
next();
});
// @ts-ignore
router.use(bodyParser.json());
if ((<any>server).cors) router.use(cors());
router.use((req, res, next) => {
Expand Down Expand Up @@ -298,6 +299,12 @@ export class ODataServerBase extends Transform{
}
if (typeof port == "number"){
let app = express();
if (middleware !== undefined && middleware.length > 0) {
middleware.forEach((m) => {
app.use(m);
})
}
app.use(express.static('public'));
app.use((<any>path) || "/", router);
return app.listen(port, <any>hostname);
}
Expand Down
7 changes: 5 additions & 2 deletions src/lib/visitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -476,7 +476,10 @@ export class ResourcePathVisitor {
}

protected async VisitFunctionParameter(node: Token, context: any) {
let edmParam = context.parameters.find(p => p.name == [node.value.name.value.name]);
let edmParam = context.parameters.find(p => {
// @ts-ignore
return p.name == [node.value.name.value.name];
});
let deserializer = (edmParam && Edm.getURLDeserializer(node[ODATA_TYPE], edmParam.name, edmParam.type, this.serverType.container)) || (_ => _);

context = Object.assign({}, context);
Expand Down Expand Up @@ -566,4 +569,4 @@ export class ResourcePathVisitor {
node.raw = await <any>Edm.escape(rootValue.body.value, node.value);
await this.Visit(node, context, type);
}
}
}
2 changes: 1 addition & 1 deletion src/test/execute.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,7 @@ describe("OData execute", () => {
return TestServer.execute("/NonExistent", "GET")
.then((result) => {})
.catch(err => {
expect(err.message).to.equal("Cannot read property 'node' of undefined");
expect(err.message).to.equal("Cannot read properties of undefined (reading 'node')");
});
});
});
Expand Down
Loading