plum-e2e 1.1.0 → 1.2.0

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.
Files changed (42) hide show
  1. package/.claude/settings.local.json +27 -25
  2. package/.husky/pre-commit +2 -2
  3. package/README.md +142 -70
  4. package/backend/Dockerfile +4 -2
  5. package/backend/app.js +4 -2
  6. package/backend/config/scripts/generate-report.js +38 -30
  7. package/backend/entrypoint.sh +22 -0
  8. package/backend/package-lock.json +453 -10
  9. package/backend/package.json +5 -2
  10. package/backend/prisma/migrations/20260614000000_init/migration.sql +35 -0
  11. package/backend/prisma/migrations/20260614000001_add_project/migration.sql +8 -0
  12. package/backend/prisma/migrations/migration_lock.toml +3 -0
  13. package/backend/prisma/schema.prisma +53 -0
  14. package/backend/routes/backup.routes.js +50 -0
  15. package/backend/routes/cron.routes.js +9 -60
  16. package/backend/routes/reports.routes.js +39 -6
  17. package/backend/routes/settings.routes.js +43 -0
  18. package/backend/server.js +52 -1
  19. package/backend/services/backupService.js +88 -0
  20. package/backend/services/cronService.js +68 -78
  21. package/backend/services/{scheduleService.js → prisma.js} +3 -15
  22. package/backend/services/reportService.js +44 -16
  23. package/backend/{routes/schedules.routes.js → services/settingsService.js} +17 -13
  24. package/bin/plum.js +213 -32
  25. package/docker-compose.yml +24 -0
  26. package/frontend/package-lock.json +2 -2
  27. package/frontend/package.json +1 -1
  28. package/frontend/src/lib/api/reports.js +38 -27
  29. package/frontend/src/lib/api/schedules.js +9 -25
  30. package/frontend/src/lib/api/settings.js +48 -0
  31. package/frontend/src/lib/components/layout/Nav.svelte +2 -1
  32. package/frontend/src/lib/components/layout/RunnerPanel.svelte +160 -21
  33. package/frontend/src/lib/components/ui/Terminal.svelte +2 -2
  34. package/frontend/src/lib/stores/runner.js +9 -0
  35. package/frontend/src/routes/+page.svelte +10 -3
  36. package/frontend/src/routes/reports/+page.svelte +342 -51
  37. package/frontend/src/routes/reports/[slug]/+page.svelte +2 -0
  38. package/frontend/src/routes/scheduled-tests/+page.svelte +247 -11
  39. package/frontend/src/routes/settings/+page.svelte +410 -0
  40. package/license-config.json +2 -2
  41. package/package.json +6 -2
  42. package/backend/config/scripts/create-settings.js +0 -53
@@ -1,18 +1,20 @@
1
1
  {
2
2
  "name": "plum-backend",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "plum-backend",
9
- "version": "1.0.0",
9
+ "version": "1.2.0",
10
10
  "license": "ISC",
11
11
  "dependencies": {
12
12
  "@clack/prompts": "^1.5.1",
13
13
  "@cucumber/cucumber": "^11.2.0",
14
+ "@prisma/client": "^6.19.3",
14
15
  "chai": "^4.3.6",
15
16
  "chai-soft-assert": "^0.0.5",
17
+ "chokidar": "^5.0.0",
16
18
  "cors": "^2.8.5",
17
19
  "dotenv": "^16.4.7",
18
20
  "express": "^4.21.2",
@@ -25,6 +27,7 @@
25
27
  "@playwright/test": "^1.50.1",
26
28
  "@types/node": "^22.17.0",
27
29
  "cross-env": "^7.0.3",
30
+ "prisma": "^6.19.3",
28
31
  "ts-node": "^10.9.2",
29
32
  "typescript": "^5.9.2"
30
33
  }
@@ -454,11 +457,103 @@
454
457
  "node": ">=18"
455
458
  }
456
459
  },
460
+ "node_modules/@prisma/client": {
461
+ "version": "6.19.3",
462
+ "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.19.3.tgz",
463
+ "integrity": "sha512-mKq3jQFhjvko5LTJFHGilsuQs+W+T3Gm451NzuTDGQxwCzwXHYnIu2zGkRoW+Exq3Rob7yp2MfzSrdIiZVhrBg==",
464
+ "hasInstallScript": true,
465
+ "license": "Apache-2.0",
466
+ "engines": {
467
+ "node": ">=18.18"
468
+ },
469
+ "peerDependencies": {
470
+ "prisma": "*",
471
+ "typescript": ">=5.1.0"
472
+ },
473
+ "peerDependenciesMeta": {
474
+ "prisma": {
475
+ "optional": true
476
+ },
477
+ "typescript": {
478
+ "optional": true
479
+ }
480
+ }
481
+ },
482
+ "node_modules/@prisma/config": {
483
+ "version": "6.19.3",
484
+ "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.19.3.tgz",
485
+ "integrity": "sha512-CBPT44BjlQxEt8kiMEauji2WHTDoVBOKl7UlewXmUgBPnr/oPRZC3psci5chJnYmH0ivEIog2OU9PGWoki3DLQ==",
486
+ "devOptional": true,
487
+ "license": "Apache-2.0",
488
+ "dependencies": {
489
+ "c12": "3.1.0",
490
+ "deepmerge-ts": "7.1.5",
491
+ "effect": "3.21.0",
492
+ "empathic": "2.0.0"
493
+ }
494
+ },
495
+ "node_modules/@prisma/debug": {
496
+ "version": "6.19.3",
497
+ "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.19.3.tgz",
498
+ "integrity": "sha512-ljkJ+SgpXNktLG0Q/n4JGYCkKf0f8oYLyjImS2I8e2q2WCfdRRtWER062ZV/ixaNP2M2VKlWXVJiGzZaUgbKZw==",
499
+ "devOptional": true,
500
+ "license": "Apache-2.0"
501
+ },
502
+ "node_modules/@prisma/engines": {
503
+ "version": "6.19.3",
504
+ "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.19.3.tgz",
505
+ "integrity": "sha512-RSYxtlYFl5pJ8ZePgMv0lZ9IzVCOdTPOegrs2qcbAEFrBI1G33h6wyC9kjQvo0DnYEhEVY0X4LsuFHXLKQk88g==",
506
+ "devOptional": true,
507
+ "hasInstallScript": true,
508
+ "license": "Apache-2.0",
509
+ "dependencies": {
510
+ "@prisma/debug": "6.19.3",
511
+ "@prisma/engines-version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7",
512
+ "@prisma/fetch-engine": "6.19.3",
513
+ "@prisma/get-platform": "6.19.3"
514
+ }
515
+ },
516
+ "node_modules/@prisma/engines-version": {
517
+ "version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7",
518
+ "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7.tgz",
519
+ "integrity": "sha512-03bgb1VD5gvuumNf+7fVGBzfpJPjmqV423l/WxsWk2cNQ42JD0/SsFBPhN6z8iAvdHs07/7ei77SKu7aZfq8bA==",
520
+ "devOptional": true,
521
+ "license": "Apache-2.0"
522
+ },
523
+ "node_modules/@prisma/fetch-engine": {
524
+ "version": "6.19.3",
525
+ "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.19.3.tgz",
526
+ "integrity": "sha512-tKtl/qco9Nt7LU5iKhpultD8O4vMCZcU2CHjNTnRrL1QvSUr5W/GcyFPjNL87GtRrwBc7ubXXD9xy4EvLvt8JA==",
527
+ "devOptional": true,
528
+ "license": "Apache-2.0",
529
+ "dependencies": {
530
+ "@prisma/debug": "6.19.3",
531
+ "@prisma/engines-version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7",
532
+ "@prisma/get-platform": "6.19.3"
533
+ }
534
+ },
535
+ "node_modules/@prisma/get-platform": {
536
+ "version": "6.19.3",
537
+ "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.19.3.tgz",
538
+ "integrity": "sha512-xFj1VcJ1N3MKooOQAGO0W5tsd0W2QzIvW7DD7c/8H14Zmp4jseeWAITm+w2LLoLrlhoHdPPh0NMZ8mfL6puoHA==",
539
+ "devOptional": true,
540
+ "license": "Apache-2.0",
541
+ "dependencies": {
542
+ "@prisma/debug": "6.19.3"
543
+ }
544
+ },
457
545
  "node_modules/@socket.io/component-emitter": {
458
546
  "version": "3.1.2",
459
547
  "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
460
548
  "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA=="
461
549
  },
550
+ "node_modules/@standard-schema/spec": {
551
+ "version": "1.1.0",
552
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
553
+ "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
554
+ "devOptional": true,
555
+ "license": "MIT"
556
+ },
462
557
  "node_modules/@teppeis/multimaps": {
463
558
  "version": "3.0.0",
464
559
  "resolved": "https://registry.npmjs.org/@teppeis/multimaps/-/multimaps-3.0.0.tgz",
@@ -703,6 +798,65 @@
703
798
  "node": ">= 0.8"
704
799
  }
705
800
  },
801
+ "node_modules/c12": {
802
+ "version": "3.1.0",
803
+ "resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz",
804
+ "integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==",
805
+ "devOptional": true,
806
+ "license": "MIT",
807
+ "dependencies": {
808
+ "chokidar": "^4.0.3",
809
+ "confbox": "^0.2.2",
810
+ "defu": "^6.1.4",
811
+ "dotenv": "^16.6.1",
812
+ "exsolve": "^1.0.7",
813
+ "giget": "^2.0.0",
814
+ "jiti": "^2.4.2",
815
+ "ohash": "^2.0.11",
816
+ "pathe": "^2.0.3",
817
+ "perfect-debounce": "^1.0.0",
818
+ "pkg-types": "^2.2.0",
819
+ "rc9": "^2.1.2"
820
+ },
821
+ "peerDependencies": {
822
+ "magicast": "^0.3.5"
823
+ },
824
+ "peerDependenciesMeta": {
825
+ "magicast": {
826
+ "optional": true
827
+ }
828
+ }
829
+ },
830
+ "node_modules/c12/node_modules/chokidar": {
831
+ "version": "4.0.3",
832
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
833
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
834
+ "devOptional": true,
835
+ "license": "MIT",
836
+ "dependencies": {
837
+ "readdirp": "^4.0.1"
838
+ },
839
+ "engines": {
840
+ "node": ">= 14.16.0"
841
+ },
842
+ "funding": {
843
+ "url": "https://paulmillr.com/funding/"
844
+ }
845
+ },
846
+ "node_modules/c12/node_modules/readdirp": {
847
+ "version": "4.1.2",
848
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
849
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
850
+ "devOptional": true,
851
+ "license": "MIT",
852
+ "engines": {
853
+ "node": ">= 14.18.0"
854
+ },
855
+ "funding": {
856
+ "type": "individual",
857
+ "url": "https://paulmillr.com/funding/"
858
+ }
859
+ },
706
860
  "node_modules/call-bind-apply-helpers": {
707
861
  "version": "1.0.1",
708
862
  "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz",
@@ -810,6 +964,31 @@
810
964
  "node": "*"
811
965
  }
812
966
  },
967
+ "node_modules/chokidar": {
968
+ "version": "5.0.0",
969
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz",
970
+ "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==",
971
+ "license": "MIT",
972
+ "dependencies": {
973
+ "readdirp": "^5.0.0"
974
+ },
975
+ "engines": {
976
+ "node": ">= 20.19.0"
977
+ },
978
+ "funding": {
979
+ "url": "https://paulmillr.com/funding/"
980
+ }
981
+ },
982
+ "node_modules/citty": {
983
+ "version": "0.1.6",
984
+ "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz",
985
+ "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==",
986
+ "devOptional": true,
987
+ "license": "MIT",
988
+ "dependencies": {
989
+ "consola": "^3.2.3"
990
+ }
991
+ },
813
992
  "node_modules/class-transformer": {
814
993
  "version": "0.5.1",
815
994
  "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz",
@@ -853,6 +1032,23 @@
853
1032
  "node": ">=14"
854
1033
  }
855
1034
  },
1035
+ "node_modules/confbox": {
1036
+ "version": "0.2.4",
1037
+ "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz",
1038
+ "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==",
1039
+ "devOptional": true,
1040
+ "license": "MIT"
1041
+ },
1042
+ "node_modules/consola": {
1043
+ "version": "3.4.2",
1044
+ "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
1045
+ "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
1046
+ "devOptional": true,
1047
+ "license": "MIT",
1048
+ "engines": {
1049
+ "node": "^14.18.0 || >=16.10.0"
1050
+ }
1051
+ },
856
1052
  "node_modules/content-disposition": {
857
1053
  "version": "0.5.4",
858
1054
  "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@ -964,6 +1160,23 @@
964
1160
  "node": ">=0.12"
965
1161
  }
966
1162
  },
1163
+ "node_modules/deepmerge-ts": {
1164
+ "version": "7.1.5",
1165
+ "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz",
1166
+ "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==",
1167
+ "devOptional": true,
1168
+ "license": "BSD-3-Clause",
1169
+ "engines": {
1170
+ "node": ">=16.0.0"
1171
+ }
1172
+ },
1173
+ "node_modules/defu": {
1174
+ "version": "6.1.7",
1175
+ "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz",
1176
+ "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==",
1177
+ "devOptional": true,
1178
+ "license": "MIT"
1179
+ },
967
1180
  "node_modules/depd": {
968
1181
  "version": "2.0.0",
969
1182
  "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -972,6 +1185,13 @@
972
1185
  "node": ">= 0.8"
973
1186
  }
974
1187
  },
1188
+ "node_modules/destr": {
1189
+ "version": "2.0.5",
1190
+ "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz",
1191
+ "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==",
1192
+ "devOptional": true,
1193
+ "license": "MIT"
1194
+ },
975
1195
  "node_modules/destroy": {
976
1196
  "version": "1.2.0",
977
1197
  "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
@@ -990,9 +1210,10 @@
990
1210
  }
991
1211
  },
992
1212
  "node_modules/dotenv": {
993
- "version": "16.4.7",
994
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
995
- "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
1213
+ "version": "16.6.1",
1214
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz",
1215
+ "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==",
1216
+ "license": "BSD-2-Clause",
996
1217
  "engines": {
997
1218
  "node": ">=12"
998
1219
  },
@@ -1023,11 +1244,32 @@
1023
1244
  "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
1024
1245
  "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
1025
1246
  },
1247
+ "node_modules/effect": {
1248
+ "version": "3.21.0",
1249
+ "resolved": "https://registry.npmjs.org/effect/-/effect-3.21.0.tgz",
1250
+ "integrity": "sha512-PPN80qRokCd1f015IANNhrwOnLO7GrrMQfk4/lnZRE/8j7UPWrNNjPV0uBrZutI/nHzernbW+J0hdqQysHiSnQ==",
1251
+ "devOptional": true,
1252
+ "license": "MIT",
1253
+ "dependencies": {
1254
+ "@standard-schema/spec": "^1.0.0",
1255
+ "fast-check": "^3.23.1"
1256
+ }
1257
+ },
1026
1258
  "node_modules/emoji-regex": {
1027
1259
  "version": "8.0.0",
1028
1260
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
1029
1261
  "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
1030
1262
  },
1263
+ "node_modules/empathic": {
1264
+ "version": "2.0.0",
1265
+ "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz",
1266
+ "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==",
1267
+ "devOptional": true,
1268
+ "license": "MIT",
1269
+ "engines": {
1270
+ "node": ">=14"
1271
+ }
1272
+ },
1031
1273
  "node_modules/encodeurl": {
1032
1274
  "version": "2.0.0",
1033
1275
  "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
@@ -1201,6 +1443,36 @@
1201
1443
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1202
1444
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1203
1445
  },
1446
+ "node_modules/exsolve": {
1447
+ "version": "1.0.8",
1448
+ "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz",
1449
+ "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==",
1450
+ "devOptional": true,
1451
+ "license": "MIT"
1452
+ },
1453
+ "node_modules/fast-check": {
1454
+ "version": "3.23.2",
1455
+ "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz",
1456
+ "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==",
1457
+ "devOptional": true,
1458
+ "funding": [
1459
+ {
1460
+ "type": "individual",
1461
+ "url": "https://github.com/sponsors/dubzzz"
1462
+ },
1463
+ {
1464
+ "type": "opencollective",
1465
+ "url": "https://opencollective.com/fast-check"
1466
+ }
1467
+ ],
1468
+ "license": "MIT",
1469
+ "dependencies": {
1470
+ "pure-rand": "^6.1.0"
1471
+ },
1472
+ "engines": {
1473
+ "node": ">=8.0.0"
1474
+ }
1475
+ },
1204
1476
  "node_modules/fast-string-truncated-width": {
1205
1477
  "version": "3.0.3",
1206
1478
  "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz",
@@ -1281,11 +1553,12 @@
1281
1553
  }
1282
1554
  },
1283
1555
  "node_modules/foreground-child": {
1284
- "version": "3.3.0",
1285
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
1286
- "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
1556
+ "version": "3.3.1",
1557
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
1558
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
1559
+ "license": "ISC",
1287
1560
  "dependencies": {
1288
- "cross-spawn": "^7.0.0",
1561
+ "cross-spawn": "^7.0.6",
1289
1562
  "signal-exit": "^4.0.1"
1290
1563
  },
1291
1564
  "engines": {
@@ -1376,6 +1649,24 @@
1376
1649
  "node": ">= 0.4"
1377
1650
  }
1378
1651
  },
1652
+ "node_modules/giget": {
1653
+ "version": "2.0.0",
1654
+ "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz",
1655
+ "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==",
1656
+ "devOptional": true,
1657
+ "license": "MIT",
1658
+ "dependencies": {
1659
+ "citty": "^0.1.6",
1660
+ "consola": "^3.4.0",
1661
+ "defu": "^6.1.4",
1662
+ "node-fetch-native": "^1.6.6",
1663
+ "nypm": "^0.6.0",
1664
+ "pathe": "^2.0.3"
1665
+ },
1666
+ "bin": {
1667
+ "giget": "dist/cli.mjs"
1668
+ }
1669
+ },
1379
1670
  "node_modules/glob": {
1380
1671
  "version": "10.4.5",
1381
1672
  "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
@@ -1599,6 +1890,16 @@
1599
1890
  "@pkgjs/parseargs": "^0.11.0"
1600
1891
  }
1601
1892
  },
1893
+ "node_modules/jiti": {
1894
+ "version": "2.7.0",
1895
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz",
1896
+ "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==",
1897
+ "devOptional": true,
1898
+ "license": "MIT",
1899
+ "bin": {
1900
+ "jiti": "lib/jiti-cli.mjs"
1901
+ }
1902
+ },
1602
1903
  "node_modules/js-tokens": {
1603
1904
  "version": "4.0.0",
1604
1905
  "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -1808,6 +2109,13 @@
1808
2109
  "uuid": "dist/bin/uuid"
1809
2110
  }
1810
2111
  },
2112
+ "node_modules/node-fetch-native": {
2113
+ "version": "1.6.7",
2114
+ "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz",
2115
+ "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==",
2116
+ "devOptional": true,
2117
+ "license": "MIT"
2118
+ },
1811
2119
  "node_modules/normalize-package-data": {
1812
2120
  "version": "6.0.2",
1813
2121
  "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
@@ -1821,6 +2129,31 @@
1821
2129
  "node": "^16.14.0 || >=18.0.0"
1822
2130
  }
1823
2131
  },
2132
+ "node_modules/nypm": {
2133
+ "version": "0.6.7",
2134
+ "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.7.tgz",
2135
+ "integrity": "sha512-s3ds97SD5pd1dULE+tHUk1DrV0cSHOnsfpcdGATJ8JpBo21DoKqN9exTH4/2nhPQNOLomBdTFMicN94S4DrZrQ==",
2136
+ "devOptional": true,
2137
+ "license": "MIT",
2138
+ "dependencies": {
2139
+ "citty": "^0.2.2",
2140
+ "pathe": "^2.0.3",
2141
+ "tinyexec": "^1.2.4"
2142
+ },
2143
+ "bin": {
2144
+ "nypm": "dist/cli.mjs"
2145
+ },
2146
+ "engines": {
2147
+ "node": ">=18"
2148
+ }
2149
+ },
2150
+ "node_modules/nypm/node_modules/citty": {
2151
+ "version": "0.2.2",
2152
+ "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.2.tgz",
2153
+ "integrity": "sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==",
2154
+ "devOptional": true,
2155
+ "license": "MIT"
2156
+ },
1824
2157
  "node_modules/object-assign": {
1825
2158
  "version": "4.1.1",
1826
2159
  "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -1840,6 +2173,13 @@
1840
2173
  "url": "https://github.com/sponsors/ljharb"
1841
2174
  }
1842
2175
  },
2176
+ "node_modules/ohash": {
2177
+ "version": "2.0.11",
2178
+ "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz",
2179
+ "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==",
2180
+ "devOptional": true,
2181
+ "license": "MIT"
2182
+ },
1843
2183
  "node_modules/on-finished": {
1844
2184
  "version": "2.4.1",
1845
2185
  "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
@@ -1919,6 +2259,13 @@
1919
2259
  "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
1920
2260
  "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="
1921
2261
  },
2262
+ "node_modules/pathe": {
2263
+ "version": "2.0.3",
2264
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
2265
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
2266
+ "devOptional": true,
2267
+ "license": "MIT"
2268
+ },
1922
2269
  "node_modules/pathval": {
1923
2270
  "version": "1.1.1",
1924
2271
  "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
@@ -1928,12 +2275,31 @@
1928
2275
  "node": "*"
1929
2276
  }
1930
2277
  },
2278
+ "node_modules/perfect-debounce": {
2279
+ "version": "1.0.0",
2280
+ "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
2281
+ "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
2282
+ "devOptional": true,
2283
+ "license": "MIT"
2284
+ },
1931
2285
  "node_modules/picocolors": {
1932
2286
  "version": "1.1.1",
1933
2287
  "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
1934
2288
  "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
1935
2289
  "license": "ISC"
1936
2290
  },
2291
+ "node_modules/pkg-types": {
2292
+ "version": "2.3.1",
2293
+ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz",
2294
+ "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==",
2295
+ "devOptional": true,
2296
+ "license": "MIT",
2297
+ "dependencies": {
2298
+ "confbox": "^0.2.4",
2299
+ "exsolve": "^1.0.8",
2300
+ "pathe": "^2.0.3"
2301
+ }
2302
+ },
1937
2303
  "node_modules/playwright": {
1938
2304
  "version": "1.50.1",
1939
2305
  "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.50.1.tgz",
@@ -1962,6 +2328,32 @@
1962
2328
  "node": ">=18"
1963
2329
  }
1964
2330
  },
2331
+ "node_modules/prisma": {
2332
+ "version": "6.19.3",
2333
+ "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.19.3.tgz",
2334
+ "integrity": "sha512-++ZJ0ijLrDJF6hNB4t4uxg2br3fC4H9Yc9tcbjr2fcNFP3rh/SBNrAgjhsqBU4Ght8JPrVofG/ZkXfnSfnYsFg==",
2335
+ "devOptional": true,
2336
+ "hasInstallScript": true,
2337
+ "license": "Apache-2.0",
2338
+ "dependencies": {
2339
+ "@prisma/config": "6.19.3",
2340
+ "@prisma/engines": "6.19.3"
2341
+ },
2342
+ "bin": {
2343
+ "prisma": "build/index.js"
2344
+ },
2345
+ "engines": {
2346
+ "node": ">=18.18"
2347
+ },
2348
+ "peerDependencies": {
2349
+ "typescript": ">=5.1.0"
2350
+ },
2351
+ "peerDependenciesMeta": {
2352
+ "typescript": {
2353
+ "optional": true
2354
+ }
2355
+ }
2356
+ },
1965
2357
  "node_modules/progress": {
1966
2358
  "version": "2.0.3",
1967
2359
  "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -1987,6 +2379,23 @@
1987
2379
  "node": ">= 0.10"
1988
2380
  }
1989
2381
  },
2382
+ "node_modules/pure-rand": {
2383
+ "version": "6.1.0",
2384
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
2385
+ "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
2386
+ "devOptional": true,
2387
+ "funding": [
2388
+ {
2389
+ "type": "individual",
2390
+ "url": "https://github.com/sponsors/dubzzz"
2391
+ },
2392
+ {
2393
+ "type": "opencollective",
2394
+ "url": "https://opencollective.com/fast-check"
2395
+ }
2396
+ ],
2397
+ "license": "MIT"
2398
+ },
1990
2399
  "node_modules/qs": {
1991
2400
  "version": "6.13.0",
1992
2401
  "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
@@ -2023,6 +2432,17 @@
2023
2432
  "node": ">= 0.8"
2024
2433
  }
2025
2434
  },
2435
+ "node_modules/rc9": {
2436
+ "version": "2.1.2",
2437
+ "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz",
2438
+ "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==",
2439
+ "devOptional": true,
2440
+ "license": "MIT",
2441
+ "dependencies": {
2442
+ "defu": "^6.1.4",
2443
+ "destr": "^2.0.3"
2444
+ }
2445
+ },
2026
2446
  "node_modules/read-package-up": {
2027
2447
  "version": "11.0.0",
2028
2448
  "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz",
@@ -2057,6 +2477,19 @@
2057
2477
  "url": "https://github.com/sponsors/sindresorhus"
2058
2478
  }
2059
2479
  },
2480
+ "node_modules/readdirp": {
2481
+ "version": "5.0.0",
2482
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz",
2483
+ "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==",
2484
+ "license": "MIT",
2485
+ "engines": {
2486
+ "node": ">= 20.19.0"
2487
+ },
2488
+ "funding": {
2489
+ "type": "individual",
2490
+ "url": "https://paulmillr.com/funding/"
2491
+ }
2492
+ },
2060
2493
  "node_modules/reflect-metadata": {
2061
2494
  "version": "0.2.2",
2062
2495
  "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz",
@@ -2637,6 +3070,16 @@
2637
3070
  "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz",
2638
3071
  "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q=="
2639
3072
  },
3073
+ "node_modules/tinyexec": {
3074
+ "version": "1.2.4",
3075
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz",
3076
+ "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==",
3077
+ "devOptional": true,
3078
+ "license": "MIT",
3079
+ "engines": {
3080
+ "node": ">=18"
3081
+ }
3082
+ },
2640
3083
  "node_modules/tmp": {
2641
3084
  "version": "0.2.3",
2642
3085
  "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
@@ -2743,7 +3186,7 @@
2743
3186
  "version": "5.9.2",
2744
3187
  "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
2745
3188
  "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
2746
- "dev": true,
3189
+ "devOptional": true,
2747
3190
  "license": "Apache-2.0",
2748
3191
  "bin": {
2749
3192
  "tsc": "bin/tsc",