@promind/honey 1.34.5

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.js ADDED
@@ -0,0 +1,997 @@
1
+ var $3IFKa$sequelize = require("sequelize");
2
+ var $3IFKa$path = require("path");
3
+ var $3IFKa$dotenv = require("dotenv");
4
+ var $3IFKa$cookieparser = require("cookie-parser");
5
+ var $3IFKa$express = require("express");
6
+ var $3IFKa$morgan = require("morgan");
7
+ var $3IFKa$cors = require("cors");
8
+ var $3IFKa$expressoasgenerator = require("express-oas-generator");
9
+ var $3IFKa$knex = require("knex");
10
+
11
+
12
+ function $parcel$exportWildcard(dest, source) {
13
+ Object.keys(source).forEach(function(key) {
14
+ if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) {
15
+ return;
16
+ }
17
+
18
+ Object.defineProperty(dest, key, {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return source[key];
22
+ }
23
+ });
24
+ });
25
+
26
+ return dest;
27
+ }
28
+
29
+ function $parcel$export(e, n, v, s) {
30
+ Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
31
+ }
32
+
33
+ function $parcel$interopDefault(a) {
34
+ return a && a.__esModule ? a.default : a;
35
+ }
36
+
37
+ $parcel$export(module.exports, "createHoney", () => $c742f52b4af459bc$export$f375e35cdf499ccf);
38
+ $parcel$export(module.exports, "defineModel", () => $c742f52b4af459bc$export$acd55aa037e791bb);
39
+ $parcel$export(module.exports, "QueryTypes", () => $c742f52b4af459bc$export$9e0271c08bde0a49);
40
+ $parcel$export(module.exports, "runDbQuery", () => $6eae9231903e3dbe$export$2e2bcd8739ae039);
41
+ $parcel$export(module.exports, "createModel", () => $6eae9231903e3dbe$export$2f453c7f7b0d002b);
42
+ $parcel$export(module.exports, "HttpError", () => $2a1659c6c3bea4d7$export$2e2bcd8739ae039);
43
+ $parcel$export(module.exports, "handleHttpError", () => $2a1659c6c3bea4d7$export$cd2b46e1ebe8182d);
44
+ $parcel$export(module.exports, "Honey", () => $e551a6691d3acd09$export$2e2bcd8739ae039);
45
+ $parcel$export(module.exports, "validateRequestData", () => $e0429c84bb00f9a2$export$3b8deecb09f1ff23);
46
+
47
+
48
+
49
+
50
+ function $7f54ec05d534b110$export$2e2bcd8739ae039(options) {
51
+ let uri = '';
52
+ if (typeof options === 'string') uri = options;
53
+ else uri = `postgres://${options.user}:${options.password}@${options.host}:${options.port}/${options.database}`;
54
+ const sequelize = new (0, $3IFKa$sequelize.Sequelize)(uri, {
55
+ logging: false
56
+ });
57
+ sequelize.authenticate().then(()=>{
58
+ console.log('DB Connection established successfully');
59
+ }).catch((err)=>{
60
+ console.log('DB Connection failed');
61
+ console.error(err);
62
+ });
63
+ return sequelize;
64
+ }
65
+
66
+
67
+
68
+ var $279104bade16c452$var$$parcel$__dirname = $3IFKa$path.resolve(__dirname, "../src/config");
69
+ (0, ($parcel$interopDefault($3IFKa$dotenv))).config();
70
+ (0, ($parcel$interopDefault($3IFKa$dotenv))).config({
71
+ path: (0, ($parcel$interopDefault($3IFKa$path))).join($279104bade16c452$var$$parcel$__dirname, '.env')
72
+ });
73
+ class $279104bade16c452$export$2e2bcd8739ae039 {
74
+ static{
75
+ this.getEnv = (key)=>{
76
+ return process.env[key];
77
+ };
78
+ }
79
+ constructor(options){
80
+ $279104bade16c452$export$2e2bcd8739ae039.db = (0, $7f54ec05d534b110$export$2e2bcd8739ae039)(options);
81
+ }
82
+ static get isLive() {
83
+ return process.env.NODE_ENV === 'production';
84
+ }
85
+ static defineModel(modelName, attributes, options) {
86
+ return this.db.define(modelName, attributes, options);
87
+ }
88
+ }
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+ class $2a1659c6c3bea4d7$export$2e2bcd8739ae039 extends Error {
98
+ constructor(message, status){
99
+ super(message || 'Something went wrong'), this.status = status;
100
+ }
101
+ }
102
+ const $2a1659c6c3bea4d7$export$cd2b46e1ebe8182d = (err, res)=>{
103
+ return res.status(err.status || 500).send({
104
+ message: err.message || 'Something went wrong'
105
+ });
106
+ };
107
+
108
+
109
+ /**
110
+ * Event listener for HTTP server "error" event.
111
+ */ const $55ceba8bebac8f81$var$onError = (port)=>{
112
+ return (error)=>{
113
+ if (error.syscall !== 'listen') throw error;
114
+ const bind = typeof port === 'string' ? `Pipe ${port}` : `Port ${port}`;
115
+ // handle specific listen errors with friendly messages
116
+ switch(error.code){
117
+ case 'EACCES':
118
+ console.error(`${bind} requires elevated privileges`);
119
+ process.exit(1);
120
+ case 'EADDRINUSE':
121
+ console.error(`${bind} is already in use`);
122
+ process.exit(1);
123
+ default:
124
+ throw error;
125
+ }
126
+ };
127
+ };
128
+ /**
129
+ * Event listener for HTTP server "listening" event.
130
+ */ const $55ceba8bebac8f81$var$onListening = (server)=>{
131
+ return ()=>{
132
+ const addr = server.address();
133
+ const bind = typeof addr === 'string' ? `pipe ${addr}` : `port ${addr.port}`;
134
+ console.log(`%c Honey Server started on ${bind} `, 'background: #222; color: #bada55; font-size: 32px');
135
+ };
136
+ };
137
+ class $55ceba8bebac8f81$var$ExpressApp {
138
+ constructor(port, metadata){
139
+ this.metadata = metadata;
140
+ this.app = (0, ($parcel$interopDefault($3IFKa$express)))();
141
+ this.appRoutes = (0, ($parcel$interopDefault($3IFKa$express))).Router();
142
+ this.fallbackErrMessage = 'Endpoint does not exist';
143
+ this.routePrefix = '/api';
144
+ this.fallbackErrMessage = this.metadata?.fallbackErrorMessage || this.fallbackErrMessage;
145
+ this.routePrefix = this.metadata?.routePrefix || this.routePrefix;
146
+ this.initMiddlewares();
147
+ this.setupErrorFallback();
148
+ this.app.set('port', port);
149
+ }
150
+ listen() {
151
+ (0, ($parcel$interopDefault($3IFKa$expressoasgenerator))).handleRequests();
152
+ const port = Number(this.app.get('port'));
153
+ const server = this.app.listen(port);
154
+ server.on('error', $55ceba8bebac8f81$var$onError(port));
155
+ server.on('listening', $55ceba8bebac8f81$var$onListening(server));
156
+ }
157
+ initMiddlewares() {
158
+ const corsOptions = {
159
+ origin: '*',
160
+ methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
161
+ allowedHeaders: '*',
162
+ exposedHeaders: '*',
163
+ credentials: true,
164
+ optionsSuccessStatus: 204
165
+ };
166
+ (0, ($parcel$interopDefault($3IFKa$expressoasgenerator))).handleResponses(this.app, {});
167
+ this.app.use((0, ($parcel$interopDefault($3IFKa$morgan)))('dev'));
168
+ this.app.use((0, ($parcel$interopDefault($3IFKa$cors)))(corsOptions));
169
+ this.app.use((0, ($parcel$interopDefault($3IFKa$express))).json({
170
+ limit: '50mb',
171
+ verify (req, _res, buf) {
172
+ req.rawBody = buf;
173
+ }
174
+ }));
175
+ this.app.use((0, ($parcel$interopDefault($3IFKa$express))).urlencoded({
176
+ limit: '50mb',
177
+ extended: false
178
+ }));
179
+ this.app.use((0, ($parcel$interopDefault($3IFKa$cookieparser)))());
180
+ this.app.use(this.routePrefix, this.appRoutes);
181
+ }
182
+ setupErrorFallback() {
183
+ this.app.use((_, res)=>{
184
+ const err = new (0, $2a1659c6c3bea4d7$export$2e2bcd8739ae039)(this.fallbackErrMessage, 404);
185
+ return res.status(err.status).json({
186
+ message: err.message
187
+ });
188
+ });
189
+ // error handler
190
+ this.app.use((err, _, res)=>{
191
+ return res.status(err.status || 500).send({
192
+ message: 'Something went wrong'
193
+ });
194
+ });
195
+ }
196
+ }
197
+ var $55ceba8bebac8f81$export$2e2bcd8739ae039 = $55ceba8bebac8f81$var$ExpressApp;
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+ const $016b89c2f40cad11$var$formatters = {
206
+ string: String,
207
+ number: Number,
208
+ boolean: Boolean,
209
+ json: JSON.stringify,
210
+ object: JSON.stringify
211
+ };
212
+ const $016b89c2f40cad11$export$957212fbd899d523 = (body, params)=>{
213
+ const result = {};
214
+ Object.entries(params).forEach(([key, value])=>{
215
+ if (value === '@updatedAt') {
216
+ result[key] = new Date();
217
+ return;
218
+ }
219
+ if (!Object.keys(body).includes(key)) return;
220
+ const formatter = $016b89c2f40cad11$var$formatters[value];
221
+ result[key] = formatter && ![
222
+ null,
223
+ undefined
224
+ ].includes(body[key]) ? formatter(body[key]) : body[key];
225
+ });
226
+ return result;
227
+ };
228
+ const $016b89c2f40cad11$export$3fde508750f4a353 = (body, params)=>{
229
+ const result = Object.entries(params).reduce((acc, [key, value])=>{
230
+ if (!Object.keys(body).includes(key) && value !== '@updatedAt') return {
231
+ ...acc
232
+ };
233
+ let formattedValue;
234
+ if (value === '@updatedAt') formattedValue = new Date();
235
+ else formattedValue = ![
236
+ null,
237
+ undefined
238
+ ].includes(body[key]) ? $016b89c2f40cad11$var$formatters[typeof body[key]](body[key]) : body[key];
239
+ return {
240
+ ...acc,
241
+ [key]: {
242
+ value: formattedValue,
243
+ operator: value === '@updatedAt' ? 'replace' : value
244
+ }
245
+ };
246
+ }, {});
247
+ return result;
248
+ };
249
+ const $016b89c2f40cad11$export$390602d0ccf68ce6 = (queryParams, filter)=>{
250
+ const result = {};
251
+ Object.entries(filter).forEach(([key, param])=>{
252
+ if (key === '$or') {
253
+ const val = $016b89c2f40cad11$export$390602d0ccf68ce6(queryParams, param);
254
+ // skip missing query params
255
+ if (!Object.keys(val).length) return;
256
+ result[key] = val;
257
+ } else {
258
+ // skip missing query params
259
+ if (!Object.keys(queryParams).includes(key) && param.overrideValue === undefined) return;
260
+ const valueFormatter = $016b89c2f40cad11$var$formatters[param.value];
261
+ if (!valueFormatter) throw new (0, $2a1659c6c3bea4d7$export$2e2bcd8739ae039)('Invalid filter value type', 500);
262
+ const valueToUse = param.overrideValue !== undefined ? param.overrideValue : queryParams[key];
263
+ result[key] = {
264
+ operator: param.operator,
265
+ value: valueFormatter(valueToUse)
266
+ };
267
+ }
268
+ });
269
+ return result;
270
+ };
271
+
272
+
273
+ function $e6033bad46ade8f8$export$2e2bcd8739ae039({ db: db, resource: resource, params: params, message: message, processResponseData: processResponseData, processErrorResponse: processErrorResponse }) {
274
+ return async (req, res, next)=>{
275
+ try {
276
+ const body = (0, $016b89c2f40cad11$export$957212fbd899d523)(req.body, params);
277
+ const data = await db.create(resource, body);
278
+ const id = data[0].id;
279
+ res.send({
280
+ message: message,
281
+ data: req.body.dataOverride || (processResponseData ? await processResponseData({
282
+ id: id
283
+ }, req) : {
284
+ id: id
285
+ })
286
+ });
287
+ next({
288
+ message: message,
289
+ data: {
290
+ id: id
291
+ }
292
+ });
293
+ } catch (error) {
294
+ if (processErrorResponse) error = processErrorResponse(error);
295
+ (0, $2a1659c6c3bea4d7$export$cd2b46e1ebe8182d)(error, res);
296
+ next({
297
+ ...error,
298
+ isError: true
299
+ });
300
+ }
301
+ };
302
+ }
303
+
304
+
305
+
306
+
307
+ function $b1328f4a111bb650$export$7b6dde2038c44e91({ db: db, resource: resource, fields: fields, idField: idField = 'id', processResponseData: processResponseData, processErrorResponse: processErrorResponse, filterQuery: filterQuery = {} }) {
308
+ return async (req, res, next)=>{
309
+ try {
310
+ const id = req.params.id;
311
+ const filter = filterQuery && (0, $016b89c2f40cad11$export$390602d0ccf68ce6)(req.query, filterQuery);
312
+ const data = await db.read(resource, fields, {
313
+ [idField]: {
314
+ value: id,
315
+ operator: '='
316
+ },
317
+ ...filter
318
+ });
319
+ if (!data?.length) throw new (0, $2a1659c6c3bea4d7$export$2e2bcd8739ae039)('Record does not exist', 404);
320
+ res.send({
321
+ data: processResponseData ? await processResponseData(data[0], req) : data[0]
322
+ });
323
+ next({
324
+ data: data
325
+ });
326
+ } catch (error) {
327
+ if (processErrorResponse) error = processErrorResponse(error);
328
+ (0, $2a1659c6c3bea4d7$export$cd2b46e1ebe8182d)(error, res);
329
+ next({
330
+ ...error,
331
+ isError: true
332
+ });
333
+ }
334
+ };
335
+ }
336
+ function $b1328f4a111bb650$export$7b48d281d65870ad({ db: db, resource: resource, fields: fields, filterQuery: filterQuery, format: format, processResponseData: processResponseData, processErrorResponse: processErrorResponse }) {
337
+ return async (req, res, next)=>{
338
+ try {
339
+ const page = Number(req.query.page);
340
+ const limit = Number(req.query.limit);
341
+ const paginate = limit || page ? {
342
+ page: page || 1,
343
+ limit: limit || 10
344
+ } : undefined;
345
+ const filter = filterQuery && (0, $016b89c2f40cad11$export$390602d0ccf68ce6)(req.query, filterQuery);
346
+ let data = await db.read(resource, fields, filter, paginate, format);
347
+ let total = 0;
348
+ if (paginate) {
349
+ total = Number(data[0]?.['honey_total_count'] || 0);
350
+ data = data.map((item)=>{
351
+ delete item['honey_total_count'];
352
+ return item;
353
+ });
354
+ }
355
+ if (processResponseData) data = await processResponseData(data, req);
356
+ else if (!data?.length) throw new (0, $2a1659c6c3bea4d7$export$2e2bcd8739ae039)('No records found', 404);
357
+ const response = {
358
+ data: data,
359
+ meta: {
360
+ ...!!paginate && {
361
+ pagination: {
362
+ total: total,
363
+ pageSize: limit,
364
+ page: page,
365
+ pageCount: Math.ceil(total / limit)
366
+ }
367
+ }
368
+ }
369
+ };
370
+ res.send(response);
371
+ next(response);
372
+ } catch (error) {
373
+ if (processErrorResponse) error = processErrorResponse(error);
374
+ (0, $2a1659c6c3bea4d7$export$cd2b46e1ebe8182d)(error, res);
375
+ next({
376
+ ...error,
377
+ isError: true
378
+ });
379
+ }
380
+ };
381
+ }
382
+
383
+
384
+
385
+
386
+ function $1d3f139d2d29337d$export$94bae363557b314a({ db: db, resource: resource, params: params, message: message, idField: idField = 'id', processErrorResponse: processErrorResponse, filterQuery: filterQuery = {} }) {
387
+ return async (req, res, next)=>{
388
+ try {
389
+ const body = (0, $016b89c2f40cad11$export$3fde508750f4a353)(req.body, params);
390
+ const additionalFilter = filterQuery && (0, $016b89c2f40cad11$export$390602d0ccf68ce6)(req.body, filterQuery);
391
+ const filter = {
392
+ [idField]: {
393
+ operator: '=',
394
+ value: req.params.id
395
+ },
396
+ ...additionalFilter
397
+ };
398
+ await db.update(resource, body, filter);
399
+ res.send({
400
+ message: message
401
+ });
402
+ next({
403
+ message: message
404
+ });
405
+ } catch (error) {
406
+ if (processErrorResponse) error = processErrorResponse(error);
407
+ (0, $2a1659c6c3bea4d7$export$cd2b46e1ebe8182d)(error, res);
408
+ next({
409
+ ...error,
410
+ isError: true
411
+ });
412
+ }
413
+ };
414
+ }
415
+ function $1d3f139d2d29337d$export$805408382b623838({ db: db, resource: resource, params: params, message: message, filterQuery: filterQuery, processErrorResponse: processErrorResponse }) {
416
+ return async (req, res, next)=>{
417
+ try {
418
+ const body = (0, $016b89c2f40cad11$export$3fde508750f4a353)(req.body, params);
419
+ const filter = filterQuery && (0, $016b89c2f40cad11$export$390602d0ccf68ce6)(req.body, filterQuery);
420
+ await db.update(resource, body, filter);
421
+ res.send({
422
+ message: message
423
+ });
424
+ next({
425
+ message: message
426
+ });
427
+ } catch (error) {
428
+ if (processErrorResponse) error = processErrorResponse(error);
429
+ (0, $2a1659c6c3bea4d7$export$cd2b46e1ebe8182d)(error, res);
430
+ next({
431
+ ...error,
432
+ isError: true
433
+ });
434
+ }
435
+ };
436
+ }
437
+
438
+
439
+
440
+
441
+ function $389a0330ed47be73$export$d5a9f256d3442907({ db: db, resource: resource, params: params, message: message, idField: idField = 'id', processErrorResponse: processErrorResponse }) {
442
+ return async (req, res, next)=>{
443
+ try {
444
+ req.body[idField] = req.params.id;
445
+ params = {
446
+ ...params,
447
+ [idField]: 'replace'
448
+ };
449
+ const body = (0, $016b89c2f40cad11$export$3fde508750f4a353)(req.body, params);
450
+ await db.upsert(resource, body, [
451
+ idField
452
+ ]);
453
+ res.send({
454
+ message: message
455
+ });
456
+ next({
457
+ message: message
458
+ });
459
+ } catch (error) {
460
+ if (processErrorResponse) error = processErrorResponse(error);
461
+ (0, $2a1659c6c3bea4d7$export$cd2b46e1ebe8182d)(error, res);
462
+ next({
463
+ ...error,
464
+ isError: true
465
+ });
466
+ }
467
+ };
468
+ }
469
+ function $389a0330ed47be73$export$e94809b3c2751b8b({ db: db, resource: resource, params: params, message: message, conflictTarget: conflictTarget, processErrorResponse: processErrorResponse }) {
470
+ return async (req, res, next)=>{
471
+ try {
472
+ const body = (0, $016b89c2f40cad11$export$3fde508750f4a353)(req.body, params);
473
+ await db.upsert(resource, body, conflictTarget);
474
+ res.send({
475
+ message: message
476
+ });
477
+ next({
478
+ message: message
479
+ });
480
+ } catch (error) {
481
+ if (processErrorResponse) error = processErrorResponse(error);
482
+ (0, $2a1659c6c3bea4d7$export$cd2b46e1ebe8182d)(error, res);
483
+ next({
484
+ ...error,
485
+ isError: true
486
+ });
487
+ }
488
+ };
489
+ }
490
+
491
+
492
+
493
+
494
+ function $877c51bd1d8c8e63$export$18d25c756727a4e9({ db: db, resource: resource, message: message, idField: idField = 'id', processErrorResponse: processErrorResponse, filterQuery: filterQuery = {} }) {
495
+ return async (req, res, next)=>{
496
+ try {
497
+ const id = req.params[idField || 'id'];
498
+ const filter = filterQuery && (0, $016b89c2f40cad11$export$390602d0ccf68ce6)(req.body, filterQuery);
499
+ await db.delete(resource, {
500
+ [idField]: {
501
+ value: id,
502
+ operator: '='
503
+ },
504
+ ...filter
505
+ });
506
+ res.send({
507
+ message: message
508
+ });
509
+ next({
510
+ message: message
511
+ });
512
+ } catch (error) {
513
+ if (processErrorResponse) error = processErrorResponse(error);
514
+ (0, $2a1659c6c3bea4d7$export$cd2b46e1ebe8182d)(error, res);
515
+ next({
516
+ ...error,
517
+ isError: true
518
+ });
519
+ }
520
+ };
521
+ }
522
+
523
+
524
+
525
+
526
+
527
+
528
+ // eslint-disable-next-line
529
+ const $e551a6691d3acd09$var$defaultExitMiddleware = (data, req, res, next)=>{
530
+ if (process.env.NODE_ENV !== 'production') console.log('Response:', data);
531
+ };
532
+ class $e551a6691d3acd09$export$2e2bcd8739ae039 {
533
+ constructor(express, postgres){
534
+ this.express = express;
535
+ this.postgres = postgres;
536
+ }
537
+ get routes() {
538
+ return this.express.appRoutes;
539
+ }
540
+ get db() {
541
+ return (0, $279104bade16c452$export$2e2bcd8739ae039).db;
542
+ }
543
+ crud({ method: method, path: path, controller: controller, middleware: middleware = [], exitMiddleware: exitMiddleware = [
544
+ $e551a6691d3acd09$var$defaultExitMiddleware
545
+ ] }) {
546
+ const dbCheck = async (req, res, next)=>{
547
+ if (!(0, $279104bade16c452$export$2e2bcd8739ae039).db) return res.status(503).send({
548
+ message: 'DB Initialization in progress'
549
+ });
550
+ else next();
551
+ };
552
+ this.express.appRoutes[method](path, dbCheck, ...middleware, controller, ...exitMiddleware);
553
+ }
554
+ addMiddleware(middleware) {
555
+ this.express.appRoutes.use(...middleware);
556
+ }
557
+ startServer() {
558
+ this.express.listen();
559
+ }
560
+ create({ resource: resource, params: params, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, processResponseData: processResponseData, processErrorResponse: processErrorResponse, table: table }) {
561
+ const path = pathOverride || `/${resource}`;
562
+ resource = table || resource;
563
+ const controller = (0, $e6033bad46ade8f8$export$2e2bcd8739ae039)({
564
+ db: this.postgres,
565
+ resource: resource,
566
+ params: params,
567
+ message: message,
568
+ processResponseData: processResponseData,
569
+ processErrorResponse: processErrorResponse
570
+ });
571
+ this.crud({
572
+ method: 'post',
573
+ path: path,
574
+ controller: controller,
575
+ middleware: middleware,
576
+ exitMiddleware: exitMiddleware
577
+ });
578
+ }
579
+ get({ resource: resource, fields: fields, filter: filter, format: format, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, processResponseData: processResponseData, processErrorResponse: processErrorResponse, table: table }) {
580
+ const path = pathOverride || `/${resource}`;
581
+ resource = table || resource;
582
+ const controller = (0, $b1328f4a111bb650$export$7b48d281d65870ad)({
583
+ db: this.postgres,
584
+ resource: resource,
585
+ fields: fields,
586
+ filterQuery: filter,
587
+ format: format,
588
+ processResponseData: processResponseData,
589
+ processErrorResponse: processErrorResponse
590
+ });
591
+ this.crud({
592
+ method: 'get',
593
+ path: path,
594
+ controller: controller,
595
+ middleware: middleware,
596
+ exitMiddleware: exitMiddleware
597
+ });
598
+ }
599
+ getById({ resource: resource, fields: fields, idField: idField, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, processResponseData: processResponseData, processErrorResponse: processErrorResponse, table: table, filter: filter }) {
600
+ const path = pathOverride || `/${resource}/:id`;
601
+ resource = table || resource;
602
+ const controller = (0, $b1328f4a111bb650$export$7b6dde2038c44e91)({
603
+ db: this.postgres,
604
+ resource: resource,
605
+ fields: fields,
606
+ idField: idField || 'id',
607
+ processResponseData: processResponseData,
608
+ processErrorResponse: processErrorResponse,
609
+ filterQuery: filter
610
+ });
611
+ this.crud({
612
+ method: 'get',
613
+ path: path,
614
+ controller: controller,
615
+ middleware: middleware,
616
+ exitMiddleware: exitMiddleware
617
+ });
618
+ }
619
+ updateById({ resource: resource, params: params, idField: idField, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, table: table, filter: filter }) {
620
+ const path = pathOverride || `/${resource}/:id`;
621
+ resource = table || resource;
622
+ const controller = (0, $1d3f139d2d29337d$export$94bae363557b314a)({
623
+ db: this.postgres,
624
+ resource: resource,
625
+ params: params,
626
+ message: message,
627
+ idField: idField,
628
+ filterQuery: filter
629
+ });
630
+ this.crud({
631
+ method: 'put',
632
+ path: path,
633
+ controller: controller,
634
+ middleware: middleware,
635
+ exitMiddleware: exitMiddleware
636
+ });
637
+ }
638
+ update({ resource: resource, params: params, filter: filter, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, table: table }) {
639
+ const path = pathOverride || `/${resource}`;
640
+ resource = table || resource;
641
+ const controller = (0, $1d3f139d2d29337d$export$805408382b623838)({
642
+ db: this.postgres,
643
+ resource: resource,
644
+ params: params,
645
+ message: message,
646
+ filterQuery: filter
647
+ });
648
+ this.crud({
649
+ method: 'put',
650
+ path: path,
651
+ controller: controller,
652
+ middleware: middleware,
653
+ exitMiddleware: exitMiddleware
654
+ });
655
+ }
656
+ upsertById({ resource: resource, params: params, idField: idField, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, table: table }) {
657
+ const path = pathOverride || `/${resource}/:id/upsert`;
658
+ resource = table || resource;
659
+ const controller = (0, $389a0330ed47be73$export$d5a9f256d3442907)({
660
+ db: this.postgres,
661
+ resource: resource,
662
+ params: params,
663
+ message: message,
664
+ idField: idField
665
+ });
666
+ this.crud({
667
+ method: 'put',
668
+ path: path,
669
+ controller: controller,
670
+ middleware: middleware,
671
+ exitMiddleware: exitMiddleware
672
+ });
673
+ }
674
+ upsert({ resource: resource, params: params, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, conflictTarget: conflictTarget, table: table }) {
675
+ const path = pathOverride || `/${resource}/:id/upsert`;
676
+ resource = table || resource;
677
+ const controller = (0, $389a0330ed47be73$export$e94809b3c2751b8b)({
678
+ db: this.postgres,
679
+ resource: resource,
680
+ params: params,
681
+ message: message,
682
+ conflictTarget: conflictTarget
683
+ });
684
+ this.crud({
685
+ method: 'put',
686
+ path: path,
687
+ controller: controller,
688
+ middleware: middleware,
689
+ exitMiddleware: exitMiddleware
690
+ });
691
+ }
692
+ deleteById({ resource: resource, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, idField: idField, filter: filter, table: table }) {
693
+ const path = pathOverride || `/${resource}/:id`;
694
+ resource = table || resource;
695
+ const controller = (0, $877c51bd1d8c8e63$export$18d25c756727a4e9)({
696
+ db: this.postgres,
697
+ resource: resource,
698
+ message: message,
699
+ idField: idField,
700
+ filterQuery: filter
701
+ });
702
+ this.crud({
703
+ method: 'delete',
704
+ path: path,
705
+ controller: controller,
706
+ middleware: middleware,
707
+ exitMiddleware: exitMiddleware
708
+ });
709
+ }
710
+ }
711
+
712
+
713
+
714
+
715
+
716
+ class $eb35754384d9f185$export$d8ee7b97a871dca3 {
717
+ static{
718
+ this.instances = new Map();
719
+ }
720
+ static getInstance(identifier, initFn) {
721
+ if (!this.instances.has(identifier) && initFn) this.instances.set(identifier, initFn());
722
+ return this.instances.get(identifier);
723
+ }
724
+ }
725
+ function $eb35754384d9f185$export$2e2bcd8739ae039(identifier, initFn) {
726
+ return $eb35754384d9f185$export$d8ee7b97a871dca3.getInstance(identifier, initFn);
727
+ }
728
+
729
+
730
+ function $6eae9231903e3dbe$export$2e2bcd8739ae039(query, params) {
731
+ const { replacements: replacements, type: type } = params || {};
732
+ return (0, $279104bade16c452$export$2e2bcd8739ae039).db.query(query, {
733
+ raw: true,
734
+ replacements: replacements,
735
+ type: type
736
+ });
737
+ }
738
+ class $6eae9231903e3dbe$var$ModelCreator {
739
+ static{
740
+ this.model = {};
741
+ }
742
+ static createModel(modelName, attributes, options) {
743
+ if (!this.model[modelName]) this.model[modelName] = (0, $279104bade16c452$export$2e2bcd8739ae039).db.define(modelName, attributes, options);
744
+ return this.model[modelName];
745
+ }
746
+ }
747
+ function $6eae9231903e3dbe$export$2f453c7f7b0d002b(modelName, attributes, options) {
748
+ return $6eae9231903e3dbe$var$ModelCreator.createModel.bind($6eae9231903e3dbe$var$ModelCreator)(modelName, attributes, options);
749
+ }
750
+ const $6eae9231903e3dbe$export$a858f29c02f648c6 = ()=>(0, $eb35754384d9f185$export$2e2bcd8739ae039)('knex', ()=>{
751
+ return (0, ($parcel$interopDefault($3IFKa$knex)))({
752
+ client: 'pg'
753
+ });
754
+ });
755
+
756
+
757
+ const $6fe5fb6fcb62dbab$export$1b001418845b471c = (query, filter = {})=>{
758
+ Object.entries(filter).forEach(([field, data])=>{
759
+ if (field === '$or') query.where((builder)=>{
760
+ Object.entries(data).forEach(([orField, orData], index)=>{
761
+ const method = index === 0 ? 'where' : 'orWhere';
762
+ const orParam = orData;
763
+ if ([
764
+ 'like',
765
+ 'not like'
766
+ ].includes(orParam.operator)) builder[method](orField, 'ilike', `%${orParam.value}%`);
767
+ else builder[method](orField, orParam.operator, orParam.value);
768
+ });
769
+ });
770
+ else {
771
+ const param = data;
772
+ if ([
773
+ 'like',
774
+ 'not like'
775
+ ].includes(param.operator)) query.where(field, param.operator === 'like' ? 'ilike' : 'not ilike', `%${param.value}%`);
776
+ else query.where(field, param.operator, param.value);
777
+ }
778
+ });
779
+ return query;
780
+ };
781
+ const $6fe5fb6fcb62dbab$export$53b231d60a00019b = (table, data)=>{
782
+ const knex = (0, $6eae9231903e3dbe$export$a858f29c02f648c6)();
783
+ const { sql: query, bindings: replacements } = knex(table).insert(data).returning('id').toSQL();
784
+ return {
785
+ query: query,
786
+ replacements: replacements
787
+ };
788
+ };
789
+ const $6fe5fb6fcb62dbab$export$60d67f341ad4c4 = (table, fields, filter, paginate, format)=>{
790
+ const knex = (0, $6eae9231903e3dbe$export$a858f29c02f648c6)();
791
+ let q = knex(table).select(fields);
792
+ // Add total count if pagination is needed
793
+ if (paginate) // Using knex.raw to create the count column with the same name as in original code
794
+ q = knex(table).select([
795
+ ...fields.map((field)=>knex.raw(`?? as ??`, [
796
+ field,
797
+ field
798
+ ])),
799
+ knex.raw('count(??) OVER() AS honey_total_count', [
800
+ fields[0]
801
+ ])
802
+ ]);
803
+ // Apply filters
804
+ if (filter) q = $6fe5fb6fcb62dbab$export$1b001418845b471c(q, filter);
805
+ // Apply sorting
806
+ if (format?.sort && format.sortField) q.orderBy(format.sortField, format.sort);
807
+ // Apply pagination
808
+ if (paginate) q.limit(paginate.limit).offset(paginate.limit * (paginate.page - 1));
809
+ const { sql: query, bindings: replacements } = q.toSQL();
810
+ return {
811
+ query: query,
812
+ replacements: replacements
813
+ };
814
+ };
815
+ const $6fe5fb6fcb62dbab$export$9234fcbc1f0d2048 = (table, data, filter)=>{
816
+ const knex = (0, $6eae9231903e3dbe$export$a858f29c02f648c6)();
817
+ let q = knex(table);
818
+ // Build the update object
819
+ const updateData = {};
820
+ Object.entries(data).forEach(([field, fieldData])=>{
821
+ const param = fieldData;
822
+ if (param.operator === 'inc') updateData[field] = knex.raw('?? + ?', [
823
+ field,
824
+ param.value
825
+ ]);
826
+ else if (param.operator === 'dec') updateData[field] = knex.raw('?? - ?', [
827
+ field,
828
+ param.value
829
+ ]);
830
+ else updateData[field] = param.value;
831
+ });
832
+ // Apply filter conditions
833
+ if (filter) q = $6fe5fb6fcb62dbab$export$1b001418845b471c(q, filter);
834
+ const { sql: query, bindings: replacements } = q.update(updateData).toSQL();
835
+ console.log(query, replacements);
836
+ return {
837
+ query: query,
838
+ replacements: replacements
839
+ };
840
+ };
841
+ const $6fe5fb6fcb62dbab$export$3303c43960743687 = (table, filter)=>{
842
+ const knex = (0, $6eae9231903e3dbe$export$a858f29c02f648c6)();
843
+ let q = knex(table);
844
+ if (filter) q = $6fe5fb6fcb62dbab$export$1b001418845b471c(q, filter);
845
+ const { sql: query, bindings: replacements } = q.delete().toSQL();
846
+ return {
847
+ query: query,
848
+ replacements: replacements
849
+ };
850
+ };
851
+ const $6fe5fb6fcb62dbab$export$65b914f34962db1e = (table, data, conflictTarget)=>{
852
+ const knex = (0, $6eae9231903e3dbe$export$a858f29c02f648c6)();
853
+ // Prepare insert data
854
+ const insertData = {};
855
+ Object.entries(data).forEach(([field, fieldData])=>{
856
+ insertData[field] = fieldData.value;
857
+ });
858
+ // Prepare update data for conflict resolution
859
+ const updateData = {};
860
+ Object.entries(data).forEach(([field, fieldData])=>{
861
+ const param = fieldData;
862
+ if (param.operator === 'inc') updateData[field] = knex.raw('?? + ?', [
863
+ `${table}.${field}`,
864
+ param.value
865
+ ]);
866
+ else if (param.operator === 'dec') updateData[field] = knex.raw('?? - ?', [
867
+ `${table}.${field}`,
868
+ param.value
869
+ ]);
870
+ else updateData[field] = param.value;
871
+ });
872
+ const { sql: query, bindings: replacements } = knex(table).insert(insertData).onConflict(conflictTarget).merge(updateData).toSQL();
873
+ return {
874
+ query: query,
875
+ replacements: replacements
876
+ };
877
+ };
878
+
879
+
880
+
881
+ class $43b99269306b3d62$export$2e2bcd8739ae039 {
882
+ async read(table, fields, filter, paginate, format) {
883
+ const { query: query, replacements: replacements } = (0, $6fe5fb6fcb62dbab$export$60d67f341ad4c4)(table, fields, filter, paginate, format);
884
+ const result = await (0, $279104bade16c452$export$2e2bcd8739ae039).db.query(query, {
885
+ type: (0, $3IFKa$sequelize.QueryTypes).SELECT,
886
+ raw: true,
887
+ replacements: [
888
+ ...replacements
889
+ ]
890
+ });
891
+ return result;
892
+ }
893
+ async create(table, data) {
894
+ const { query: query, replacements: replacements } = (0, $6fe5fb6fcb62dbab$export$53b231d60a00019b)(table, data);
895
+ const res = await (0, $279104bade16c452$export$2e2bcd8739ae039).db.query(query, {
896
+ type: (0, $3IFKa$sequelize.QueryTypes).INSERT,
897
+ raw: true,
898
+ replacements: [
899
+ ...replacements
900
+ ]
901
+ });
902
+ // inserted ids
903
+ return res[0];
904
+ }
905
+ async update(table, data, filter) {
906
+ const { query: query, replacements: replacements } = (0, $6fe5fb6fcb62dbab$export$9234fcbc1f0d2048)(table, data, filter);
907
+ await (0, $279104bade16c452$export$2e2bcd8739ae039).db.query(query, {
908
+ type: (0, $3IFKa$sequelize.QueryTypes).UPDATE,
909
+ raw: true,
910
+ replacements: [
911
+ ...replacements
912
+ ]
913
+ });
914
+ }
915
+ async delete(table, filter) {
916
+ const { query: query, replacements: replacements } = (0, $6fe5fb6fcb62dbab$export$3303c43960743687)(table, filter);
917
+ await (0, $279104bade16c452$export$2e2bcd8739ae039).db.query(query, {
918
+ type: (0, $3IFKa$sequelize.QueryTypes).DELETE,
919
+ raw: true,
920
+ replacements: [
921
+ ...replacements
922
+ ]
923
+ });
924
+ }
925
+ async upsert(table, data, conflictTarget) {
926
+ const { query: query, replacements: replacements } = (0, $6fe5fb6fcb62dbab$export$65b914f34962db1e)(table, data, conflictTarget);
927
+ await (0, $279104bade16c452$export$2e2bcd8739ae039).db.query(query, {
928
+ type: (0, $3IFKa$sequelize.QueryTypes).INSERT,
929
+ raw: true,
930
+ replacements: [
931
+ ...replacements
932
+ ]
933
+ });
934
+ }
935
+ }
936
+
937
+
938
+ function $e3f949bd939b0c31$export$21d1ad8451a259af(val) {
939
+ const port = parseInt(val, 10);
940
+ if (isNaN(port)) // named pipe
941
+ return val;
942
+ if (port >= 0) // port number
943
+ return port;
944
+ throw new Error('Invalid port number');
945
+ }
946
+
947
+
948
+
949
+
950
+
951
+ const $e0429c84bb00f9a2$export$3b8deecb09f1ff23 = (schema, location = 'body', options = {
952
+ allowUnknown: true
953
+ })=>async (req, res, next)=>{
954
+ try {
955
+ const validationResult = schema.validate(req[location], options);
956
+ const validationError = validationResult.error?.message;
957
+ if (validationError) throw new (0, $2a1659c6c3bea4d7$export$2e2bcd8739ae039)(validationError, 422);
958
+ return next();
959
+ } catch (error) {
960
+ (0, $2a1659c6c3bea4d7$export$cd2b46e1ebe8182d)(error, res);
961
+ }
962
+ };
963
+ var $e0429c84bb00f9a2$export$2e2bcd8739ae039 = $e0429c84bb00f9a2$export$3b8deecb09f1ff23;
964
+
965
+
966
+ process.on('SIGINT', ()=>{
967
+ // process reload ongoing
968
+ // close connections, clear cache, etc
969
+ // by default, you have 1600ms
970
+ process.exit(0);
971
+ });
972
+ function $c742f52b4af459bc$export$f375e35cdf499ccf(port, dbOptions, metadata) {
973
+ new (0, $279104bade16c452$export$2e2bcd8739ae039)(dbOptions);
974
+ const portVal = (0, $e3f949bd939b0c31$export$21d1ad8451a259af)(port || process.env.PORT || '3000');
975
+ const express = new (0, $55ceba8bebac8f81$export$2e2bcd8739ae039)(portVal, metadata);
976
+ const postgres = new (0, $43b99269306b3d62$export$2e2bcd8739ae039)();
977
+ const honey = new (0, $e551a6691d3acd09$export$2e2bcd8739ae039)(express, postgres);
978
+ return honey;
979
+ }
980
+ const $c742f52b4af459bc$export$acd55aa037e791bb = (0, $279104bade16c452$export$2e2bcd8739ae039).defineModel.bind((0, $279104bade16c452$export$2e2bcd8739ae039));
981
+ function $c742f52b4af459bc$var$getQueryTypes() {
982
+ const { SELECT: SELECT, INSERT: INSERT, UPDATE: UPDATE, DELETE: DELETE, RAW: RAW, UPSERT: UPSERT } = (0, $3IFKa$sequelize.QueryTypes);
983
+ const exposedTypes = {
984
+ SELECT: SELECT,
985
+ INSERT: INSERT,
986
+ UPDATE: UPDATE,
987
+ DELETE: DELETE,
988
+ RAW: RAW,
989
+ UPSERT: UPSERT
990
+ };
991
+ return exposedTypes;
992
+ }
993
+ const $c742f52b4af459bc$export$9e0271c08bde0a49 = $c742f52b4af459bc$var$getQueryTypes();
994
+ $parcel$exportWildcard(module.exports, $3IFKa$sequelize);
995
+
996
+
997
+ //# sourceMappingURL=index.js.map