@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/module.js ADDED
@@ -0,0 +1,962 @@
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$export$390602d0ccf68ce6 = (queryParams, filter)=>{
215
+ const result = {};
216
+ Object.entries(filter).forEach(([key, param])=>{
217
+ if (key === '$or') {
218
+ const val = $5f19ecb00e146b8f$export$390602d0ccf68ce6(queryParams, param);
219
+ // skip missing query params
220
+ if (!Object.keys(val).length) return;
221
+ result[key] = val;
222
+ } else {
223
+ // skip missing query params
224
+ if (!Object.keys(queryParams).includes(key) && param.overrideValue === undefined) return;
225
+ const valueFormatter = $5f19ecb00e146b8f$var$formatters[param.value];
226
+ if (!valueFormatter) throw new (0, $eb799189062d1297$export$2e2bcd8739ae039)('Invalid filter value type', 500);
227
+ const valueToUse = param.overrideValue !== undefined ? param.overrideValue : queryParams[key];
228
+ result[key] = {
229
+ operator: param.operator,
230
+ value: valueFormatter(valueToUse)
231
+ };
232
+ }
233
+ });
234
+ return result;
235
+ };
236
+
237
+
238
+ function $e54b5bd1ebc8718c$export$2e2bcd8739ae039({ db: db, resource: resource, params: params, message: message, processResponseData: processResponseData, processErrorResponse: processErrorResponse }) {
239
+ return async (req, res, next)=>{
240
+ try {
241
+ const body = (0, $5f19ecb00e146b8f$export$957212fbd899d523)(req.body, params);
242
+ const data = await db.create(resource, body);
243
+ const id = data[0].id;
244
+ res.send({
245
+ message: message,
246
+ data: req.body.dataOverride || (processResponseData ? await processResponseData({
247
+ id: id
248
+ }, req) : {
249
+ id: id
250
+ })
251
+ });
252
+ next({
253
+ message: message,
254
+ data: {
255
+ id: id
256
+ }
257
+ });
258
+ } catch (error) {
259
+ if (processErrorResponse) error = processErrorResponse(error);
260
+ (0, $eb799189062d1297$export$cd2b46e1ebe8182d)(error, res);
261
+ next({
262
+ ...error,
263
+ isError: true
264
+ });
265
+ }
266
+ };
267
+ }
268
+
269
+
270
+
271
+
272
+ function $68f7d8a50ef9b68c$export$7b6dde2038c44e91({ db: db, resource: resource, fields: fields, idField: idField = 'id', processResponseData: processResponseData, processErrorResponse: processErrorResponse, filterQuery: filterQuery = {} }) {
273
+ return async (req, res, next)=>{
274
+ try {
275
+ const id = req.params.id;
276
+ const filter = filterQuery && (0, $5f19ecb00e146b8f$export$390602d0ccf68ce6)(req.query, filterQuery);
277
+ const data = await db.read(resource, fields, {
278
+ [idField]: {
279
+ value: id,
280
+ operator: '='
281
+ },
282
+ ...filter
283
+ });
284
+ if (!data?.length) throw new (0, $eb799189062d1297$export$2e2bcd8739ae039)('Record does not exist', 404);
285
+ res.send({
286
+ data: processResponseData ? await processResponseData(data[0], req) : data[0]
287
+ });
288
+ next({
289
+ data: data
290
+ });
291
+ } catch (error) {
292
+ if (processErrorResponse) error = processErrorResponse(error);
293
+ (0, $eb799189062d1297$export$cd2b46e1ebe8182d)(error, res);
294
+ next({
295
+ ...error,
296
+ isError: true
297
+ });
298
+ }
299
+ };
300
+ }
301
+ function $68f7d8a50ef9b68c$export$7b48d281d65870ad({ db: db, resource: resource, fields: fields, filterQuery: filterQuery, format: format, processResponseData: processResponseData, processErrorResponse: processErrorResponse }) {
302
+ return async (req, res, next)=>{
303
+ try {
304
+ const page = Number(req.query.page);
305
+ const limit = Number(req.query.limit);
306
+ const paginate = limit || page ? {
307
+ page: page || 1,
308
+ limit: limit || 10
309
+ } : undefined;
310
+ const filter = filterQuery && (0, $5f19ecb00e146b8f$export$390602d0ccf68ce6)(req.query, filterQuery);
311
+ let data = await db.read(resource, fields, filter, paginate, format);
312
+ let total = 0;
313
+ if (paginate) {
314
+ total = Number(data[0]?.['honey_total_count'] || 0);
315
+ data = data.map((item)=>{
316
+ delete item['honey_total_count'];
317
+ return item;
318
+ });
319
+ }
320
+ if (processResponseData) data = await processResponseData(data, req);
321
+ else if (!data?.length) throw new (0, $eb799189062d1297$export$2e2bcd8739ae039)('No records found', 404);
322
+ const response = {
323
+ data: data,
324
+ meta: {
325
+ ...!!paginate && {
326
+ pagination: {
327
+ total: total,
328
+ pageSize: limit,
329
+ page: page,
330
+ pageCount: Math.ceil(total / limit)
331
+ }
332
+ }
333
+ }
334
+ };
335
+ res.send(response);
336
+ next(response);
337
+ } catch (error) {
338
+ if (processErrorResponse) error = processErrorResponse(error);
339
+ (0, $eb799189062d1297$export$cd2b46e1ebe8182d)(error, res);
340
+ next({
341
+ ...error,
342
+ isError: true
343
+ });
344
+ }
345
+ };
346
+ }
347
+
348
+
349
+
350
+
351
+ function $88fd864c15356f4b$export$94bae363557b314a({ db: db, resource: resource, params: params, message: message, idField: idField = 'id', processErrorResponse: processErrorResponse, filterQuery: filterQuery = {} }) {
352
+ return async (req, res, next)=>{
353
+ try {
354
+ const body = (0, $5f19ecb00e146b8f$export$3fde508750f4a353)(req.body, params);
355
+ const additionalFilter = filterQuery && (0, $5f19ecb00e146b8f$export$390602d0ccf68ce6)(req.body, filterQuery);
356
+ const filter = {
357
+ [idField]: {
358
+ operator: '=',
359
+ value: req.params.id
360
+ },
361
+ ...additionalFilter
362
+ };
363
+ await db.update(resource, body, filter);
364
+ res.send({
365
+ message: message
366
+ });
367
+ next({
368
+ message: message
369
+ });
370
+ } catch (error) {
371
+ if (processErrorResponse) error = processErrorResponse(error);
372
+ (0, $eb799189062d1297$export$cd2b46e1ebe8182d)(error, res);
373
+ next({
374
+ ...error,
375
+ isError: true
376
+ });
377
+ }
378
+ };
379
+ }
380
+ function $88fd864c15356f4b$export$805408382b623838({ db: db, resource: resource, params: params, message: message, filterQuery: filterQuery, processErrorResponse: processErrorResponse }) {
381
+ return async (req, res, next)=>{
382
+ try {
383
+ const body = (0, $5f19ecb00e146b8f$export$3fde508750f4a353)(req.body, params);
384
+ const filter = filterQuery && (0, $5f19ecb00e146b8f$export$390602d0ccf68ce6)(req.body, filterQuery);
385
+ await db.update(resource, body, filter);
386
+ res.send({
387
+ message: message
388
+ });
389
+ next({
390
+ message: message
391
+ });
392
+ } catch (error) {
393
+ if (processErrorResponse) error = processErrorResponse(error);
394
+ (0, $eb799189062d1297$export$cd2b46e1ebe8182d)(error, res);
395
+ next({
396
+ ...error,
397
+ isError: true
398
+ });
399
+ }
400
+ };
401
+ }
402
+
403
+
404
+
405
+
406
+ function $1dd7d1e7a650ba01$export$d5a9f256d3442907({ db: db, resource: resource, params: params, message: message, idField: idField = 'id', processErrorResponse: processErrorResponse }) {
407
+ return async (req, res, next)=>{
408
+ try {
409
+ req.body[idField] = req.params.id;
410
+ params = {
411
+ ...params,
412
+ [idField]: 'replace'
413
+ };
414
+ const body = (0, $5f19ecb00e146b8f$export$3fde508750f4a353)(req.body, params);
415
+ await db.upsert(resource, body, [
416
+ idField
417
+ ]);
418
+ res.send({
419
+ message: message
420
+ });
421
+ next({
422
+ message: message
423
+ });
424
+ } catch (error) {
425
+ if (processErrorResponse) error = processErrorResponse(error);
426
+ (0, $eb799189062d1297$export$cd2b46e1ebe8182d)(error, res);
427
+ next({
428
+ ...error,
429
+ isError: true
430
+ });
431
+ }
432
+ };
433
+ }
434
+ function $1dd7d1e7a650ba01$export$e94809b3c2751b8b({ db: db, resource: resource, params: params, message: message, conflictTarget: conflictTarget, processErrorResponse: processErrorResponse }) {
435
+ return async (req, res, next)=>{
436
+ try {
437
+ const body = (0, $5f19ecb00e146b8f$export$3fde508750f4a353)(req.body, params);
438
+ await db.upsert(resource, body, conflictTarget);
439
+ res.send({
440
+ message: message
441
+ });
442
+ next({
443
+ message: message
444
+ });
445
+ } catch (error) {
446
+ if (processErrorResponse) error = processErrorResponse(error);
447
+ (0, $eb799189062d1297$export$cd2b46e1ebe8182d)(error, res);
448
+ next({
449
+ ...error,
450
+ isError: true
451
+ });
452
+ }
453
+ };
454
+ }
455
+
456
+
457
+
458
+
459
+ function $7d3c5c82f06381f1$export$18d25c756727a4e9({ db: db, resource: resource, message: message, idField: idField = 'id', processErrorResponse: processErrorResponse, filterQuery: filterQuery = {} }) {
460
+ return async (req, res, next)=>{
461
+ try {
462
+ const id = req.params[idField || 'id'];
463
+ const filter = filterQuery && (0, $5f19ecb00e146b8f$export$390602d0ccf68ce6)(req.body, filterQuery);
464
+ await db.delete(resource, {
465
+ [idField]: {
466
+ value: id,
467
+ operator: '='
468
+ },
469
+ ...filter
470
+ });
471
+ res.send({
472
+ message: message
473
+ });
474
+ next({
475
+ message: message
476
+ });
477
+ } catch (error) {
478
+ if (processErrorResponse) error = processErrorResponse(error);
479
+ (0, $eb799189062d1297$export$cd2b46e1ebe8182d)(error, res);
480
+ next({
481
+ ...error,
482
+ isError: true
483
+ });
484
+ }
485
+ };
486
+ }
487
+
488
+
489
+
490
+
491
+
492
+
493
+ // eslint-disable-next-line
494
+ const $c492fd1e48c9c1cf$var$defaultExitMiddleware = (data, req, res, next)=>{
495
+ if (process.env.NODE_ENV !== 'production') console.log('Response:', data);
496
+ };
497
+ class $c492fd1e48c9c1cf$export$2e2bcd8739ae039 {
498
+ constructor(express, postgres){
499
+ this.express = express;
500
+ this.postgres = postgres;
501
+ }
502
+ get routes() {
503
+ return this.express.appRoutes;
504
+ }
505
+ get db() {
506
+ return (0, $b05f0a427b6f271e$export$2e2bcd8739ae039).db;
507
+ }
508
+ crud({ method: method, path: path, controller: controller, middleware: middleware = [], exitMiddleware: exitMiddleware = [
509
+ $c492fd1e48c9c1cf$var$defaultExitMiddleware
510
+ ] }) {
511
+ const dbCheck = async (req, res, next)=>{
512
+ if (!(0, $b05f0a427b6f271e$export$2e2bcd8739ae039).db) return res.status(503).send({
513
+ message: 'DB Initialization in progress'
514
+ });
515
+ else next();
516
+ };
517
+ this.express.appRoutes[method](path, dbCheck, ...middleware, controller, ...exitMiddleware);
518
+ }
519
+ addMiddleware(middleware) {
520
+ this.express.appRoutes.use(...middleware);
521
+ }
522
+ startServer() {
523
+ this.express.listen();
524
+ }
525
+ create({ resource: resource, params: params, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, processResponseData: processResponseData, processErrorResponse: processErrorResponse, table: table }) {
526
+ const path = pathOverride || `/${resource}`;
527
+ resource = table || resource;
528
+ const controller = (0, $e54b5bd1ebc8718c$export$2e2bcd8739ae039)({
529
+ db: this.postgres,
530
+ resource: resource,
531
+ params: params,
532
+ message: message,
533
+ processResponseData: processResponseData,
534
+ processErrorResponse: processErrorResponse
535
+ });
536
+ this.crud({
537
+ method: 'post',
538
+ path: path,
539
+ controller: controller,
540
+ middleware: middleware,
541
+ exitMiddleware: exitMiddleware
542
+ });
543
+ }
544
+ get({ resource: resource, fields: fields, filter: filter, format: format, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, processResponseData: processResponseData, processErrorResponse: processErrorResponse, table: table }) {
545
+ const path = pathOverride || `/${resource}`;
546
+ resource = table || resource;
547
+ const controller = (0, $68f7d8a50ef9b68c$export$7b48d281d65870ad)({
548
+ db: this.postgres,
549
+ resource: resource,
550
+ fields: fields,
551
+ filterQuery: filter,
552
+ format: format,
553
+ processResponseData: processResponseData,
554
+ processErrorResponse: processErrorResponse
555
+ });
556
+ this.crud({
557
+ method: 'get',
558
+ path: path,
559
+ controller: controller,
560
+ middleware: middleware,
561
+ exitMiddleware: exitMiddleware
562
+ });
563
+ }
564
+ getById({ resource: resource, fields: fields, idField: idField, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, processResponseData: processResponseData, processErrorResponse: processErrorResponse, table: table, filter: filter }) {
565
+ const path = pathOverride || `/${resource}/:id`;
566
+ resource = table || resource;
567
+ const controller = (0, $68f7d8a50ef9b68c$export$7b6dde2038c44e91)({
568
+ db: this.postgres,
569
+ resource: resource,
570
+ fields: fields,
571
+ idField: idField || 'id',
572
+ processResponseData: processResponseData,
573
+ processErrorResponse: processErrorResponse,
574
+ filterQuery: filter
575
+ });
576
+ this.crud({
577
+ method: 'get',
578
+ path: path,
579
+ controller: controller,
580
+ middleware: middleware,
581
+ exitMiddleware: exitMiddleware
582
+ });
583
+ }
584
+ updateById({ resource: resource, params: params, idField: idField, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, table: table, filter: filter }) {
585
+ const path = pathOverride || `/${resource}/:id`;
586
+ resource = table || resource;
587
+ const controller = (0, $88fd864c15356f4b$export$94bae363557b314a)({
588
+ db: this.postgres,
589
+ resource: resource,
590
+ params: params,
591
+ message: message,
592
+ idField: idField,
593
+ filterQuery: filter
594
+ });
595
+ this.crud({
596
+ method: 'put',
597
+ path: path,
598
+ controller: controller,
599
+ middleware: middleware,
600
+ exitMiddleware: exitMiddleware
601
+ });
602
+ }
603
+ update({ resource: resource, params: params, filter: filter, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, table: table }) {
604
+ const path = pathOverride || `/${resource}`;
605
+ resource = table || resource;
606
+ const controller = (0, $88fd864c15356f4b$export$805408382b623838)({
607
+ db: this.postgres,
608
+ resource: resource,
609
+ params: params,
610
+ message: message,
611
+ filterQuery: filter
612
+ });
613
+ this.crud({
614
+ method: 'put',
615
+ path: path,
616
+ controller: controller,
617
+ middleware: middleware,
618
+ exitMiddleware: exitMiddleware
619
+ });
620
+ }
621
+ upsertById({ resource: resource, params: params, idField: idField, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, table: table }) {
622
+ const path = pathOverride || `/${resource}/:id/upsert`;
623
+ resource = table || resource;
624
+ const controller = (0, $1dd7d1e7a650ba01$export$d5a9f256d3442907)({
625
+ db: this.postgres,
626
+ resource: resource,
627
+ params: params,
628
+ message: message,
629
+ idField: idField
630
+ });
631
+ this.crud({
632
+ method: 'put',
633
+ path: path,
634
+ controller: controller,
635
+ middleware: middleware,
636
+ exitMiddleware: exitMiddleware
637
+ });
638
+ }
639
+ upsert({ resource: resource, params: params, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, conflictTarget: conflictTarget, table: table }) {
640
+ const path = pathOverride || `/${resource}/:id/upsert`;
641
+ resource = table || resource;
642
+ const controller = (0, $1dd7d1e7a650ba01$export$e94809b3c2751b8b)({
643
+ db: this.postgres,
644
+ resource: resource,
645
+ params: params,
646
+ message: message,
647
+ conflictTarget: conflictTarget
648
+ });
649
+ this.crud({
650
+ method: 'put',
651
+ path: path,
652
+ controller: controller,
653
+ middleware: middleware,
654
+ exitMiddleware: exitMiddleware
655
+ });
656
+ }
657
+ deleteById({ resource: resource, message: message, middleware: middleware, pathOverride: pathOverride, exitMiddleware: exitMiddleware, idField: idField, filter: filter, table: table }) {
658
+ const path = pathOverride || `/${resource}/:id`;
659
+ resource = table || resource;
660
+ const controller = (0, $7d3c5c82f06381f1$export$18d25c756727a4e9)({
661
+ db: this.postgres,
662
+ resource: resource,
663
+ message: message,
664
+ idField: idField,
665
+ filterQuery: filter
666
+ });
667
+ this.crud({
668
+ method: 'delete',
669
+ path: path,
670
+ controller: controller,
671
+ middleware: middleware,
672
+ exitMiddleware: exitMiddleware
673
+ });
674
+ }
675
+ }
676
+
677
+
678
+
679
+
680
+
681
+ class $61b68d622202eb93$export$d8ee7b97a871dca3 {
682
+ static{
683
+ this.instances = new Map();
684
+ }
685
+ static getInstance(identifier, initFn) {
686
+ if (!this.instances.has(identifier) && initFn) this.instances.set(identifier, initFn());
687
+ return this.instances.get(identifier);
688
+ }
689
+ }
690
+ function $61b68d622202eb93$export$2e2bcd8739ae039(identifier, initFn) {
691
+ return $61b68d622202eb93$export$d8ee7b97a871dca3.getInstance(identifier, initFn);
692
+ }
693
+
694
+
695
+ function $254994df946b8040$export$2e2bcd8739ae039(query, params) {
696
+ const { replacements: replacements, type: type } = params || {};
697
+ return (0, $b05f0a427b6f271e$export$2e2bcd8739ae039).db.query(query, {
698
+ raw: true,
699
+ replacements: replacements,
700
+ type: type
701
+ });
702
+ }
703
+ class $254994df946b8040$var$ModelCreator {
704
+ static{
705
+ this.model = {};
706
+ }
707
+ static createModel(modelName, attributes, options) {
708
+ if (!this.model[modelName]) this.model[modelName] = (0, $b05f0a427b6f271e$export$2e2bcd8739ae039).db.define(modelName, attributes, options);
709
+ return this.model[modelName];
710
+ }
711
+ }
712
+ function $254994df946b8040$export$2f453c7f7b0d002b(modelName, attributes, options) {
713
+ return $254994df946b8040$var$ModelCreator.createModel.bind($254994df946b8040$var$ModelCreator)(modelName, attributes, options);
714
+ }
715
+ const $254994df946b8040$export$a858f29c02f648c6 = ()=>(0, $61b68d622202eb93$export$2e2bcd8739ae039)('knex', ()=>{
716
+ return (0, $dTx2I$knex)({
717
+ client: 'pg'
718
+ });
719
+ });
720
+
721
+
722
+ const $bf24bb53f537fa46$export$1b001418845b471c = (query, filter = {})=>{
723
+ Object.entries(filter).forEach(([field, data])=>{
724
+ if (field === '$or') query.where((builder)=>{
725
+ Object.entries(data).forEach(([orField, orData], index)=>{
726
+ const method = index === 0 ? 'where' : 'orWhere';
727
+ const orParam = orData;
728
+ if ([
729
+ 'like',
730
+ 'not like'
731
+ ].includes(orParam.operator)) builder[method](orField, 'ilike', `%${orParam.value}%`);
732
+ else builder[method](orField, orParam.operator, orParam.value);
733
+ });
734
+ });
735
+ else {
736
+ const param = data;
737
+ if ([
738
+ 'like',
739
+ 'not like'
740
+ ].includes(param.operator)) query.where(field, param.operator === 'like' ? 'ilike' : 'not ilike', `%${param.value}%`);
741
+ else query.where(field, param.operator, param.value);
742
+ }
743
+ });
744
+ return query;
745
+ };
746
+ const $bf24bb53f537fa46$export$53b231d60a00019b = (table, data)=>{
747
+ const knex = (0, $254994df946b8040$export$a858f29c02f648c6)();
748
+ const { sql: query, bindings: replacements } = knex(table).insert(data).returning('id').toSQL();
749
+ return {
750
+ query: query,
751
+ replacements: replacements
752
+ };
753
+ };
754
+ const $bf24bb53f537fa46$export$60d67f341ad4c4 = (table, fields, filter, paginate, format)=>{
755
+ const knex = (0, $254994df946b8040$export$a858f29c02f648c6)();
756
+ let q = knex(table).select(fields);
757
+ // Add total count if pagination is needed
758
+ if (paginate) // Using knex.raw to create the count column with the same name as in original code
759
+ q = knex(table).select([
760
+ ...fields.map((field)=>knex.raw(`?? as ??`, [
761
+ field,
762
+ field
763
+ ])),
764
+ knex.raw('count(??) OVER() AS honey_total_count', [
765
+ fields[0]
766
+ ])
767
+ ]);
768
+ // Apply filters
769
+ if (filter) q = $bf24bb53f537fa46$export$1b001418845b471c(q, filter);
770
+ // Apply sorting
771
+ if (format?.sort && format.sortField) q.orderBy(format.sortField, format.sort);
772
+ // Apply pagination
773
+ if (paginate) q.limit(paginate.limit).offset(paginate.limit * (paginate.page - 1));
774
+ const { sql: query, bindings: replacements } = q.toSQL();
775
+ return {
776
+ query: query,
777
+ replacements: replacements
778
+ };
779
+ };
780
+ const $bf24bb53f537fa46$export$9234fcbc1f0d2048 = (table, data, filter)=>{
781
+ const knex = (0, $254994df946b8040$export$a858f29c02f648c6)();
782
+ let q = knex(table);
783
+ // Build the update object
784
+ const updateData = {};
785
+ Object.entries(data).forEach(([field, fieldData])=>{
786
+ const param = fieldData;
787
+ if (param.operator === 'inc') updateData[field] = knex.raw('?? + ?', [
788
+ field,
789
+ param.value
790
+ ]);
791
+ else if (param.operator === 'dec') updateData[field] = knex.raw('?? - ?', [
792
+ field,
793
+ param.value
794
+ ]);
795
+ else updateData[field] = param.value;
796
+ });
797
+ // Apply filter conditions
798
+ if (filter) q = $bf24bb53f537fa46$export$1b001418845b471c(q, filter);
799
+ const { sql: query, bindings: replacements } = q.update(updateData).toSQL();
800
+ console.log(query, replacements);
801
+ return {
802
+ query: query,
803
+ replacements: replacements
804
+ };
805
+ };
806
+ const $bf24bb53f537fa46$export$3303c43960743687 = (table, filter)=>{
807
+ const knex = (0, $254994df946b8040$export$a858f29c02f648c6)();
808
+ let q = knex(table);
809
+ if (filter) q = $bf24bb53f537fa46$export$1b001418845b471c(q, filter);
810
+ const { sql: query, bindings: replacements } = q.delete().toSQL();
811
+ return {
812
+ query: query,
813
+ replacements: replacements
814
+ };
815
+ };
816
+ const $bf24bb53f537fa46$export$65b914f34962db1e = (table, data, conflictTarget)=>{
817
+ const knex = (0, $254994df946b8040$export$a858f29c02f648c6)();
818
+ // Prepare insert data
819
+ const insertData = {};
820
+ Object.entries(data).forEach(([field, fieldData])=>{
821
+ insertData[field] = fieldData.value;
822
+ });
823
+ // Prepare update data for conflict resolution
824
+ const updateData = {};
825
+ Object.entries(data).forEach(([field, fieldData])=>{
826
+ const param = fieldData;
827
+ if (param.operator === 'inc') updateData[field] = knex.raw('?? + ?', [
828
+ `${table}.${field}`,
829
+ param.value
830
+ ]);
831
+ else if (param.operator === 'dec') updateData[field] = knex.raw('?? - ?', [
832
+ `${table}.${field}`,
833
+ param.value
834
+ ]);
835
+ else updateData[field] = param.value;
836
+ });
837
+ const { sql: query, bindings: replacements } = knex(table).insert(insertData).onConflict(conflictTarget).merge(updateData).toSQL();
838
+ return {
839
+ query: query,
840
+ replacements: replacements
841
+ };
842
+ };
843
+
844
+
845
+
846
+ class $094f143c50bc237e$export$2e2bcd8739ae039 {
847
+ async read(table, fields, filter, paginate, format) {
848
+ const { query: query, replacements: replacements } = (0, $bf24bb53f537fa46$export$60d67f341ad4c4)(table, fields, filter, paginate, format);
849
+ const result = await (0, $b05f0a427b6f271e$export$2e2bcd8739ae039).db.query(query, {
850
+ type: (0, $dTx2I$QueryTypes).SELECT,
851
+ raw: true,
852
+ replacements: [
853
+ ...replacements
854
+ ]
855
+ });
856
+ return result;
857
+ }
858
+ async create(table, data) {
859
+ const { query: query, replacements: replacements } = (0, $bf24bb53f537fa46$export$53b231d60a00019b)(table, data);
860
+ const res = await (0, $b05f0a427b6f271e$export$2e2bcd8739ae039).db.query(query, {
861
+ type: (0, $dTx2I$QueryTypes).INSERT,
862
+ raw: true,
863
+ replacements: [
864
+ ...replacements
865
+ ]
866
+ });
867
+ // inserted ids
868
+ return res[0];
869
+ }
870
+ async update(table, data, filter) {
871
+ const { query: query, replacements: replacements } = (0, $bf24bb53f537fa46$export$9234fcbc1f0d2048)(table, data, filter);
872
+ await (0, $b05f0a427b6f271e$export$2e2bcd8739ae039).db.query(query, {
873
+ type: (0, $dTx2I$QueryTypes).UPDATE,
874
+ raw: true,
875
+ replacements: [
876
+ ...replacements
877
+ ]
878
+ });
879
+ }
880
+ async delete(table, filter) {
881
+ const { query: query, replacements: replacements } = (0, $bf24bb53f537fa46$export$3303c43960743687)(table, filter);
882
+ await (0, $b05f0a427b6f271e$export$2e2bcd8739ae039).db.query(query, {
883
+ type: (0, $dTx2I$QueryTypes).DELETE,
884
+ raw: true,
885
+ replacements: [
886
+ ...replacements
887
+ ]
888
+ });
889
+ }
890
+ async upsert(table, data, conflictTarget) {
891
+ const { query: query, replacements: replacements } = (0, $bf24bb53f537fa46$export$65b914f34962db1e)(table, data, conflictTarget);
892
+ await (0, $b05f0a427b6f271e$export$2e2bcd8739ae039).db.query(query, {
893
+ type: (0, $dTx2I$QueryTypes).INSERT,
894
+ raw: true,
895
+ replacements: [
896
+ ...replacements
897
+ ]
898
+ });
899
+ }
900
+ }
901
+
902
+
903
+ function $485d60a2960a7015$export$21d1ad8451a259af(val) {
904
+ const port = parseInt(val, 10);
905
+ if (isNaN(port)) // named pipe
906
+ return val;
907
+ if (port >= 0) // port number
908
+ return port;
909
+ throw new Error('Invalid port number');
910
+ }
911
+
912
+
913
+
914
+
915
+
916
+ const $440791091ca5fcd9$export$3b8deecb09f1ff23 = (schema, location = 'body', options = {
917
+ allowUnknown: true
918
+ })=>async (req, res, next)=>{
919
+ try {
920
+ const validationResult = schema.validate(req[location], options);
921
+ const validationError = validationResult.error?.message;
922
+ if (validationError) throw new (0, $eb799189062d1297$export$2e2bcd8739ae039)(validationError, 422);
923
+ return next();
924
+ } catch (error) {
925
+ (0, $eb799189062d1297$export$cd2b46e1ebe8182d)(error, res);
926
+ }
927
+ };
928
+ var $440791091ca5fcd9$export$2e2bcd8739ae039 = $440791091ca5fcd9$export$3b8deecb09f1ff23;
929
+
930
+
931
+ process.on('SIGINT', ()=>{
932
+ // process reload ongoing
933
+ // close connections, clear cache, etc
934
+ // by default, you have 1600ms
935
+ process.exit(0);
936
+ });
937
+ function $ca5c8b758a3f9447$export$f375e35cdf499ccf(port, dbOptions, metadata) {
938
+ new (0, $b05f0a427b6f271e$export$2e2bcd8739ae039)(dbOptions);
939
+ const portVal = (0, $485d60a2960a7015$export$21d1ad8451a259af)(port || process.env.PORT || '3000');
940
+ const express = new (0, $486a90d70dc9bc85$export$2e2bcd8739ae039)(portVal, metadata);
941
+ const postgres = new (0, $094f143c50bc237e$export$2e2bcd8739ae039)();
942
+ const honey = new (0, $c492fd1e48c9c1cf$export$2e2bcd8739ae039)(express, postgres);
943
+ return honey;
944
+ }
945
+ const $ca5c8b758a3f9447$export$acd55aa037e791bb = (0, $b05f0a427b6f271e$export$2e2bcd8739ae039).defineModel.bind((0, $b05f0a427b6f271e$export$2e2bcd8739ae039));
946
+ function $ca5c8b758a3f9447$var$getQueryTypes() {
947
+ const { SELECT: SELECT, INSERT: INSERT, UPDATE: UPDATE, DELETE: DELETE, RAW: RAW, UPSERT: UPSERT } = (0, $dTx2I$QueryTypes);
948
+ const exposedTypes = {
949
+ SELECT: SELECT,
950
+ INSERT: INSERT,
951
+ UPDATE: UPDATE,
952
+ DELETE: DELETE,
953
+ RAW: RAW,
954
+ UPSERT: UPSERT
955
+ };
956
+ return exposedTypes;
957
+ }
958
+ const $ca5c8b758a3f9447$export$9e0271c08bde0a49 = $ca5c8b758a3f9447$var$getQueryTypes();
959
+
960
+
961
+ 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};
962
+ //# sourceMappingURL=module.js.map