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