Hozifa Elgharbawy commited on
Commit
3daae40
·
1 Parent(s): f4ba000

feat: Add isDeleted field to exercise, meal, meal plan, muscle, ingredient, and equipment models

Browse files
Files changed (34) hide show
  1. package-lock.json +712 -0
  2. src/common/models/equipment.model.ts +2 -0
  3. src/common/models/exercise.model.ts +2 -0
  4. src/common/models/ingredient.model.ts +2 -0
  5. src/common/models/meal-plan.model.ts +2 -0
  6. src/common/models/meal.model.ts +2 -0
  7. src/common/models/muscle.model.ts +2 -0
  8. src/common/models/workout.model.ts +2 -0
  9. src/lib/services/crud.service.ts +11 -3
  10. src/modules/console/modules/equipments/controllers/equipments.controller.ts +3 -2
  11. src/modules/console/modules/exercises/controllers/exercises.controller.ts +3 -2
  12. src/modules/console/modules/ingredients/controller/ingredients.controller.ts +4 -3
  13. src/modules/console/modules/meal-plans/controller/meal-plans.controller.ts +4 -3
  14. src/modules/console/modules/meals/controller/meals.controller.ts +4 -3
  15. src/modules/console/modules/muscles/controllers/muscles.controller.ts +4 -3
  16. src/modules/console/modules/workouts/controllers/workouts.controller.ts +3 -2
  17. src/modules/users/modules/exercises/controllers/exercises.controller.ts +3 -2
  18. src/modules/users/modules/ingredients/controller/ingredients.controller.ts +2 -2
  19. src/modules/users/modules/meal-plans/controller/meal-plans.controller.ts +1 -1
  20. src/modules/users/modules/meals/controller/meals.controller.ts +1 -1
  21. src/modules/users/modules/templates/controllers/templates.controller.ts +1 -1
  22. src/modules/users/modules/templates/services/templates.service.ts +11 -1
  23. src/modules/users/modules/workouts/controllers/workouts.controller.ts +3 -3
  24. src/modules/users/modules/workouts/services/workouts.service.ts +12 -5
  25. src/resources/exercises.csv +0 -0
  26. src/seeder/helpers/load-exercises-dataset.ts +1 -0
  27. src/seeder/seeders/3-muscles.seeder.ts +1 -1
  28. src/seeder/seeders/4-equipments.seeder.ts +1 -1
  29. src/seeder/seeders/5-exercises.seeder.ts +27 -11
  30. src/seeder/seeders/6-workout.seeder.ts +2 -1
  31. src/seeder/seeders/8-ingredients.seeder.ts +1 -0
  32. src/seeder/seeders/9-meals.seeder.ts +1 -0
  33. src/seeder/seeders/{10-mealPlan.seeder.ts → 99-mealPlan.seeder.ts} +1 -0
  34. src/seeder/seeders/{11-mymealPlan.seeder.ts → 999-mymealPlan.seeder.ts} +0 -0
package-lock.json CHANGED
@@ -337,6 +337,11 @@
337
  "@types/node": "*"
338
  }
339
  },
 
 
 
 
 
340
  "node_modules/@types/connect": {
341
  "version": "3.4.38",
342
  "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
@@ -385,6 +390,11 @@
385
  "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
386
  "dev": true
387
  },
 
 
 
 
 
388
  "node_modules/@types/mime": {
389
  "version": "1.3.5",
390
  "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
@@ -404,6 +414,15 @@
404
  "undici-types": "~5.26.4"
405
  }
406
  },
 
 
 
 
 
 
 
 
 
407
  "node_modules/@types/qs": {
408
  "version": "6.9.11",
409
  "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz",
@@ -484,6 +503,17 @@
484
  "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
485
  "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
486
  },
 
 
 
 
 
 
 
 
 
 
 
487
  "node_modules/accepts": {
488
  "version": "1.3.8",
489
  "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -528,6 +558,32 @@
528
  "node": ">= 6.0.0"
529
  }
530
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
531
  "node_modules/ansi-regex": {
532
  "version": "5.0.1",
533
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -595,6 +651,40 @@
595
  "node": ">=8"
596
  }
597
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
598
  "node_modules/balanced-match": {
599
  "version": "1.0.2",
600
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -613,6 +703,14 @@
613
  "node": ">= 10.0.0"
614
  }
615
  },
 
 
 
 
 
 
 
 
616
  "node_modules/binary-extensions": {
617
  "version": "2.2.0",
618
  "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
@@ -681,6 +779,27 @@
681
  "url": "https://github.com/sponsors/ljharb"
682
  }
683
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
684
  "node_modules/chokidar": {
685
  "version": "3.5.3",
686
  "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
@@ -744,6 +863,17 @@
744
  "color-support": "bin.js"
745
  }
746
  },
 
 
 
 
 
 
 
 
 
 
 
747
  "node_modules/commander": {
748
  "version": "9.5.0",
749
  "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
@@ -794,6 +924,11 @@
794
  "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
795
  "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
796
  },
 
 
 
 
 
797
  "node_modules/cors": {
798
  "version": "2.8.5",
799
  "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
@@ -839,6 +974,29 @@
839
  "node": ">= 10"
840
  }
841
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
842
  "node_modules/debug": {
843
  "version": "4.3.4",
844
  "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -868,6 +1026,14 @@
868
  "node": ">= 0.4"
869
  }
870
  },
 
 
 
 
 
 
 
 
871
  "node_modules/delegates": {
872
  "version": "1.0.0",
873
  "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
@@ -943,6 +1109,15 @@
943
  "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
944
  "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
945
  },
 
 
 
 
 
 
 
 
 
946
  "node_modules/ecdsa-sig-formatter": {
947
  "version": "1.0.11",
948
  "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
@@ -992,11 +1167,73 @@
992
  "node": ">=0.10.0"
993
  }
994
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
995
  "node_modules/escape-html": {
996
  "version": "1.0.3",
997
  "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
998
  "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
999
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1000
  "node_modules/etag": {
1001
  "version": "1.8.1",
1002
  "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
@@ -1005,6 +1242,23 @@
1005
  "node": ">= 0.6"
1006
  }
1007
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1008
  "node_modules/express": {
1009
  "version": "4.18.2",
1010
  "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
@@ -1107,6 +1361,32 @@
1107
  "node": ">= 0.8"
1108
  }
1109
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1110
  "node_modules/fast-glob": {
1111
  "version": "3.3.2",
1112
  "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
@@ -1122,6 +1402,11 @@
1122
  "node": ">=8.6.0"
1123
  }
1124
  },
 
 
 
 
 
1125
  "node_modules/fastq": {
1126
  "version": "1.17.1",
1127
  "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
@@ -1197,6 +1482,52 @@
1197
  "url": "https://github.com/sponsors/isaacs"
1198
  }
1199
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1200
  "node_modules/forwarded": {
1201
  "version": "0.2.0",
1202
  "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -1294,6 +1625,14 @@
1294
  "url": "https://github.com/sponsors/ljharb"
1295
  }
1296
  },
 
 
 
 
 
 
 
 
1297
  "node_modules/glob": {
1298
  "version": "10.3.10",
1299
  "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
@@ -1378,6 +1717,27 @@
1378
  "url": "https://github.com/sponsors/ljharb"
1379
  }
1380
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1381
  "node_modules/has-flag": {
1382
  "version": "3.0.0",
1383
  "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@@ -1456,6 +1816,20 @@
1456
  "node": ">= 0.8"
1457
  }
1458
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1459
  "node_modules/https-proxy-agent": {
1460
  "version": "5.0.1",
1461
  "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
@@ -1468,6 +1842,14 @@
1468
  "node": ">= 6"
1469
  }
1470
  },
 
 
 
 
 
 
 
 
1471
  "node_modules/i": {
1472
  "version": "0.3.7",
1473
  "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz",
@@ -1581,11 +1963,26 @@
1581
  "node": ">=0.12.0"
1582
  }
1583
  },
 
 
 
 
 
 
 
 
 
 
1584
  "node_modules/isexe": {
1585
  "version": "2.0.0",
1586
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1587
  "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
1588
  },
 
 
 
 
 
1589
  "node_modules/jackspeak": {
1590
  "version": "2.3.6",
1591
  "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
@@ -1615,6 +2012,26 @@
1615
  "@sideway/pinpoint": "^2.0.0"
1616
  }
1617
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1618
  "node_modules/json5": {
1619
  "version": "2.2.3",
1620
  "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
@@ -1648,6 +2065,20 @@
1648
  "npm": ">=6"
1649
  }
1650
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1651
  "node_modules/jwa": {
1652
  "version": "1.4.1",
1653
  "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
@@ -1721,6 +2152,14 @@
1721
  "node": ">=10"
1722
  }
1723
  },
 
 
 
 
 
 
 
 
1724
  "node_modules/make-dir": {
1725
  "version": "3.1.0",
1726
  "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@@ -1757,6 +2196,24 @@
1757
  "node": ">= 0.6"
1758
  }
1759
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1760
  "node_modules/memory-pager": {
1761
  "version": "1.5.0",
1762
  "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
@@ -2010,11 +2467,34 @@
2010
  "node": ">= 0.6"
2011
  }
2012
  },
 
 
 
 
 
2013
  "node_modules/node-addon-api": {
2014
  "version": "5.1.0",
2015
  "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
2016
  "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA=="
2017
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2018
  "node_modules/node-fetch": {
2019
  "version": "2.7.0",
2020
  "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
@@ -4846,6 +5326,14 @@
4846
  "set-blocking": "^2.0.0"
4847
  }
4848
  },
 
 
 
 
 
 
 
 
4849
  "node_modules/object-assign": {
4850
  "version": "4.1.1",
4851
  "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -4881,6 +5369,40 @@
4881
  "wrappy": "1"
4882
  }
4883
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4884
  "node_modules/parseurl": {
4885
  "version": "1.3.3",
4886
  "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -4956,6 +5478,11 @@
4956
  "node": ">=8"
4957
  }
4958
  },
 
 
 
 
 
4959
  "node_modules/picomatch": {
4960
  "version": "2.3.1",
4961
  "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
@@ -4998,6 +5525,11 @@
4998
  "node": ">= 0.10"
4999
  }
5000
  },
 
 
 
 
 
5001
  "node_modules/pstree.remy": {
5002
  "version": "1.1.8",
5003
  "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
@@ -5085,6 +5617,67 @@
5085
  "node": ">=8.10.0"
5086
  }
5087
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5088
  "node_modules/resolve": {
5089
  "version": "1.22.8",
5090
  "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
@@ -5372,6 +5965,30 @@
5372
  "memory-pager": "^1.0.2"
5373
  }
5374
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5375
  "node_modules/statuses": {
5376
  "version": "2.0.1",
5377
  "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@@ -5515,6 +6132,39 @@
5515
  "node": ">=10"
5516
  }
5517
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5518
  "node_modules/to-regex-range": {
5519
  "version": "5.0.1",
5520
  "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -5546,6 +6196,18 @@
5546
  "nodetouch": "bin/nodetouch.js"
5547
  }
5548
  },
 
 
 
 
 
 
 
 
 
 
 
 
5549
  "node_modules/tr46": {
5550
  "version": "3.0.0",
5551
  "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
@@ -5717,6 +6379,27 @@
5717
  "node": ">=6"
5718
  }
5719
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5720
  "node_modules/type-is": {
5721
  "version": "1.6.18",
5722
  "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -5761,6 +6444,14 @@
5761
  "node": ">= 0.8"
5762
  }
5763
  },
 
 
 
 
 
 
 
 
5764
  "node_modules/util": {
5765
  "version": "0.10.4",
5766
  "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
@@ -5813,6 +6504,27 @@
5813
  "node": ">= 0.8"
5814
  }
5815
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5816
  "node_modules/webidl-conversions": {
5817
  "version": "7.0.0",
5818
  "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
 
337
  "@types/node": "*"
338
  }
339
  },
340
+ "node_modules/@types/chance": {
341
+ "version": "1.1.6",
342
+ "resolved": "https://registry.npmjs.org/@types/chance/-/chance-1.1.6.tgz",
343
+ "integrity": "sha512-V+pm3stv1Mvz8fSKJJod6CglNGVqEQ6OyuqitoDkWywEODM/eJd1eSuIp9xt6DrX8BWZ2eDSIzbw1tPCUTvGbQ=="
344
+ },
345
  "node_modules/@types/connect": {
346
  "version": "3.4.38",
347
  "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
 
390
  "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
391
  "dev": true
392
  },
393
+ "node_modules/@types/memoizee": {
394
+ "version": "0.4.11",
395
+ "resolved": "https://registry.npmjs.org/@types/memoizee/-/memoizee-0.4.11.tgz",
396
+ "integrity": "sha512-2gyorIBZu8GoDr9pYjROkxWWcFtHCquF7TVbN2I+/OvgZhnIGQS0vX5KJz4lXNKb8XOSfxFOSG5OLru1ESqLUg=="
397
+ },
398
  "node_modules/@types/mime": {
399
  "version": "1.3.5",
400
  "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
 
414
  "undici-types": "~5.26.4"
415
  }
416
  },
417
+ "node_modules/@types/node-fetch": {
418
+ "version": "2.6.11",
419
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz",
420
+ "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==",
421
+ "dependencies": {
422
+ "@types/node": "*",
423
+ "form-data": "^4.0.0"
424
+ }
425
+ },
426
  "node_modules/@types/qs": {
427
  "version": "6.9.11",
428
  "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz",
 
503
  "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
504
  "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
505
  },
506
+ "node_modules/abort-controller": {
507
+ "version": "3.0.0",
508
+ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
509
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
510
+ "dependencies": {
511
+ "event-target-shim": "^5.0.0"
512
+ },
513
+ "engines": {
514
+ "node": ">=6.5"
515
+ }
516
+ },
517
  "node_modules/accepts": {
518
  "version": "1.3.8",
519
  "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
 
558
  "node": ">= 6.0.0"
559
  }
560
  },
561
+ "node_modules/agentkeepalive": {
562
+ "version": "4.5.0",
563
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz",
564
+ "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==",
565
+ "dependencies": {
566
+ "humanize-ms": "^1.2.1"
567
+ },
568
+ "engines": {
569
+ "node": ">= 8.0.0"
570
+ }
571
+ },
572
+ "node_modules/ajv": {
573
+ "version": "6.12.6",
574
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
575
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
576
+ "dependencies": {
577
+ "fast-deep-equal": "^3.1.1",
578
+ "fast-json-stable-stringify": "^2.0.0",
579
+ "json-schema-traverse": "^0.4.1",
580
+ "uri-js": "^4.2.2"
581
+ },
582
+ "funding": {
583
+ "type": "github",
584
+ "url": "https://github.com/sponsors/epoberezkin"
585
+ }
586
+ },
587
  "node_modules/ansi-regex": {
588
  "version": "5.0.1",
589
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
 
651
  "node": ">=8"
652
  }
653
  },
654
+ "node_modules/asn1": {
655
+ "version": "0.2.6",
656
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
657
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
658
+ "dependencies": {
659
+ "safer-buffer": "~2.1.0"
660
+ }
661
+ },
662
+ "node_modules/assert-plus": {
663
+ "version": "1.0.0",
664
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
665
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
666
+ "engines": {
667
+ "node": ">=0.8"
668
+ }
669
+ },
670
+ "node_modules/asynckit": {
671
+ "version": "0.4.0",
672
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
673
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
674
+ },
675
+ "node_modules/aws-sign2": {
676
+ "version": "0.7.0",
677
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
678
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
679
+ "engines": {
680
+ "node": "*"
681
+ }
682
+ },
683
+ "node_modules/aws4": {
684
+ "version": "1.13.0",
685
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.0.tgz",
686
+ "integrity": "sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g=="
687
+ },
688
  "node_modules/balanced-match": {
689
  "version": "1.0.2",
690
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
 
703
  "node": ">= 10.0.0"
704
  }
705
  },
706
+ "node_modules/bcrypt-pbkdf": {
707
+ "version": "1.0.2",
708
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
709
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
710
+ "dependencies": {
711
+ "tweetnacl": "^0.14.3"
712
+ }
713
+ },
714
  "node_modules/binary-extensions": {
715
  "version": "2.2.0",
716
  "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
 
779
  "url": "https://github.com/sponsors/ljharb"
780
  }
781
  },
782
+ "node_modules/caseless": {
783
+ "version": "0.12.0",
784
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
785
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
786
+ },
787
+ "node_modules/chalk": {
788
+ "version": "5.3.0",
789
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
790
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
791
+ "engines": {
792
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
793
+ },
794
+ "funding": {
795
+ "url": "https://github.com/chalk/chalk?sponsor=1"
796
+ }
797
+ },
798
+ "node_modules/chance": {
799
+ "version": "1.1.11",
800
+ "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.11.tgz",
801
+ "integrity": "sha512-kqTg3WWywappJPqtgrdvbA380VoXO2eu9VCV895JgbyHsaErXdyHK9LOZ911OvAk6L0obK7kDk9CGs8+oBawVA=="
802
+ },
803
  "node_modules/chokidar": {
804
  "version": "3.5.3",
805
  "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
 
863
  "color-support": "bin.js"
864
  }
865
  },
866
+ "node_modules/combined-stream": {
867
+ "version": "1.0.8",
868
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
869
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
870
+ "dependencies": {
871
+ "delayed-stream": "~1.0.0"
872
+ },
873
+ "engines": {
874
+ "node": ">= 0.8"
875
+ }
876
+ },
877
  "node_modules/commander": {
878
  "version": "9.5.0",
879
  "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
 
924
  "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
925
  "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
926
  },
927
+ "node_modules/core-util-is": {
928
+ "version": "1.0.2",
929
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
930
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
931
+ },
932
  "node_modules/cors": {
933
  "version": "2.8.5",
934
  "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
 
974
  "node": ">= 10"
975
  }
976
  },
977
+ "node_modules/d": {
978
+ "version": "1.0.2",
979
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
980
+ "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
981
+ "dependencies": {
982
+ "es5-ext": "^0.10.64",
983
+ "type": "^2.7.2"
984
+ },
985
+ "engines": {
986
+ "node": ">=0.12"
987
+ }
988
+ },
989
+ "node_modules/dashdash": {
990
+ "version": "1.14.1",
991
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
992
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
993
+ "dependencies": {
994
+ "assert-plus": "^1.0.0"
995
+ },
996
+ "engines": {
997
+ "node": ">=0.10"
998
+ }
999
+ },
1000
  "node_modules/debug": {
1001
  "version": "4.3.4",
1002
  "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
 
1026
  "node": ">= 0.4"
1027
  }
1028
  },
1029
+ "node_modules/delayed-stream": {
1030
+ "version": "1.0.0",
1031
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
1032
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
1033
+ "engines": {
1034
+ "node": ">=0.4.0"
1035
+ }
1036
+ },
1037
  "node_modules/delegates": {
1038
  "version": "1.0.0",
1039
  "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
 
1109
  "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
1110
  "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
1111
  },
1112
+ "node_modules/ecc-jsbn": {
1113
+ "version": "0.1.2",
1114
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
1115
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
1116
+ "dependencies": {
1117
+ "jsbn": "~0.1.0",
1118
+ "safer-buffer": "^2.1.0"
1119
+ }
1120
+ },
1121
  "node_modules/ecdsa-sig-formatter": {
1122
  "version": "1.0.11",
1123
  "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
 
1167
  "node": ">=0.10.0"
1168
  }
1169
  },
1170
+ "node_modules/es5-ext": {
1171
+ "version": "0.10.64",
1172
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
1173
+ "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
1174
+ "hasInstallScript": true,
1175
+ "dependencies": {
1176
+ "es6-iterator": "^2.0.3",
1177
+ "es6-symbol": "^3.1.3",
1178
+ "esniff": "^2.0.1",
1179
+ "next-tick": "^1.1.0"
1180
+ },
1181
+ "engines": {
1182
+ "node": ">=0.10"
1183
+ }
1184
+ },
1185
+ "node_modules/es6-iterator": {
1186
+ "version": "2.0.3",
1187
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
1188
+ "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
1189
+ "dependencies": {
1190
+ "d": "1",
1191
+ "es5-ext": "^0.10.35",
1192
+ "es6-symbol": "^3.1.1"
1193
+ }
1194
+ },
1195
+ "node_modules/es6-symbol": {
1196
+ "version": "3.1.4",
1197
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
1198
+ "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
1199
+ "dependencies": {
1200
+ "d": "^1.0.2",
1201
+ "ext": "^1.7.0"
1202
+ },
1203
+ "engines": {
1204
+ "node": ">=0.12"
1205
+ }
1206
+ },
1207
+ "node_modules/es6-weak-map": {
1208
+ "version": "2.0.3",
1209
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
1210
+ "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
1211
+ "dependencies": {
1212
+ "d": "1",
1213
+ "es5-ext": "^0.10.46",
1214
+ "es6-iterator": "^2.0.3",
1215
+ "es6-symbol": "^3.1.1"
1216
+ }
1217
+ },
1218
  "node_modules/escape-html": {
1219
  "version": "1.0.3",
1220
  "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
1221
  "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
1222
  },
1223
+ "node_modules/esniff": {
1224
+ "version": "2.0.1",
1225
+ "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
1226
+ "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
1227
+ "dependencies": {
1228
+ "d": "^1.0.1",
1229
+ "es5-ext": "^0.10.62",
1230
+ "event-emitter": "^0.3.5",
1231
+ "type": "^2.7.2"
1232
+ },
1233
+ "engines": {
1234
+ "node": ">=0.10"
1235
+ }
1236
+ },
1237
  "node_modules/etag": {
1238
  "version": "1.8.1",
1239
  "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
 
1242
  "node": ">= 0.6"
1243
  }
1244
  },
1245
+ "node_modules/event-emitter": {
1246
+ "version": "0.3.5",
1247
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
1248
+ "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
1249
+ "dependencies": {
1250
+ "d": "1",
1251
+ "es5-ext": "~0.10.14"
1252
+ }
1253
+ },
1254
+ "node_modules/event-target-shim": {
1255
+ "version": "5.0.1",
1256
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
1257
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
1258
+ "engines": {
1259
+ "node": ">=6"
1260
+ }
1261
+ },
1262
  "node_modules/express": {
1263
  "version": "4.18.2",
1264
  "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
 
1361
  "node": ">= 0.8"
1362
  }
1363
  },
1364
+ "node_modules/ext": {
1365
+ "version": "1.7.0",
1366
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
1367
+ "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
1368
+ "dependencies": {
1369
+ "type": "^2.7.2"
1370
+ }
1371
+ },
1372
+ "node_modules/extend": {
1373
+ "version": "3.0.2",
1374
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1375
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
1376
+ },
1377
+ "node_modules/extsprintf": {
1378
+ "version": "1.3.0",
1379
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
1380
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
1381
+ "engines": [
1382
+ "node >=0.6.0"
1383
+ ]
1384
+ },
1385
+ "node_modules/fast-deep-equal": {
1386
+ "version": "3.1.3",
1387
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1388
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
1389
+ },
1390
  "node_modules/fast-glob": {
1391
  "version": "3.3.2",
1392
  "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
 
1402
  "node": ">=8.6.0"
1403
  }
1404
  },
1405
+ "node_modules/fast-json-stable-stringify": {
1406
+ "version": "2.1.0",
1407
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
1408
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
1409
+ },
1410
  "node_modules/fastq": {
1411
  "version": "1.17.1",
1412
  "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
 
1482
  "url": "https://github.com/sponsors/isaacs"
1483
  }
1484
  },
1485
+ "node_modules/forever-agent": {
1486
+ "version": "0.6.1",
1487
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
1488
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
1489
+ "engines": {
1490
+ "node": "*"
1491
+ }
1492
+ },
1493
+ "node_modules/form-data": {
1494
+ "version": "4.0.0",
1495
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
1496
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
1497
+ "dependencies": {
1498
+ "asynckit": "^0.4.0",
1499
+ "combined-stream": "^1.0.8",
1500
+ "mime-types": "^2.1.12"
1501
+ },
1502
+ "engines": {
1503
+ "node": ">= 6"
1504
+ }
1505
+ },
1506
+ "node_modules/form-data-encoder": {
1507
+ "version": "1.7.2",
1508
+ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz",
1509
+ "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A=="
1510
+ },
1511
+ "node_modules/formdata-node": {
1512
+ "version": "4.4.1",
1513
+ "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz",
1514
+ "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==",
1515
+ "dependencies": {
1516
+ "node-domexception": "1.0.0",
1517
+ "web-streams-polyfill": "4.0.0-beta.3"
1518
+ },
1519
+ "engines": {
1520
+ "node": ">= 12.20"
1521
+ }
1522
+ },
1523
+ "node_modules/formdata-node/node_modules/web-streams-polyfill": {
1524
+ "version": "4.0.0-beta.3",
1525
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz",
1526
+ "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==",
1527
+ "engines": {
1528
+ "node": ">= 14"
1529
+ }
1530
+ },
1531
  "node_modules/forwarded": {
1532
  "version": "0.2.0",
1533
  "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
 
1625
  "url": "https://github.com/sponsors/ljharb"
1626
  }
1627
  },
1628
+ "node_modules/getpass": {
1629
+ "version": "0.1.7",
1630
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
1631
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
1632
+ "dependencies": {
1633
+ "assert-plus": "^1.0.0"
1634
+ }
1635
+ },
1636
  "node_modules/glob": {
1637
  "version": "10.3.10",
1638
  "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
 
1717
  "url": "https://github.com/sponsors/ljharb"
1718
  }
1719
  },
1720
+ "node_modules/har-schema": {
1721
+ "version": "2.0.0",
1722
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
1723
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
1724
+ "engines": {
1725
+ "node": ">=4"
1726
+ }
1727
+ },
1728
+ "node_modules/har-validator": {
1729
+ "version": "5.1.5",
1730
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
1731
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
1732
+ "deprecated": "this library is no longer supported",
1733
+ "dependencies": {
1734
+ "ajv": "^6.12.3",
1735
+ "har-schema": "^2.0.0"
1736
+ },
1737
+ "engines": {
1738
+ "node": ">=6"
1739
+ }
1740
+ },
1741
  "node_modules/has-flag": {
1742
  "version": "3.0.0",
1743
  "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
 
1816
  "node": ">= 0.8"
1817
  }
1818
  },
1819
+ "node_modules/http-signature": {
1820
+ "version": "1.2.0",
1821
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
1822
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
1823
+ "dependencies": {
1824
+ "assert-plus": "^1.0.0",
1825
+ "jsprim": "^1.2.2",
1826
+ "sshpk": "^1.7.0"
1827
+ },
1828
+ "engines": {
1829
+ "node": ">=0.8",
1830
+ "npm": ">=1.3.7"
1831
+ }
1832
+ },
1833
  "node_modules/https-proxy-agent": {
1834
  "version": "5.0.1",
1835
  "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
 
1842
  "node": ">= 6"
1843
  }
1844
  },
1845
+ "node_modules/humanize-ms": {
1846
+ "version": "1.2.1",
1847
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
1848
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
1849
+ "dependencies": {
1850
+ "ms": "^2.0.0"
1851
+ }
1852
+ },
1853
  "node_modules/i": {
1854
  "version": "0.3.7",
1855
  "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz",
 
1963
  "node": ">=0.12.0"
1964
  }
1965
  },
1966
+ "node_modules/is-promise": {
1967
+ "version": "2.2.2",
1968
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
1969
+ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
1970
+ },
1971
+ "node_modules/is-typedarray": {
1972
+ "version": "1.0.0",
1973
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1974
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
1975
+ },
1976
  "node_modules/isexe": {
1977
  "version": "2.0.0",
1978
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1979
  "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
1980
  },
1981
+ "node_modules/isstream": {
1982
+ "version": "0.1.2",
1983
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
1984
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
1985
+ },
1986
  "node_modules/jackspeak": {
1987
  "version": "2.3.6",
1988
  "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
 
2012
  "@sideway/pinpoint": "^2.0.0"
2013
  }
2014
  },
2015
+ "node_modules/jsbn": {
2016
+ "version": "0.1.1",
2017
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
2018
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
2019
+ },
2020
+ "node_modules/json-schema": {
2021
+ "version": "0.4.0",
2022
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
2023
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
2024
+ },
2025
+ "node_modules/json-schema-traverse": {
2026
+ "version": "0.4.1",
2027
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
2028
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
2029
+ },
2030
+ "node_modules/json-stringify-safe": {
2031
+ "version": "5.0.1",
2032
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
2033
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
2034
+ },
2035
  "node_modules/json5": {
2036
  "version": "2.2.3",
2037
  "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
 
2065
  "npm": ">=6"
2066
  }
2067
  },
2068
+ "node_modules/jsprim": {
2069
+ "version": "1.4.2",
2070
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
2071
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
2072
+ "dependencies": {
2073
+ "assert-plus": "1.0.0",
2074
+ "extsprintf": "1.3.0",
2075
+ "json-schema": "0.4.0",
2076
+ "verror": "1.10.0"
2077
+ },
2078
+ "engines": {
2079
+ "node": ">=0.6.0"
2080
+ }
2081
+ },
2082
  "node_modules/jwa": {
2083
  "version": "1.4.1",
2084
  "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
 
2152
  "node": ">=10"
2153
  }
2154
  },
2155
+ "node_modules/lru-queue": {
2156
+ "version": "0.1.0",
2157
+ "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
2158
+ "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==",
2159
+ "dependencies": {
2160
+ "es5-ext": "~0.10.2"
2161
+ }
2162
+ },
2163
  "node_modules/make-dir": {
2164
  "version": "3.1.0",
2165
  "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
 
2196
  "node": ">= 0.6"
2197
  }
2198
  },
2199
+ "node_modules/memoizee": {
2200
+ "version": "0.4.17",
2201
+ "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz",
2202
+ "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==",
2203
+ "dependencies": {
2204
+ "d": "^1.0.2",
2205
+ "es5-ext": "^0.10.64",
2206
+ "es6-weak-map": "^2.0.3",
2207
+ "event-emitter": "^0.3.5",
2208
+ "is-promise": "^2.2.2",
2209
+ "lru-queue": "^0.1.0",
2210
+ "next-tick": "^1.1.0",
2211
+ "timers-ext": "^0.1.7"
2212
+ },
2213
+ "engines": {
2214
+ "node": ">=0.12"
2215
+ }
2216
+ },
2217
  "node_modules/memory-pager": {
2218
  "version": "1.5.0",
2219
  "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
 
2467
  "node": ">= 0.6"
2468
  }
2469
  },
2470
+ "node_modules/next-tick": {
2471
+ "version": "1.1.0",
2472
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
2473
+ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
2474
+ },
2475
  "node_modules/node-addon-api": {
2476
  "version": "5.1.0",
2477
  "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
2478
  "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA=="
2479
  },
2480
+ "node_modules/node-domexception": {
2481
+ "version": "1.0.0",
2482
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
2483
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
2484
+ "funding": [
2485
+ {
2486
+ "type": "github",
2487
+ "url": "https://github.com/sponsors/jimmywarting"
2488
+ },
2489
+ {
2490
+ "type": "github",
2491
+ "url": "https://paypal.me/jimmywarting"
2492
+ }
2493
+ ],
2494
+ "engines": {
2495
+ "node": ">=10.5.0"
2496
+ }
2497
+ },
2498
  "node_modules/node-fetch": {
2499
  "version": "2.7.0",
2500
  "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
 
5326
  "set-blocking": "^2.0.0"
5327
  }
5328
  },
5329
+ "node_modules/oauth-sign": {
5330
+ "version": "0.9.0",
5331
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
5332
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
5333
+ "engines": {
5334
+ "node": "*"
5335
+ }
5336
+ },
5337
  "node_modules/object-assign": {
5338
  "version": "4.1.1",
5339
  "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
 
5369
  "wrappy": "1"
5370
  }
5371
  },
5372
+ "node_modules/openai": {
5373
+ "version": "4.52.0",
5374
+ "resolved": "https://registry.npmjs.org/openai/-/openai-4.52.0.tgz",
5375
+ "integrity": "sha512-xmiNcdA9QJ5wffHpZDpIsge6AsPTETJ6h5iqDNuFQ7qGSNtonHn8Qe0VHy4UwLE8rBWiSqh4j+iSvuYZSeKkPg==",
5376
+ "dependencies": {
5377
+ "@types/node": "^18.11.18",
5378
+ "@types/node-fetch": "^2.6.4",
5379
+ "abort-controller": "^3.0.0",
5380
+ "agentkeepalive": "^4.2.1",
5381
+ "form-data-encoder": "1.7.2",
5382
+ "formdata-node": "^4.3.2",
5383
+ "node-fetch": "^2.6.7",
5384
+ "web-streams-polyfill": "^3.2.1"
5385
+ },
5386
+ "bin": {
5387
+ "openai": "bin/cli"
5388
+ }
5389
+ },
5390
+ "node_modules/openai-node": {
5391
+ "version": "1.0.5",
5392
+ "resolved": "https://registry.npmjs.org/openai-node/-/openai-node-1.0.5.tgz",
5393
+ "integrity": "sha512-DFHdyrbU2E+OKZHfR038XNuOZBr8MiU7n7QLUqGkEHNTXtDtTNaPTHs3kkbk7PQQPev6eSbuQIAvBmS+QoOeXw==",
5394
+ "dependencies": {
5395
+ "request": "^2.88.2"
5396
+ }
5397
+ },
5398
+ "node_modules/openai/node_modules/@types/node": {
5399
+ "version": "18.19.37",
5400
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.37.tgz",
5401
+ "integrity": "sha512-Pi53fdVMk7Ig5IfAMltQQMgtY7xLzHaEous8IQasYsdQbYK3v90FkxI3XYQCe/Qme58pqp14lXJIsFmGP8VoZQ==",
5402
+ "dependencies": {
5403
+ "undici-types": "~5.26.4"
5404
+ }
5405
+ },
5406
  "node_modules/parseurl": {
5407
  "version": "1.3.3",
5408
  "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
 
5478
  "node": ">=8"
5479
  }
5480
  },
5481
+ "node_modules/performance-now": {
5482
+ "version": "2.1.0",
5483
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
5484
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
5485
+ },
5486
  "node_modules/picomatch": {
5487
  "version": "2.3.1",
5488
  "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
 
5525
  "node": ">= 0.10"
5526
  }
5527
  },
5528
+ "node_modules/psl": {
5529
+ "version": "1.9.0",
5530
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
5531
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
5532
+ },
5533
  "node_modules/pstree.remy": {
5534
  "version": "1.1.8",
5535
  "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
 
5617
  "node": ">=8.10.0"
5618
  }
5619
  },
5620
+ "node_modules/request": {
5621
+ "version": "2.88.2",
5622
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
5623
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
5624
+ "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
5625
+ "dependencies": {
5626
+ "aws-sign2": "~0.7.0",
5627
+ "aws4": "^1.8.0",
5628
+ "caseless": "~0.12.0",
5629
+ "combined-stream": "~1.0.6",
5630
+ "extend": "~3.0.2",
5631
+ "forever-agent": "~0.6.1",
5632
+ "form-data": "~2.3.2",
5633
+ "har-validator": "~5.1.3",
5634
+ "http-signature": "~1.2.0",
5635
+ "is-typedarray": "~1.0.0",
5636
+ "isstream": "~0.1.2",
5637
+ "json-stringify-safe": "~5.0.1",
5638
+ "mime-types": "~2.1.19",
5639
+ "oauth-sign": "~0.9.0",
5640
+ "performance-now": "^2.1.0",
5641
+ "qs": "~6.5.2",
5642
+ "safe-buffer": "^5.1.2",
5643
+ "tough-cookie": "~2.5.0",
5644
+ "tunnel-agent": "^0.6.0",
5645
+ "uuid": "^3.3.2"
5646
+ },
5647
+ "engines": {
5648
+ "node": ">= 6"
5649
+ }
5650
+ },
5651
+ "node_modules/request/node_modules/form-data": {
5652
+ "version": "2.3.3",
5653
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
5654
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
5655
+ "dependencies": {
5656
+ "asynckit": "^0.4.0",
5657
+ "combined-stream": "^1.0.6",
5658
+ "mime-types": "^2.1.12"
5659
+ },
5660
+ "engines": {
5661
+ "node": ">= 0.12"
5662
+ }
5663
+ },
5664
+ "node_modules/request/node_modules/qs": {
5665
+ "version": "6.5.3",
5666
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
5667
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
5668
+ "engines": {
5669
+ "node": ">=0.6"
5670
+ }
5671
+ },
5672
+ "node_modules/request/node_modules/uuid": {
5673
+ "version": "3.4.0",
5674
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
5675
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
5676
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
5677
+ "bin": {
5678
+ "uuid": "bin/uuid"
5679
+ }
5680
+ },
5681
  "node_modules/resolve": {
5682
  "version": "1.22.8",
5683
  "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
 
5965
  "memory-pager": "^1.0.2"
5966
  }
5967
  },
5968
+ "node_modules/sshpk": {
5969
+ "version": "1.18.0",
5970
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
5971
+ "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
5972
+ "dependencies": {
5973
+ "asn1": "~0.2.3",
5974
+ "assert-plus": "^1.0.0",
5975
+ "bcrypt-pbkdf": "^1.0.0",
5976
+ "dashdash": "^1.12.0",
5977
+ "ecc-jsbn": "~0.1.1",
5978
+ "getpass": "^0.1.1",
5979
+ "jsbn": "~0.1.0",
5980
+ "safer-buffer": "^2.0.2",
5981
+ "tweetnacl": "~0.14.0"
5982
+ },
5983
+ "bin": {
5984
+ "sshpk-conv": "bin/sshpk-conv",
5985
+ "sshpk-sign": "bin/sshpk-sign",
5986
+ "sshpk-verify": "bin/sshpk-verify"
5987
+ },
5988
+ "engines": {
5989
+ "node": ">=0.10.0"
5990
+ }
5991
+ },
5992
  "node_modules/statuses": {
5993
  "version": "2.0.1",
5994
  "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
 
6132
  "node": ">=10"
6133
  }
6134
  },
6135
+ "node_modules/text-generation": {
6136
+ "version": "0.1.2",
6137
+ "resolved": "https://registry.npmjs.org/text-generation/-/text-generation-0.1.2.tgz",
6138
+ "integrity": "sha512-H3pVia6ar8vcdtwQpxQp2A/cyXZZG78C4wN9vpg9kk7MtlgM2TjkL8mMc6sfjUysnKxFthB2C9ZAkvvjtSRd1w==",
6139
+ "dependencies": {
6140
+ "@types/chance": "^1.1.3",
6141
+ "@types/memoizee": "^0.4.8",
6142
+ "@types/node": "^14.14.31",
6143
+ "chalk": "^5.0.1",
6144
+ "chance": "^1.1.8",
6145
+ "memoizee": "^0.4.15"
6146
+ },
6147
+ "engines": {
6148
+ "node": ">=12.10.0"
6149
+ }
6150
+ },
6151
+ "node_modules/text-generation/node_modules/@types/node": {
6152
+ "version": "14.18.63",
6153
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz",
6154
+ "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ=="
6155
+ },
6156
+ "node_modules/timers-ext": {
6157
+ "version": "0.1.8",
6158
+ "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz",
6159
+ "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==",
6160
+ "dependencies": {
6161
+ "es5-ext": "^0.10.64",
6162
+ "next-tick": "^1.1.0"
6163
+ },
6164
+ "engines": {
6165
+ "node": ">=0.12"
6166
+ }
6167
+ },
6168
  "node_modules/to-regex-range": {
6169
  "version": "5.0.1",
6170
  "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
 
6196
  "nodetouch": "bin/nodetouch.js"
6197
  }
6198
  },
6199
+ "node_modules/tough-cookie": {
6200
+ "version": "2.5.0",
6201
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
6202
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
6203
+ "dependencies": {
6204
+ "psl": "^1.1.28",
6205
+ "punycode": "^2.1.1"
6206
+ },
6207
+ "engines": {
6208
+ "node": ">=0.8"
6209
+ }
6210
+ },
6211
  "node_modules/tr46": {
6212
  "version": "3.0.0",
6213
  "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
 
6379
  "node": ">=6"
6380
  }
6381
  },
6382
+ "node_modules/tunnel-agent": {
6383
+ "version": "0.6.0",
6384
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
6385
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
6386
+ "dependencies": {
6387
+ "safe-buffer": "^5.0.1"
6388
+ },
6389
+ "engines": {
6390
+ "node": "*"
6391
+ }
6392
+ },
6393
+ "node_modules/tweetnacl": {
6394
+ "version": "0.14.5",
6395
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
6396
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
6397
+ },
6398
+ "node_modules/type": {
6399
+ "version": "2.7.3",
6400
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
6401
+ "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ=="
6402
+ },
6403
  "node_modules/type-is": {
6404
  "version": "1.6.18",
6405
  "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
 
6444
  "node": ">= 0.8"
6445
  }
6446
  },
6447
+ "node_modules/uri-js": {
6448
+ "version": "4.4.1",
6449
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
6450
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
6451
+ "dependencies": {
6452
+ "punycode": "^2.1.0"
6453
+ }
6454
+ },
6455
  "node_modules/util": {
6456
  "version": "0.10.4",
6457
  "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
 
6504
  "node": ">= 0.8"
6505
  }
6506
  },
6507
+ "node_modules/verror": {
6508
+ "version": "1.10.0",
6509
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
6510
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
6511
+ "engines": [
6512
+ "node >=0.6.0"
6513
+ ],
6514
+ "dependencies": {
6515
+ "assert-plus": "^1.0.0",
6516
+ "core-util-is": "1.0.2",
6517
+ "extsprintf": "^1.2.0"
6518
+ }
6519
+ },
6520
+ "node_modules/web-streams-polyfill": {
6521
+ "version": "3.3.3",
6522
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
6523
+ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
6524
+ "engines": {
6525
+ "node": ">= 8"
6526
+ }
6527
+ },
6528
  "node_modules/webidl-conversions": {
6529
  "version": "7.0.0",
6530
  "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
src/common/models/equipment.model.ts CHANGED
@@ -4,11 +4,13 @@ const { Schema } = mongoose;
4
  export interface IEquipment {
5
  name: string;
6
  image: string;
 
7
  }
8
 
9
  const equipmentSchema = new Schema({
10
  name: { type: String, required: true, unique: true, dropDups: true },
11
  image: { type: String, required: true },
 
12
  });
13
 
14
  export type EquipmentDocument = IEquipment & mongoose.Document;
 
4
  export interface IEquipment {
5
  name: string;
6
  image: string;
7
+ isDeleted: boolean;
8
  }
9
 
10
  const equipmentSchema = new Schema({
11
  name: { type: String, required: true, unique: true, dropDups: true },
12
  image: { type: String, required: true },
13
+ isDeleted: { type: Boolean, default: false },
14
  });
15
 
16
  export type EquipmentDocument = IEquipment & mongoose.Document;
src/common/models/exercise.model.ts CHANGED
@@ -25,6 +25,7 @@ export interface IExercise {
25
  type: "image" | "video";
26
  url: string;
27
  };
 
28
  }
29
 
30
  const exerciseSchema = new Schema<IExercise>({
@@ -58,6 +59,7 @@ const exerciseSchema = new Schema<IExercise>({
58
  },
59
  url: { type: String, required: true },
60
  },
 
61
  });
62
 
63
  export type ExerciseDocument = IExercise & mongoose.Document;
 
25
  type: "image" | "video";
26
  url: string;
27
  };
28
+ isDeleted: boolean;
29
  }
30
 
31
  const exerciseSchema = new Schema<IExercise>({
 
59
  },
60
  url: { type: String, required: true },
61
  },
62
+ isDeleted: { type: Boolean, default: false },
63
  });
64
 
65
  export type ExerciseDocument = IExercise & mongoose.Document;
src/common/models/ingredient.model.ts CHANGED
@@ -11,6 +11,7 @@ export interface IIngredient {
11
  carbs: number;
12
  proteins: number;
13
  fats: number;
 
14
  }
15
 
16
  const ingredientSchema = new Schema({
@@ -23,6 +24,7 @@ const ingredientSchema = new Schema({
23
  carbs: { type: Number, required: true },
24
  proteins: { type: Number, required: true },
25
  fats: { type: Number, required: true },
 
26
  });
27
 
28
 
 
11
  carbs: number;
12
  proteins: number;
13
  fats: number;
14
+ isDeleted: boolean;
15
  }
16
 
17
  const ingredientSchema = new Schema({
 
24
  carbs: { type: Number, required: true },
25
  proteins: { type: Number, required: true },
26
  fats: { type: Number, required: true },
27
+ isDeleted: { type: Boolean, default: false },
28
  });
29
 
30
 
src/common/models/meal-plan.model.ts CHANGED
@@ -17,6 +17,7 @@ export interface IMealPlan {
17
  meals: mongoose.Types.ObjectId[];
18
  }[];
19
  aiGenerated: boolean;
 
20
  }
21
 
22
  const mealPlanSchema = new Schema({
@@ -38,6 +39,7 @@ const mealPlanSchema = new Schema({
38
  },
39
  ],
40
  aiGenerated: { type: Boolean, required: true, default: false },
 
41
  });
42
 
43
 
 
17
  meals: mongoose.Types.ObjectId[];
18
  }[];
19
  aiGenerated: boolean;
20
+ isDeleted: boolean;
21
  }
22
 
23
  const mealPlanSchema = new Schema({
 
39
  },
40
  ],
41
  aiGenerated: { type: Boolean, required: true, default: false },
42
+ isDeleted: { type: Boolean, default: false },
43
  });
44
 
45
 
src/common/models/meal.model.ts CHANGED
@@ -11,6 +11,7 @@ export interface IMeal {
11
  proteins: number;
12
  fats: number;
13
  type: MealType;
 
14
  }
15
 
16
  const mealSchema = new Schema({
@@ -27,6 +28,7 @@ const mealSchema = new Schema({
27
  carbs: { type: Number, required: true },
28
  proteins: { type: Number, required: true },
29
  fats: { type: Number, required: true },
 
30
  });
31
 
32
 
 
11
  proteins: number;
12
  fats: number;
13
  type: MealType;
14
+ isDeleted: boolean;
15
  }
16
 
17
  const mealSchema = new Schema({
 
28
  carbs: { type: Number, required: true },
29
  proteins: { type: Number, required: true },
30
  fats: { type: Number, required: true },
31
+ isDeleted: { type: Boolean, default: false },
32
  });
33
 
34
 
src/common/models/muscle.model.ts CHANGED
@@ -4,11 +4,13 @@ const { Schema } = mongoose;
4
  export interface IMuscle {
5
  name: string;
6
  image: string;
 
7
  }
8
 
9
  const muscleSchema = new Schema({
10
  name: { type: String, required: true, unique: true, dropDups: true },
11
  image: { type: String, required: true },
 
12
  });
13
 
14
  export type MuscleDocument = IMuscle & mongoose.Document;
 
4
  export interface IMuscle {
5
  name: string;
6
  image: string;
7
+ isDeleted: boolean;
8
  }
9
 
10
  const muscleSchema = new Schema({
11
  name: { type: String, required: true, unique: true, dropDups: true },
12
  image: { type: String, required: true },
13
+ isDeleted: { type: Boolean, default: false },
14
  });
15
 
16
  export type MuscleDocument = IMuscle & mongoose.Document;
src/common/models/workout.model.ts CHANGED
@@ -32,6 +32,7 @@ export interface IWorkout {
32
  },
33
  ],
34
  aiGenerated: boolean;
 
35
  }
36
 
37
  const workoutSchema = new Schema({
@@ -63,6 +64,7 @@ const workoutSchema = new Schema({
63
  },
64
  ],
65
  aiGenerated: { type: Boolean, required: true, default: false },
 
66
  });
67
 
68
 
 
32
  },
33
  ],
34
  aiGenerated: boolean;
35
+ isDeleted: boolean;
36
  }
37
 
38
  const workoutSchema = new Schema({
 
64
  },
65
  ],
66
  aiGenerated: { type: Boolean, required: true, default: false },
67
+ isDeleted: { type: Boolean, default: false },
68
  });
69
 
70
 
src/lib/services/crud.service.ts CHANGED
@@ -31,7 +31,7 @@ export const CrudService = <ModelDoc extends Document>(
31
  checkExists: boolean = true
32
  ): Promise<ModelDoc[]> {
33
  filter = { ...crudOptions?.defaultFilter, ...filter };
34
- if(checkExists)
35
  await this.existsOrThrow(filter);
36
  await this.model.updateMany(filter, data);
37
  return this.model.find(filter);
@@ -42,9 +42,17 @@ export const CrudService = <ModelDoc extends Document>(
42
  await this.existsOrThrow(filter);
43
  return this.model.findOneAndDelete(filter);
44
  }
 
 
 
 
 
 
 
 
45
 
46
  async list(
47
- filter: FilterQuery<ModelDoc>,
48
  paginationOptions: {
49
  limit?: number;
50
  skip?: number;
@@ -66,7 +74,7 @@ export const CrudService = <ModelDoc extends Document>(
66
  }> {
67
  if (options?.filterOptions) filter = { ...filter, ...options.filterOptions };
68
  filter = { ...crudOptions?.defaultFilter, ...filter };
69
-
70
  const queryInstruction = this.model
71
  .find(filter)
72
  .limit(paginationOptions.limit)
 
31
  checkExists: boolean = true
32
  ): Promise<ModelDoc[]> {
33
  filter = { ...crudOptions?.defaultFilter, ...filter };
34
+ if (checkExists)
35
  await this.existsOrThrow(filter);
36
  await this.model.updateMany(filter, data);
37
  return this.model.find(filter);
 
42
  await this.existsOrThrow(filter);
43
  return this.model.findOneAndDelete(filter);
44
  }
45
+ async softDelete(
46
+ filter: FilterQuery<ModelDoc>
47
+ ): Promise<ModelDoc> {
48
+ filter = { ...crudOptions?.defaultFilter, ...filter };
49
+ await this.existsOrThrow(filter);
50
+ await this.model.updateOne(filter, { isDeleted: true });
51
+ return this.findOneOrFail(filter);
52
+ }
53
 
54
  async list(
55
+ filter: FilterQuery<ModelDoc>,
56
  paginationOptions: {
57
  limit?: number;
58
  skip?: number;
 
74
  }> {
75
  if (options?.filterOptions) filter = { ...filter, ...options.filterOptions };
76
  filter = { ...crudOptions?.defaultFilter, ...filter };
77
+
78
  const queryInstruction = this.model
79
  .find(filter)
80
  .limit(paginationOptions.limit)
src/modules/console/modules/equipments/controllers/equipments.controller.ts CHANGED
@@ -60,7 +60,7 @@ export class EquipmentsController extends BaseController {
60
  list = async (req: Request, res: Response) => {
61
  const paginationQuery = parsePaginationQuery(req.query);
62
  const { docs, paginationData } = await this.equipmentsService.list(
63
- {},
64
  paginationQuery
65
  );
66
 
@@ -80,6 +80,7 @@ export class EquipmentsController extends BaseController {
80
  get = async (req: Request, res: Response) => {
81
  const data = await this.equipmentsService.findOneOrFail({
82
  _id: req.params.id,
 
83
  });
84
  return JsonResponse.success(
85
  {
@@ -128,7 +129,7 @@ export class EquipmentsController extends BaseController {
128
  @SwaggerSummary("Delete equipment")
129
  @SwaggerDescription("Delete a equipment by id")
130
  delete = async (req: Request, res: Response) => {
131
- const data = await this.equipmentsService.deleteOne({ _id: req.params.id });
132
  return JsonResponse.success(
133
  {
134
  data: serialize(data.toJSON(), EquipmentSerialization),
 
60
  list = async (req: Request, res: Response) => {
61
  const paginationQuery = parsePaginationQuery(req.query);
62
  const { docs, paginationData } = await this.equipmentsService.list(
63
+ { isDeleted: false },
64
  paginationQuery
65
  );
66
 
 
80
  get = async (req: Request, res: Response) => {
81
  const data = await this.equipmentsService.findOneOrFail({
82
  _id: req.params.id,
83
+ isDeleted: false
84
  });
85
  return JsonResponse.success(
86
  {
 
129
  @SwaggerSummary("Delete equipment")
130
  @SwaggerDescription("Delete a equipment by id")
131
  delete = async (req: Request, res: Response) => {
132
+ const data = await this.equipmentsService.softDelete({ _id: req.params.id });
133
  return JsonResponse.success(
134
  {
135
  data: serialize(data.toJSON(), EquipmentSerialization),
src/modules/console/modules/exercises/controllers/exercises.controller.ts CHANGED
@@ -56,7 +56,7 @@ export class ExercisesController extends BaseController {
56
  list = async (req: Request, res: Response) => {
57
  const paginationQuery = parsePaginationQuery(req.query);
58
  const { docs, paginationData } = await this.exercisesService.list(
59
- {},
60
  paginationQuery,
61
  );
62
 
@@ -77,6 +77,7 @@ export class ExercisesController extends BaseController {
77
  const data = await this.exercisesService.findOneOrFail(
78
  {
79
  _id: req.params.id,
 
80
  },
81
  );
82
  return JsonResponse.success(
@@ -125,7 +126,7 @@ export class ExercisesController extends BaseController {
125
  @SwaggerSummary("Delete exercise")
126
  @SwaggerDescription("Delete a single exercise by id")
127
  delete = async (req: Request, res: Response) => {
128
- await this.exercisesService.deleteOne({ _id: req.params.id });
129
  return JsonResponse.success({}, res);
130
  };
131
  }
 
56
  list = async (req: Request, res: Response) => {
57
  const paginationQuery = parsePaginationQuery(req.query);
58
  const { docs, paginationData } = await this.exercisesService.list(
59
+ { isDeleted: false },
60
  paginationQuery,
61
  );
62
 
 
77
  const data = await this.exercisesService.findOneOrFail(
78
  {
79
  _id: req.params.id,
80
+ isDeleted: false
81
  },
82
  );
83
  return JsonResponse.success(
 
126
  @SwaggerSummary("Delete exercise")
127
  @SwaggerDescription("Delete a single exercise by id")
128
  delete = async (req: Request, res: Response) => {
129
+ await this.exercisesService.softDelete({ _id: req.params.id });
130
  return JsonResponse.success({}, res);
131
  };
132
  }
src/modules/console/modules/ingredients/controller/ingredients.controller.ts CHANGED
@@ -50,11 +50,11 @@ export class AdminsIngredientsController extends BaseController {
50
  @SwaggerQuery({
51
  limit: "number",
52
  skip: "number",
53
- })
54
  list = async (req: Request, res: Response) => {
55
  const paginationQuery = parsePaginationQuery(req.query);
56
  const { docs, paginationData } = await this.ingredientsService.list(
57
- {},
58
  paginationQuery
59
  );
60
 
@@ -74,6 +74,7 @@ export class AdminsIngredientsController extends BaseController {
74
  get = async (req: Request, res: Response) => {
75
  const data = await this.ingredientsService.findOneOrFail({
76
  _id: req.params.id,
 
77
  });
78
  return JsonResponse.success(
79
  {
@@ -122,7 +123,7 @@ export class AdminsIngredientsController extends BaseController {
122
  @SwaggerSummary('Delete ingredient')
123
  @SwaggerDescription('Delete an ingredient by id')
124
  delete = async (req: Request, res: Response) => {
125
- const data = await this.ingredientsService.deleteOne({ _id: req.params.id });
126
  return JsonResponse.success(
127
  {
128
  data: serialize(data.toJSON(), IngredientSerialization),
 
50
  @SwaggerQuery({
51
  limit: "number",
52
  skip: "number",
53
+ })
54
  list = async (req: Request, res: Response) => {
55
  const paginationQuery = parsePaginationQuery(req.query);
56
  const { docs, paginationData } = await this.ingredientsService.list(
57
+ { isDeleted: false },
58
  paginationQuery
59
  );
60
 
 
74
  get = async (req: Request, res: Response) => {
75
  const data = await this.ingredientsService.findOneOrFail({
76
  _id: req.params.id,
77
+ isDeleted: false
78
  });
79
  return JsonResponse.success(
80
  {
 
123
  @SwaggerSummary('Delete ingredient')
124
  @SwaggerDescription('Delete an ingredient by id')
125
  delete = async (req: Request, res: Response) => {
126
+ const data = await this.ingredientsService.softDelete({ _id: req.params.id });
127
  return JsonResponse.success(
128
  {
129
  data: serialize(data.toJSON(), IngredientSerialization),
src/modules/console/modules/meal-plans/controller/meal-plans.controller.ts CHANGED
@@ -50,11 +50,11 @@ export class AdminsMealPlansController extends BaseController {
50
  @SwaggerQuery({
51
  limit: "number",
52
  skip: "number",
53
- })
54
  list = async (req: Request, res: Response) => {
55
  const paginationQuery = parsePaginationQuery(req.query);
56
  const { docs, paginationData } = await this.mealPlansService.list(
57
- {},
58
  paginationQuery,
59
  );
60
 
@@ -75,6 +75,7 @@ export class AdminsMealPlansController extends BaseController {
75
  const data = await this.mealPlansService.findOneOrFail(
76
  {
77
  _id: req.params.id,
 
78
  },
79
  );
80
  return JsonResponse.success(
@@ -124,7 +125,7 @@ export class AdminsMealPlansController extends BaseController {
124
  @SwaggerSummary('Delete meal plan')
125
  @SwaggerDescription('Delete a meal plan by id')
126
  delete = async (req: Request, res: Response) => {
127
- const data = await this.mealPlansService.deleteOne({ _id: req.params.id });
128
  return JsonResponse.success(
129
  {
130
  data: serialize(data.toJSON(), MealPlanSerialization),
 
50
  @SwaggerQuery({
51
  limit: "number",
52
  skip: "number",
53
+ })
54
  list = async (req: Request, res: Response) => {
55
  const paginationQuery = parsePaginationQuery(req.query);
56
  const { docs, paginationData } = await this.mealPlansService.list(
57
+ { isDeleted: false },
58
  paginationQuery,
59
  );
60
 
 
75
  const data = await this.mealPlansService.findOneOrFail(
76
  {
77
  _id: req.params.id,
78
+ isDeleted: false
79
  },
80
  );
81
  return JsonResponse.success(
 
125
  @SwaggerSummary('Delete meal plan')
126
  @SwaggerDescription('Delete a meal plan by id')
127
  delete = async (req: Request, res: Response) => {
128
+ const data = await this.mealPlansService.softDelete({ _id: req.params.id });
129
  return JsonResponse.success(
130
  {
131
  data: serialize(data.toJSON(), MealPlanSerialization),
src/modules/console/modules/meals/controller/meals.controller.ts CHANGED
@@ -50,11 +50,11 @@ export class AdminsMealsController extends BaseController {
50
  @SwaggerQuery({
51
  limit: "number",
52
  skip: "number",
53
- })
54
  list = async (req: Request, res: Response) => {
55
  const paginationQuery = parsePaginationQuery(req.query);
56
  const { docs, paginationData } = await this.mealsService.list(
57
- {},
58
  paginationQuery,
59
  );
60
 
@@ -75,6 +75,7 @@ export class AdminsMealsController extends BaseController {
75
  const data = await this.mealsService.findOneOrFail(
76
  {
77
  _id: req.params.id,
 
78
  },
79
  );
80
  return JsonResponse.success(
@@ -124,7 +125,7 @@ export class AdminsMealsController extends BaseController {
124
  @SwaggerSummary('Delete meal')
125
  @SwaggerDescription('Delete a meal by id')
126
  delete = async (req: Request, res: Response) => {
127
- const data = await this.mealsService.deleteOne({ _id: req.params.id });
128
  return JsonResponse.success(
129
  {
130
  data: serialize(data.toJSON(), MealSerialization),
 
50
  @SwaggerQuery({
51
  limit: "number",
52
  skip: "number",
53
+ })
54
  list = async (req: Request, res: Response) => {
55
  const paginationQuery = parsePaginationQuery(req.query);
56
  const { docs, paginationData } = await this.mealsService.list(
57
+ { isDeleted: false },
58
  paginationQuery,
59
  );
60
 
 
75
  const data = await this.mealsService.findOneOrFail(
76
  {
77
  _id: req.params.id,
78
+ isDeleted: false
79
  },
80
  );
81
  return JsonResponse.success(
 
125
  @SwaggerSummary('Delete meal')
126
  @SwaggerDescription('Delete a meal by id')
127
  delete = async (req: Request, res: Response) => {
128
+ const data = await this.mealsService.softDelete({ _id: req.params.id });
129
  return JsonResponse.success(
130
  {
131
  data: serialize(data.toJSON(), MealSerialization),
src/modules/console/modules/muscles/controllers/muscles.controller.ts CHANGED
@@ -50,11 +50,11 @@ export class MusclesController extends BaseController {
50
  @SwaggerQuery({
51
  limit: "number",
52
  skip: "number",
53
- })
54
  list = async (req: Request, res: Response) => {
55
  const paginationQuery = parsePaginationQuery(req.query);
56
  const { docs, paginationData } = await this.musclesService.list(
57
- {},
58
  paginationQuery
59
  );
60
 
@@ -74,6 +74,7 @@ export class MusclesController extends BaseController {
74
  get = async (req: Request, res: Response) => {
75
  const data = await this.musclesService.findOneOrFail({
76
  _id: req.params.id,
 
77
  });
78
  return JsonResponse.success(
79
  {
@@ -122,7 +123,7 @@ export class MusclesController extends BaseController {
122
  @SwaggerSummary("Delete muscle")
123
  @SwaggerDescription("Delete a muscle by id")
124
  delete = async (req: Request, res: Response) => {
125
- const data = await this.musclesService.deleteOne({ _id: req.params.id });
126
  return JsonResponse.success(
127
  {
128
  data: serialize(data.toJSON(), MuscleSerialization),
 
50
  @SwaggerQuery({
51
  limit: "number",
52
  skip: "number",
53
+ })
54
  list = async (req: Request, res: Response) => {
55
  const paginationQuery = parsePaginationQuery(req.query);
56
  const { docs, paginationData } = await this.musclesService.list(
57
+ { isDeleted: false },
58
  paginationQuery
59
  );
60
 
 
74
  get = async (req: Request, res: Response) => {
75
  const data = await this.musclesService.findOneOrFail({
76
  _id: req.params.id,
77
+ isDeleted: false
78
  });
79
  return JsonResponse.success(
80
  {
 
123
  @SwaggerSummary("Delete muscle")
124
  @SwaggerDescription("Delete a muscle by id")
125
  delete = async (req: Request, res: Response) => {
126
+ const data = await this.musclesService.softDelete({ _id: req.params.id });
127
  return JsonResponse.success(
128
  {
129
  data: serialize(data.toJSON(), MuscleSerialization),
src/modules/console/modules/workouts/controllers/workouts.controller.ts CHANGED
@@ -61,7 +61,7 @@ export class WorkoutController extends BaseController {
61
  list = async (req: Request, res: Response) => {
62
  const paginationQuery = parsePaginationQuery(req.query);
63
  const { docs, paginationData } = await this.workoutsService.list(
64
- {},
65
  paginationQuery,
66
  );
67
 
@@ -82,6 +82,7 @@ export class WorkoutController extends BaseController {
82
  const data = await this.workoutsService.findOneOrFail(
83
  {
84
  _id: req.params.id,
 
85
  },
86
  );
87
  return JsonResponse.success(
@@ -131,7 +132,7 @@ export class WorkoutController extends BaseController {
131
  @SwaggerSummary("Delete workout")
132
  @SwaggerDescription("Delete a workout by id")
133
  delete = async (req: Request, res: Response) => {
134
- const data = await this.workoutsService.deleteOne({ _id: req.params.id });
135
  return JsonResponse.success(
136
  {
137
  data: serialize(data.toJSON(), WorkoutSerialization),
 
61
  list = async (req: Request, res: Response) => {
62
  const paginationQuery = parsePaginationQuery(req.query);
63
  const { docs, paginationData } = await this.workoutsService.list(
64
+ { isDeleted: false },
65
  paginationQuery,
66
  );
67
 
 
82
  const data = await this.workoutsService.findOneOrFail(
83
  {
84
  _id: req.params.id,
85
+ isDeleted: false
86
  },
87
  );
88
  return JsonResponse.success(
 
132
  @SwaggerSummary("Delete workout")
133
  @SwaggerDescription("Delete a workout by id")
134
  delete = async (req: Request, res: Response) => {
135
+ const data = await this.workoutsService.softDelete({ _id: req.params.id });
136
  return JsonResponse.success(
137
  {
138
  data: serialize(data.toJSON(), WorkoutSerialization),
src/modules/users/modules/exercises/controllers/exercises.controller.ts CHANGED
@@ -41,7 +41,7 @@ export class UsersExerciseController extends BaseController {
41
  const paginationQuery = parsePaginationQuery(req.query);
42
 
43
  let filterName = req.query.filterName, filterVal = req.query.filterVal;
44
- let filter = {};
45
 
46
  if (filterName && filterVal) {
47
  filter[`${filterName}`] = filterVal;
@@ -76,6 +76,7 @@ export class UsersExerciseController extends BaseController {
76
  const data = await this.exercisesService.findOneOrFail(
77
  {
78
  _id: req.params.id,
 
79
  },
80
  {
81
  populateArray: [
@@ -136,7 +137,7 @@ export class UsersExerciseController extends BaseController {
136
  };
137
  }
138
  }
139
-
140
  const { docs, paginationData } = await this.exercisesService.search(
141
  query,
142
  paginationQuery,
 
41
  const paginationQuery = parsePaginationQuery(req.query);
42
 
43
  let filterName = req.query.filterName, filterVal = req.query.filterVal;
44
+ let filter = { isDeleted: false };
45
 
46
  if (filterName && filterVal) {
47
  filter[`${filterName}`] = filterVal;
 
76
  const data = await this.exercisesService.findOneOrFail(
77
  {
78
  _id: req.params.id,
79
+ isDeleted: false
80
  },
81
  {
82
  populateArray: [
 
137
  };
138
  }
139
  }
140
+ query = { ...query, isDeleted: false }
141
  const { docs, paginationData } = await this.exercisesService.search(
142
  query,
143
  paginationQuery,
src/modules/users/modules/ingredients/controller/ingredients.controller.ts CHANGED
@@ -41,7 +41,7 @@ export class UsersIngredientsController extends BaseController {
41
  const paginationQuery = parsePaginationQuery(req.query);
42
 
43
  let filterName = req.query.filterName, filterVal = req.query.filterVal;
44
- let filter = {};
45
 
46
  if (filterName && filterVal) {
47
  filter[`${filterName}`] = filterVal;
@@ -97,7 +97,7 @@ export class UsersIngredientsController extends BaseController {
97
  name: { $regex: searchTerm, $options: "i" }
98
  }
99
  }
100
-
101
  const { docs, paginationData } = await this.ingredientsService.search(
102
  query,
103
  paginationQuery,
 
41
  const paginationQuery = parsePaginationQuery(req.query);
42
 
43
  let filterName = req.query.filterName, filterVal = req.query.filterVal;
44
+ let filter = { isDeleted: false };
45
 
46
  if (filterName && filterVal) {
47
  filter[`${filterName}`] = filterVal;
 
97
  name: { $regex: searchTerm, $options: "i" }
98
  }
99
  }
100
+ query = { ...query, isDeleted: false }
101
  const { docs, paginationData } = await this.ingredientsService.search(
102
  query,
103
  paginationQuery,
src/modules/users/modules/meal-plans/controller/meal-plans.controller.ts CHANGED
@@ -36,7 +36,7 @@ export class UsersMealPlansController extends BaseController {
36
  list = async (req: Request, res: Response) => {
37
  const paginationQuery = parsePaginationQuery(req.query);
38
  const { docs, paginationData } = await this.mealPlansService.list(
39
- {},
40
  paginationQuery
41
  );
42
 
 
36
  list = async (req: Request, res: Response) => {
37
  const paginationQuery = parsePaginationQuery(req.query);
38
  const { docs, paginationData } = await this.mealPlansService.list(
39
+ { isDeleted: false },
40
  paginationQuery
41
  );
42
 
src/modules/users/modules/meals/controller/meals.controller.ts CHANGED
@@ -41,7 +41,7 @@ export class UsersMealsController extends BaseController {
41
  list = async (req: Request, res: Response) => {
42
  const paginationQuery = parsePaginationQuery(req.query);
43
  const { docs, paginationData } = await this.mealsService.list(
44
- {},
45
  paginationQuery,
46
  {
47
  populateArray: [
 
41
  list = async (req: Request, res: Response) => {
42
  const paginationQuery = parsePaginationQuery(req.query);
43
  const { docs, paginationData } = await this.mealsService.list(
44
+ { isDeleted: false },
45
  paginationQuery,
46
  {
47
  populateArray: [
src/modules/users/modules/templates/controllers/templates.controller.ts CHANGED
@@ -101,7 +101,7 @@ export class templateController extends BaseController {
101
  @SwaggerSummary("Create custom plan")
102
  @SwaggerDescription("Create a new custom plan")
103
  create = async (req: userRequest, res: Response) => {
104
- const data = await this.templatesService.create(req.body);
105
  return JsonResponse.success(
106
  {
107
  status: 201,
 
101
  @SwaggerSummary("Create custom plan")
102
  @SwaggerDescription("Create a new custom plan")
103
  create = async (req: userRequest, res: Response) => {
104
+ const data = await this.templatesService.createForUser(req.body);
105
  return JsonResponse.success(
106
  {
107
  status: 201,
src/modules/users/modules/templates/services/templates.service.ts CHANGED
@@ -1,6 +1,16 @@
1
  import { Template } from "@common/models/template.model";
 
2
  import { CrudService } from "@lib/services/crud.service";
3
 
 
4
  export class TemplateService extends CrudService(Template) {
5
-
 
 
 
 
 
 
 
 
6
  }
 
1
  import { Template } from "@common/models/template.model";
2
+ import { HttpError } from "@lib/error-handling/http-error";
3
  import { CrudService } from "@lib/services/crud.service";
4
 
5
+
6
  export class TemplateService extends CrudService(Template) {
7
+
8
+ async createForUser(createParams: any) {
9
+
10
+ let template = await this.model.findOne({ name: createParams.name, user: createParams.user});
11
+ if (template) {
12
+ throw new HttpError(400, "template already exists");
13
+ }
14
+ return this.model.create(createParams);
15
+ }
16
  }
src/modules/users/modules/workouts/controllers/workouts.controller.ts CHANGED
@@ -40,9 +40,9 @@ export class UsersWorkoutController extends BaseController {
40
  })
41
  list = async (req: IUserRequest, res: Response): Promise<Response> => {
42
  const paginationQuery = parsePaginationQuery(req.query);
43
-
44
  let filterName = req.query.filterName, filterVal = req.query.filterVal;
45
- let filter = {};
46
 
47
  if (filterName && filterVal) {
48
  filter[`${filterName}`] = filterVal;
@@ -68,7 +68,7 @@ export class UsersWorkoutController extends BaseController {
68
  @SwaggerDescription("Get a single workout")
69
  get = async (req: Request, res: Response): Promise<Response> => {
70
  const data = await this.workoutsService.findOneOrFail(
71
- { _id: req.params.id },
72
  {
73
  populateArray: [
74
  { path: "template_weeks.days.exercises", select: "name media reps sets" },
 
40
  })
41
  list = async (req: IUserRequest, res: Response): Promise<Response> => {
42
  const paginationQuery = parsePaginationQuery(req.query);
43
+
44
  let filterName = req.query.filterName, filterVal = req.query.filterVal;
45
+ let filter = { isDeleted: false };
46
 
47
  if (filterName && filterVal) {
48
  filter[`${filterName}`] = filterVal;
 
68
  @SwaggerDescription("Get a single workout")
69
  get = async (req: Request, res: Response): Promise<Response> => {
70
  const data = await this.workoutsService.findOneOrFail(
71
+ { _id: req.params.id, isDeleted: false },
72
  {
73
  populateArray: [
74
  { path: "template_weeks.days.exercises", select: "name media reps sets" },
src/modules/users/modules/workouts/services/workouts.service.ts CHANGED
@@ -6,7 +6,6 @@ import { CrudService } from "@lib/services/crud.service";
6
  import { calcAge } from "@lib/utils/age";
7
  import { ExerciseService } from "../../exercises/services/exercises.service";
8
  import { UserRegisteredWorkoutsService } from "../../user-registered-workouts/services/user-registered-workouts.service";
9
- import { v4 as uuidv4 } from 'uuid';
10
 
11
  export class WorkoutService extends CrudService(Workout) {
12
  private exerciseService = new ExerciseService();
@@ -48,18 +47,26 @@ export class WorkoutService extends CrudService(Workout) {
48
  hour12: false
49
  });
50
  const milliseconds = today.getMilliseconds();
51
- const uuid = uuidv4();
52
-
 
 
 
 
 
 
 
 
53
  const workout = await this.create({
54
  aiGenerated: true,
55
- name: `AI Generated Workout (${user.preferences.fitness_goal} - ${user.fitness_level}) - ${todayDate} ${currentTime}.${milliseconds} - ${uuid}`,
56
  description: `This AI-generated workout plan, created on ${todayDate} at ${currentTime}.${milliseconds}, is tailored for your ${user.fitness_level.toLowerCase()} fitness level and ${user.preferences.fitness_goal.toLowerCase()} goal. It is designed to be performed ${user.preferences.workout_place === WorkoutPlace.GYM ? "at the gym" : "at home"} using your preferred equipment.`,
57
  type: "AI Generated",
58
  created_by: user._id,
59
  image: "https://placehold.co/300x400",
60
  fitness_level: user.fitness_level,
61
  fitness_goal: user.preferences.fitness_goal,
62
- place: [user.preferences.workout_place],
63
  min_per_day: 30,
64
  total_number_days: pworkout.flat().length,
65
  template_weeks: weeks.map((week, i) => ({
 
6
  import { calcAge } from "@lib/utils/age";
7
  import { ExerciseService } from "../../exercises/services/exercises.service";
8
  import { UserRegisteredWorkoutsService } from "../../user-registered-workouts/services/user-registered-workouts.service";
 
9
 
10
  export class WorkoutService extends CrudService(Workout) {
11
  private exerciseService = new ExerciseService();
 
47
  hour12: false
48
  });
49
  const milliseconds = today.getMilliseconds();
50
+
51
+ let place = []
52
+
53
+ if (user.preferences.workout_place === WorkoutPlace.BOTH) {
54
+ place = [WorkoutPlace.GYM, WorkoutPlace.HOME]
55
+ }
56
+ else {
57
+ place = [user.preferences.workout_place]
58
+ }
59
+
60
  const workout = await this.create({
61
  aiGenerated: true,
62
+ name: `AI Generated Workout (${user.preferences.fitness_goal} - ${user.fitness_level}) - ${todayDate} ${currentTime}.${milliseconds}`,
63
  description: `This AI-generated workout plan, created on ${todayDate} at ${currentTime}.${milliseconds}, is tailored for your ${user.fitness_level.toLowerCase()} fitness level and ${user.preferences.fitness_goal.toLowerCase()} goal. It is designed to be performed ${user.preferences.workout_place === WorkoutPlace.GYM ? "at the gym" : "at home"} using your preferred equipment.`,
64
  type: "AI Generated",
65
  created_by: user._id,
66
  image: "https://placehold.co/300x400",
67
  fitness_level: user.fitness_level,
68
  fitness_goal: user.preferences.fitness_goal,
69
+ place: place,
70
  min_per_day: 30,
71
  total_number_days: pworkout.flat().length,
72
  template_weeks: weeks.map((week, i) => ({
src/resources/exercises.csv CHANGED
The diff for this file is too large to render. See raw diff
 
src/seeder/helpers/load-exercises-dataset.ts CHANGED
@@ -21,6 +21,7 @@ export interface IExerciseCSV {
21
  bodyPart: EBodyPart;
22
  type: EType;
23
  sets: number;
 
24
  }
25
 
26
 
 
21
  bodyPart: EBodyPart;
22
  type: EType;
23
  sets: number;
24
+ instructions: string;
25
  }
26
 
27
 
src/seeder/seeders/3-muscles.seeder.ts CHANGED
@@ -4,6 +4,6 @@ import { seederWrapper } from "seeder/helpers/seeder-wrapper";
4
 
5
  export default seederWrapper(Muscle, async () => {
6
  await Promise.all(dbStore.musclesDataset.map(async function (m) {
7
- return Muscle.create({ name: m, image: `https://placehold.co/600x400`})
8
  }))
9
  })
 
4
 
5
  export default seederWrapper(Muscle, async () => {
6
  await Promise.all(dbStore.musclesDataset.map(async function (m) {
7
+ return Muscle.create({ name: m, image: `https://placehold.co/600x400`, isDeleted: false})
8
  }))
9
  })
src/seeder/seeders/4-equipments.seeder.ts CHANGED
@@ -3,6 +3,6 @@ import { dbStore } from "seeder/helpers/db-store";
3
  import { seederWrapper } from "seeder/helpers/seeder-wrapper";
4
 
5
  export default seederWrapper(Equipment, async () => { await Promise.all(dbStore.equipmentsDataset.map(async function (e) {
6
- return Equipment.create({ name: e, image: `https://placehold.co/600x400`})
7
  }))
8
  })
 
3
  import { seederWrapper } from "seeder/helpers/seeder-wrapper";
4
 
5
  export default seederWrapper(Equipment, async () => { await Promise.all(dbStore.equipmentsDataset.map(async function (e) {
6
+ return Equipment.create({ name: e, image: `https://placehold.co/600x400`, isDeleted: false})
7
  }))
8
  })
src/seeder/seeders/5-exercises.seeder.ts CHANGED
@@ -8,39 +8,55 @@ import { seederWrapper } from "seeder/helpers/seeder-wrapper";
8
 
9
  export default seederWrapper(Exercise, async () => {
10
  console.log('preparing exercises data... (this may take a while)');
 
11
  const data = await Promise.all(dbStore.excerisesDataset.map(async function (e: IExerciseCSV) {
12
  return {
13
  name: e.name,
14
  category: e.bodyPart,
15
  exerciseType: e.type,
16
  ...(
17
- e.type === ExerciseType.WEIGHT &&
18
  {
19
- reps: Math.floor(Math.random() * 10),
20
  sets: e.sets,
21
  duration: 0,
22
- }
23
  ||
24
  {
25
- duration: Math.floor(Math.random() * 100),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  }
27
  ),
28
- expectedDurationRange: {
29
- min: Math.floor(Math.random() * 10),
30
- max: 10 + Math.floor(Math.random() * 10),
31
- },
32
- instructions: "Do this exercise",
33
  benefits: "You will get stronger",
34
  targetMuscles: {
35
  primary: (await Muscle.findOne({ name: e.target }).exec())._id,
36
  secondary: (await Muscle.findOne({ name: e.target }).exec())._id,
37
  },
38
- equipments: [(await Equipment.findOne({name: e.equipment}).exec())._id],
39
  coverImage: "https://placehold.co/600x400",
40
  media: {
41
  type: 'image',
42
  url: "https://placehold.co/600x400",
43
- }
 
44
  } satisfies IExercise;
45
  }))
46
  console.log('inserting exercises...');
 
8
 
9
  export default seederWrapper(Exercise, async () => {
10
  console.log('preparing exercises data... (this may take a while)');
11
+ let randomDuration = 30 + Math.floor(Math.random() * 60);
12
  const data = await Promise.all(dbStore.excerisesDataset.map(async function (e: IExerciseCSV) {
13
  return {
14
  name: e.name,
15
  category: e.bodyPart,
16
  exerciseType: e.type,
17
  ...(
18
+ e.type === ExerciseType.WEIGHT &&
19
  {
20
+ reps: 10 + Math.floor(Math.random() * 10),
21
  sets: e.sets,
22
  duration: 0,
23
+ }
24
  ||
25
  {
26
+ duration: randomDuration,
27
+ }
28
+ ),
29
+
30
+ expectedDurationRange: (e.type === ExerciseType.WEIGHT && {
31
+ min: 10 + Math.floor(Math.random() * 10),
32
+ max: 30 + Math.floor(Math.random() * 30),
33
+ } ||
34
+ {
35
+ min: randomDuration,
36
+ max: randomDuration,
37
+ }),
38
+ ...(
39
+ e.instructions === "" &&
40
+ {
41
+ instructions: "Do this exercise",
42
+ }
43
+ ||
44
+ {
45
+ instructions: e.instructions,
46
  }
47
  ),
 
 
 
 
 
48
  benefits: "You will get stronger",
49
  targetMuscles: {
50
  primary: (await Muscle.findOne({ name: e.target }).exec())._id,
51
  secondary: (await Muscle.findOne({ name: e.target }).exec())._id,
52
  },
53
+ equipments: [(await Equipment.findOne({ name: e.equipment }).exec())._id],
54
  coverImage: "https://placehold.co/600x400",
55
  media: {
56
  type: 'image',
57
  url: "https://placehold.co/600x400",
58
+ },
59
+ isDeleted: false,
60
  } satisfies IExercise;
61
  }))
62
  console.log('inserting exercises...');
src/seeder/seeders/6-workout.seeder.ts CHANGED
@@ -85,7 +85,8 @@ export default seederWrapper(Workout, async () => {
85
  },
86
  ]
87
  }
88
- ]
 
89
  };
90
  await Workout.create(o);
91
  }))
 
85
  },
86
  ]
87
  }
88
+ ],
89
+ isDeleted: false,
90
  };
91
  await Workout.create(o);
92
  }))
src/seeder/seeders/8-ingredients.seeder.ts CHANGED
@@ -14,6 +14,7 @@ export default seederWrapper(Ingredient, async () => {
14
  carbs: faker.number.int({ min: 10, max: 20 }),
15
  proteins: faker.number.int({ min: 10, max: 20 }),
16
  fats: faker.number.int({ min: 10, max: 20 }),
 
17
  } satisfies Partial<IIngredient>)));
18
 
19
  await Ingredient.insertMany(data);
 
14
  carbs: faker.number.int({ min: 10, max: 20 }),
15
  proteins: faker.number.int({ min: 10, max: 20 }),
16
  fats: faker.number.int({ min: 10, max: 20 }),
17
+ isDeleted: false,
18
  } satisfies Partial<IIngredient>)));
19
 
20
  await Ingredient.insertMany(data);
src/seeder/seeders/9-meals.seeder.ts CHANGED
@@ -29,6 +29,7 @@ export default seederWrapper(Meal, async () => {
29
  proteins: mealJson.ProteinContent,
30
  fats: mealJson.FatContent,
31
  type: mealJson.Category?.toLowerCase() as MealType,
 
32
  } satisfies Partial<IMeal>)));
33
 
34
  console.log('inserting meals...')
 
29
  proteins: mealJson.ProteinContent,
30
  fats: mealJson.FatContent,
31
  type: mealJson.Category?.toLowerCase() as MealType,
32
+ isDeleted: false,
33
  } satisfies Partial<IMeal>)));
34
 
35
  console.log('inserting meals...')
src/seeder/seeders/{10-mealPlan.seeder.ts → 99-mealPlan.seeder.ts} RENAMED
@@ -50,6 +50,7 @@ export default seederWrapper(MealPlan, async () => {
50
  categorizedMeals['snacks'][i],
51
  ],
52
  })),
 
53
  }
54
 
55
  await MealPlan.create(o);
 
50
  categorizedMeals['snacks'][i],
51
  ],
52
  })),
53
+ isDeleted: false,
54
  }
55
 
56
  await MealPlan.create(o);
src/seeder/seeders/{11-mymealPlan.seeder.ts → 999-mymealPlan.seeder.ts} RENAMED
File without changes