@promind/honey 1.37.0 → 1.38.1
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/dist/index.d.ts +15 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -13
- package/dist/index.js.map +1 -1
- package/dist/module.js +55 -13
- package/dist/module.js.map +1 -1
- package/package.json +3 -3
- package/CHANGELOG.md +0 -593
package/dist/index.d.ts
CHANGED
|
@@ -63,9 +63,7 @@ type GetFilterParam = {
|
|
|
63
63
|
location?: FilterLocation;
|
|
64
64
|
};
|
|
65
65
|
type GetQueryFilter = {
|
|
66
|
-
[key: string]: GetFilterParam
|
|
67
|
-
} & {
|
|
68
|
-
$or?: Record<string, GetFilterParam>;
|
|
66
|
+
[key: string]: GetFilterParam | Record<string, GetFilterParam>;
|
|
69
67
|
};
|
|
70
68
|
export function runDbQuery(query: string, params?: QueryOptions): Promise<[unknown[], unknown]>;
|
|
71
69
|
export function createModel<TModelAttributes extends {} = any, TCreationAttributes extends {} = TModelAttributes>(modelName: string, attributes: _ModelAttributes1<_Model1<TModelAttributes, TCreationAttributes>>, options?: _ModelOptions1<_Model1<TModelAttributes, TCreationAttributes>> | undefined): ModelStatic<_Model1<TModelAttributes, TCreationAttributes>>;
|
|
@@ -104,6 +102,8 @@ interface CrudParams {
|
|
|
104
102
|
middleware?: Middleware[];
|
|
105
103
|
/** Middleware to run after CRUD controller returns response */
|
|
106
104
|
exitMiddleware?: ExitMiddleware[];
|
|
105
|
+
/** A function that is called to transform your error response data */
|
|
106
|
+
processErrorResponse?: (err: Error) => Error;
|
|
107
107
|
}
|
|
108
108
|
type ICreate = CrudParams & {
|
|
109
109
|
/** Parameters in request body */
|
|
@@ -112,7 +112,6 @@ type ICreate = CrudParams & {
|
|
|
112
112
|
message: string;
|
|
113
113
|
/** A function that is called to transform your response data */
|
|
114
114
|
processResponseData?: (data: any, req: _Request1) => any;
|
|
115
|
-
processErrorResponse?: (err: Error) => Error;
|
|
116
115
|
};
|
|
117
116
|
type IUpdateById = CrudParams & {
|
|
118
117
|
/** Parameters in request body */
|
|
@@ -160,7 +159,6 @@ type IGet = CrudParams & {
|
|
|
160
159
|
};
|
|
161
160
|
/** A function that is called to transform your response data */
|
|
162
161
|
processResponseData?: (data: any, req: _Request1) => any;
|
|
163
|
-
processErrorResponse?: (err: Error) => Error;
|
|
164
162
|
};
|
|
165
163
|
type IGetById = CrudParams & {
|
|
166
164
|
/** Fields to return in the response object */
|
|
@@ -171,7 +169,6 @@ type IGetById = CrudParams & {
|
|
|
171
169
|
filter?: GetQueryFilter;
|
|
172
170
|
/** A function that is called to transform your response data */
|
|
173
171
|
processResponseData?: (data: any, req: _Request1) => any;
|
|
174
|
-
processErrorResponse?: (err: Error) => Error;
|
|
175
172
|
};
|
|
176
173
|
type IDeleteById = CrudParams & {
|
|
177
174
|
/** Response message */
|
|
@@ -181,6 +178,12 @@ type IDeleteById = CrudParams & {
|
|
|
181
178
|
/** Filter builder for WHERE clause */
|
|
182
179
|
filter?: GetQueryFilter;
|
|
183
180
|
};
|
|
181
|
+
type IDelete = CrudParams & {
|
|
182
|
+
/** Response message */
|
|
183
|
+
message: string;
|
|
184
|
+
/** Filter builder for WHERE clause */
|
|
185
|
+
filter?: GetQueryFilter;
|
|
186
|
+
};
|
|
184
187
|
export class Honey {
|
|
185
188
|
express: ExpressApp;
|
|
186
189
|
constructor(express: ExpressApp, postgres: Postgres);
|
|
@@ -191,11 +194,12 @@ export class Honey {
|
|
|
191
194
|
create({ resource, params, message, middleware, pathOverride, exitMiddleware, processResponseData, processErrorResponse, table, methodOverride }: ICreate): void;
|
|
192
195
|
get({ resource, fields, filter, format, middleware, pathOverride, exitMiddleware, methodOverride, processResponseData, processErrorResponse, table }: IGet): void;
|
|
193
196
|
getById({ resource, fields, idField, middleware, pathOverride, exitMiddleware, methodOverride, processResponseData, processErrorResponse, table, filter }: IGetById): void;
|
|
194
|
-
updateById({ resource, params, idField, message, middleware, pathOverride, exitMiddleware, methodOverride, table, filter }: IUpdateById): void;
|
|
195
|
-
update({ resource, params, filter, message, middleware, pathOverride, exitMiddleware, methodOverride, table }: IUpdate): void;
|
|
196
|
-
upsertById({ resource, params, idField, message, middleware, pathOverride, exitMiddleware, methodOverride, table }: IUpsertById): void;
|
|
197
|
-
upsert({ resource, params, message, middleware, pathOverride, exitMiddleware, methodOverride, conflictTarget, table }: IUpsert): void;
|
|
198
|
-
deleteById({ resource, message, middleware, pathOverride, exitMiddleware, methodOverride, idField, filter, table }: IDeleteById): void;
|
|
197
|
+
updateById({ resource, params, idField, message, middleware, pathOverride, exitMiddleware, methodOverride, table, filter, processErrorResponse }: IUpdateById): void;
|
|
198
|
+
update({ resource, params, filter, message, middleware, pathOverride, exitMiddleware, methodOverride, table, processErrorResponse }: IUpdate): void;
|
|
199
|
+
upsertById({ resource, params, idField, message, middleware, pathOverride, exitMiddleware, methodOverride, table, processErrorResponse }: IUpsertById): void;
|
|
200
|
+
upsert({ resource, params, message, middleware, pathOverride, exitMiddleware, methodOverride, conflictTarget, table, processErrorResponse }: IUpsert): void;
|
|
201
|
+
deleteById({ resource, message, middleware, pathOverride, exitMiddleware, methodOverride, idField, filter, table, processErrorResponse }: IDeleteById): void;
|
|
202
|
+
delete({ resource, message, middleware, pathOverride, exitMiddleware, methodOverride, filter, table, processErrorResponse }: IDelete): void;
|
|
199
203
|
}
|
|
200
204
|
export const validateRequestData: (schema: ObjectSchema, location?: 'body' | 'params' | 'query' | 'headers' | 'cookies', options?: ValidationOptions) => Middleware;
|
|
201
205
|
export function createHoney(port: string, dbOptions: string | DBOptions, metadata?: Metadata): Honey;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;;;AAEA;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;ACKD;IACE,OAAc,EAAE,EAAE,SAAS,CAAC;IAE5B,OAAc,MAAM,QAAS,MAAM,wBAEjC;gBAEU,OAAO,EAAE,SAAS,GAAG,MAAM;IAIvC,MAAM,KAAK,MAAM,YAEhB;WAEa,WAAW,CACvB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,gBAAgB,MAAM,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EACjD,OAAO,CAAC,EAAE,aAAa,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS;CAItD;ACjCD,sBAA+B,SAAQ,KAAK;IAGjC,MAAM,EAAE,MAAM;gBADrB,OAAO,EAAE,MAAM,EACR,MAAM,EAAE,MAAM;CAIxB;AAED,OAAO,MAAM,uBAAwB,SAAS,OAAO,UAAQ,yCAI5D,CAAC;ACbF;IACE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,yBAAyB,CACvB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,KACf,IAAI,CAAC;AAEV,6BAA6B,CAC3B,IAAI,EAAE,GAAG,EACT,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,KACf,IAAI,CAAC;AAEV,OAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;ACiClC;IACS,GAAG,UAAa;IAChB,SAAS,SAAoB;gBAKlC,IAAI,EAAE,MAAM,GAAG,MAAM,EACb,QAAQ,CAAC,sBAAU;IAUtB,MAAM;CA+Cd;ACpHD,kBAAyB,CACvB,GAAG,EAAE,SAAO,EACZ,GAAG,EAAE,UAAQ,EACb,IAAI,EAAE,YAAY,KACf,IAAI,CAAC;ACNV,iBACI,GAAG,GACH,IAAI,GACJ,GAAG,GACH,IAAI,GACJ,GAAG,GACH,IAAI,GACJ,MAAM,GACN,UAAU,CAAC;AAEf,gBAAgB,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,YAAY,CAAC;AAEzD,yBAAgC,CAAC;IAC/B,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;IACjD,QAAQ,EAAE,CAAC,CAAC;CACb;AAID;IACE,CAAC,GAAG,EAAE,MAAM,GACR,eAAe,SAAS,CAAC,GACzB,MAAM,CAAC,MAAM,EAAE,eAAe,SAAS,CAAC,CAAC,CAAC;CAC/C;AAED;IACE,CAAC,GAAG,EAAE,MAAM,GACR,eAAe,QAAQ,CAAC,GACxB,MAAM,CAAC,MAAM,EAAE,eAAe,QAAQ,CAAC,CAAC,CAAC;CAC9C;AAED,2BACI,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACxB,sBACI,OAAO,GACP,MAAM,GACN,SAAS,GACT,SAAS,GACT,QAAQ,CAAC;AACb,sBAA6B;IAC3B,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IAChD,QAAQ,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC;;OAEG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,CAAC;AAEF,sBAA6B;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,
|
|
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/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,"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":"../"}
|
package/dist/index.js
CHANGED
|
@@ -497,7 +497,7 @@ function $389a0330ed47be73$export$e94809b3c2751b8b({ db: db, resource: resource,
|
|
|
497
497
|
|
|
498
498
|
|
|
499
499
|
function $877c51bd1d8c8e63$export$18d25c756727a4e9({ db: db, resource: resource, message: message, idField: idField = 'id', processErrorResponse: processErrorResponse, filterQuery: filterQuery = {} }) {
|
|
500
|
-
return async
|
|
500
|
+
return async (req, res, next)=>{
|
|
501
501
|
try {
|
|
502
502
|
const id = req.params[idField || 'id'];
|
|
503
503
|
const filter = filterQuery && (0, $016b89c2f40cad11$export$390602d0ccf68ce6)(req.body, filterQuery, req);
|
|
@@ -524,8 +524,27 @@ function $877c51bd1d8c8e63$export$18d25c756727a4e9({ db: db, resource: resource,
|
|
|
524
524
|
}
|
|
525
525
|
};
|
|
526
526
|
}
|
|
527
|
-
|
|
528
|
-
|
|
527
|
+
function $877c51bd1d8c8e63$export$4208857769c75f40({ db: db, resource: resource, message: message, processErrorResponse: processErrorResponse, filterQuery: filterQuery }) {
|
|
528
|
+
return async (req, res, next)=>{
|
|
529
|
+
try {
|
|
530
|
+
const filter = filterQuery && (0, $016b89c2f40cad11$export$390602d0ccf68ce6)(req.body, filterQuery, req);
|
|
531
|
+
await db.delete(resource, filter);
|
|
532
|
+
res.send({
|
|
533
|
+
message: message
|
|
534
|
+
});
|
|
535
|
+
next({
|
|
536
|
+
message: message
|
|
537
|
+
});
|
|
538
|
+
} catch (error) {
|
|
539
|
+
if (processErrorResponse) error = processErrorResponse(error);
|
|
540
|
+
(0, $2a1659c6c3bea4d7$export$cd2b46e1ebe8182d)(error, res);
|
|
541
|
+
next({
|
|
542
|
+
...error,
|
|
543
|
+
isError: true
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
};
|
|
547
|
+
}
|
|
529
548
|
|
|
530
549
|
|
|
531
550
|
|
|
@@ -621,7 +640,7 @@ class $e551a6691d3acd09$export$2e2bcd8739ae039 {
|
|
|
621
640
|
exitMiddleware: exitMiddleware
|
|
622
641
|
});
|
|
623
642
|
}
|
|
624
|
-
updateById({ resource: resource, params: params, idField: idField, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, methodOverride: methodOverride, table: table, filter: filter }) {
|
|
643
|
+
updateById({ resource: resource, params: params, idField: idField, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, methodOverride: methodOverride, table: table, filter: filter, processErrorResponse: processErrorResponse }) {
|
|
625
644
|
const path = pathOverride || `/${resource}/:id`;
|
|
626
645
|
resource = table || resource;
|
|
627
646
|
const controller = (0, $1d3f139d2d29337d$export$94bae363557b314a)({
|
|
@@ -630,7 +649,8 @@ class $e551a6691d3acd09$export$2e2bcd8739ae039 {
|
|
|
630
649
|
params: params,
|
|
631
650
|
message: message,
|
|
632
651
|
idField: idField,
|
|
633
|
-
filterQuery: filter
|
|
652
|
+
filterQuery: filter,
|
|
653
|
+
processErrorResponse: processErrorResponse
|
|
634
654
|
});
|
|
635
655
|
this.crud({
|
|
636
656
|
method: methodOverride || 'put',
|
|
@@ -640,7 +660,7 @@ class $e551a6691d3acd09$export$2e2bcd8739ae039 {
|
|
|
640
660
|
exitMiddleware: exitMiddleware
|
|
641
661
|
});
|
|
642
662
|
}
|
|
643
|
-
update({ resource: resource, params: params, filter: filter, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, methodOverride: methodOverride, table: table }) {
|
|
663
|
+
update({ resource: resource, params: params, filter: filter, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, methodOverride: methodOverride, table: table, processErrorResponse: processErrorResponse }) {
|
|
644
664
|
const path = pathOverride || `/${resource}`;
|
|
645
665
|
resource = table || resource;
|
|
646
666
|
const controller = (0, $1d3f139d2d29337d$export$805408382b623838)({
|
|
@@ -648,7 +668,8 @@ class $e551a6691d3acd09$export$2e2bcd8739ae039 {
|
|
|
648
668
|
resource: resource,
|
|
649
669
|
params: params,
|
|
650
670
|
message: message,
|
|
651
|
-
filterQuery: filter
|
|
671
|
+
filterQuery: filter,
|
|
672
|
+
processErrorResponse: processErrorResponse
|
|
652
673
|
});
|
|
653
674
|
this.crud({
|
|
654
675
|
method: methodOverride || 'put',
|
|
@@ -658,7 +679,7 @@ class $e551a6691d3acd09$export$2e2bcd8739ae039 {
|
|
|
658
679
|
exitMiddleware: exitMiddleware
|
|
659
680
|
});
|
|
660
681
|
}
|
|
661
|
-
upsertById({ resource: resource, params: params, idField: idField, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, methodOverride: methodOverride, table: table }) {
|
|
682
|
+
upsertById({ resource: resource, params: params, idField: idField, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, methodOverride: methodOverride, table: table, processErrorResponse: processErrorResponse }) {
|
|
662
683
|
const path = pathOverride || `/${resource}/:id/upsert`;
|
|
663
684
|
resource = table || resource;
|
|
664
685
|
const controller = (0, $389a0330ed47be73$export$d5a9f256d3442907)({
|
|
@@ -666,7 +687,8 @@ class $e551a6691d3acd09$export$2e2bcd8739ae039 {
|
|
|
666
687
|
resource: resource,
|
|
667
688
|
params: params,
|
|
668
689
|
message: message,
|
|
669
|
-
idField: idField
|
|
690
|
+
idField: idField,
|
|
691
|
+
processErrorResponse: processErrorResponse
|
|
670
692
|
});
|
|
671
693
|
this.crud({
|
|
672
694
|
method: methodOverride || 'put',
|
|
@@ -676,7 +698,7 @@ class $e551a6691d3acd09$export$2e2bcd8739ae039 {
|
|
|
676
698
|
exitMiddleware: exitMiddleware
|
|
677
699
|
});
|
|
678
700
|
}
|
|
679
|
-
upsert({ resource: resource, params: params, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, methodOverride: methodOverride, conflictTarget: conflictTarget, table: table }) {
|
|
701
|
+
upsert({ resource: resource, params: params, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, methodOverride: methodOverride, conflictTarget: conflictTarget, table: table, processErrorResponse: processErrorResponse }) {
|
|
680
702
|
const path = pathOverride || `/${resource}/:id/upsert`;
|
|
681
703
|
resource = table || resource;
|
|
682
704
|
const controller = (0, $389a0330ed47be73$export$e94809b3c2751b8b)({
|
|
@@ -684,7 +706,8 @@ class $e551a6691d3acd09$export$2e2bcd8739ae039 {
|
|
|
684
706
|
resource: resource,
|
|
685
707
|
params: params,
|
|
686
708
|
message: message,
|
|
687
|
-
conflictTarget: conflictTarget
|
|
709
|
+
conflictTarget: conflictTarget,
|
|
710
|
+
processErrorResponse: processErrorResponse
|
|
688
711
|
});
|
|
689
712
|
this.crud({
|
|
690
713
|
method: methodOverride || 'put',
|
|
@@ -694,7 +717,7 @@ class $e551a6691d3acd09$export$2e2bcd8739ae039 {
|
|
|
694
717
|
exitMiddleware: exitMiddleware
|
|
695
718
|
});
|
|
696
719
|
}
|
|
697
|
-
deleteById({ resource: resource, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, methodOverride: methodOverride, idField: idField, filter: filter, table: table }) {
|
|
720
|
+
deleteById({ resource: resource, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, methodOverride: methodOverride, idField: idField, filter: filter, table: table, processErrorResponse: processErrorResponse }) {
|
|
698
721
|
const path = pathOverride || `/${resource}/:id`;
|
|
699
722
|
resource = table || resource;
|
|
700
723
|
const controller = (0, $877c51bd1d8c8e63$export$18d25c756727a4e9)({
|
|
@@ -702,7 +725,26 @@ class $e551a6691d3acd09$export$2e2bcd8739ae039 {
|
|
|
702
725
|
resource: resource,
|
|
703
726
|
message: message,
|
|
704
727
|
idField: idField,
|
|
705
|
-
filterQuery: filter
|
|
728
|
+
filterQuery: filter,
|
|
729
|
+
processErrorResponse: processErrorResponse
|
|
730
|
+
});
|
|
731
|
+
this.crud({
|
|
732
|
+
method: methodOverride || 'delete',
|
|
733
|
+
path: path,
|
|
734
|
+
controller: controller,
|
|
735
|
+
middleware: middleware,
|
|
736
|
+
exitMiddleware: exitMiddleware
|
|
737
|
+
});
|
|
738
|
+
}
|
|
739
|
+
delete({ resource: resource, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, methodOverride: methodOverride, filter: filter, table: table, processErrorResponse: processErrorResponse }) {
|
|
740
|
+
const path = pathOverride || `/${resource}/:id`;
|
|
741
|
+
resource = table || resource;
|
|
742
|
+
const controller = (0, $877c51bd1d8c8e63$export$4208857769c75f40)({
|
|
743
|
+
db: this.postgres,
|
|
744
|
+
resource: resource,
|
|
745
|
+
message: message,
|
|
746
|
+
filterQuery: filter,
|
|
747
|
+
processErrorResponse: processErrorResponse
|
|
706
748
|
});
|
|
707
749
|
this.crud({
|
|
708
750
|
method: methodOverride || 'delete',
|
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/services/postgres.ts","src/utils/postgres.ts","src/utils/db.ts","src/utils/helpers.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} from '../controllers';\nimport {\n ICreate,\n ICrud,\n IDeleteById,\n IGet,\n IGetById,\n IUpdate,\n IUpdateById,\n IUpsert,\n IUpsertById\n} from '../interfaces/crud';\nimport { ExitMiddleware, Middleware } from '../interfaces/express';\nimport { NextFunction, Request, Response } from 'express';\nimport ExpressApp from './express';\nimport Postgres from './postgres';\nimport { upsertController } from '../controllers/upsert';\nimport { updateController } from '../controllers/update';\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 }: 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 });\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 }: 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 });\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 }: 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 });\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 }: 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 });\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 }: 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 });\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 }: 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 });\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 }: 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 });\n this.crud({\n method: methodOverride || 'delete',\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 } from './update';\nexport { upsertByIdController } from './upsert';\nexport { deleteByIdController } from './delete';\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 (!valueToUse) {\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}: 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(resource, fields, {\n [idField]: {\n value: id,\n operator: '='\n },\n ...filter\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}: 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 );\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 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 await db.update(resource, body, 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\nexport function updateController({\n db,\n resource,\n params,\n message,\n filterQuery,\n processErrorResponse\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 await db.update(resource, body, 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 {\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}: 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 await db.upsert(resource, body, [idField]);\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 upsertController({\n db,\n resource,\n params,\n message,\n conflictTarget,\n processErrorResponse\n}: UpsertControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = generateUpdateData(req.body, params);\n\n await db.upsert(resource, body, conflictTarget);\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 { deleteByIdControllerParams } 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 function (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","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 } 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 ) {\n const { query, replacements } = generateReadQuery(\n table,\n fields,\n filter,\n paginate,\n format\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 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 await config.db.query(query, {\n type: QueryTypes.UPDATE,\n raw: true,\n replacements: [...replacements]\n });\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 await config.db.query(query, {\n type: QueryTypes.INSERT,\n raw: true,\n replacements: [...replacements]\n });\n }\n}\n","import { Knex } from 'knex';\nimport { Filter, FilterParam, UpdateOpParam } 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) => {\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 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.update(updateData).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 .toSQL();\n\n return { query, replacements };\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","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/services/postgres.ts","src/utils/postgres.ts","src/utils/db.ts","src/utils/helpers.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} from '../controllers';\nimport {\n ICreate,\n ICrud,\n IDelete,\n IDeleteById,\n IGet,\n IGetById,\n IUpdate,\n IUpdateById,\n IUpsert,\n IUpsertById\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 }: 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 });\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 }: 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 });\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 }: 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 });\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 }: 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 });\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 }: 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 });\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 }: 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 });\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","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';\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 (!valueToUse) {\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}: 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(resource, fields, {\n [idField]: {\n value: id,\n operator: '='\n },\n ...filter\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}: 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 );\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 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 await db.update(resource, body, 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\nexport function updateController({\n db,\n resource,\n params,\n message,\n filterQuery,\n processErrorResponse\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 await db.update(resource, body, 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 {\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}: 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 await db.upsert(resource, body, [idField]);\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 upsertController({\n db,\n resource,\n params,\n message,\n conflictTarget,\n processErrorResponse\n}: UpsertControllerParams): Controller {\n return async function (req: Request, res: Response, next: NextFunction) {\n try {\n const body = generateUpdateData(req.body, params);\n\n await db.upsert(resource, body, conflictTarget);\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 {\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 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 } 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 ) {\n const { query, replacements } = generateReadQuery(\n table,\n fields,\n filter,\n paginate,\n format\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 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 await config.db.query(query, {\n type: QueryTypes.UPDATE,\n raw: true,\n replacements: [...replacements]\n });\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 await config.db.query(query, {\n type: QueryTypes.INSERT,\n raw: true,\n replacements: [...replacements]\n });\n }\n}\n","import { Knex } from 'knex';\nimport { Filter, FilterParam, UpdateOpParam } 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) => {\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 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.update(updateData).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 .toSQL();\n\n return { query, replacements };\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","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":"../"}
|