Skip to content

Commit

Permalink
Bug fixed for nest.js fastify support
Browse files Browse the repository at this point in the history
  • Loading branch information
lolu-sholar committed Apr 21, 2024
1 parent 5975c50 commit 43afd5f
Show file tree
Hide file tree
Showing 10 changed files with 85 additions and 28 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

All notable changes to this project will be documented in this file.

## [1.2.4] - 2024-04-21

### Fixed

- Bug fixed for nest.js fastify support

## [1.2.3] - 2024-04-19

### Changed
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Syntaxe middleware for Express.js and Nest.js
<br/>

[![MIT licensed](https://img.shields.io/badge/license-MIT-0091F7)](./LICENSE)
![NPM Version](https://img.shields.io/badge/npm-v1.2.3-D50100)
![NPM Version](https://img.shields.io/badge/npm-v1.2.4-D50100)
![Top Language](https://img.shields.io/badge/javascript-100%25-F0DC4E)

<br/>
Expand Down
2 changes: 1 addition & 1 deletion dist/cjs/lib/engine.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/cjs/main.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/esm/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/esm/lib/engine.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "syntaxe-express",
"version": "1.2.3",
"version": "1.2.4",
"description": "A middleware built on the original syntaxe data query library for express.js and nest.js applications.",
"main": "dist/cjs/index.js",
"module": "dist/esm/index.js",
Expand Down
81 changes: 66 additions & 15 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,30 +10,81 @@ SyntaxeIO.init = (config = null) => {
};

const SyntaxeRequestGate = class {
constructor(config = null){
config.app.set('syntaxeEnabledStatus', config.enabled);
config.app.use(this.#request);
constructor(config = null) {
this.#configureForAdapter(config);
}

async #request(req, res, next) {
const { resolve, schema, client } = scanDirectives(req, res);
#configureForAdapter(config) {
try {
if (config.app && typeof config.app.getHttpAdapter == "function") {
const fastifyEnabled = Object.getOwnPropertySymbols(config.app.getHttpAdapter().getInstance())
.find(s => s.toString() == 'Symbol(fastify.state)');
if (fastifyEnabled && config.enabled)
this.#adjustToAdapterInstance(config);
}

const syntaxeProcessor = (config.enabled ? this.#syntaxeEnabled : this.#syntaxeDisabled);

config.app.use(syntaxeProcessor);
} catch(err) {
console.error(err);
}
}

#adjustToAdapterInstance(config) {
try {
const instance = config.app.getHttpAdapter().getInstance();
instance.addHook('onRequest', (request, reply, done) => {
reply.setHeader = function (key, value) {
return this.raw.setHeader(key, value);
};

const enabledStatus = req.app.get('syntaxeEnabledStatus');

res.set('Syntaxe-Enabled', enabledStatus);
reply.end = function () {
this.raw.end();
};

if (enabledStatus && resolve) {
res.syntaxeSchema = await filterSchema(schema);
if (res.syntaxeSchema.status)
new SyntaxeResponseGate(res);
else {
res.set('Syntaxe-Schema-Resolved', false);
res.set('Syntaxe-Schema-Resolved-Error', 'Query failed. Check your schema and try again.');
request.res = reply;

done();
});
instance.addHook('onSend', (request, reply, data, done) => {
reply.syntaxeSchema = request.raw.syntaxeSchema;
walkThroughHandler({ data, res: reply })
.then(result => {
done(null, result);
}).catch(e => done(null, data));
});
} catch(err) {
console.error(err);
}
}

async #syntaxeEnabled(req, res, next) {
try {
const { resolve, schema, client } = scanDirectives(req, res);

res.setHeader('Syntaxe-Enabled', true);

if (resolve) {
res.syntaxeSchema = req.syntaxeSchema = await filterSchema(schema);
if (res.syntaxeSchema.status)
new SyntaxeResponseGate(res);
else {
res.setHeader('Syntaxe-Schema-Resolved', false);
res.setHeader('Syntaxe-Schema-Resolved-Error', 'Query failed. Check your schema and try again.');
}
}
} catch(err) {
console.error(err);
}

next();
}

async #syntaxeDisabled(req, res, next) {
res.setHeader('Syntaxe-Enabled', false);
next();
}
};

const SyntaxeResponseGate = class {
Expand Down
10 changes: 5 additions & 5 deletions src/lib/engine.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ const scanDirectives = (req, res) => {

return { resolve, schema, client };
} catch(err) {
res.set('Syntaxe-Schema-Resolved', false);
res.set('Syntaxe-Schema-Resolved-Error', String(err));
res.setHeader('Syntaxe-Schema-Resolved', false);
res.setHeader('Syntaxe-Schema-Resolved-Error', String(err));
console.error({
date: new Date(),
error: err
Expand Down Expand Up @@ -247,12 +247,12 @@ const walkThroughHandler = async({ data, res }) => {
}

// response header
res.set('Syntaxe-Schema-Resolved', true);
res.setHeader('Syntaxe-Schema-Resolved', true);

return JSON.stringify(result);
} catch(err) {
res.set('Syntaxe-Schema-Resolved', false);
res.set('Syntaxe-Schema-Resolved-Error', String(err));
res.setHeader('Syntaxe-Schema-Resolved', false);
res.setHeader('Syntaxe-Schema-Resolved-Error', String(err));
console.error({
date: new Date(),
error: err,
Expand Down

0 comments on commit 43afd5f

Please sign in to comment.