@promind/honey 1.39.0 → 1.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/module.js +7 -6
- package/dist/module.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @promind/honey
|
|
2
2
|
|
|
3
|
+
## 1.40.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 2a73ea2: Update the `upsertByIdController` and `upsertController` to handle the response data correctly by accessing the first element of the result. This change ensures proper data formatting in the response.
|
|
8
|
+
|
|
9
|
+
## 1.39.1
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Patch
|
|
14
|
+
|
|
3
15
|
## 1.39.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["src/src/config/database.ts","src/src/config/index.ts","src/src/utils/error.ts","src/src/interfaces/express.ts","src/src/services/express.ts","src/src/controllers/interfaces.ts","src/src/shared/interface.ts","src/src/utils/helpers.ts","src/src/utils/db.ts","src/src/utils/postgres.ts","src/src/services/postgres.ts","src/src/interfaces/crud.ts","src/src/utils/formatter.ts","src/src/controllers/create.ts","src/src/controllers/read.ts","src/src/controllers/update.ts","src/src/controllers/upsert.ts","src/src/controllers/delete.ts","src/src/controllers/query.ts","src/src/controllers/index.ts","src/src/services/honey.ts","src/src/utils/port.ts","src/src/utils/validation.ts","src/src/index.ts","src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import { QueryTypes as QTypes } from 'sequelize';\n\nimport Config from './config';\nimport { DBOptions } from './config/database';\nimport ExpressApp from './services/express';\nimport Honey from './services/honey';\nimport Postgres from './services/postgres';\nimport { normalizePort } from './utils/port';\nimport { Metadata } from './interfaces/express';\n\nprocess.on('SIGINT', () => {\n // process reload ongoing\n // close connections, clear cache, etc\n // by default, you have 1600ms\n process.exit(0);\n});\n\nexport function createHoney(\n port: string,\n dbOptions: string | DBOptions,\n metadata?: Metadata\n) {\n new Config(dbOptions);\n\n const portVal = normalizePort(port || process.env.PORT || '3000');\n const express = new ExpressApp(portVal, metadata);\n const postgres = new Postgres();\n const honey = new Honey(express, postgres);\n\n return honey;\n}\n\nexport const defineModel = Config.defineModel.bind(Config);\n\nfunction getQueryTypes() {\n const { SELECT, INSERT, UPDATE, DELETE, RAW, UPSERT } = QTypes;\n\n const exposedTypes = { SELECT, INSERT, UPDATE, DELETE, RAW, UPSERT };\n return exposedTypes;\n}\n\nconst QueryTypes = getQueryTypes();\n\nexport { QueryTypes };\nexport { default as runDbQuery, createModel } from './utils/db';\nexport { default as HttpError, handleHttpError } from './utils/error';\nexport { default as Honey } from './services/honey';\nexport type {\n Middleware,\n ExitMiddleware,\n Request,\n Response\n} from './interfaces/express';\nexport * from 'sequelize';\nexport { validateRequestData } from './utils/validation';\n"],"names":[],"version":3,"file":"index.d.ts.map","sourceRoot":"../"}
|
|
1
|
+
{"mappings":"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","sources":["src/src/config/database.ts","src/src/config/index.ts","src/src/utils/error.ts","src/src/interfaces/express.ts","src/src/services/express.ts","src/src/controllers/interfaces.ts","src/src/shared/interface.ts","src/src/utils/helpers.ts","src/src/utils/db.ts","src/src/utils/postgres.ts","src/src/services/postgres.ts","src/src/interfaces/crud.ts","src/src/utils/formatter.ts","src/src/controllers/create.ts","src/src/controllers/read.ts","src/src/controllers/update.ts","src/src/controllers/upsert.ts","src/src/controllers/delete.ts","src/src/controllers/query.ts","src/src/controllers/index.ts","src/src/services/honey.ts","src/src/utils/port.ts","src/src/utils/validation.ts","src/src/index.ts","src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import { QueryTypes as QTypes } from 'sequelize';\n\nimport Config from './config';\nimport { DBOptions } from './config/database';\nimport ExpressApp from './services/express';\nimport Honey from './services/honey';\nimport Postgres from './services/postgres';\nimport { normalizePort } from './utils/port';\nimport { Metadata } from './interfaces/express';\n\nprocess.on('SIGINT', () => {\n // process reload ongoing\n // close connections, clear cache, etc\n // by default, you have 1600ms\n process.exit(0);\n});\n\nexport function createHoney(\n port: string,\n dbOptions: string | DBOptions,\n metadata?: Metadata\n) {\n new Config(dbOptions);\n\n const portVal = normalizePort(port || process.env.PORT || '3000');\n const express = new ExpressApp(portVal, metadata);\n const postgres = new Postgres();\n const honey = new Honey(express, postgres);\n\n return honey;\n}\n\nexport const defineModel = Config.defineModel.bind(Config);\n\nfunction getQueryTypes() {\n const { SELECT, INSERT, UPDATE, DELETE, RAW, UPSERT } = QTypes;\n\n const exposedTypes = { SELECT, INSERT, UPDATE, DELETE, RAW, UPSERT };\n return exposedTypes;\n}\n\nconst QueryTypes = getQueryTypes();\n\nexport { QueryTypes };\nexport { default as runDbQuery, createModel } from './utils/db';\nexport { default as HttpError, handleHttpError } from './utils/error';\nexport { default as Honey } from './services/honey';\nexport type {\n Middleware,\n ExitMiddleware,\n Request,\n Response\n} from './interfaces/express';\nexport * from 'sequelize';\nexport { Knex } from 'knex';\nexport { validateRequestData } from './utils/validation';\n"],"names":[],"version":3,"file":"index.d.ts.map","sourceRoot":"../"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
var $3IFKa$sequelize = require("sequelize");
|
|
2
|
+
var $3IFKa$knex = require("knex");
|
|
2
3
|
var $3IFKa$path = require("path");
|
|
3
4
|
var $3IFKa$dotenv = require("dotenv");
|
|
4
5
|
var $3IFKa$cookieparser = require("cookie-parser");
|
|
@@ -6,7 +7,6 @@ var $3IFKa$express = require("express");
|
|
|
6
7
|
var $3IFKa$morgan = require("morgan");
|
|
7
8
|
var $3IFKa$cors = require("cors");
|
|
8
9
|
var $3IFKa$expressoasgenerator = require("express-oas-generator");
|
|
9
|
-
var $3IFKa$knex = require("knex");
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
function $parcel$exportWildcard(dest, source) {
|
|
@@ -42,6 +42,7 @@ $parcel$export(module.exports, "createModel", () => $6eae9231903e3dbe$export$2f4
|
|
|
42
42
|
$parcel$export(module.exports, "HttpError", () => $2a1659c6c3bea4d7$export$2e2bcd8739ae039);
|
|
43
43
|
$parcel$export(module.exports, "handleHttpError", () => $2a1659c6c3bea4d7$export$cd2b46e1ebe8182d);
|
|
44
44
|
$parcel$export(module.exports, "Honey", () => $e551a6691d3acd09$export$2e2bcd8739ae039);
|
|
45
|
+
$parcel$export(module.exports, "Knex", () => $3IFKa$knex.Knex);
|
|
45
46
|
$parcel$export(module.exports, "validateRequestData", () => $e0429c84bb00f9a2$export$3b8deecb09f1ff23);
|
|
46
47
|
|
|
47
48
|
|
|
@@ -461,7 +462,7 @@ function $389a0330ed47be73$export$d5a9f256d3442907({ db: db, resource: resource,
|
|
|
461
462
|
const result = await db.upsert(resource, body, [
|
|
462
463
|
idField
|
|
463
464
|
]);
|
|
464
|
-
const data = processResponseData ? processResponseData(result, req) : undefined;
|
|
465
|
+
const data = processResponseData ? processResponseData(result?.[0], req) : undefined;
|
|
465
466
|
res.send({
|
|
466
467
|
message: message,
|
|
467
468
|
data: data
|
|
@@ -485,7 +486,7 @@ function $389a0330ed47be73$export$e94809b3c2751b8b({ db: db, resource: resource,
|
|
|
485
486
|
try {
|
|
486
487
|
const body = (0, $016b89c2f40cad11$export$3fde508750f4a353)(req.body, params);
|
|
487
488
|
const result = await db.upsert(resource, body, conflictTarget);
|
|
488
|
-
const data = processResponseData ? processResponseData(result, req) : undefined;
|
|
489
|
+
const data = processResponseData ? processResponseData(result?.[0], req) : undefined;
|
|
489
490
|
res.send({
|
|
490
491
|
message: message,
|
|
491
492
|
data: data
|
|
@@ -768,7 +769,7 @@ class $e551a6691d3acd09$export$2e2bcd8739ae039 {
|
|
|
768
769
|
});
|
|
769
770
|
}
|
|
770
771
|
upsertById({ resource: resource, params: params, idField: idField, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, methodOverride: methodOverride, table: table, processErrorResponse: processErrorResponse, processResponseData: processResponseData }) {
|
|
771
|
-
const path = pathOverride || `/${resource}/:id
|
|
772
|
+
const path = pathOverride || `/${resource}/:id`;
|
|
772
773
|
resource = table || resource;
|
|
773
774
|
const controller = (0, $389a0330ed47be73$export$d5a9f256d3442907)({
|
|
774
775
|
db: this.postgres,
|
|
@@ -788,7 +789,7 @@ class $e551a6691d3acd09$export$2e2bcd8739ae039 {
|
|
|
788
789
|
});
|
|
789
790
|
}
|
|
790
791
|
upsert({ resource: resource, params: params, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, methodOverride: methodOverride, conflictTarget: conflictTarget, table: table, processErrorResponse: processErrorResponse, processResponseData: processResponseData }) {
|
|
791
|
-
const path = pathOverride || `/${resource}
|
|
792
|
+
const path = pathOverride || `/${resource}`;
|
|
792
793
|
resource = table || resource;
|
|
793
794
|
const controller = (0, $389a0330ed47be73$export$e94809b3c2751b8b)({
|
|
794
795
|
db: this.postgres,
|
|
@@ -1100,6 +1101,7 @@ function $e3f949bd939b0c31$export$21d1ad8451a259af(val) {
|
|
|
1100
1101
|
|
|
1101
1102
|
|
|
1102
1103
|
|
|
1104
|
+
|
|
1103
1105
|
const $e0429c84bb00f9a2$export$3b8deecb09f1ff23 = (schema, location = 'body', options = {
|
|
1104
1106
|
allowUnknown: true
|
|
1105
1107
|
})=>async (req, res, next)=>{
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["src/index.ts","src/config/index.ts","src/config/database.ts","src/services/express.ts","src/utils/error.ts","src/services/honey.ts","src/controllers/index.ts","src/controllers/interfaces.ts","src/controllers/create.ts","src/utils/formatter.ts","src/controllers/read.ts","src/controllers/update.ts","src/controllers/upsert.ts","src/controllers/delete.ts","src/controllers/query.ts","src/utils/db.ts","src/utils/helpers.ts","src/services/postgres.ts","src/utils/postgres.ts","src/utils/port.ts","src/utils/validation.ts"],"sourcesContent":["import { QueryTypes as QTypes } from 'sequelize';\n\nimport Config from './config';\nimport { DBOptions } from './config/database';\nimport ExpressApp from './services/express';\nimport Honey from './services/honey';\nimport Postgres from './services/postgres';\nimport { normalizePort } from './utils/port';\nimport { Metadata } from './interfaces/express';\n\nprocess.on('SIGINT', () => {\n // process reload ongoing\n // close connections, clear cache, etc\n // by default, you have 1600ms\n process.exit(0);\n});\n\nexport function createHoney(\n port: string,\n dbOptions: string | DBOptions,\n metadata?: Metadata\n) {\n new Config(dbOptions);\n\n const portVal = normalizePort(port || process.env.PORT || '3000');\n const express = new ExpressApp(portVal, metadata);\n const postgres = new Postgres();\n const honey = new Honey(express, postgres);\n\n return honey;\n}\n\nexport const defineModel = Config.defineModel.bind(Config);\n\nfunction getQueryTypes() {\n const { SELECT, INSERT, UPDATE, DELETE, RAW, UPSERT } = QTypes;\n\n const exposedTypes = { SELECT, INSERT, UPDATE, DELETE, RAW, UPSERT };\n return exposedTypes;\n}\n\nconst QueryTypes = getQueryTypes();\n\nexport { QueryTypes };\nexport { default as runDbQuery, createModel } from './utils/db';\nexport { default as HttpError, handleHttpError } from './utils/error';\nexport { default as Honey } from './services/honey';\nexport type {\n Middleware,\n ExitMiddleware,\n Request,\n Response\n} from './interfaces/express';\nexport * from 'sequelize';\nexport { validateRequestData } from './utils/validation';\n","import path from 'path';\nimport dotenv from 'dotenv';\n\nimport initDB, { DBOptions } from './database';\nimport {\n Model,\n ModelAttributes,\n ModelOptions,\n Sequelize\n} from 'sequelize/types';\ndotenv.config();\ndotenv.config({ path: path.join(__dirname, '.env') });\n\nexport default class Config {\n public static db: Sequelize;\n\n public static getEnv = (key: string) => {\n return process.env[key];\n };\n\n constructor(options: DBOptions | string) {\n Config.db = initDB(options);\n }\n\n static get isLive() {\n return process.env.NODE_ENV === 'production';\n }\n\n public static defineModel(\n modelName: string,\n attributes: ModelAttributes<Model<any, any>, any>,\n options?: ModelOptions<Model<any, any>> | undefined\n ) {\n return this.db.define(modelName, attributes, options);\n }\n}\n","import { Sequelize } from 'sequelize';\n\nexport interface DBOptions {\n host: string;\n port: number | string;\n user: string;\n password: string;\n database: string;\n}\n\nexport default function initDB(options: string | DBOptions) {\n let uri = '';\n if (typeof options === 'string') {\n uri = options;\n } else {\n uri = `postgres://${options.user}:${options.password}@${options.host}:${options.port}/${options.database}`;\n }\n const sequelize = new Sequelize(uri, {\n logging: false\n });\n\n sequelize\n .authenticate()\n .then(() => {\n console.log('DB Connection established successfully');\n })\n .catch((err) => {\n console.log('DB Connection failed');\n console.error(err);\n });\n\n return sequelize;\n}\n","import cookieParser from 'cookie-parser';\nimport express from 'express';\nimport logger from 'morgan';\nimport cors from 'cors';\nimport http from 'http';\nimport expressOasGenerator from 'express-oas-generator';\nimport '../config';\nimport HttpError from '../utils/error';\nimport { AddressInfo } from 'net';\nimport { Metadata } from '../interfaces/express';\n\n/**\n * Event listener for HTTP server \"error\" event.\n */\nconst onError = (port: string | number) => {\n return (error: any) => {\n if (error.syscall !== 'listen') {\n throw error;\n }\n\n const bind = typeof port === 'string' ? `Pipe ${port}` : `Port ${port}`;\n\n // handle specific listen errors with friendly messages\n switch (error.code) {\n case 'EACCES':\n console.error(`${bind} requires elevated privileges`);\n process.exit(1);\n case 'EADDRINUSE':\n console.error(`${bind} is already in use`);\n process.exit(1);\n default:\n throw error;\n }\n };\n};\n\n/**\n * Event listener for HTTP server \"listening\" event.\n */\nconst onListening = (server: http.Server) => {\n return () => {\n const addr = server.address();\n const bind =\n typeof addr === 'string'\n ? `pipe ${addr}`\n : `port ${(addr as AddressInfo).port}`;\n console.log(\n `%c Honey Server started on ${bind} `,\n 'background: #222; color: #bada55; font-size: 32px'\n );\n };\n};\n\nclass ExpressApp {\n public app = express();\n public appRoutes = express.Router();\n private fallbackErrMessage = 'Endpoint does not exist';\n private routePrefix = '/api';\n\n constructor(\n port: string | number,\n private metadata?: Metadata\n ) {\n this.fallbackErrMessage =\n this.metadata?.fallbackErrorMessage || this.fallbackErrMessage;\n this.routePrefix = this.metadata?.routePrefix || this.routePrefix;\n this.initMiddlewares();\n this.setupErrorFallback();\n this.app.set('port', port);\n }\n\n public listen() {\n expressOasGenerator.handleRequests();\n const port = Number(this.app.get('port'));\n const server = this.app.listen(port);\n server.on('error', onError(port));\n server.on('listening', onListening(server));\n }\n\n private initMiddlewares() {\n const corsOptions: cors.CorsOptions = {\n origin: '*',\n methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',\n allowedHeaders: '*',\n exposedHeaders: '*',\n credentials: true,\n optionsSuccessStatus: 204\n };\n\n expressOasGenerator.handleResponses(this.app, {} as any);\n this.app.use(logger('dev'));\n this.app.use(cors(corsOptions));\n this.app.use(\n express.json({\n limit: '50mb',\n verify(req: any, _res, buf) {\n req.rawBody = buf;\n }\n })\n );\n this.app.use(express.urlencoded({ limit: '50mb', extended: false }));\n this.app.use(cookieParser());\n this.app.use(this.routePrefix, this.appRoutes);\n }\n\n private setupErrorFallback() {\n this.app.use((_, res) => {\n const err = new HttpError(this.fallbackErrMessage, 404);\n\n return res.status(err.status).json({ message: err.message });\n });\n // error handler\n this.app.use((err: any, _, res: any) => {\n return res\n .status(err.status || 500)\n .send({ message: 'Something went wrong' });\n });\n }\n}\n\nexport default ExpressApp;\n","import { Response } from 'express';\n\nexport default class HttpError extends Error {\n constructor(\n message: string,\n public status: number\n ) {\n super(message || 'Something went wrong');\n }\n}\n\nexport const handleHttpError = (err: HttpError, res: Response) => {\n return res\n .status(err.status || 500)\n .send({ message: err.message || 'Something went wrong' });\n};\n","import Config from '../config';\nimport {\n createController,\n deleteByIdController,\n getByIdController,\n getByQueryController,\n updateByIdController,\n upsertByIdController,\n upsertController,\n updateController,\n deleteController,\n queryController\n} from '../controllers';\nimport {\n ICreate,\n ICrud,\n IDelete,\n IDeleteById,\n IGet,\n IGetById,\n IUpdate,\n IUpdateById,\n IUpsert,\n IUpsertById,\n IQuery\n} from '../interfaces/crud';\nimport { ExitMiddleware, Middleware } from '../interfaces/express';\nimport { NextFunction, Request, Response } from 'express';\nimport ExpressApp from './express';\nimport Postgres from './postgres';\n\n// eslint-disable-next-line\nconst defaultExitMiddleware: ExitMiddleware = (data, req, res, next) => {\n if (process.env.NODE_ENV !== 'production') console.log('Response:', data);\n};\n\nexport default class Honey {\n constructor(\n public express: ExpressApp,\n private postgres: Postgres\n ) {}\n\n get routes() {\n return this.express.appRoutes;\n }\n\n get db() {\n return Config.db;\n }\n\n private crud({\n method,\n path,\n controller,\n middleware = [],\n exitMiddleware = [defaultExitMiddleware]\n }: ICrud) {\n const dbCheck = async (req: Request, res: Response, next: NextFunction) => {\n if (!Config.db) {\n return res.status(503).send({\n message: 'DB Initialization in progress'\n });\n } else {\n next();\n }\n };\n this.express.appRoutes[method](\n path,\n dbCheck,\n ...middleware,\n controller,\n ...exitMiddleware\n );\n }\n\n public addMiddleware(middleware: Middleware[]) {\n this.express.appRoutes.use(...middleware);\n }\n\n public startServer() {\n this.express.listen();\n }\n\n public create({\n resource,\n params,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n processResponseData,\n processErrorResponse,\n table,\n methodOverride\n }: ICreate) {\n const path = pathOverride || `/${resource}`;\n resource = table || resource;\n\n const controller = createController({\n db: this.postgres,\n resource,\n params,\n message,\n processResponseData,\n processErrorResponse\n });\n\n this.crud({\n method: methodOverride || 'post',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public get({\n resource,\n fields,\n filter,\n format,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n processResponseData,\n processErrorResponse,\n table,\n joins\n }: IGet) {\n const path = pathOverride || `/${resource}`;\n resource = table || resource;\n\n const controller = getByQueryController({\n db: this.postgres,\n resource,\n fields,\n filterQuery: filter,\n format,\n processResponseData,\n processErrorResponse,\n joins\n });\n this.crud({\n method: methodOverride || 'get',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public getById({\n resource,\n fields,\n idField,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n processResponseData,\n processErrorResponse,\n table,\n filter,\n joins\n }: IGetById) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = getByIdController({\n db: this.postgres,\n resource,\n fields,\n idField: idField || 'id',\n processResponseData,\n processErrorResponse,\n filterQuery: filter,\n joins\n });\n\n this.crud({\n method: methodOverride || 'get',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public updateById({\n resource,\n params,\n idField,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n table,\n filter,\n processErrorResponse,\n processResponseData\n }: IUpdateById) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = updateByIdController({\n db: this.postgres,\n resource,\n params,\n message,\n idField,\n filterQuery: filter,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public update({\n resource,\n params,\n filter,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n table,\n processErrorResponse,\n processResponseData\n }: IUpdate) {\n const path = pathOverride || `/${resource}`;\n resource = table || resource;\n\n const controller = updateController({\n db: this.postgres,\n resource,\n params,\n message,\n filterQuery: filter,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public upsertById({\n resource,\n params,\n idField,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n table,\n processErrorResponse,\n processResponseData\n }: IUpsertById) {\n const path = pathOverride || `/${resource}/:id/upsert`;\n resource = table || resource;\n\n const controller = upsertByIdController({\n db: this.postgres,\n resource,\n params,\n message,\n idField,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public upsert({\n resource,\n params,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n conflictTarget,\n table,\n processErrorResponse,\n processResponseData\n }: IUpsert) {\n const path = pathOverride || `/${resource}/:id/upsert`;\n resource = table || resource;\n\n const controller = upsertController({\n db: this.postgres,\n resource,\n params,\n message,\n conflictTarget,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public deleteById({\n resource,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n idField,\n filter,\n table,\n processErrorResponse\n }: IDeleteById) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = deleteByIdController({\n db: this.postgres,\n resource,\n message,\n idField,\n filterQuery: filter,\n processErrorResponse\n });\n this.crud({\n method: methodOverride || 'delete',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public delete({\n resource,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n filter,\n table,\n processErrorResponse\n }: IDelete) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = deleteController({\n db: this.postgres,\n resource,\n message,\n filterQuery: filter,\n processErrorResponse\n });\n this.crud({\n method: methodOverride || 'delete',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public query({\n resource,\n query,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n processErrorResponse,\n processResponseData\n }: IQuery) {\n const path = pathOverride || `/${resource}`;\n\n const controller = queryController({\n db: this.postgres,\n query,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'get',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n}\n","export { Controller } from './interfaces';\nexport { default as createController } from './create';\nexport { getByIdController, getByQueryController } from './read';\nexport { updateByIdController, updateController } from './update';\nexport { upsertByIdController, upsertController } from './upsert';\nexport { deleteByIdController, deleteController } from './delete';\nexport * from './query';\n","import { NextFunction, Request, Response } from 'express';\n\nexport type Controller = (\n req: Request,\n res: Response,\n next: NextFunction\n) => void;\n","import { CreateControllerParams } from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { extractInsertData } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport default function createController({\n db,\n resource,\n params,\n message,\n processResponseData,\n processErrorResponse\n}: CreateControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = extractInsertData(req.body, params);\n\n const data = await db.create(resource, body);\n const id = data[0].id;\n\n res.send({\n message,\n data:\n req.body.dataOverride ||\n (processResponseData\n ? await processResponseData({ id }, req)\n : { id })\n });\n next({ message, data: { id } });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import { Request } from 'express';\nimport { ICreate, IUpdateById } from '../interfaces/crud';\nimport {\n Filter,\n FilterLocation,\n FilterOps,\n FilterParam,\n GetFilterParam,\n GetQueryFilter,\n UpdateOpParam\n} from '../shared/interface';\nimport HttpError from './error';\n\nconst formatters: Record<string, Function> = {\n string: String,\n number: Number,\n boolean: Boolean,\n json: JSON.stringify,\n object: JSON.stringify\n};\n\nexport const extractInsertData = (\n body: Record<string, any>,\n params: ICreate['params']\n) => {\n const result: Record<string, string | number | boolean | Date | Object> = {};\n\n Object.entries(params).forEach(([key, value]) => {\n if (value === '@updatedAt') {\n result[key] = new Date();\n return;\n }\n\n if (!Object.keys(body).includes(key)) return;\n\n const formatter = formatters[value];\n result[key] =\n formatter && ![null, undefined].includes(body[key])\n ? formatter(body[key])\n : body[key];\n });\n\n return result;\n};\n\nexport const generateUpdateData = (\n body: Record<string, any>,\n params: IUpdateById['params']\n) => {\n const result = Object.entries(params).reduce((acc, [key, value]) => {\n if (!Object.keys(body).includes(key) && value !== '@updatedAt')\n return { ...acc };\n\n let formattedValue: any;\n if (value === '@updatedAt') {\n formattedValue = new Date();\n } else {\n formattedValue = ![null, undefined].includes(body[key])\n ? formatters[typeof body[key]](body[key])\n : body[key];\n }\n\n return {\n ...acc,\n [key]: {\n value: formattedValue,\n operator: value === '@updatedAt' ? 'replace' : value\n }\n };\n }, {} as UpdateOpParam);\n\n return result;\n};\n\nconst retrieveParamFromLocation = (\n req: Request,\n location: FilterLocation,\n key: string\n) => {\n if (location === 'request') return (req as any)[key];\n\n return req[location][key];\n};\n\nexport const formatReadFilter = (\n filterParams: Record<string, any>,\n filter: GetQueryFilter,\n req: Request\n) => {\n const result: Filter = {};\n\n Object.entries(filter).forEach(([key, param]) => {\n if (key === '$or') {\n const val = formatReadFilter(\n filterParams,\n param as Record<string, GetFilterParam>,\n req\n ) as Record<string, FilterParam>;\n\n result[key] = val;\n } else {\n let valueToUse: any;\n if (param.overrideValue) {\n if (typeof param.overrideValue === 'function') {\n valueToUse = param.overrideValue(req);\n } else {\n valueToUse = param.overrideValue;\n }\n } else if (!!param.location) {\n valueToUse = retrieveParamFromLocation(\n req,\n param.location as FilterLocation,\n key\n );\n } else {\n valueToUse = filterParams[key];\n }\n\n if (typeof valueToUse === 'undefined') {\n throw new HttpError('Missing filter parameter', 400);\n }\n\n const valueFormatter = formatters[(param as GetFilterParam).value];\n result[key] = {\n operator: param.operator as FilterOps,\n value: valueFormatter(valueToUse)\n };\n }\n });\n\n return result;\n};\n","import {\n GetByIdControllerParams,\n GetByQueryControllerParams\n} from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { formatReadFilter } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport function getByIdController({\n db,\n resource,\n fields,\n idField = 'id',\n processResponseData,\n processErrorResponse,\n filterQuery = {},\n joins\n}: GetByIdControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const id = req.params.id;\n\n const filter = formatReadFilter(req.query, filterQuery, req);\n\n const data = await db.read(\n resource,\n fields,\n {\n [idField]: {\n value: id,\n operator: '='\n },\n ...filter\n },\n undefined,\n undefined,\n joins\n );\n\n if (!data?.length) {\n throw new HttpError('Record does not exist', 404);\n }\n\n res.send({\n data: processResponseData\n ? await processResponseData(data[0], req)\n : data[0]\n });\n next({ data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function getByQueryController({\n db,\n resource,\n fields,\n filterQuery,\n format,\n processResponseData,\n processErrorResponse,\n joins\n}: GetByQueryControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const page = Number(req.query.page);\n const limit = Number(req.query.limit);\n const paginate =\n limit || page ? { page: page || 1, limit: limit || 10 } : undefined;\n\n const filter =\n filterQuery && formatReadFilter(req.query, filterQuery, req);\n\n let data: Record<string, any>[] = await db.read(\n resource,\n fields,\n filter,\n paginate,\n format,\n joins\n );\n let total = 0;\n if (paginate) {\n total = Number(data[0]?.['honey_total_count'] || 0);\n data = data.map((item: Record<string, any>) => {\n delete item['honey_total_count'];\n return item;\n });\n }\n\n if (processResponseData) {\n data = await processResponseData(data, req);\n } else if (!data?.length) {\n throw new HttpError('No records found', 404);\n }\n const response = {\n data,\n meta: {\n ...(!!paginate && {\n pagination: {\n total,\n pageSize: limit,\n page,\n pageCount: Math.ceil(total / limit)\n }\n })\n }\n };\n res.send(response);\n next(response);\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import {\n UpdateByIdControllerParams,\n UpdateControllerParams\n} from '../interfaces/crud';\nimport { Filter } from '../shared/interface';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { formatReadFilter, generateUpdateData } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport function updateByIdController({\n db,\n resource,\n params,\n message,\n idField = 'id',\n processErrorResponse,\n processResponseData,\n filterQuery = {}\n}: UpdateByIdControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = generateUpdateData(req.body, params);\n const additionalFilter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n const filter: Filter = {\n [idField]: {\n operator: '=',\n value: req.params.id\n },\n ...additionalFilter\n };\n\n const result = await db.update(resource, body, filter);\n\n const data = processResponseData\n ? processResponseData(result, req)\n : undefined;\n\n res.send({ message, data });\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function updateController({\n db,\n resource,\n params,\n message,\n filterQuery,\n processErrorResponse,\n processResponseData\n}: UpdateControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = generateUpdateData(req.body, params);\n const filter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n\n const result = await db.update(resource, body, filter);\n\n const data = processResponseData\n ? processResponseData(result, req)\n : undefined;\n\n res.send({ message, data });\n\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import {\n UpsertByIdControllerParams,\n UpsertControllerParams\n} from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { generateUpdateData } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport function upsertByIdController({\n db,\n resource,\n params,\n message,\n idField = 'id',\n processErrorResponse,\n processResponseData\n}: UpsertByIdControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n req.body[idField] = req.params.id;\n params = { ...params, [idField]: 'replace' };\n const body = generateUpdateData(req.body, params);\n\n const result = await db.upsert(resource, body, [idField]);\n\n const data = processResponseData\n ? processResponseData(result, req)\n : undefined;\n\n res.send({ message, data });\n\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function upsertController({\n db,\n resource,\n params,\n message,\n conflictTarget,\n processErrorResponse,\n processResponseData\n}: UpsertControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = generateUpdateData(req.body, params);\n\n const result = await db.upsert(resource, body, conflictTarget);\n\n const data = processResponseData\n ? processResponseData(result, req)\n : undefined;\n\n res.send({ message, data });\n\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import {\n DeleteByIdControllerParams,\n DeleteControllerParams\n} from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\nimport { formatReadFilter } from '../utils/formatter';\n\nexport function deleteByIdController({\n db,\n resource,\n message,\n idField = 'id',\n processErrorResponse,\n filterQuery = {}\n}: DeleteByIdControllerParams): Controller {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n const id = req.params[idField || 'id'];\n const filter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n\n await db.delete(resource, {\n [idField]: {\n value: id,\n operator: '='\n },\n ...filter\n });\n\n res.send({ message });\n next({ message });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function deleteController({\n db,\n resource,\n message,\n processErrorResponse,\n filterQuery\n}: DeleteControllerParams): Controller {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n const filter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n\n await db.delete(resource, filter);\n\n res.send({ message });\n next({ message });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import { NextFunction, Request, Response } from 'express';\nimport { getKnex } from '../utils/db';\nimport { QueryControllerParams } from '../interfaces/crud';\n\nexport function queryController({\n db,\n query,\n processErrorResponse,\n processResponseData\n}: QueryControllerParams) {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n const page = Number(req.query.page);\n const limit = Number(req.query.limit);\n const paginate =\n limit || page ? { page: page || 1, limit: limit || 10 } : undefined;\n\n const knex = getKnex();\n let queryBuilder = query(knex, req);\n if (paginate) {\n queryBuilder = queryBuilder\n .limit(paginate.limit)\n .offset(paginate.limit * (paginate.page - 1));\n }\n const { sql, bindings } = queryBuilder.toSQL();\n\n const result = await db.query(sql, [...bindings]);\n\n if (processResponseData) {\n return res.send({ data: processResponseData(result, req) });\n }\n\n return res.send({ data: result });\n } catch (e) {\n if (processErrorResponse) {\n return next(processErrorResponse(e as Error));\n }\n return next(e);\n }\n };\n}\n","import {\n Model,\n ModelAttributes,\n ModelOptions,\n ModelStatic,\n QueryOptions\n} from 'sequelize';\nimport Knex from 'knex';\n\nimport Config from '../config';\nimport createSingleton from './helpers';\n\nexport default function runDbQuery(query: string, params?: QueryOptions) {\n params = params || {};\n\n return Config.db.query(query, {\n ...params,\n raw: true\n });\n}\n\nclass ModelCreator {\n private static model: Record<string, ModelStatic<Model>> = {};\n\n public static createModel<\n TModelAttributes extends {} = any,\n TCreationAttributes extends {} = TModelAttributes\n >(\n modelName: string,\n attributes: ModelAttributes<Model<TModelAttributes, TCreationAttributes>>,\n options?:\n | ModelOptions<Model<TModelAttributes, TCreationAttributes>>\n | undefined\n ): ModelStatic<Model<TModelAttributes, TCreationAttributes>> {\n if (!this.model[modelName]) {\n this.model[modelName] = Config.db.define(modelName, attributes, options);\n }\n\n return this.model[modelName];\n }\n}\n\nexport function createModel<\n TModelAttributes extends {} = any,\n TCreationAttributes extends {} = TModelAttributes\n>(\n modelName: string,\n attributes: ModelAttributes<Model<TModelAttributes, TCreationAttributes>>,\n options?:\n | ModelOptions<Model<TModelAttributes, TCreationAttributes>>\n | undefined\n) {\n return ModelCreator.createModel.bind(ModelCreator)(\n modelName,\n attributes,\n options\n );\n}\n\nexport const getKnex = () =>\n createSingleton('knex', () => {\n return Knex({ client: 'pg' });\n });\n","export class Singleton {\n private static instances: Map<string, any> = new Map();\n\n public static getInstance<T>(identifier: string, initFn?: () => T): T {\n if (!this.instances.has(identifier) && initFn) {\n this.instances.set(identifier, initFn());\n }\n\n return this.instances.get(identifier) as T;\n }\n}\n\nexport default function createSingleton<T>(\n identifier: string,\n initFn?: () => T\n): T {\n return Singleton.getInstance(identifier, initFn);\n}\n","import config from '../config';\nimport {\n generateCreateQuery,\n generateDeleteQuery,\n generateReadQuery,\n generateUpdateQuery,\n generateUpsertQuery\n} from '../utils/postgres';\nimport { QueryTypes } from 'sequelize';\nimport { Filter, UpdateOpParam, Join } from '../shared/interface';\n\nexport default class Postgres {\n public async read(\n table: string,\n fields: string[],\n filter?: Filter,\n paginate?: { page: number; limit: number },\n format?: { sort: 'ASC' | 'DESC'; sortField: string },\n joins?: Join[]\n ) {\n const { query, replacements } = generateReadQuery(\n table,\n fields,\n filter,\n paginate,\n format,\n joins\n );\n\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n return result;\n }\n\n public async query(query: string, replacements: any[]) {\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n return result;\n }\n\n public async create(\n table: string,\n data: Record<string, string | number | boolean | Date | Object>\n ) {\n const { query, replacements } = generateCreateQuery(table, data);\n\n const res: any = await config.db.query(query, {\n type: QueryTypes.INSERT,\n raw: true,\n replacements: [...replacements]\n });\n\n // inserted ids\n return res[0] as { id: string | number }[];\n }\n\n public async update(table: string, data: UpdateOpParam, filter?: Filter) {\n const { query, replacements } = generateUpdateQuery(table, data, filter);\n\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n return result;\n }\n\n public async delete(table: string, filter?: Filter) {\n const { query, replacements } = generateDeleteQuery(table, filter);\n\n await config.db.query(query, {\n type: QueryTypes.DELETE,\n raw: true,\n replacements: [...replacements]\n });\n }\n\n public async upsert(\n table: string,\n data: UpdateOpParam,\n conflictTarget: string[]\n ) {\n const { query, replacements } = generateUpsertQuery(\n table,\n data,\n conflictTarget\n );\n\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n\n return result;\n }\n}\n","import { Knex } from 'knex';\nimport { Filter, FilterParam, UpdateOpParam, Join } from '../shared/interface';\nimport { getKnex } from './db';\n\nexport const applyFilter = (query: Knex.QueryBuilder, filter: Filter = {}) => {\n Object.entries(filter).forEach(([field, data]) => {\n if (field === '$or') {\n query.where((builder) => {\n Object.entries(data).forEach(([orField, orData], index) => {\n const method = index === 0 ? 'where' : 'orWhere';\n const orParam = orData as FilterParam;\n\n if (['like', 'not like'].includes(orParam.operator)) {\n builder[method](orField, 'ilike', `%${orParam.value}%`);\n } else {\n builder[method](orField, orParam.operator, orParam.value);\n }\n });\n });\n } else {\n const param = data as FilterParam;\n\n if (['like', 'not like'].includes(param.operator)) {\n query.where(\n field,\n param.operator === 'like' ? 'ilike' : 'not ilike',\n `%${param.value}%`\n );\n } else {\n query.where(field, param.operator, param.value);\n }\n }\n });\n\n return query;\n};\n\nexport const generateCreateQuery = (\n table: string,\n data: Record<string, string | number | boolean | Date | Object>\n) => {\n const knex = getKnex();\n const { sql: query, bindings: replacements } = knex(table)\n .insert(data)\n .returning('id')\n .toSQL();\n\n return { query, replacements };\n};\n\nexport const generateReadQuery = (\n table: string,\n fields: string[],\n filter?: Filter,\n paginate?: { page: number; limit: number },\n format?: { sort: 'ASC' | 'DESC'; sortField: string },\n joins?: Join[]\n) => {\n const knex = getKnex();\n\n let q = knex(table).select(fields);\n\n // Add total count if pagination is needed\n if (paginate) {\n // Using knex.raw to create the count column with the same name as in original code\n q = knex(table).select([\n ...fields.map((field) => knex.raw(`?? as ??`, [field, field])),\n knex.raw('count(??) OVER() AS honey_total_count', [fields[0]])\n ]);\n }\n\n // Apply joins\n if (joins && joins.length > 0) {\n joins.forEach((join) => {\n const joinTable = join.alias\n ? `${join.table} as ${join.alias}`\n : join.table;\n const joinType = join.type || 'inner';\n const operator = join.on.operator || '=';\n\n switch (joinType) {\n case 'left':\n q.leftJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n case 'right':\n q.rightJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n case 'full':\n q.fullOuterJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n case 'cross':\n q.crossJoin(\n join.alias\n ? knex.raw('?? as ??', [join.table, join.alias])\n : knex.raw('??', [join.table])\n );\n break;\n case 'inner':\n default:\n q.innerJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n }\n });\n }\n\n // Apply filters\n if (filter) {\n q = applyFilter(q, filter);\n }\n\n // Apply sorting\n if (format?.sort && format.sortField) {\n q.orderBy(format.sortField, format.sort);\n }\n\n // Apply pagination\n if (paginate) {\n q.limit(paginate.limit).offset(paginate.limit * (paginate.page - 1));\n }\n\n const { sql: query, bindings: replacements } = q.toSQL();\n\n return { query, replacements };\n};\nexport const generateUpdateQuery = (\n table: string,\n data: UpdateOpParam,\n filter?: Filter\n) => {\n const knex = getKnex();\n let q = knex(table);\n\n // Build the update object\n const updateData: Record<string, Knex.Raw> = {};\n\n Object.entries(data).forEach(([field, fieldData]) => {\n const param = fieldData as any;\n\n if (param.operator === 'inc') {\n updateData[field] = knex.raw('?? + ?', [field, param.value]);\n } else if (param.operator === 'dec') {\n updateData[field] = knex.raw('?? - ?', [field, param.value]);\n } else {\n updateData[field] = param.value;\n }\n });\n\n // Apply filter conditions\n if (filter) {\n q = applyFilter(q, filter);\n }\n\n const { sql: query, bindings: replacements } = q\n .update(updateData)\n .returning('*')\n .toSQL();\n console.log(query, replacements);\n return { query, replacements };\n};\nexport const generateDeleteQuery = (table: string, filter?: Filter) => {\n const knex = getKnex();\n let q = knex(table);\n\n if (filter) {\n q = applyFilter(q, filter);\n }\n\n const { sql: query, bindings: replacements } = q.delete().toSQL();\n return { query, replacements };\n};\n\nexport const generateUpsertQuery = (\n table: string,\n data: UpdateOpParam,\n conflictTarget: string[]\n) => {\n const knex = getKnex();\n\n // Prepare insert data\n const insertData: Record<string, UpdateOpParam[string]['value']> = {};\n Object.entries(data).forEach(([field, fieldData]) => {\n insertData[field] = fieldData.value;\n });\n\n // Prepare update data for conflict resolution\n const updateData: Record<string, Knex.Raw | UpdateOpParam[string]['value']> =\n {};\n Object.entries(data).forEach(([field, fieldData]) => {\n const param = fieldData;\n\n if (param.operator === 'inc') {\n updateData[field] = knex.raw('?? + ?', [\n `${table}.${field}`,\n param.value\n ]);\n } else if (param.operator === 'dec') {\n updateData[field] = knex.raw('?? - ?', [\n `${table}.${field}`,\n param.value\n ]);\n } else {\n updateData[field] = param.value;\n }\n });\n\n const { sql: query, bindings: replacements } = knex(table)\n .insert(insertData)\n .onConflict(conflictTarget)\n .merge(updateData)\n .returning('*')\n .toSQL();\n\n return { query, replacements };\n};\n","export function normalizePort(val: string) {\n const port = parseInt(val, 10);\n\n if (isNaN(port)) {\n // named pipe\n return val;\n }\n\n if (port >= 0) {\n // port number\n return port;\n }\n\n throw new Error('Invalid port number');\n}\n","import { ObjectSchema, ValidationOptions } from 'joi';\nimport { Middleware } from 'src/interfaces/express';\nimport HttpError, { handleHttpError } from './error';\n\nexport const validateRequestData =\n (\n schema: ObjectSchema,\n location: 'body' | 'params' | 'query' | 'headers' | 'cookies' = 'body',\n options: ValidationOptions = { allowUnknown: true }\n ): Middleware =>\n async (req, res, next) => {\n try {\n const validationResult = schema.validate(req[location], options);\n const validationError = validationResult.error?.message;\n if (validationError) {\n throw new HttpError(validationError, 422);\n }\n\n return next();\n } catch (error: any) {\n handleHttpError(error, res);\n }\n };\n\nexport default validateRequestData;\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../"}
|
|
1
|
+
{"mappings":"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","sources":["src/index.ts","src/config/index.ts","src/config/database.ts","src/services/express.ts","src/utils/error.ts","src/services/honey.ts","src/controllers/index.ts","src/controllers/interfaces.ts","src/controllers/create.ts","src/utils/formatter.ts","src/controllers/read.ts","src/controllers/update.ts","src/controllers/upsert.ts","src/controllers/delete.ts","src/controllers/query.ts","src/utils/db.ts","src/utils/helpers.ts","src/services/postgres.ts","src/utils/postgres.ts","src/utils/port.ts","src/utils/validation.ts"],"sourcesContent":["import { QueryTypes as QTypes } from 'sequelize';\n\nimport Config from './config';\nimport { DBOptions } from './config/database';\nimport ExpressApp from './services/express';\nimport Honey from './services/honey';\nimport Postgres from './services/postgres';\nimport { normalizePort } from './utils/port';\nimport { Metadata } from './interfaces/express';\n\nprocess.on('SIGINT', () => {\n // process reload ongoing\n // close connections, clear cache, etc\n // by default, you have 1600ms\n process.exit(0);\n});\n\nexport function createHoney(\n port: string,\n dbOptions: string | DBOptions,\n metadata?: Metadata\n) {\n new Config(dbOptions);\n\n const portVal = normalizePort(port || process.env.PORT || '3000');\n const express = new ExpressApp(portVal, metadata);\n const postgres = new Postgres();\n const honey = new Honey(express, postgres);\n\n return honey;\n}\n\nexport const defineModel = Config.defineModel.bind(Config);\n\nfunction getQueryTypes() {\n const { SELECT, INSERT, UPDATE, DELETE, RAW, UPSERT } = QTypes;\n\n const exposedTypes = { SELECT, INSERT, UPDATE, DELETE, RAW, UPSERT };\n return exposedTypes;\n}\n\nconst QueryTypes = getQueryTypes();\n\nexport { QueryTypes };\nexport { default as runDbQuery, createModel } from './utils/db';\nexport { default as HttpError, handleHttpError } from './utils/error';\nexport { default as Honey } from './services/honey';\nexport type {\n Middleware,\n ExitMiddleware,\n Request,\n Response\n} from './interfaces/express';\nexport * from 'sequelize';\nexport { Knex } from 'knex';\nexport { validateRequestData } from './utils/validation';\n","import path from 'path';\nimport dotenv from 'dotenv';\n\nimport initDB, { DBOptions } from './database';\nimport {\n Model,\n ModelAttributes,\n ModelOptions,\n Sequelize\n} from 'sequelize/types';\ndotenv.config();\ndotenv.config({ path: path.join(__dirname, '.env') });\n\nexport default class Config {\n public static db: Sequelize;\n\n public static getEnv = (key: string) => {\n return process.env[key];\n };\n\n constructor(options: DBOptions | string) {\n Config.db = initDB(options);\n }\n\n static get isLive() {\n return process.env.NODE_ENV === 'production';\n }\n\n public static defineModel(\n modelName: string,\n attributes: ModelAttributes<Model<any, any>, any>,\n options?: ModelOptions<Model<any, any>> | undefined\n ) {\n return this.db.define(modelName, attributes, options);\n }\n}\n","import { Sequelize } from 'sequelize';\n\nexport interface DBOptions {\n host: string;\n port: number | string;\n user: string;\n password: string;\n database: string;\n}\n\nexport default function initDB(options: string | DBOptions) {\n let uri = '';\n if (typeof options === 'string') {\n uri = options;\n } else {\n uri = `postgres://${options.user}:${options.password}@${options.host}:${options.port}/${options.database}`;\n }\n const sequelize = new Sequelize(uri, {\n logging: false\n });\n\n sequelize\n .authenticate()\n .then(() => {\n console.log('DB Connection established successfully');\n })\n .catch((err) => {\n console.log('DB Connection failed');\n console.error(err);\n });\n\n return sequelize;\n}\n","import cookieParser from 'cookie-parser';\nimport express from 'express';\nimport logger from 'morgan';\nimport cors from 'cors';\nimport http from 'http';\nimport expressOasGenerator from 'express-oas-generator';\nimport '../config';\nimport HttpError from '../utils/error';\nimport { AddressInfo } from 'net';\nimport { Metadata } from '../interfaces/express';\n\n/**\n * Event listener for HTTP server \"error\" event.\n */\nconst onError = (port: string | number) => {\n return (error: any) => {\n if (error.syscall !== 'listen') {\n throw error;\n }\n\n const bind = typeof port === 'string' ? `Pipe ${port}` : `Port ${port}`;\n\n // handle specific listen errors with friendly messages\n switch (error.code) {\n case 'EACCES':\n console.error(`${bind} requires elevated privileges`);\n process.exit(1);\n case 'EADDRINUSE':\n console.error(`${bind} is already in use`);\n process.exit(1);\n default:\n throw error;\n }\n };\n};\n\n/**\n * Event listener for HTTP server \"listening\" event.\n */\nconst onListening = (server: http.Server) => {\n return () => {\n const addr = server.address();\n const bind =\n typeof addr === 'string'\n ? `pipe ${addr}`\n : `port ${(addr as AddressInfo).port}`;\n console.log(\n `%c Honey Server started on ${bind} `,\n 'background: #222; color: #bada55; font-size: 32px'\n );\n };\n};\n\nclass ExpressApp {\n public app = express();\n public appRoutes = express.Router();\n private fallbackErrMessage = 'Endpoint does not exist';\n private routePrefix = '/api';\n\n constructor(\n port: string | number,\n private metadata?: Metadata\n ) {\n this.fallbackErrMessage =\n this.metadata?.fallbackErrorMessage || this.fallbackErrMessage;\n this.routePrefix = this.metadata?.routePrefix || this.routePrefix;\n this.initMiddlewares();\n this.setupErrorFallback();\n this.app.set('port', port);\n }\n\n public listen() {\n expressOasGenerator.handleRequests();\n const port = Number(this.app.get('port'));\n const server = this.app.listen(port);\n server.on('error', onError(port));\n server.on('listening', onListening(server));\n }\n\n private initMiddlewares() {\n const corsOptions: cors.CorsOptions = {\n origin: '*',\n methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',\n allowedHeaders: '*',\n exposedHeaders: '*',\n credentials: true,\n optionsSuccessStatus: 204\n };\n\n expressOasGenerator.handleResponses(this.app, {} as any);\n this.app.use(logger('dev'));\n this.app.use(cors(corsOptions));\n this.app.use(\n express.json({\n limit: '50mb',\n verify(req: any, _res, buf) {\n req.rawBody = buf;\n }\n })\n );\n this.app.use(express.urlencoded({ limit: '50mb', extended: false }));\n this.app.use(cookieParser());\n this.app.use(this.routePrefix, this.appRoutes);\n }\n\n private setupErrorFallback() {\n this.app.use((_, res) => {\n const err = new HttpError(this.fallbackErrMessage, 404);\n\n return res.status(err.status).json({ message: err.message });\n });\n // error handler\n this.app.use((err: any, _, res: any) => {\n return res\n .status(err.status || 500)\n .send({ message: 'Something went wrong' });\n });\n }\n}\n\nexport default ExpressApp;\n","import { Response } from 'express';\n\nexport default class HttpError extends Error {\n constructor(\n message: string,\n public status: number\n ) {\n super(message || 'Something went wrong');\n }\n}\n\nexport const handleHttpError = (err: HttpError, res: Response) => {\n return res\n .status(err.status || 500)\n .send({ message: err.message || 'Something went wrong' });\n};\n","import Config from '../config';\nimport {\n createController,\n deleteByIdController,\n getByIdController,\n getByQueryController,\n updateByIdController,\n upsertByIdController,\n upsertController,\n updateController,\n deleteController,\n queryController\n} from '../controllers';\nimport {\n ICreate,\n ICrud,\n IDelete,\n IDeleteById,\n IGet,\n IGetById,\n IUpdate,\n IUpdateById,\n IUpsert,\n IUpsertById,\n IQuery\n} from '../interfaces/crud';\nimport { ExitMiddleware, Middleware } from '../interfaces/express';\nimport { NextFunction, Request, Response } from 'express';\nimport ExpressApp from './express';\nimport Postgres from './postgres';\n\n// eslint-disable-next-line\nconst defaultExitMiddleware: ExitMiddleware = (data, req, res, next) => {\n if (process.env.NODE_ENV !== 'production') console.log('Response:', data);\n};\n\nexport default class Honey {\n constructor(\n public express: ExpressApp,\n private postgres: Postgres\n ) {}\n\n get routes() {\n return this.express.appRoutes;\n }\n\n get db() {\n return Config.db;\n }\n\n private crud({\n method,\n path,\n controller,\n middleware = [],\n exitMiddleware = [defaultExitMiddleware]\n }: ICrud) {\n const dbCheck = async (req: Request, res: Response, next: NextFunction) => {\n if (!Config.db) {\n return res.status(503).send({\n message: 'DB Initialization in progress'\n });\n } else {\n next();\n }\n };\n this.express.appRoutes[method](\n path,\n dbCheck,\n ...middleware,\n controller,\n ...exitMiddleware\n );\n }\n\n public addMiddleware(middleware: Middleware[]) {\n this.express.appRoutes.use(...middleware);\n }\n\n public startServer() {\n this.express.listen();\n }\n\n public create({\n resource,\n params,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n processResponseData,\n processErrorResponse,\n table,\n methodOverride\n }: ICreate) {\n const path = pathOverride || `/${resource}`;\n resource = table || resource;\n\n const controller = createController({\n db: this.postgres,\n resource,\n params,\n message,\n processResponseData,\n processErrorResponse\n });\n\n this.crud({\n method: methodOverride || 'post',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public get({\n resource,\n fields,\n filter,\n format,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n processResponseData,\n processErrorResponse,\n table,\n joins\n }: IGet) {\n const path = pathOverride || `/${resource}`;\n resource = table || resource;\n\n const controller = getByQueryController({\n db: this.postgres,\n resource,\n fields,\n filterQuery: filter,\n format,\n processResponseData,\n processErrorResponse,\n joins\n });\n this.crud({\n method: methodOverride || 'get',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public getById({\n resource,\n fields,\n idField,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n processResponseData,\n processErrorResponse,\n table,\n filter,\n joins\n }: IGetById) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = getByIdController({\n db: this.postgres,\n resource,\n fields,\n idField: idField || 'id',\n processResponseData,\n processErrorResponse,\n filterQuery: filter,\n joins\n });\n\n this.crud({\n method: methodOverride || 'get',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public updateById({\n resource,\n params,\n idField,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n table,\n filter,\n processErrorResponse,\n processResponseData\n }: IUpdateById) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = updateByIdController({\n db: this.postgres,\n resource,\n params,\n message,\n idField,\n filterQuery: filter,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public update({\n resource,\n params,\n filter,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n table,\n processErrorResponse,\n processResponseData\n }: IUpdate) {\n const path = pathOverride || `/${resource}`;\n resource = table || resource;\n\n const controller = updateController({\n db: this.postgres,\n resource,\n params,\n message,\n filterQuery: filter,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public upsertById({\n resource,\n params,\n idField,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n table,\n processErrorResponse,\n processResponseData\n }: IUpsertById) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = upsertByIdController({\n db: this.postgres,\n resource,\n params,\n message,\n idField,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public upsert({\n resource,\n params,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n conflictTarget,\n table,\n processErrorResponse,\n processResponseData\n }: IUpsert) {\n const path = pathOverride || `/${resource}`;\n resource = table || resource;\n\n const controller = upsertController({\n db: this.postgres,\n resource,\n params,\n message,\n conflictTarget,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public deleteById({\n resource,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n idField,\n filter,\n table,\n processErrorResponse\n }: IDeleteById) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = deleteByIdController({\n db: this.postgres,\n resource,\n message,\n idField,\n filterQuery: filter,\n processErrorResponse\n });\n this.crud({\n method: methodOverride || 'delete',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public delete({\n resource,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n filter,\n table,\n processErrorResponse\n }: IDelete) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = deleteController({\n db: this.postgres,\n resource,\n message,\n filterQuery: filter,\n processErrorResponse\n });\n this.crud({\n method: methodOverride || 'delete',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public query({\n resource,\n query,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n processErrorResponse,\n processResponseData\n }: IQuery) {\n const path = pathOverride || `/${resource}`;\n\n const controller = queryController({\n db: this.postgres,\n query,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'get',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n}\n","export { Controller } from './interfaces';\nexport { default as createController } from './create';\nexport { getByIdController, getByQueryController } from './read';\nexport { updateByIdController, updateController } from './update';\nexport { upsertByIdController, upsertController } from './upsert';\nexport { deleteByIdController, deleteController } from './delete';\nexport * from './query';\n","import { NextFunction, Request, Response } from 'express';\n\nexport type Controller = (\n req: Request,\n res: Response,\n next: NextFunction\n) => void;\n","import { CreateControllerParams } from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { extractInsertData } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport default function createController({\n db,\n resource,\n params,\n message,\n processResponseData,\n processErrorResponse\n}: CreateControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = extractInsertData(req.body, params);\n\n const data = await db.create(resource, body);\n const id = data[0].id;\n\n res.send({\n message,\n data:\n req.body.dataOverride ||\n (processResponseData\n ? await processResponseData({ id }, req)\n : { id })\n });\n next({ message, data: { id } });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import { Request } from 'express';\nimport { ICreate, IUpdateById } from '../interfaces/crud';\nimport {\n Filter,\n FilterLocation,\n FilterOps,\n FilterParam,\n GetFilterParam,\n GetQueryFilter,\n UpdateOpParam\n} from '../shared/interface';\nimport HttpError from './error';\n\nconst formatters: Record<string, Function> = {\n string: String,\n number: Number,\n boolean: Boolean,\n json: JSON.stringify,\n object: JSON.stringify\n};\n\nexport const extractInsertData = (\n body: Record<string, any>,\n params: ICreate['params']\n) => {\n const result: Record<string, string | number | boolean | Date | Object> = {};\n\n Object.entries(params).forEach(([key, value]) => {\n if (value === '@updatedAt') {\n result[key] = new Date();\n return;\n }\n\n if (!Object.keys(body).includes(key)) return;\n\n const formatter = formatters[value];\n result[key] =\n formatter && ![null, undefined].includes(body[key])\n ? formatter(body[key])\n : body[key];\n });\n\n return result;\n};\n\nexport const generateUpdateData = (\n body: Record<string, any>,\n params: IUpdateById['params']\n) => {\n const result = Object.entries(params).reduce((acc, [key, value]) => {\n if (!Object.keys(body).includes(key) && value !== '@updatedAt')\n return { ...acc };\n\n let formattedValue: any;\n if (value === '@updatedAt') {\n formattedValue = new Date();\n } else {\n formattedValue = ![null, undefined].includes(body[key])\n ? formatters[typeof body[key]](body[key])\n : body[key];\n }\n\n return {\n ...acc,\n [key]: {\n value: formattedValue,\n operator: value === '@updatedAt' ? 'replace' : value\n }\n };\n }, {} as UpdateOpParam);\n\n return result;\n};\n\nconst retrieveParamFromLocation = (\n req: Request,\n location: FilterLocation,\n key: string\n) => {\n if (location === 'request') return (req as any)[key];\n\n return req[location][key];\n};\n\nexport const formatReadFilter = (\n filterParams: Record<string, any>,\n filter: GetQueryFilter,\n req: Request\n) => {\n const result: Filter = {};\n\n Object.entries(filter).forEach(([key, param]) => {\n if (key === '$or') {\n const val = formatReadFilter(\n filterParams,\n param as Record<string, GetFilterParam>,\n req\n ) as Record<string, FilterParam>;\n\n result[key] = val;\n } else {\n let valueToUse: any;\n if (param.overrideValue) {\n if (typeof param.overrideValue === 'function') {\n valueToUse = param.overrideValue(req);\n } else {\n valueToUse = param.overrideValue;\n }\n } else if (!!param.location) {\n valueToUse = retrieveParamFromLocation(\n req,\n param.location as FilterLocation,\n key\n );\n } else {\n valueToUse = filterParams[key];\n }\n\n if (typeof valueToUse === 'undefined') {\n throw new HttpError('Missing filter parameter', 400);\n }\n\n const valueFormatter = formatters[(param as GetFilterParam).value];\n result[key] = {\n operator: param.operator as FilterOps,\n value: valueFormatter(valueToUse)\n };\n }\n });\n\n return result;\n};\n","import {\n GetByIdControllerParams,\n GetByQueryControllerParams\n} from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { formatReadFilter } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport function getByIdController({\n db,\n resource,\n fields,\n idField = 'id',\n processResponseData,\n processErrorResponse,\n filterQuery = {},\n joins\n}: GetByIdControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const id = req.params.id;\n\n const filter = formatReadFilter(req.query, filterQuery, req);\n\n const data = await db.read(\n resource,\n fields,\n {\n [idField]: {\n value: id,\n operator: '='\n },\n ...filter\n },\n undefined,\n undefined,\n joins\n );\n\n if (!data?.length) {\n throw new HttpError('Record does not exist', 404);\n }\n\n res.send({\n data: processResponseData\n ? await processResponseData(data[0], req)\n : data[0]\n });\n next({ data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function getByQueryController({\n db,\n resource,\n fields,\n filterQuery,\n format,\n processResponseData,\n processErrorResponse,\n joins\n}: GetByQueryControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const page = Number(req.query.page);\n const limit = Number(req.query.limit);\n const paginate =\n limit || page ? { page: page || 1, limit: limit || 10 } : undefined;\n\n const filter =\n filterQuery && formatReadFilter(req.query, filterQuery, req);\n\n let data: Record<string, any>[] = await db.read(\n resource,\n fields,\n filter,\n paginate,\n format,\n joins\n );\n let total = 0;\n if (paginate) {\n total = Number(data[0]?.['honey_total_count'] || 0);\n data = data.map((item: Record<string, any>) => {\n delete item['honey_total_count'];\n return item;\n });\n }\n\n if (processResponseData) {\n data = await processResponseData(data, req);\n } else if (!data?.length) {\n throw new HttpError('No records found', 404);\n }\n const response = {\n data,\n meta: {\n ...(!!paginate && {\n pagination: {\n total,\n pageSize: limit,\n page,\n pageCount: Math.ceil(total / limit)\n }\n })\n }\n };\n res.send(response);\n next(response);\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import {\n UpdateByIdControllerParams,\n UpdateControllerParams\n} from '../interfaces/crud';\nimport { Filter } from '../shared/interface';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { formatReadFilter, generateUpdateData } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport function updateByIdController({\n db,\n resource,\n params,\n message,\n idField = 'id',\n processErrorResponse,\n processResponseData,\n filterQuery = {}\n}: UpdateByIdControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = generateUpdateData(req.body, params);\n const additionalFilter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n const filter: Filter = {\n [idField]: {\n operator: '=',\n value: req.params.id\n },\n ...additionalFilter\n };\n\n const result = await db.update(resource, body, filter);\n\n const data = processResponseData\n ? processResponseData(result, req)\n : undefined;\n\n res.send({ message, data });\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function updateController({\n db,\n resource,\n params,\n message,\n filterQuery,\n processErrorResponse,\n processResponseData\n}: UpdateControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = generateUpdateData(req.body, params);\n const filter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n\n const result = await db.update(resource, body, filter);\n\n const data = processResponseData\n ? processResponseData(result, req)\n : undefined;\n\n res.send({ message, data });\n\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import {\n UpsertByIdControllerParams,\n UpsertControllerParams\n} from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { generateUpdateData } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport function upsertByIdController({\n db,\n resource,\n params,\n message,\n idField = 'id',\n processErrorResponse,\n processResponseData\n}: UpsertByIdControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n req.body[idField] = req.params.id;\n params = { ...params, [idField]: 'replace' };\n const body = generateUpdateData(req.body, params);\n\n const result = await db.upsert(resource, body, [idField]);\n\n const data = processResponseData\n ? processResponseData(result?.[0], req)\n : undefined;\n\n res.send({ message, data });\n\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function upsertController({\n db,\n resource,\n params,\n message,\n conflictTarget,\n processErrorResponse,\n processResponseData\n}: UpsertControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = generateUpdateData(req.body, params);\n\n const result = await db.upsert(resource, body, conflictTarget);\n\n const data = processResponseData\n ? processResponseData(result?.[0], req)\n : undefined;\n\n res.send({ message, data });\n\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import {\n DeleteByIdControllerParams,\n DeleteControllerParams\n} from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\nimport { formatReadFilter } from '../utils/formatter';\n\nexport function deleteByIdController({\n db,\n resource,\n message,\n idField = 'id',\n processErrorResponse,\n filterQuery = {}\n}: DeleteByIdControllerParams): Controller {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n const id = req.params[idField || 'id'];\n const filter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n\n await db.delete(resource, {\n [idField]: {\n value: id,\n operator: '='\n },\n ...filter\n });\n\n res.send({ message });\n next({ message });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function deleteController({\n db,\n resource,\n message,\n processErrorResponse,\n filterQuery\n}: DeleteControllerParams): Controller {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n const filter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n\n await db.delete(resource, filter);\n\n res.send({ message });\n next({ message });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import { NextFunction, Request, Response } from 'express';\nimport { getKnex } from '../utils/db';\nimport { QueryControllerParams } from '../interfaces/crud';\n\nexport function queryController({\n db,\n query,\n processErrorResponse,\n processResponseData\n}: QueryControllerParams) {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n const page = Number(req.query.page);\n const limit = Number(req.query.limit);\n const paginate =\n limit || page ? { page: page || 1, limit: limit || 10 } : undefined;\n\n const knex = getKnex();\n let queryBuilder = query(knex, req);\n if (paginate) {\n queryBuilder = queryBuilder\n .limit(paginate.limit)\n .offset(paginate.limit * (paginate.page - 1));\n }\n const { sql, bindings } = queryBuilder.toSQL();\n\n const result = await db.query(sql, [...bindings]);\n\n if (processResponseData) {\n return res.send({ data: processResponseData(result, req) });\n }\n\n return res.send({ data: result });\n } catch (e) {\n if (processErrorResponse) {\n return next(processErrorResponse(e as Error));\n }\n return next(e);\n }\n };\n}\n","import {\n Model,\n ModelAttributes,\n ModelOptions,\n ModelStatic,\n QueryOptions\n} from 'sequelize';\nimport Knex from 'knex';\n\nimport Config from '../config';\nimport createSingleton from './helpers';\n\nexport default function runDbQuery(query: string, params?: QueryOptions) {\n params = params || {};\n\n return Config.db.query(query, {\n ...params,\n raw: true\n });\n}\n\nclass ModelCreator {\n private static model: Record<string, ModelStatic<Model>> = {};\n\n public static createModel<\n TModelAttributes extends {} = any,\n TCreationAttributes extends {} = TModelAttributes\n >(\n modelName: string,\n attributes: ModelAttributes<Model<TModelAttributes, TCreationAttributes>>,\n options?:\n | ModelOptions<Model<TModelAttributes, TCreationAttributes>>\n | undefined\n ): ModelStatic<Model<TModelAttributes, TCreationAttributes>> {\n if (!this.model[modelName]) {\n this.model[modelName] = Config.db.define(modelName, attributes, options);\n }\n\n return this.model[modelName];\n }\n}\n\nexport function createModel<\n TModelAttributes extends {} = any,\n TCreationAttributes extends {} = TModelAttributes\n>(\n modelName: string,\n attributes: ModelAttributes<Model<TModelAttributes, TCreationAttributes>>,\n options?:\n | ModelOptions<Model<TModelAttributes, TCreationAttributes>>\n | undefined\n) {\n return ModelCreator.createModel.bind(ModelCreator)(\n modelName,\n attributes,\n options\n );\n}\n\nexport const getKnex = () =>\n createSingleton('knex', () => {\n return Knex({ client: 'pg' });\n });\n","export class Singleton {\n private static instances: Map<string, any> = new Map();\n\n public static getInstance<T>(identifier: string, initFn?: () => T): T {\n if (!this.instances.has(identifier) && initFn) {\n this.instances.set(identifier, initFn());\n }\n\n return this.instances.get(identifier) as T;\n }\n}\n\nexport default function createSingleton<T>(\n identifier: string,\n initFn?: () => T\n): T {\n return Singleton.getInstance(identifier, initFn);\n}\n","import config from '../config';\nimport {\n generateCreateQuery,\n generateDeleteQuery,\n generateReadQuery,\n generateUpdateQuery,\n generateUpsertQuery\n} from '../utils/postgres';\nimport { QueryTypes } from 'sequelize';\nimport { Filter, UpdateOpParam, Join } from '../shared/interface';\n\nexport default class Postgres {\n public async read(\n table: string,\n fields: string[],\n filter?: Filter,\n paginate?: { page: number; limit: number },\n format?: { sort: 'ASC' | 'DESC'; sortField: string },\n joins?: Join[]\n ) {\n const { query, replacements } = generateReadQuery(\n table,\n fields,\n filter,\n paginate,\n format,\n joins\n );\n\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n return result;\n }\n\n public async query(query: string, replacements: any[]) {\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n return result;\n }\n\n public async create(\n table: string,\n data: Record<string, string | number | boolean | Date | Object>\n ) {\n const { query, replacements } = generateCreateQuery(table, data);\n\n const res: any = await config.db.query(query, {\n type: QueryTypes.INSERT,\n raw: true,\n replacements: [...replacements]\n });\n\n // inserted ids\n return res[0] as { id: string | number }[];\n }\n\n public async update(table: string, data: UpdateOpParam, filter?: Filter) {\n const { query, replacements } = generateUpdateQuery(table, data, filter);\n\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n return result;\n }\n\n public async delete(table: string, filter?: Filter) {\n const { query, replacements } = generateDeleteQuery(table, filter);\n\n await config.db.query(query, {\n type: QueryTypes.DELETE,\n raw: true,\n replacements: [...replacements]\n });\n }\n\n public async upsert(\n table: string,\n data: UpdateOpParam,\n conflictTarget: string[]\n ) {\n const { query, replacements } = generateUpsertQuery(\n table,\n data,\n conflictTarget\n );\n\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n\n return result;\n }\n}\n","import { Knex } from 'knex';\nimport { Filter, FilterParam, UpdateOpParam, Join } from '../shared/interface';\nimport { getKnex } from './db';\n\nexport const applyFilter = (query: Knex.QueryBuilder, filter: Filter = {}) => {\n Object.entries(filter).forEach(([field, data]) => {\n if (field === '$or') {\n query.where((builder) => {\n Object.entries(data).forEach(([orField, orData], index) => {\n const method = index === 0 ? 'where' : 'orWhere';\n const orParam = orData as FilterParam;\n\n if (['like', 'not like'].includes(orParam.operator)) {\n builder[method](orField, 'ilike', `%${orParam.value}%`);\n } else {\n builder[method](orField, orParam.operator, orParam.value);\n }\n });\n });\n } else {\n const param = data as FilterParam;\n\n if (['like', 'not like'].includes(param.operator)) {\n query.where(\n field,\n param.operator === 'like' ? 'ilike' : 'not ilike',\n `%${param.value}%`\n );\n } else {\n query.where(field, param.operator, param.value);\n }\n }\n });\n\n return query;\n};\n\nexport const generateCreateQuery = (\n table: string,\n data: Record<string, string | number | boolean | Date | Object>\n) => {\n const knex = getKnex();\n const { sql: query, bindings: replacements } = knex(table)\n .insert(data)\n .returning('id')\n .toSQL();\n\n return { query, replacements };\n};\n\nexport const generateReadQuery = (\n table: string,\n fields: string[],\n filter?: Filter,\n paginate?: { page: number; limit: number },\n format?: { sort: 'ASC' | 'DESC'; sortField: string },\n joins?: Join[]\n) => {\n const knex = getKnex();\n\n let q = knex(table).select(fields);\n\n // Add total count if pagination is needed\n if (paginate) {\n // Using knex.raw to create the count column with the same name as in original code\n q = knex(table).select([\n ...fields.map((field) => knex.raw(`?? as ??`, [field, field])),\n knex.raw('count(??) OVER() AS honey_total_count', [fields[0]])\n ]);\n }\n\n // Apply joins\n if (joins && joins.length > 0) {\n joins.forEach((join) => {\n const joinTable = join.alias\n ? `${join.table} as ${join.alias}`\n : join.table;\n const joinType = join.type || 'inner';\n const operator = join.on.operator || '=';\n\n switch (joinType) {\n case 'left':\n q.leftJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n case 'right':\n q.rightJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n case 'full':\n q.fullOuterJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n case 'cross':\n q.crossJoin(\n join.alias\n ? knex.raw('?? as ??', [join.table, join.alias])\n : knex.raw('??', [join.table])\n );\n break;\n case 'inner':\n default:\n q.innerJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n }\n });\n }\n\n // Apply filters\n if (filter) {\n q = applyFilter(q, filter);\n }\n\n // Apply sorting\n if (format?.sort && format.sortField) {\n q.orderBy(format.sortField, format.sort);\n }\n\n // Apply pagination\n if (paginate) {\n q.limit(paginate.limit).offset(paginate.limit * (paginate.page - 1));\n }\n\n const { sql: query, bindings: replacements } = q.toSQL();\n\n return { query, replacements };\n};\nexport const generateUpdateQuery = (\n table: string,\n data: UpdateOpParam,\n filter?: Filter\n) => {\n const knex = getKnex();\n let q = knex(table);\n\n // Build the update object\n const updateData: Record<string, Knex.Raw> = {};\n\n Object.entries(data).forEach(([field, fieldData]) => {\n const param = fieldData as any;\n\n if (param.operator === 'inc') {\n updateData[field] = knex.raw('?? + ?', [field, param.value]);\n } else if (param.operator === 'dec') {\n updateData[field] = knex.raw('?? - ?', [field, param.value]);\n } else {\n updateData[field] = param.value;\n }\n });\n\n // Apply filter conditions\n if (filter) {\n q = applyFilter(q, filter);\n }\n\n const { sql: query, bindings: replacements } = q\n .update(updateData)\n .returning('*')\n .toSQL();\n console.log(query, replacements);\n return { query, replacements };\n};\nexport const generateDeleteQuery = (table: string, filter?: Filter) => {\n const knex = getKnex();\n let q = knex(table);\n\n if (filter) {\n q = applyFilter(q, filter);\n }\n\n const { sql: query, bindings: replacements } = q.delete().toSQL();\n return { query, replacements };\n};\n\nexport const generateUpsertQuery = (\n table: string,\n data: UpdateOpParam,\n conflictTarget: string[]\n) => {\n const knex = getKnex();\n\n // Prepare insert data\n const insertData: Record<string, UpdateOpParam[string]['value']> = {};\n Object.entries(data).forEach(([field, fieldData]) => {\n insertData[field] = fieldData.value;\n });\n\n // Prepare update data for conflict resolution\n const updateData: Record<string, Knex.Raw | UpdateOpParam[string]['value']> =\n {};\n Object.entries(data).forEach(([field, fieldData]) => {\n const param = fieldData;\n\n if (param.operator === 'inc') {\n updateData[field] = knex.raw('?? + ?', [\n `${table}.${field}`,\n param.value\n ]);\n } else if (param.operator === 'dec') {\n updateData[field] = knex.raw('?? - ?', [\n `${table}.${field}`,\n param.value\n ]);\n } else {\n updateData[field] = param.value;\n }\n });\n\n const { sql: query, bindings: replacements } = knex(table)\n .insert(insertData)\n .onConflict(conflictTarget)\n .merge(updateData)\n .returning('*')\n .toSQL();\n\n return { query, replacements };\n};\n","export function normalizePort(val: string) {\n const port = parseInt(val, 10);\n\n if (isNaN(port)) {\n // named pipe\n return val;\n }\n\n if (port >= 0) {\n // port number\n return port;\n }\n\n throw new Error('Invalid port number');\n}\n","import { ObjectSchema, ValidationOptions } from 'joi';\nimport { Middleware } from 'src/interfaces/express';\nimport HttpError, { handleHttpError } from './error';\n\nexport const validateRequestData =\n (\n schema: ObjectSchema,\n location: 'body' | 'params' | 'query' | 'headers' | 'cookies' = 'body',\n options: ValidationOptions = { allowUnknown: true }\n ): Middleware =>\n async (req, res, next) => {\n try {\n const validationResult = schema.validate(req[location], options);\n const validationError = validationResult.error?.message;\n if (validationError) {\n throw new HttpError(validationError, 422);\n }\n\n return next();\n } catch (error: any) {\n handleHttpError(error, res);\n }\n };\n\nexport default validateRequestData;\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../"}
|
package/dist/module.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as $dTx2I$sequelize from "sequelize";
|
|
2
|
+
import $dTx2I$knex, {Knex as $ca5c8b758a3f9447$re_export$Knex} from "knex";
|
|
2
3
|
import $dTx2I$path, {resolve as $dTx2I$resolve} from "path";
|
|
3
4
|
import $dTx2I$dotenv from "dotenv";
|
|
4
5
|
import $dTx2I$cookieparser from "cookie-parser";
|
|
@@ -6,7 +7,6 @@ import $dTx2I$express from "express";
|
|
|
6
7
|
import $dTx2I$morgan from "morgan";
|
|
7
8
|
import $dTx2I$cors from "cors";
|
|
8
9
|
import $dTx2I$expressoasgenerator from "express-oas-generator";
|
|
9
|
-
import $dTx2I$knex from "knex";
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
@@ -426,7 +426,7 @@ function $1dd7d1e7a650ba01$export$d5a9f256d3442907({ db: db, resource: resource,
|
|
|
426
426
|
const result = await db.upsert(resource, body, [
|
|
427
427
|
idField
|
|
428
428
|
]);
|
|
429
|
-
const data = processResponseData ? processResponseData(result, req) : undefined;
|
|
429
|
+
const data = processResponseData ? processResponseData(result?.[0], req) : undefined;
|
|
430
430
|
res.send({
|
|
431
431
|
message: message,
|
|
432
432
|
data: data
|
|
@@ -450,7 +450,7 @@ function $1dd7d1e7a650ba01$export$e94809b3c2751b8b({ db: db, resource: resource,
|
|
|
450
450
|
try {
|
|
451
451
|
const body = (0, $5f19ecb00e146b8f$export$3fde508750f4a353)(req.body, params);
|
|
452
452
|
const result = await db.upsert(resource, body, conflictTarget);
|
|
453
|
-
const data = processResponseData ? processResponseData(result, req) : undefined;
|
|
453
|
+
const data = processResponseData ? processResponseData(result?.[0], req) : undefined;
|
|
454
454
|
res.send({
|
|
455
455
|
message: message,
|
|
456
456
|
data: data
|
|
@@ -733,7 +733,7 @@ class $c492fd1e48c9c1cf$export$2e2bcd8739ae039 {
|
|
|
733
733
|
});
|
|
734
734
|
}
|
|
735
735
|
upsertById({ resource: resource, params: params, idField: idField, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, methodOverride: methodOverride, table: table, processErrorResponse: processErrorResponse, processResponseData: processResponseData }) {
|
|
736
|
-
const path = pathOverride || `/${resource}/:id
|
|
736
|
+
const path = pathOverride || `/${resource}/:id`;
|
|
737
737
|
resource = table || resource;
|
|
738
738
|
const controller = (0, $1dd7d1e7a650ba01$export$d5a9f256d3442907)({
|
|
739
739
|
db: this.postgres,
|
|
@@ -753,7 +753,7 @@ class $c492fd1e48c9c1cf$export$2e2bcd8739ae039 {
|
|
|
753
753
|
});
|
|
754
754
|
}
|
|
755
755
|
upsert({ resource: resource, params: params, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, methodOverride: methodOverride, conflictTarget: conflictTarget, table: table, processErrorResponse: processErrorResponse, processResponseData: processResponseData }) {
|
|
756
|
-
const path = pathOverride || `/${resource}
|
|
756
|
+
const path = pathOverride || `/${resource}`;
|
|
757
757
|
resource = table || resource;
|
|
758
758
|
const controller = (0, $1dd7d1e7a650ba01$export$e94809b3c2751b8b)({
|
|
759
759
|
db: this.postgres,
|
|
@@ -1065,6 +1065,7 @@ function $485d60a2960a7015$export$21d1ad8451a259af(val) {
|
|
|
1065
1065
|
|
|
1066
1066
|
|
|
1067
1067
|
|
|
1068
|
+
|
|
1068
1069
|
const $440791091ca5fcd9$export$3b8deecb09f1ff23 = (schema, location = 'body', options = {
|
|
1069
1070
|
allowUnknown: true
|
|
1070
1071
|
})=>async (req, res, next)=>{
|
|
@@ -1110,5 +1111,5 @@ function $ca5c8b758a3f9447$var$getQueryTypes() {
|
|
|
1110
1111
|
const $ca5c8b758a3f9447$export$9e0271c08bde0a49 = $ca5c8b758a3f9447$var$getQueryTypes();
|
|
1111
1112
|
|
|
1112
1113
|
|
|
1113
|
-
export {$ca5c8b758a3f9447$export$f375e35cdf499ccf as createHoney, $ca5c8b758a3f9447$export$acd55aa037e791bb as defineModel, $ca5c8b758a3f9447$export$9e0271c08bde0a49 as QueryTypes, $254994df946b8040$export$2e2bcd8739ae039 as runDbQuery, $254994df946b8040$export$2f453c7f7b0d002b as createModel, $eb799189062d1297$export$2e2bcd8739ae039 as HttpError, $eb799189062d1297$export$cd2b46e1ebe8182d as handleHttpError, $c492fd1e48c9c1cf$export$2e2bcd8739ae039 as Honey, $440791091ca5fcd9$export$3b8deecb09f1ff23 as validateRequestData};
|
|
1114
|
+
export {$ca5c8b758a3f9447$export$f375e35cdf499ccf as createHoney, $ca5c8b758a3f9447$export$acd55aa037e791bb as defineModel, $ca5c8b758a3f9447$export$9e0271c08bde0a49 as QueryTypes, $254994df946b8040$export$2e2bcd8739ae039 as runDbQuery, $254994df946b8040$export$2f453c7f7b0d002b as createModel, $eb799189062d1297$export$2e2bcd8739ae039 as HttpError, $eb799189062d1297$export$cd2b46e1ebe8182d as handleHttpError, $c492fd1e48c9c1cf$export$2e2bcd8739ae039 as Honey, $ca5c8b758a3f9447$re_export$Knex as Knex, $440791091ca5fcd9$export$3b8deecb09f1ff23 as validateRequestData};
|
|
1114
1115
|
//# sourceMappingURL=module.js.map
|
package/dist/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["src/index.ts","src/config/index.ts","src/config/database.ts","src/services/express.ts","src/utils/error.ts","src/services/honey.ts","src/controllers/index.ts","src/controllers/interfaces.ts","src/controllers/create.ts","src/utils/formatter.ts","src/controllers/read.ts","src/controllers/update.ts","src/controllers/upsert.ts","src/controllers/delete.ts","src/controllers/query.ts","src/utils/db.ts","src/utils/helpers.ts","src/services/postgres.ts","src/utils/postgres.ts","src/utils/port.ts","src/utils/validation.ts"],"sourcesContent":["import { QueryTypes as QTypes } from 'sequelize';\n\nimport Config from './config';\nimport { DBOptions } from './config/database';\nimport ExpressApp from './services/express';\nimport Honey from './services/honey';\nimport Postgres from './services/postgres';\nimport { normalizePort } from './utils/port';\nimport { Metadata } from './interfaces/express';\n\nprocess.on('SIGINT', () => {\n // process reload ongoing\n // close connections, clear cache, etc\n // by default, you have 1600ms\n process.exit(0);\n});\n\nexport function createHoney(\n port: string,\n dbOptions: string | DBOptions,\n metadata?: Metadata\n) {\n new Config(dbOptions);\n\n const portVal = normalizePort(port || process.env.PORT || '3000');\n const express = new ExpressApp(portVal, metadata);\n const postgres = new Postgres();\n const honey = new Honey(express, postgres);\n\n return honey;\n}\n\nexport const defineModel = Config.defineModel.bind(Config);\n\nfunction getQueryTypes() {\n const { SELECT, INSERT, UPDATE, DELETE, RAW, UPSERT } = QTypes;\n\n const exposedTypes = { SELECT, INSERT, UPDATE, DELETE, RAW, UPSERT };\n return exposedTypes;\n}\n\nconst QueryTypes = getQueryTypes();\n\nexport { QueryTypes };\nexport { default as runDbQuery, createModel } from './utils/db';\nexport { default as HttpError, handleHttpError } from './utils/error';\nexport { default as Honey } from './services/honey';\nexport type {\n Middleware,\n ExitMiddleware,\n Request,\n Response\n} from './interfaces/express';\nexport * from 'sequelize';\nexport { validateRequestData } from './utils/validation';\n","import path from 'path';\nimport dotenv from 'dotenv';\n\nimport initDB, { DBOptions } from './database';\nimport {\n Model,\n ModelAttributes,\n ModelOptions,\n Sequelize\n} from 'sequelize/types';\ndotenv.config();\ndotenv.config({ path: path.join(__dirname, '.env') });\n\nexport default class Config {\n public static db: Sequelize;\n\n public static getEnv = (key: string) => {\n return process.env[key];\n };\n\n constructor(options: DBOptions | string) {\n Config.db = initDB(options);\n }\n\n static get isLive() {\n return process.env.NODE_ENV === 'production';\n }\n\n public static defineModel(\n modelName: string,\n attributes: ModelAttributes<Model<any, any>, any>,\n options?: ModelOptions<Model<any, any>> | undefined\n ) {\n return this.db.define(modelName, attributes, options);\n }\n}\n","import { Sequelize } from 'sequelize';\n\nexport interface DBOptions {\n host: string;\n port: number | string;\n user: string;\n password: string;\n database: string;\n}\n\nexport default function initDB(options: string | DBOptions) {\n let uri = '';\n if (typeof options === 'string') {\n uri = options;\n } else {\n uri = `postgres://${options.user}:${options.password}@${options.host}:${options.port}/${options.database}`;\n }\n const sequelize = new Sequelize(uri, {\n logging: false\n });\n\n sequelize\n .authenticate()\n .then(() => {\n console.log('DB Connection established successfully');\n })\n .catch((err) => {\n console.log('DB Connection failed');\n console.error(err);\n });\n\n return sequelize;\n}\n","import cookieParser from 'cookie-parser';\nimport express from 'express';\nimport logger from 'morgan';\nimport cors from 'cors';\nimport http from 'http';\nimport expressOasGenerator from 'express-oas-generator';\nimport '../config';\nimport HttpError from '../utils/error';\nimport { AddressInfo } from 'net';\nimport { Metadata } from '../interfaces/express';\n\n/**\n * Event listener for HTTP server \"error\" event.\n */\nconst onError = (port: string | number) => {\n return (error: any) => {\n if (error.syscall !== 'listen') {\n throw error;\n }\n\n const bind = typeof port === 'string' ? `Pipe ${port}` : `Port ${port}`;\n\n // handle specific listen errors with friendly messages\n switch (error.code) {\n case 'EACCES':\n console.error(`${bind} requires elevated privileges`);\n process.exit(1);\n case 'EADDRINUSE':\n console.error(`${bind} is already in use`);\n process.exit(1);\n default:\n throw error;\n }\n };\n};\n\n/**\n * Event listener for HTTP server \"listening\" event.\n */\nconst onListening = (server: http.Server) => {\n return () => {\n const addr = server.address();\n const bind =\n typeof addr === 'string'\n ? `pipe ${addr}`\n : `port ${(addr as AddressInfo).port}`;\n console.log(\n `%c Honey Server started on ${bind} `,\n 'background: #222; color: #bada55; font-size: 32px'\n );\n };\n};\n\nclass ExpressApp {\n public app = express();\n public appRoutes = express.Router();\n private fallbackErrMessage = 'Endpoint does not exist';\n private routePrefix = '/api';\n\n constructor(\n port: string | number,\n private metadata?: Metadata\n ) {\n this.fallbackErrMessage =\n this.metadata?.fallbackErrorMessage || this.fallbackErrMessage;\n this.routePrefix = this.metadata?.routePrefix || this.routePrefix;\n this.initMiddlewares();\n this.setupErrorFallback();\n this.app.set('port', port);\n }\n\n public listen() {\n expressOasGenerator.handleRequests();\n const port = Number(this.app.get('port'));\n const server = this.app.listen(port);\n server.on('error', onError(port));\n server.on('listening', onListening(server));\n }\n\n private initMiddlewares() {\n const corsOptions: cors.CorsOptions = {\n origin: '*',\n methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',\n allowedHeaders: '*',\n exposedHeaders: '*',\n credentials: true,\n optionsSuccessStatus: 204\n };\n\n expressOasGenerator.handleResponses(this.app, {} as any);\n this.app.use(logger('dev'));\n this.app.use(cors(corsOptions));\n this.app.use(\n express.json({\n limit: '50mb',\n verify(req: any, _res, buf) {\n req.rawBody = buf;\n }\n })\n );\n this.app.use(express.urlencoded({ limit: '50mb', extended: false }));\n this.app.use(cookieParser());\n this.app.use(this.routePrefix, this.appRoutes);\n }\n\n private setupErrorFallback() {\n this.app.use((_, res) => {\n const err = new HttpError(this.fallbackErrMessage, 404);\n\n return res.status(err.status).json({ message: err.message });\n });\n // error handler\n this.app.use((err: any, _, res: any) => {\n return res\n .status(err.status || 500)\n .send({ message: 'Something went wrong' });\n });\n }\n}\n\nexport default ExpressApp;\n","import { Response } from 'express';\n\nexport default class HttpError extends Error {\n constructor(\n message: string,\n public status: number\n ) {\n super(message || 'Something went wrong');\n }\n}\n\nexport const handleHttpError = (err: HttpError, res: Response) => {\n return res\n .status(err.status || 500)\n .send({ message: err.message || 'Something went wrong' });\n};\n","import Config from '../config';\nimport {\n createController,\n deleteByIdController,\n getByIdController,\n getByQueryController,\n updateByIdController,\n upsertByIdController,\n upsertController,\n updateController,\n deleteController,\n queryController\n} from '../controllers';\nimport {\n ICreate,\n ICrud,\n IDelete,\n IDeleteById,\n IGet,\n IGetById,\n IUpdate,\n IUpdateById,\n IUpsert,\n IUpsertById,\n IQuery\n} from '../interfaces/crud';\nimport { ExitMiddleware, Middleware } from '../interfaces/express';\nimport { NextFunction, Request, Response } from 'express';\nimport ExpressApp from './express';\nimport Postgres from './postgres';\n\n// eslint-disable-next-line\nconst defaultExitMiddleware: ExitMiddleware = (data, req, res, next) => {\n if (process.env.NODE_ENV !== 'production') console.log('Response:', data);\n};\n\nexport default class Honey {\n constructor(\n public express: ExpressApp,\n private postgres: Postgres\n ) {}\n\n get routes() {\n return this.express.appRoutes;\n }\n\n get db() {\n return Config.db;\n }\n\n private crud({\n method,\n path,\n controller,\n middleware = [],\n exitMiddleware = [defaultExitMiddleware]\n }: ICrud) {\n const dbCheck = async (req: Request, res: Response, next: NextFunction) => {\n if (!Config.db) {\n return res.status(503).send({\n message: 'DB Initialization in progress'\n });\n } else {\n next();\n }\n };\n this.express.appRoutes[method](\n path,\n dbCheck,\n ...middleware,\n controller,\n ...exitMiddleware\n );\n }\n\n public addMiddleware(middleware: Middleware[]) {\n this.express.appRoutes.use(...middleware);\n }\n\n public startServer() {\n this.express.listen();\n }\n\n public create({\n resource,\n params,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n processResponseData,\n processErrorResponse,\n table,\n methodOverride\n }: ICreate) {\n const path = pathOverride || `/${resource}`;\n resource = table || resource;\n\n const controller = createController({\n db: this.postgres,\n resource,\n params,\n message,\n processResponseData,\n processErrorResponse\n });\n\n this.crud({\n method: methodOverride || 'post',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public get({\n resource,\n fields,\n filter,\n format,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n processResponseData,\n processErrorResponse,\n table,\n joins\n }: IGet) {\n const path = pathOverride || `/${resource}`;\n resource = table || resource;\n\n const controller = getByQueryController({\n db: this.postgres,\n resource,\n fields,\n filterQuery: filter,\n format,\n processResponseData,\n processErrorResponse,\n joins\n });\n this.crud({\n method: methodOverride || 'get',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public getById({\n resource,\n fields,\n idField,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n processResponseData,\n processErrorResponse,\n table,\n filter,\n joins\n }: IGetById) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = getByIdController({\n db: this.postgres,\n resource,\n fields,\n idField: idField || 'id',\n processResponseData,\n processErrorResponse,\n filterQuery: filter,\n joins\n });\n\n this.crud({\n method: methodOverride || 'get',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public updateById({\n resource,\n params,\n idField,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n table,\n filter,\n processErrorResponse,\n processResponseData\n }: IUpdateById) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = updateByIdController({\n db: this.postgres,\n resource,\n params,\n message,\n idField,\n filterQuery: filter,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public update({\n resource,\n params,\n filter,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n table,\n processErrorResponse,\n processResponseData\n }: IUpdate) {\n const path = pathOverride || `/${resource}`;\n resource = table || resource;\n\n const controller = updateController({\n db: this.postgres,\n resource,\n params,\n message,\n filterQuery: filter,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public upsertById({\n resource,\n params,\n idField,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n table,\n processErrorResponse,\n processResponseData\n }: IUpsertById) {\n const path = pathOverride || `/${resource}/:id/upsert`;\n resource = table || resource;\n\n const controller = upsertByIdController({\n db: this.postgres,\n resource,\n params,\n message,\n idField,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public upsert({\n resource,\n params,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n conflictTarget,\n table,\n processErrorResponse,\n processResponseData\n }: IUpsert) {\n const path = pathOverride || `/${resource}/:id/upsert`;\n resource = table || resource;\n\n const controller = upsertController({\n db: this.postgres,\n resource,\n params,\n message,\n conflictTarget,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public deleteById({\n resource,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n idField,\n filter,\n table,\n processErrorResponse\n }: IDeleteById) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = deleteByIdController({\n db: this.postgres,\n resource,\n message,\n idField,\n filterQuery: filter,\n processErrorResponse\n });\n this.crud({\n method: methodOverride || 'delete',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public delete({\n resource,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n filter,\n table,\n processErrorResponse\n }: IDelete) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = deleteController({\n db: this.postgres,\n resource,\n message,\n filterQuery: filter,\n processErrorResponse\n });\n this.crud({\n method: methodOverride || 'delete',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public query({\n resource,\n query,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n processErrorResponse,\n processResponseData\n }: IQuery) {\n const path = pathOverride || `/${resource}`;\n\n const controller = queryController({\n db: this.postgres,\n query,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'get',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n}\n","export { Controller } from './interfaces';\nexport { default as createController } from './create';\nexport { getByIdController, getByQueryController } from './read';\nexport { updateByIdController, updateController } from './update';\nexport { upsertByIdController, upsertController } from './upsert';\nexport { deleteByIdController, deleteController } from './delete';\nexport * from './query';\n","import { NextFunction, Request, Response } from 'express';\n\nexport type Controller = (\n req: Request,\n res: Response,\n next: NextFunction\n) => void;\n","import { CreateControllerParams } from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { extractInsertData } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport default function createController({\n db,\n resource,\n params,\n message,\n processResponseData,\n processErrorResponse\n}: CreateControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = extractInsertData(req.body, params);\n\n const data = await db.create(resource, body);\n const id = data[0].id;\n\n res.send({\n message,\n data:\n req.body.dataOverride ||\n (processResponseData\n ? await processResponseData({ id }, req)\n : { id })\n });\n next({ message, data: { id } });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import { Request } from 'express';\nimport { ICreate, IUpdateById } from '../interfaces/crud';\nimport {\n Filter,\n FilterLocation,\n FilterOps,\n FilterParam,\n GetFilterParam,\n GetQueryFilter,\n UpdateOpParam\n} from '../shared/interface';\nimport HttpError from './error';\n\nconst formatters: Record<string, Function> = {\n string: String,\n number: Number,\n boolean: Boolean,\n json: JSON.stringify,\n object: JSON.stringify\n};\n\nexport const extractInsertData = (\n body: Record<string, any>,\n params: ICreate['params']\n) => {\n const result: Record<string, string | number | boolean | Date | Object> = {};\n\n Object.entries(params).forEach(([key, value]) => {\n if (value === '@updatedAt') {\n result[key] = new Date();\n return;\n }\n\n if (!Object.keys(body).includes(key)) return;\n\n const formatter = formatters[value];\n result[key] =\n formatter && ![null, undefined].includes(body[key])\n ? formatter(body[key])\n : body[key];\n });\n\n return result;\n};\n\nexport const generateUpdateData = (\n body: Record<string, any>,\n params: IUpdateById['params']\n) => {\n const result = Object.entries(params).reduce((acc, [key, value]) => {\n if (!Object.keys(body).includes(key) && value !== '@updatedAt')\n return { ...acc };\n\n let formattedValue: any;\n if (value === '@updatedAt') {\n formattedValue = new Date();\n } else {\n formattedValue = ![null, undefined].includes(body[key])\n ? formatters[typeof body[key]](body[key])\n : body[key];\n }\n\n return {\n ...acc,\n [key]: {\n value: formattedValue,\n operator: value === '@updatedAt' ? 'replace' : value\n }\n };\n }, {} as UpdateOpParam);\n\n return result;\n};\n\nconst retrieveParamFromLocation = (\n req: Request,\n location: FilterLocation,\n key: string\n) => {\n if (location === 'request') return (req as any)[key];\n\n return req[location][key];\n};\n\nexport const formatReadFilter = (\n filterParams: Record<string, any>,\n filter: GetQueryFilter,\n req: Request\n) => {\n const result: Filter = {};\n\n Object.entries(filter).forEach(([key, param]) => {\n if (key === '$or') {\n const val = formatReadFilter(\n filterParams,\n param as Record<string, GetFilterParam>,\n req\n ) as Record<string, FilterParam>;\n\n result[key] = val;\n } else {\n let valueToUse: any;\n if (param.overrideValue) {\n if (typeof param.overrideValue === 'function') {\n valueToUse = param.overrideValue(req);\n } else {\n valueToUse = param.overrideValue;\n }\n } else if (!!param.location) {\n valueToUse = retrieveParamFromLocation(\n req,\n param.location as FilterLocation,\n key\n );\n } else {\n valueToUse = filterParams[key];\n }\n\n if (typeof valueToUse === 'undefined') {\n throw new HttpError('Missing filter parameter', 400);\n }\n\n const valueFormatter = formatters[(param as GetFilterParam).value];\n result[key] = {\n operator: param.operator as FilterOps,\n value: valueFormatter(valueToUse)\n };\n }\n });\n\n return result;\n};\n","import {\n GetByIdControllerParams,\n GetByQueryControllerParams\n} from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { formatReadFilter } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport function getByIdController({\n db,\n resource,\n fields,\n idField = 'id',\n processResponseData,\n processErrorResponse,\n filterQuery = {},\n joins\n}: GetByIdControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const id = req.params.id;\n\n const filter = formatReadFilter(req.query, filterQuery, req);\n\n const data = await db.read(\n resource,\n fields,\n {\n [idField]: {\n value: id,\n operator: '='\n },\n ...filter\n },\n undefined,\n undefined,\n joins\n );\n\n if (!data?.length) {\n throw new HttpError('Record does not exist', 404);\n }\n\n res.send({\n data: processResponseData\n ? await processResponseData(data[0], req)\n : data[0]\n });\n next({ data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function getByQueryController({\n db,\n resource,\n fields,\n filterQuery,\n format,\n processResponseData,\n processErrorResponse,\n joins\n}: GetByQueryControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const page = Number(req.query.page);\n const limit = Number(req.query.limit);\n const paginate =\n limit || page ? { page: page || 1, limit: limit || 10 } : undefined;\n\n const filter =\n filterQuery && formatReadFilter(req.query, filterQuery, req);\n\n let data: Record<string, any>[] = await db.read(\n resource,\n fields,\n filter,\n paginate,\n format,\n joins\n );\n let total = 0;\n if (paginate) {\n total = Number(data[0]?.['honey_total_count'] || 0);\n data = data.map((item: Record<string, any>) => {\n delete item['honey_total_count'];\n return item;\n });\n }\n\n if (processResponseData) {\n data = await processResponseData(data, req);\n } else if (!data?.length) {\n throw new HttpError('No records found', 404);\n }\n const response = {\n data,\n meta: {\n ...(!!paginate && {\n pagination: {\n total,\n pageSize: limit,\n page,\n pageCount: Math.ceil(total / limit)\n }\n })\n }\n };\n res.send(response);\n next(response);\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import {\n UpdateByIdControllerParams,\n UpdateControllerParams\n} from '../interfaces/crud';\nimport { Filter } from '../shared/interface';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { formatReadFilter, generateUpdateData } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport function updateByIdController({\n db,\n resource,\n params,\n message,\n idField = 'id',\n processErrorResponse,\n processResponseData,\n filterQuery = {}\n}: UpdateByIdControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = generateUpdateData(req.body, params);\n const additionalFilter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n const filter: Filter = {\n [idField]: {\n operator: '=',\n value: req.params.id\n },\n ...additionalFilter\n };\n\n const result = await db.update(resource, body, filter);\n\n const data = processResponseData\n ? processResponseData(result, req)\n : undefined;\n\n res.send({ message, data });\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function updateController({\n db,\n resource,\n params,\n message,\n filterQuery,\n processErrorResponse,\n processResponseData\n}: UpdateControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = generateUpdateData(req.body, params);\n const filter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n\n const result = await db.update(resource, body, filter);\n\n const data = processResponseData\n ? processResponseData(result, req)\n : undefined;\n\n res.send({ message, data });\n\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import {\n UpsertByIdControllerParams,\n UpsertControllerParams\n} from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { generateUpdateData } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport function upsertByIdController({\n db,\n resource,\n params,\n message,\n idField = 'id',\n processErrorResponse,\n processResponseData\n}: UpsertByIdControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n req.body[idField] = req.params.id;\n params = { ...params, [idField]: 'replace' };\n const body = generateUpdateData(req.body, params);\n\n const result = await db.upsert(resource, body, [idField]);\n\n const data = processResponseData\n ? processResponseData(result, req)\n : undefined;\n\n res.send({ message, data });\n\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function upsertController({\n db,\n resource,\n params,\n message,\n conflictTarget,\n processErrorResponse,\n processResponseData\n}: UpsertControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = generateUpdateData(req.body, params);\n\n const result = await db.upsert(resource, body, conflictTarget);\n\n const data = processResponseData\n ? processResponseData(result, req)\n : undefined;\n\n res.send({ message, data });\n\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import {\n DeleteByIdControllerParams,\n DeleteControllerParams\n} from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\nimport { formatReadFilter } from '../utils/formatter';\n\nexport function deleteByIdController({\n db,\n resource,\n message,\n idField = 'id',\n processErrorResponse,\n filterQuery = {}\n}: DeleteByIdControllerParams): Controller {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n const id = req.params[idField || 'id'];\n const filter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n\n await db.delete(resource, {\n [idField]: {\n value: id,\n operator: '='\n },\n ...filter\n });\n\n res.send({ message });\n next({ message });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function deleteController({\n db,\n resource,\n message,\n processErrorResponse,\n filterQuery\n}: DeleteControllerParams): Controller {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n const filter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n\n await db.delete(resource, filter);\n\n res.send({ message });\n next({ message });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import { NextFunction, Request, Response } from 'express';\nimport { getKnex } from '../utils/db';\nimport { QueryControllerParams } from '../interfaces/crud';\n\nexport function queryController({\n db,\n query,\n processErrorResponse,\n processResponseData\n}: QueryControllerParams) {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n const page = Number(req.query.page);\n const limit = Number(req.query.limit);\n const paginate =\n limit || page ? { page: page || 1, limit: limit || 10 } : undefined;\n\n const knex = getKnex();\n let queryBuilder = query(knex, req);\n if (paginate) {\n queryBuilder = queryBuilder\n .limit(paginate.limit)\n .offset(paginate.limit * (paginate.page - 1));\n }\n const { sql, bindings } = queryBuilder.toSQL();\n\n const result = await db.query(sql, [...bindings]);\n\n if (processResponseData) {\n return res.send({ data: processResponseData(result, req) });\n }\n\n return res.send({ data: result });\n } catch (e) {\n if (processErrorResponse) {\n return next(processErrorResponse(e as Error));\n }\n return next(e);\n }\n };\n}\n","import {\n Model,\n ModelAttributes,\n ModelOptions,\n ModelStatic,\n QueryOptions\n} from 'sequelize';\nimport Knex from 'knex';\n\nimport Config from '../config';\nimport createSingleton from './helpers';\n\nexport default function runDbQuery(query: string, params?: QueryOptions) {\n params = params || {};\n\n return Config.db.query(query, {\n ...params,\n raw: true\n });\n}\n\nclass ModelCreator {\n private static model: Record<string, ModelStatic<Model>> = {};\n\n public static createModel<\n TModelAttributes extends {} = any,\n TCreationAttributes extends {} = TModelAttributes\n >(\n modelName: string,\n attributes: ModelAttributes<Model<TModelAttributes, TCreationAttributes>>,\n options?:\n | ModelOptions<Model<TModelAttributes, TCreationAttributes>>\n | undefined\n ): ModelStatic<Model<TModelAttributes, TCreationAttributes>> {\n if (!this.model[modelName]) {\n this.model[modelName] = Config.db.define(modelName, attributes, options);\n }\n\n return this.model[modelName];\n }\n}\n\nexport function createModel<\n TModelAttributes extends {} = any,\n TCreationAttributes extends {} = TModelAttributes\n>(\n modelName: string,\n attributes: ModelAttributes<Model<TModelAttributes, TCreationAttributes>>,\n options?:\n | ModelOptions<Model<TModelAttributes, TCreationAttributes>>\n | undefined\n) {\n return ModelCreator.createModel.bind(ModelCreator)(\n modelName,\n attributes,\n options\n );\n}\n\nexport const getKnex = () =>\n createSingleton('knex', () => {\n return Knex({ client: 'pg' });\n });\n","export class Singleton {\n private static instances: Map<string, any> = new Map();\n\n public static getInstance<T>(identifier: string, initFn?: () => T): T {\n if (!this.instances.has(identifier) && initFn) {\n this.instances.set(identifier, initFn());\n }\n\n return this.instances.get(identifier) as T;\n }\n}\n\nexport default function createSingleton<T>(\n identifier: string,\n initFn?: () => T\n): T {\n return Singleton.getInstance(identifier, initFn);\n}\n","import config from '../config';\nimport {\n generateCreateQuery,\n generateDeleteQuery,\n generateReadQuery,\n generateUpdateQuery,\n generateUpsertQuery\n} from '../utils/postgres';\nimport { QueryTypes } from 'sequelize';\nimport { Filter, UpdateOpParam, Join } from '../shared/interface';\n\nexport default class Postgres {\n public async read(\n table: string,\n fields: string[],\n filter?: Filter,\n paginate?: { page: number; limit: number },\n format?: { sort: 'ASC' | 'DESC'; sortField: string },\n joins?: Join[]\n ) {\n const { query, replacements } = generateReadQuery(\n table,\n fields,\n filter,\n paginate,\n format,\n joins\n );\n\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n return result;\n }\n\n public async query(query: string, replacements: any[]) {\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n return result;\n }\n\n public async create(\n table: string,\n data: Record<string, string | number | boolean | Date | Object>\n ) {\n const { query, replacements } = generateCreateQuery(table, data);\n\n const res: any = await config.db.query(query, {\n type: QueryTypes.INSERT,\n raw: true,\n replacements: [...replacements]\n });\n\n // inserted ids\n return res[0] as { id: string | number }[];\n }\n\n public async update(table: string, data: UpdateOpParam, filter?: Filter) {\n const { query, replacements } = generateUpdateQuery(table, data, filter);\n\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n return result;\n }\n\n public async delete(table: string, filter?: Filter) {\n const { query, replacements } = generateDeleteQuery(table, filter);\n\n await config.db.query(query, {\n type: QueryTypes.DELETE,\n raw: true,\n replacements: [...replacements]\n });\n }\n\n public async upsert(\n table: string,\n data: UpdateOpParam,\n conflictTarget: string[]\n ) {\n const { query, replacements } = generateUpsertQuery(\n table,\n data,\n conflictTarget\n );\n\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n\n return result;\n }\n}\n","import { Knex } from 'knex';\nimport { Filter, FilterParam, UpdateOpParam, Join } from '../shared/interface';\nimport { getKnex } from './db';\n\nexport const applyFilter = (query: Knex.QueryBuilder, filter: Filter = {}) => {\n Object.entries(filter).forEach(([field, data]) => {\n if (field === '$or') {\n query.where((builder) => {\n Object.entries(data).forEach(([orField, orData], index) => {\n const method = index === 0 ? 'where' : 'orWhere';\n const orParam = orData as FilterParam;\n\n if (['like', 'not like'].includes(orParam.operator)) {\n builder[method](orField, 'ilike', `%${orParam.value}%`);\n } else {\n builder[method](orField, orParam.operator, orParam.value);\n }\n });\n });\n } else {\n const param = data as FilterParam;\n\n if (['like', 'not like'].includes(param.operator)) {\n query.where(\n field,\n param.operator === 'like' ? 'ilike' : 'not ilike',\n `%${param.value}%`\n );\n } else {\n query.where(field, param.operator, param.value);\n }\n }\n });\n\n return query;\n};\n\nexport const generateCreateQuery = (\n table: string,\n data: Record<string, string | number | boolean | Date | Object>\n) => {\n const knex = getKnex();\n const { sql: query, bindings: replacements } = knex(table)\n .insert(data)\n .returning('id')\n .toSQL();\n\n return { query, replacements };\n};\n\nexport const generateReadQuery = (\n table: string,\n fields: string[],\n filter?: Filter,\n paginate?: { page: number; limit: number },\n format?: { sort: 'ASC' | 'DESC'; sortField: string },\n joins?: Join[]\n) => {\n const knex = getKnex();\n\n let q = knex(table).select(fields);\n\n // Add total count if pagination is needed\n if (paginate) {\n // Using knex.raw to create the count column with the same name as in original code\n q = knex(table).select([\n ...fields.map((field) => knex.raw(`?? as ??`, [field, field])),\n knex.raw('count(??) OVER() AS honey_total_count', [fields[0]])\n ]);\n }\n\n // Apply joins\n if (joins && joins.length > 0) {\n joins.forEach((join) => {\n const joinTable = join.alias\n ? `${join.table} as ${join.alias}`\n : join.table;\n const joinType = join.type || 'inner';\n const operator = join.on.operator || '=';\n\n switch (joinType) {\n case 'left':\n q.leftJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n case 'right':\n q.rightJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n case 'full':\n q.fullOuterJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n case 'cross':\n q.crossJoin(\n join.alias\n ? knex.raw('?? as ??', [join.table, join.alias])\n : knex.raw('??', [join.table])\n );\n break;\n case 'inner':\n default:\n q.innerJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n }\n });\n }\n\n // Apply filters\n if (filter) {\n q = applyFilter(q, filter);\n }\n\n // Apply sorting\n if (format?.sort && format.sortField) {\n q.orderBy(format.sortField, format.sort);\n }\n\n // Apply pagination\n if (paginate) {\n q.limit(paginate.limit).offset(paginate.limit * (paginate.page - 1));\n }\n\n const { sql: query, bindings: replacements } = q.toSQL();\n\n return { query, replacements };\n};\nexport const generateUpdateQuery = (\n table: string,\n data: UpdateOpParam,\n filter?: Filter\n) => {\n const knex = getKnex();\n let q = knex(table);\n\n // Build the update object\n const updateData: Record<string, Knex.Raw> = {};\n\n Object.entries(data).forEach(([field, fieldData]) => {\n const param = fieldData as any;\n\n if (param.operator === 'inc') {\n updateData[field] = knex.raw('?? + ?', [field, param.value]);\n } else if (param.operator === 'dec') {\n updateData[field] = knex.raw('?? - ?', [field, param.value]);\n } else {\n updateData[field] = param.value;\n }\n });\n\n // Apply filter conditions\n if (filter) {\n q = applyFilter(q, filter);\n }\n\n const { sql: query, bindings: replacements } = q\n .update(updateData)\n .returning('*')\n .toSQL();\n console.log(query, replacements);\n return { query, replacements };\n};\nexport const generateDeleteQuery = (table: string, filter?: Filter) => {\n const knex = getKnex();\n let q = knex(table);\n\n if (filter) {\n q = applyFilter(q, filter);\n }\n\n const { sql: query, bindings: replacements } = q.delete().toSQL();\n return { query, replacements };\n};\n\nexport const generateUpsertQuery = (\n table: string,\n data: UpdateOpParam,\n conflictTarget: string[]\n) => {\n const knex = getKnex();\n\n // Prepare insert data\n const insertData: Record<string, UpdateOpParam[string]['value']> = {};\n Object.entries(data).forEach(([field, fieldData]) => {\n insertData[field] = fieldData.value;\n });\n\n // Prepare update data for conflict resolution\n const updateData: Record<string, Knex.Raw | UpdateOpParam[string]['value']> =\n {};\n Object.entries(data).forEach(([field, fieldData]) => {\n const param = fieldData;\n\n if (param.operator === 'inc') {\n updateData[field] = knex.raw('?? + ?', [\n `${table}.${field}`,\n param.value\n ]);\n } else if (param.operator === 'dec') {\n updateData[field] = knex.raw('?? - ?', [\n `${table}.${field}`,\n param.value\n ]);\n } else {\n updateData[field] = param.value;\n }\n });\n\n const { sql: query, bindings: replacements } = knex(table)\n .insert(insertData)\n .onConflict(conflictTarget)\n .merge(updateData)\n .returning('*')\n .toSQL();\n\n return { query, replacements };\n};\n","export function normalizePort(val: string) {\n const port = parseInt(val, 10);\n\n if (isNaN(port)) {\n // named pipe\n return val;\n }\n\n if (port >= 0) {\n // port number\n return port;\n }\n\n throw new Error('Invalid port number');\n}\n","import { ObjectSchema, ValidationOptions } from 'joi';\nimport { Middleware } from 'src/interfaces/express';\nimport HttpError, { handleHttpError } from './error';\n\nexport const validateRequestData =\n (\n schema: ObjectSchema,\n location: 'body' | 'params' | 'query' | 'headers' | 'cookies' = 'body',\n options: ValidationOptions = { allowUnknown: true }\n ): Middleware =>\n async (req, res, next) => {\n try {\n const validationResult = schema.validate(req[location], options);\n const validationError = validationResult.error?.message;\n if (validationError) {\n throw new HttpError(validationError, 422);\n }\n\n return next();\n } catch (error: any) {\n handleHttpError(error, res);\n }\n };\n\nexport default validateRequestData;\n"],"names":[],"version":3,"file":"module.js.map","sourceRoot":"../"}
|
|
1
|
+
{"mappings":"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","sources":["src/index.ts","src/config/index.ts","src/config/database.ts","src/services/express.ts","src/utils/error.ts","src/services/honey.ts","src/controllers/index.ts","src/controllers/interfaces.ts","src/controllers/create.ts","src/utils/formatter.ts","src/controllers/read.ts","src/controllers/update.ts","src/controllers/upsert.ts","src/controllers/delete.ts","src/controllers/query.ts","src/utils/db.ts","src/utils/helpers.ts","src/services/postgres.ts","src/utils/postgres.ts","src/utils/port.ts","src/utils/validation.ts"],"sourcesContent":["import { QueryTypes as QTypes } from 'sequelize';\n\nimport Config from './config';\nimport { DBOptions } from './config/database';\nimport ExpressApp from './services/express';\nimport Honey from './services/honey';\nimport Postgres from './services/postgres';\nimport { normalizePort } from './utils/port';\nimport { Metadata } from './interfaces/express';\n\nprocess.on('SIGINT', () => {\n // process reload ongoing\n // close connections, clear cache, etc\n // by default, you have 1600ms\n process.exit(0);\n});\n\nexport function createHoney(\n port: string,\n dbOptions: string | DBOptions,\n metadata?: Metadata\n) {\n new Config(dbOptions);\n\n const portVal = normalizePort(port || process.env.PORT || '3000');\n const express = new ExpressApp(portVal, metadata);\n const postgres = new Postgres();\n const honey = new Honey(express, postgres);\n\n return honey;\n}\n\nexport const defineModel = Config.defineModel.bind(Config);\n\nfunction getQueryTypes() {\n const { SELECT, INSERT, UPDATE, DELETE, RAW, UPSERT } = QTypes;\n\n const exposedTypes = { SELECT, INSERT, UPDATE, DELETE, RAW, UPSERT };\n return exposedTypes;\n}\n\nconst QueryTypes = getQueryTypes();\n\nexport { QueryTypes };\nexport { default as runDbQuery, createModel } from './utils/db';\nexport { default as HttpError, handleHttpError } from './utils/error';\nexport { default as Honey } from './services/honey';\nexport type {\n Middleware,\n ExitMiddleware,\n Request,\n Response\n} from './interfaces/express';\nexport * from 'sequelize';\nexport { Knex } from 'knex';\nexport { validateRequestData } from './utils/validation';\n","import path from 'path';\nimport dotenv from 'dotenv';\n\nimport initDB, { DBOptions } from './database';\nimport {\n Model,\n ModelAttributes,\n ModelOptions,\n Sequelize\n} from 'sequelize/types';\ndotenv.config();\ndotenv.config({ path: path.join(__dirname, '.env') });\n\nexport default class Config {\n public static db: Sequelize;\n\n public static getEnv = (key: string) => {\n return process.env[key];\n };\n\n constructor(options: DBOptions | string) {\n Config.db = initDB(options);\n }\n\n static get isLive() {\n return process.env.NODE_ENV === 'production';\n }\n\n public static defineModel(\n modelName: string,\n attributes: ModelAttributes<Model<any, any>, any>,\n options?: ModelOptions<Model<any, any>> | undefined\n ) {\n return this.db.define(modelName, attributes, options);\n }\n}\n","import { Sequelize } from 'sequelize';\n\nexport interface DBOptions {\n host: string;\n port: number | string;\n user: string;\n password: string;\n database: string;\n}\n\nexport default function initDB(options: string | DBOptions) {\n let uri = '';\n if (typeof options === 'string') {\n uri = options;\n } else {\n uri = `postgres://${options.user}:${options.password}@${options.host}:${options.port}/${options.database}`;\n }\n const sequelize = new Sequelize(uri, {\n logging: false\n });\n\n sequelize\n .authenticate()\n .then(() => {\n console.log('DB Connection established successfully');\n })\n .catch((err) => {\n console.log('DB Connection failed');\n console.error(err);\n });\n\n return sequelize;\n}\n","import cookieParser from 'cookie-parser';\nimport express from 'express';\nimport logger from 'morgan';\nimport cors from 'cors';\nimport http from 'http';\nimport expressOasGenerator from 'express-oas-generator';\nimport '../config';\nimport HttpError from '../utils/error';\nimport { AddressInfo } from 'net';\nimport { Metadata } from '../interfaces/express';\n\n/**\n * Event listener for HTTP server \"error\" event.\n */\nconst onError = (port: string | number) => {\n return (error: any) => {\n if (error.syscall !== 'listen') {\n throw error;\n }\n\n const bind = typeof port === 'string' ? `Pipe ${port}` : `Port ${port}`;\n\n // handle specific listen errors with friendly messages\n switch (error.code) {\n case 'EACCES':\n console.error(`${bind} requires elevated privileges`);\n process.exit(1);\n case 'EADDRINUSE':\n console.error(`${bind} is already in use`);\n process.exit(1);\n default:\n throw error;\n }\n };\n};\n\n/**\n * Event listener for HTTP server \"listening\" event.\n */\nconst onListening = (server: http.Server) => {\n return () => {\n const addr = server.address();\n const bind =\n typeof addr === 'string'\n ? `pipe ${addr}`\n : `port ${(addr as AddressInfo).port}`;\n console.log(\n `%c Honey Server started on ${bind} `,\n 'background: #222; color: #bada55; font-size: 32px'\n );\n };\n};\n\nclass ExpressApp {\n public app = express();\n public appRoutes = express.Router();\n private fallbackErrMessage = 'Endpoint does not exist';\n private routePrefix = '/api';\n\n constructor(\n port: string | number,\n private metadata?: Metadata\n ) {\n this.fallbackErrMessage =\n this.metadata?.fallbackErrorMessage || this.fallbackErrMessage;\n this.routePrefix = this.metadata?.routePrefix || this.routePrefix;\n this.initMiddlewares();\n this.setupErrorFallback();\n this.app.set('port', port);\n }\n\n public listen() {\n expressOasGenerator.handleRequests();\n const port = Number(this.app.get('port'));\n const server = this.app.listen(port);\n server.on('error', onError(port));\n server.on('listening', onListening(server));\n }\n\n private initMiddlewares() {\n const corsOptions: cors.CorsOptions = {\n origin: '*',\n methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',\n allowedHeaders: '*',\n exposedHeaders: '*',\n credentials: true,\n optionsSuccessStatus: 204\n };\n\n expressOasGenerator.handleResponses(this.app, {} as any);\n this.app.use(logger('dev'));\n this.app.use(cors(corsOptions));\n this.app.use(\n express.json({\n limit: '50mb',\n verify(req: any, _res, buf) {\n req.rawBody = buf;\n }\n })\n );\n this.app.use(express.urlencoded({ limit: '50mb', extended: false }));\n this.app.use(cookieParser());\n this.app.use(this.routePrefix, this.appRoutes);\n }\n\n private setupErrorFallback() {\n this.app.use((_, res) => {\n const err = new HttpError(this.fallbackErrMessage, 404);\n\n return res.status(err.status).json({ message: err.message });\n });\n // error handler\n this.app.use((err: any, _, res: any) => {\n return res\n .status(err.status || 500)\n .send({ message: 'Something went wrong' });\n });\n }\n}\n\nexport default ExpressApp;\n","import { Response } from 'express';\n\nexport default class HttpError extends Error {\n constructor(\n message: string,\n public status: number\n ) {\n super(message || 'Something went wrong');\n }\n}\n\nexport const handleHttpError = (err: HttpError, res: Response) => {\n return res\n .status(err.status || 500)\n .send({ message: err.message || 'Something went wrong' });\n};\n","import Config from '../config';\nimport {\n createController,\n deleteByIdController,\n getByIdController,\n getByQueryController,\n updateByIdController,\n upsertByIdController,\n upsertController,\n updateController,\n deleteController,\n queryController\n} from '../controllers';\nimport {\n ICreate,\n ICrud,\n IDelete,\n IDeleteById,\n IGet,\n IGetById,\n IUpdate,\n IUpdateById,\n IUpsert,\n IUpsertById,\n IQuery\n} from '../interfaces/crud';\nimport { ExitMiddleware, Middleware } from '../interfaces/express';\nimport { NextFunction, Request, Response } from 'express';\nimport ExpressApp from './express';\nimport Postgres from './postgres';\n\n// eslint-disable-next-line\nconst defaultExitMiddleware: ExitMiddleware = (data, req, res, next) => {\n if (process.env.NODE_ENV !== 'production') console.log('Response:', data);\n};\n\nexport default class Honey {\n constructor(\n public express: ExpressApp,\n private postgres: Postgres\n ) {}\n\n get routes() {\n return this.express.appRoutes;\n }\n\n get db() {\n return Config.db;\n }\n\n private crud({\n method,\n path,\n controller,\n middleware = [],\n exitMiddleware = [defaultExitMiddleware]\n }: ICrud) {\n const dbCheck = async (req: Request, res: Response, next: NextFunction) => {\n if (!Config.db) {\n return res.status(503).send({\n message: 'DB Initialization in progress'\n });\n } else {\n next();\n }\n };\n this.express.appRoutes[method](\n path,\n dbCheck,\n ...middleware,\n controller,\n ...exitMiddleware\n );\n }\n\n public addMiddleware(middleware: Middleware[]) {\n this.express.appRoutes.use(...middleware);\n }\n\n public startServer() {\n this.express.listen();\n }\n\n public create({\n resource,\n params,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n processResponseData,\n processErrorResponse,\n table,\n methodOverride\n }: ICreate) {\n const path = pathOverride || `/${resource}`;\n resource = table || resource;\n\n const controller = createController({\n db: this.postgres,\n resource,\n params,\n message,\n processResponseData,\n processErrorResponse\n });\n\n this.crud({\n method: methodOverride || 'post',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public get({\n resource,\n fields,\n filter,\n format,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n processResponseData,\n processErrorResponse,\n table,\n joins\n }: IGet) {\n const path = pathOverride || `/${resource}`;\n resource = table || resource;\n\n const controller = getByQueryController({\n db: this.postgres,\n resource,\n fields,\n filterQuery: filter,\n format,\n processResponseData,\n processErrorResponse,\n joins\n });\n this.crud({\n method: methodOverride || 'get',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public getById({\n resource,\n fields,\n idField,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n processResponseData,\n processErrorResponse,\n table,\n filter,\n joins\n }: IGetById) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = getByIdController({\n db: this.postgres,\n resource,\n fields,\n idField: idField || 'id',\n processResponseData,\n processErrorResponse,\n filterQuery: filter,\n joins\n });\n\n this.crud({\n method: methodOverride || 'get',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public updateById({\n resource,\n params,\n idField,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n table,\n filter,\n processErrorResponse,\n processResponseData\n }: IUpdateById) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = updateByIdController({\n db: this.postgres,\n resource,\n params,\n message,\n idField,\n filterQuery: filter,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public update({\n resource,\n params,\n filter,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n table,\n processErrorResponse,\n processResponseData\n }: IUpdate) {\n const path = pathOverride || `/${resource}`;\n resource = table || resource;\n\n const controller = updateController({\n db: this.postgres,\n resource,\n params,\n message,\n filterQuery: filter,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public upsertById({\n resource,\n params,\n idField,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n table,\n processErrorResponse,\n processResponseData\n }: IUpsertById) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = upsertByIdController({\n db: this.postgres,\n resource,\n params,\n message,\n idField,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public upsert({\n resource,\n params,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n conflictTarget,\n table,\n processErrorResponse,\n processResponseData\n }: IUpsert) {\n const path = pathOverride || `/${resource}`;\n resource = table || resource;\n\n const controller = upsertController({\n db: this.postgres,\n resource,\n params,\n message,\n conflictTarget,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'put',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public deleteById({\n resource,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n idField,\n filter,\n table,\n processErrorResponse\n }: IDeleteById) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = deleteByIdController({\n db: this.postgres,\n resource,\n message,\n idField,\n filterQuery: filter,\n processErrorResponse\n });\n this.crud({\n method: methodOverride || 'delete',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public delete({\n resource,\n message,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n filter,\n table,\n processErrorResponse\n }: IDelete) {\n const path = pathOverride || `/${resource}/:id`;\n resource = table || resource;\n\n const controller = deleteController({\n db: this.postgres,\n resource,\n message,\n filterQuery: filter,\n processErrorResponse\n });\n this.crud({\n method: methodOverride || 'delete',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n\n public query({\n resource,\n query,\n middleware,\n pathOverride,\n exitMiddleware,\n methodOverride,\n processErrorResponse,\n processResponseData\n }: IQuery) {\n const path = pathOverride || `/${resource}`;\n\n const controller = queryController({\n db: this.postgres,\n query,\n processErrorResponse,\n processResponseData\n });\n this.crud({\n method: methodOverride || 'get',\n path,\n controller,\n middleware,\n exitMiddleware\n });\n }\n}\n","export { Controller } from './interfaces';\nexport { default as createController } from './create';\nexport { getByIdController, getByQueryController } from './read';\nexport { updateByIdController, updateController } from './update';\nexport { upsertByIdController, upsertController } from './upsert';\nexport { deleteByIdController, deleteController } from './delete';\nexport * from './query';\n","import { NextFunction, Request, Response } from 'express';\n\nexport type Controller = (\n req: Request,\n res: Response,\n next: NextFunction\n) => void;\n","import { CreateControllerParams } from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { extractInsertData } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport default function createController({\n db,\n resource,\n params,\n message,\n processResponseData,\n processErrorResponse\n}: CreateControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = extractInsertData(req.body, params);\n\n const data = await db.create(resource, body);\n const id = data[0].id;\n\n res.send({\n message,\n data:\n req.body.dataOverride ||\n (processResponseData\n ? await processResponseData({ id }, req)\n : { id })\n });\n next({ message, data: { id } });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import { Request } from 'express';\nimport { ICreate, IUpdateById } from '../interfaces/crud';\nimport {\n Filter,\n FilterLocation,\n FilterOps,\n FilterParam,\n GetFilterParam,\n GetQueryFilter,\n UpdateOpParam\n} from '../shared/interface';\nimport HttpError from './error';\n\nconst formatters: Record<string, Function> = {\n string: String,\n number: Number,\n boolean: Boolean,\n json: JSON.stringify,\n object: JSON.stringify\n};\n\nexport const extractInsertData = (\n body: Record<string, any>,\n params: ICreate['params']\n) => {\n const result: Record<string, string | number | boolean | Date | Object> = {};\n\n Object.entries(params).forEach(([key, value]) => {\n if (value === '@updatedAt') {\n result[key] = new Date();\n return;\n }\n\n if (!Object.keys(body).includes(key)) return;\n\n const formatter = formatters[value];\n result[key] =\n formatter && ![null, undefined].includes(body[key])\n ? formatter(body[key])\n : body[key];\n });\n\n return result;\n};\n\nexport const generateUpdateData = (\n body: Record<string, any>,\n params: IUpdateById['params']\n) => {\n const result = Object.entries(params).reduce((acc, [key, value]) => {\n if (!Object.keys(body).includes(key) && value !== '@updatedAt')\n return { ...acc };\n\n let formattedValue: any;\n if (value === '@updatedAt') {\n formattedValue = new Date();\n } else {\n formattedValue = ![null, undefined].includes(body[key])\n ? formatters[typeof body[key]](body[key])\n : body[key];\n }\n\n return {\n ...acc,\n [key]: {\n value: formattedValue,\n operator: value === '@updatedAt' ? 'replace' : value\n }\n };\n }, {} as UpdateOpParam);\n\n return result;\n};\n\nconst retrieveParamFromLocation = (\n req: Request,\n location: FilterLocation,\n key: string\n) => {\n if (location === 'request') return (req as any)[key];\n\n return req[location][key];\n};\n\nexport const formatReadFilter = (\n filterParams: Record<string, any>,\n filter: GetQueryFilter,\n req: Request\n) => {\n const result: Filter = {};\n\n Object.entries(filter).forEach(([key, param]) => {\n if (key === '$or') {\n const val = formatReadFilter(\n filterParams,\n param as Record<string, GetFilterParam>,\n req\n ) as Record<string, FilterParam>;\n\n result[key] = val;\n } else {\n let valueToUse: any;\n if (param.overrideValue) {\n if (typeof param.overrideValue === 'function') {\n valueToUse = param.overrideValue(req);\n } else {\n valueToUse = param.overrideValue;\n }\n } else if (!!param.location) {\n valueToUse = retrieveParamFromLocation(\n req,\n param.location as FilterLocation,\n key\n );\n } else {\n valueToUse = filterParams[key];\n }\n\n if (typeof valueToUse === 'undefined') {\n throw new HttpError('Missing filter parameter', 400);\n }\n\n const valueFormatter = formatters[(param as GetFilterParam).value];\n result[key] = {\n operator: param.operator as FilterOps,\n value: valueFormatter(valueToUse)\n };\n }\n });\n\n return result;\n};\n","import {\n GetByIdControllerParams,\n GetByQueryControllerParams\n} from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { formatReadFilter } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport function getByIdController({\n db,\n resource,\n fields,\n idField = 'id',\n processResponseData,\n processErrorResponse,\n filterQuery = {},\n joins\n}: GetByIdControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const id = req.params.id;\n\n const filter = formatReadFilter(req.query, filterQuery, req);\n\n const data = await db.read(\n resource,\n fields,\n {\n [idField]: {\n value: id,\n operator: '='\n },\n ...filter\n },\n undefined,\n undefined,\n joins\n );\n\n if (!data?.length) {\n throw new HttpError('Record does not exist', 404);\n }\n\n res.send({\n data: processResponseData\n ? await processResponseData(data[0], req)\n : data[0]\n });\n next({ data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function getByQueryController({\n db,\n resource,\n fields,\n filterQuery,\n format,\n processResponseData,\n processErrorResponse,\n joins\n}: GetByQueryControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const page = Number(req.query.page);\n const limit = Number(req.query.limit);\n const paginate =\n limit || page ? { page: page || 1, limit: limit || 10 } : undefined;\n\n const filter =\n filterQuery && formatReadFilter(req.query, filterQuery, req);\n\n let data: Record<string, any>[] = await db.read(\n resource,\n fields,\n filter,\n paginate,\n format,\n joins\n );\n let total = 0;\n if (paginate) {\n total = Number(data[0]?.['honey_total_count'] || 0);\n data = data.map((item: Record<string, any>) => {\n delete item['honey_total_count'];\n return item;\n });\n }\n\n if (processResponseData) {\n data = await processResponseData(data, req);\n } else if (!data?.length) {\n throw new HttpError('No records found', 404);\n }\n const response = {\n data,\n meta: {\n ...(!!paginate && {\n pagination: {\n total,\n pageSize: limit,\n page,\n pageCount: Math.ceil(total / limit)\n }\n })\n }\n };\n res.send(response);\n next(response);\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import {\n UpdateByIdControllerParams,\n UpdateControllerParams\n} from '../interfaces/crud';\nimport { Filter } from '../shared/interface';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { formatReadFilter, generateUpdateData } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport function updateByIdController({\n db,\n resource,\n params,\n message,\n idField = 'id',\n processErrorResponse,\n processResponseData,\n filterQuery = {}\n}: UpdateByIdControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = generateUpdateData(req.body, params);\n const additionalFilter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n const filter: Filter = {\n [idField]: {\n operator: '=',\n value: req.params.id\n },\n ...additionalFilter\n };\n\n const result = await db.update(resource, body, filter);\n\n const data = processResponseData\n ? processResponseData(result, req)\n : undefined;\n\n res.send({ message, data });\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function updateController({\n db,\n resource,\n params,\n message,\n filterQuery,\n processErrorResponse,\n processResponseData\n}: UpdateControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = generateUpdateData(req.body, params);\n const filter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n\n const result = await db.update(resource, body, filter);\n\n const data = processResponseData\n ? processResponseData(result, req)\n : undefined;\n\n res.send({ message, data });\n\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import {\n UpsertByIdControllerParams,\n UpsertControllerParams\n} from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { generateUpdateData } from '../utils/formatter';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\n\nexport function upsertByIdController({\n db,\n resource,\n params,\n message,\n idField = 'id',\n processErrorResponse,\n processResponseData\n}: UpsertByIdControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n req.body[idField] = req.params.id;\n params = { ...params, [idField]: 'replace' };\n const body = generateUpdateData(req.body, params);\n\n const result = await db.upsert(resource, body, [idField]);\n\n const data = processResponseData\n ? processResponseData(result?.[0], req)\n : undefined;\n\n res.send({ message, data });\n\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function upsertController({\n db,\n resource,\n params,\n message,\n conflictTarget,\n processErrorResponse,\n processResponseData\n}: UpsertControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = generateUpdateData(req.body, params);\n\n const result = await db.upsert(resource, body, conflictTarget);\n\n const data = processResponseData\n ? processResponseData(result?.[0], req)\n : undefined;\n\n res.send({ message, data });\n\n next({ message, data });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import {\n DeleteByIdControllerParams,\n DeleteControllerParams\n} from '../interfaces/crud';\nimport HttpError, { handleHttpError } from '../utils/error';\nimport { NextFunction, Request, Response } from 'express';\nimport { Controller } from './interfaces';\nimport { formatReadFilter } from '../utils/formatter';\n\nexport function deleteByIdController({\n db,\n resource,\n message,\n idField = 'id',\n processErrorResponse,\n filterQuery = {}\n}: DeleteByIdControllerParams): Controller {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n const id = req.params[idField || 'id'];\n const filter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n\n await db.delete(resource, {\n [idField]: {\n value: id,\n operator: '='\n },\n ...filter\n });\n\n res.send({ message });\n next({ message });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n\nexport function deleteController({\n db,\n resource,\n message,\n processErrorResponse,\n filterQuery\n}: DeleteControllerParams): Controller {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n const filter =\n filterQuery && formatReadFilter(req.body, filterQuery, req);\n\n await db.delete(resource, filter);\n\n res.send({ message });\n next({ message });\n } catch (error: any) {\n if (processErrorResponse) {\n error = processErrorResponse(error);\n }\n handleHttpError(error as HttpError, res);\n next({ ...error, isError: true });\n }\n };\n}\n","import { NextFunction, Request, Response } from 'express';\nimport { getKnex } from '../utils/db';\nimport { QueryControllerParams } from '../interfaces/crud';\n\nexport function queryController({\n db,\n query,\n processErrorResponse,\n processResponseData\n}: QueryControllerParams) {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n const page = Number(req.query.page);\n const limit = Number(req.query.limit);\n const paginate =\n limit || page ? { page: page || 1, limit: limit || 10 } : undefined;\n\n const knex = getKnex();\n let queryBuilder = query(knex, req);\n if (paginate) {\n queryBuilder = queryBuilder\n .limit(paginate.limit)\n .offset(paginate.limit * (paginate.page - 1));\n }\n const { sql, bindings } = queryBuilder.toSQL();\n\n const result = await db.query(sql, [...bindings]);\n\n if (processResponseData) {\n return res.send({ data: processResponseData(result, req) });\n }\n\n return res.send({ data: result });\n } catch (e) {\n if (processErrorResponse) {\n return next(processErrorResponse(e as Error));\n }\n return next(e);\n }\n };\n}\n","import {\n Model,\n ModelAttributes,\n ModelOptions,\n ModelStatic,\n QueryOptions\n} from 'sequelize';\nimport Knex from 'knex';\n\nimport Config from '../config';\nimport createSingleton from './helpers';\n\nexport default function runDbQuery(query: string, params?: QueryOptions) {\n params = params || {};\n\n return Config.db.query(query, {\n ...params,\n raw: true\n });\n}\n\nclass ModelCreator {\n private static model: Record<string, ModelStatic<Model>> = {};\n\n public static createModel<\n TModelAttributes extends {} = any,\n TCreationAttributes extends {} = TModelAttributes\n >(\n modelName: string,\n attributes: ModelAttributes<Model<TModelAttributes, TCreationAttributes>>,\n options?:\n | ModelOptions<Model<TModelAttributes, TCreationAttributes>>\n | undefined\n ): ModelStatic<Model<TModelAttributes, TCreationAttributes>> {\n if (!this.model[modelName]) {\n this.model[modelName] = Config.db.define(modelName, attributes, options);\n }\n\n return this.model[modelName];\n }\n}\n\nexport function createModel<\n TModelAttributes extends {} = any,\n TCreationAttributes extends {} = TModelAttributes\n>(\n modelName: string,\n attributes: ModelAttributes<Model<TModelAttributes, TCreationAttributes>>,\n options?:\n | ModelOptions<Model<TModelAttributes, TCreationAttributes>>\n | undefined\n) {\n return ModelCreator.createModel.bind(ModelCreator)(\n modelName,\n attributes,\n options\n );\n}\n\nexport const getKnex = () =>\n createSingleton('knex', () => {\n return Knex({ client: 'pg' });\n });\n","export class Singleton {\n private static instances: Map<string, any> = new Map();\n\n public static getInstance<T>(identifier: string, initFn?: () => T): T {\n if (!this.instances.has(identifier) && initFn) {\n this.instances.set(identifier, initFn());\n }\n\n return this.instances.get(identifier) as T;\n }\n}\n\nexport default function createSingleton<T>(\n identifier: string,\n initFn?: () => T\n): T {\n return Singleton.getInstance(identifier, initFn);\n}\n","import config from '../config';\nimport {\n generateCreateQuery,\n generateDeleteQuery,\n generateReadQuery,\n generateUpdateQuery,\n generateUpsertQuery\n} from '../utils/postgres';\nimport { QueryTypes } from 'sequelize';\nimport { Filter, UpdateOpParam, Join } from '../shared/interface';\n\nexport default class Postgres {\n public async read(\n table: string,\n fields: string[],\n filter?: Filter,\n paginate?: { page: number; limit: number },\n format?: { sort: 'ASC' | 'DESC'; sortField: string },\n joins?: Join[]\n ) {\n const { query, replacements } = generateReadQuery(\n table,\n fields,\n filter,\n paginate,\n format,\n joins\n );\n\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n return result;\n }\n\n public async query(query: string, replacements: any[]) {\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n return result;\n }\n\n public async create(\n table: string,\n data: Record<string, string | number | boolean | Date | Object>\n ) {\n const { query, replacements } = generateCreateQuery(table, data);\n\n const res: any = await config.db.query(query, {\n type: QueryTypes.INSERT,\n raw: true,\n replacements: [...replacements]\n });\n\n // inserted ids\n return res[0] as { id: string | number }[];\n }\n\n public async update(table: string, data: UpdateOpParam, filter?: Filter) {\n const { query, replacements } = generateUpdateQuery(table, data, filter);\n\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n return result;\n }\n\n public async delete(table: string, filter?: Filter) {\n const { query, replacements } = generateDeleteQuery(table, filter);\n\n await config.db.query(query, {\n type: QueryTypes.DELETE,\n raw: true,\n replacements: [...replacements]\n });\n }\n\n public async upsert(\n table: string,\n data: UpdateOpParam,\n conflictTarget: string[]\n ) {\n const { query, replacements } = generateUpsertQuery(\n table,\n data,\n conflictTarget\n );\n\n const result = await config.db.query(query, {\n type: QueryTypes.SELECT,\n raw: true,\n replacements: [...replacements]\n });\n\n return result;\n }\n}\n","import { Knex } from 'knex';\nimport { Filter, FilterParam, UpdateOpParam, Join } from '../shared/interface';\nimport { getKnex } from './db';\n\nexport const applyFilter = (query: Knex.QueryBuilder, filter: Filter = {}) => {\n Object.entries(filter).forEach(([field, data]) => {\n if (field === '$or') {\n query.where((builder) => {\n Object.entries(data).forEach(([orField, orData], index) => {\n const method = index === 0 ? 'where' : 'orWhere';\n const orParam = orData as FilterParam;\n\n if (['like', 'not like'].includes(orParam.operator)) {\n builder[method](orField, 'ilike', `%${orParam.value}%`);\n } else {\n builder[method](orField, orParam.operator, orParam.value);\n }\n });\n });\n } else {\n const param = data as FilterParam;\n\n if (['like', 'not like'].includes(param.operator)) {\n query.where(\n field,\n param.operator === 'like' ? 'ilike' : 'not ilike',\n `%${param.value}%`\n );\n } else {\n query.where(field, param.operator, param.value);\n }\n }\n });\n\n return query;\n};\n\nexport const generateCreateQuery = (\n table: string,\n data: Record<string, string | number | boolean | Date | Object>\n) => {\n const knex = getKnex();\n const { sql: query, bindings: replacements } = knex(table)\n .insert(data)\n .returning('id')\n .toSQL();\n\n return { query, replacements };\n};\n\nexport const generateReadQuery = (\n table: string,\n fields: string[],\n filter?: Filter,\n paginate?: { page: number; limit: number },\n format?: { sort: 'ASC' | 'DESC'; sortField: string },\n joins?: Join[]\n) => {\n const knex = getKnex();\n\n let q = knex(table).select(fields);\n\n // Add total count if pagination is needed\n if (paginate) {\n // Using knex.raw to create the count column with the same name as in original code\n q = knex(table).select([\n ...fields.map((field) => knex.raw(`?? as ??`, [field, field])),\n knex.raw('count(??) OVER() AS honey_total_count', [fields[0]])\n ]);\n }\n\n // Apply joins\n if (joins && joins.length > 0) {\n joins.forEach((join) => {\n const joinTable = join.alias\n ? `${join.table} as ${join.alias}`\n : join.table;\n const joinType = join.type || 'inner';\n const operator = join.on.operator || '=';\n\n switch (joinType) {\n case 'left':\n q.leftJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n case 'right':\n q.rightJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n case 'full':\n q.fullOuterJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n case 'cross':\n q.crossJoin(\n join.alias\n ? knex.raw('?? as ??', [join.table, join.alias])\n : knex.raw('??', [join.table])\n );\n break;\n case 'inner':\n default:\n q.innerJoin(joinTable, join.on.left, operator, join.on.right);\n break;\n }\n });\n }\n\n // Apply filters\n if (filter) {\n q = applyFilter(q, filter);\n }\n\n // Apply sorting\n if (format?.sort && format.sortField) {\n q.orderBy(format.sortField, format.sort);\n }\n\n // Apply pagination\n if (paginate) {\n q.limit(paginate.limit).offset(paginate.limit * (paginate.page - 1));\n }\n\n const { sql: query, bindings: replacements } = q.toSQL();\n\n return { query, replacements };\n};\nexport const generateUpdateQuery = (\n table: string,\n data: UpdateOpParam,\n filter?: Filter\n) => {\n const knex = getKnex();\n let q = knex(table);\n\n // Build the update object\n const updateData: Record<string, Knex.Raw> = {};\n\n Object.entries(data).forEach(([field, fieldData]) => {\n const param = fieldData as any;\n\n if (param.operator === 'inc') {\n updateData[field] = knex.raw('?? + ?', [field, param.value]);\n } else if (param.operator === 'dec') {\n updateData[field] = knex.raw('?? - ?', [field, param.value]);\n } else {\n updateData[field] = param.value;\n }\n });\n\n // Apply filter conditions\n if (filter) {\n q = applyFilter(q, filter);\n }\n\n const { sql: query, bindings: replacements } = q\n .update(updateData)\n .returning('*')\n .toSQL();\n console.log(query, replacements);\n return { query, replacements };\n};\nexport const generateDeleteQuery = (table: string, filter?: Filter) => {\n const knex = getKnex();\n let q = knex(table);\n\n if (filter) {\n q = applyFilter(q, filter);\n }\n\n const { sql: query, bindings: replacements } = q.delete().toSQL();\n return { query, replacements };\n};\n\nexport const generateUpsertQuery = (\n table: string,\n data: UpdateOpParam,\n conflictTarget: string[]\n) => {\n const knex = getKnex();\n\n // Prepare insert data\n const insertData: Record<string, UpdateOpParam[string]['value']> = {};\n Object.entries(data).forEach(([field, fieldData]) => {\n insertData[field] = fieldData.value;\n });\n\n // Prepare update data for conflict resolution\n const updateData: Record<string, Knex.Raw | UpdateOpParam[string]['value']> =\n {};\n Object.entries(data).forEach(([field, fieldData]) => {\n const param = fieldData;\n\n if (param.operator === 'inc') {\n updateData[field] = knex.raw('?? + ?', [\n `${table}.${field}`,\n param.value\n ]);\n } else if (param.operator === 'dec') {\n updateData[field] = knex.raw('?? - ?', [\n `${table}.${field}`,\n param.value\n ]);\n } else {\n updateData[field] = param.value;\n }\n });\n\n const { sql: query, bindings: replacements } = knex(table)\n .insert(insertData)\n .onConflict(conflictTarget)\n .merge(updateData)\n .returning('*')\n .toSQL();\n\n return { query, replacements };\n};\n","export function normalizePort(val: string) {\n const port = parseInt(val, 10);\n\n if (isNaN(port)) {\n // named pipe\n return val;\n }\n\n if (port >= 0) {\n // port number\n return port;\n }\n\n throw new Error('Invalid port number');\n}\n","import { ObjectSchema, ValidationOptions } from 'joi';\nimport { Middleware } from 'src/interfaces/express';\nimport HttpError, { handleHttpError } from './error';\n\nexport const validateRequestData =\n (\n schema: ObjectSchema,\n location: 'body' | 'params' | 'query' | 'headers' | 'cookies' = 'body',\n options: ValidationOptions = { allowUnknown: true }\n ): Middleware =>\n async (req, res, next) => {\n try {\n const validationResult = schema.validate(req[location], options);\n const validationError = validationResult.error?.message;\n if (validationError) {\n throw new HttpError(validationError, 422);\n }\n\n return next();\n } catch (error: any) {\n handleHttpError(error, res);\n }\n };\n\nexport default validateRequestData;\n"],"names":[],"version":3,"file":"module.js.map","sourceRoot":"../"}
|
package/package.json
CHANGED