kraken9054 nsarrazin HF Staff commited on
Commit
eb5499b
·
unverified ·
1 Parent(s): 597f45c

Added husky for pre committing. (#1320)

Browse files

* feat: husky

* husky pre commit linting

* casing docker

* move husky to deps

---------

Co-authored-by: Nathan Sarrazin <[email protected]>

.husky/lint-stage-config.js ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ export default {
2
+ "*.{js,jsx,ts,tsx}": ["prettier --write", "eslint --fix", "eslint"],
3
+ "*.json": ["prettier --write"],
4
+ };
.husky/pre-commit ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ set -e
2
+ npx lint-staged --config ./.husky/lint-stage-config.js
Dockerfile CHANGED
@@ -4,7 +4,7 @@
4
  ARG INCLUDE_DB=false
5
 
6
  # stage that install the dependencies
7
- FROM node:20 as builder-production
8
 
9
  WORKDIR /app
10
 
@@ -13,7 +13,7 @@ RUN --mount=type=cache,target=/app/.npm \
13
  npm set cache /app/.npm && \
14
  npm ci --omit=dev
15
 
16
- FROM builder-production as builder
17
 
18
  ARG APP_BASE=
19
  ARG PUBLIC_APP_COLOR=blue
@@ -28,13 +28,13 @@ COPY --link --chown=1000 . .
28
  RUN npm run build
29
 
30
  # mongo image
31
- FROM mongo:latest as mongo
32
 
33
  # image to be used if INCLUDE_DB is false
34
- FROM node:20-slim as local_db_false
35
 
36
  # image to be used if INCLUDE_DB is true
37
- FROM node:20-slim as local_db_true
38
 
39
  RUN apt-get update
40
  RUN apt-get install gnupg curl -y
@@ -46,7 +46,7 @@ RUN mkdir -p /data/db
46
  RUN chown -R 1000:1000 /data/db
47
 
48
  # final image
49
- FROM local_db_${INCLUDE_DB} as final
50
 
51
  # build arg to determine if the database should be included
52
  ARG INCLUDE_DB=false
 
4
  ARG INCLUDE_DB=false
5
 
6
  # stage that install the dependencies
7
+ FROM node:20 AS builder-production
8
 
9
  WORKDIR /app
10
 
 
13
  npm set cache /app/.npm && \
14
  npm ci --omit=dev
15
 
16
+ FROM builder-production AS builder
17
 
18
  ARG APP_BASE=
19
  ARG PUBLIC_APP_COLOR=blue
 
28
  RUN npm run build
29
 
30
  # mongo image
31
+ FROM mongo:latest AS mongo
32
 
33
  # image to be used if INCLUDE_DB is false
34
+ FROM node:20-slim AS local_db_false
35
 
36
  # image to be used if INCLUDE_DB is true
37
+ FROM node:20-slim AS local_db_true
38
 
39
  RUN apt-get update
40
  RUN apt-get install gnupg curl -y
 
46
  RUN chown -R 1000:1000 /data/db
47
 
48
  # final image
49
+ FROM local_db_${INCLUDE_DB} AS final
50
 
51
  # build arg to determine if the database should be included
52
  ARG INCLUDE_DB=false
package-lock.json CHANGED
@@ -26,11 +26,13 @@
26
  "file-type": "^19.0.0",
27
  "handlebars": "^4.7.8",
28
  "highlight.js": "^11.7.0",
 
29
  "image-size": "^1.0.2",
30
  "ip-address": "^9.0.5",
31
  "jose": "^5.3.0",
32
  "jsdom": "^22.0.0",
33
  "json5": "^2.2.3",
 
34
  "marked": "^12.0.1",
35
  "marked-katex-extension": "^5.0.1",
36
  "mongodb": "^5.8.0",
@@ -4760,6 +4762,20 @@
4760
  "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
4761
  "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
4762
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4763
  "node_modules/cli-spinners": {
4764
  "version": "2.9.2",
4765
  "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
@@ -4771,6 +4787,62 @@
4771
  "url": "https://github.com/sponsors/sindresorhus"
4772
  }
4773
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4774
  "node_modules/cli-width": {
4775
  "version": "4.1.0",
4776
  "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
@@ -4976,7 +5048,6 @@
4976
  "version": "7.0.3",
4977
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
4978
  "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
4979
- "dev": true,
4980
  "dependencies": {
4981
  "path-key": "^3.1.0",
4982
  "shebang-command": "^2.0.0",
@@ -5768,6 +5839,11 @@
5768
  "node": ">=6"
5769
  }
5770
  },
 
 
 
 
 
5771
  "node_modules/events": {
5772
  "version": "3.3.0",
5773
  "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
@@ -6265,6 +6341,17 @@
6265
  "node": "6.* || 8.* || >= 10.*"
6266
  }
6267
  },
 
 
 
 
 
 
 
 
 
 
 
6268
  "node_modules/get-func-name": {
6269
  "version": "2.0.2",
6270
  "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
@@ -6652,6 +6739,21 @@
6652
  "ms": "^2.0.0"
6653
  }
6654
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6655
  "node_modules/iconv-lite": {
6656
  "version": "0.6.3",
6657
  "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
@@ -6914,8 +7016,7 @@
6914
  "node_modules/isexe": {
6915
  "version": "2.0.0",
6916
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
6917
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
6918
- "dev": true
6919
  },
6920
  "node_modules/isomorphic-dompurify": {
6921
  "version": "2.13.0",
@@ -7412,6 +7513,281 @@
7412
  "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
7413
  "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
7414
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7415
  "node_modules/local-pkg": {
7416
  "version": "0.4.3",
7417
  "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz",
@@ -7469,6 +7845,132 @@
7469
  "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
7470
  "dev": true
7471
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7472
  "node_modules/long": {
7473
  "version": "4.0.0",
7474
  "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
@@ -7595,8 +8097,7 @@
7595
  "node_modules/merge-stream": {
7596
  "version": "2.0.0",
7597
  "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
7598
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
7599
- "dev": true
7600
  },
7601
  "node_modules/merge2": {
7602
  "version": "1.4.1",
@@ -7615,11 +8116,11 @@
7615
  }
7616
  },
7617
  "node_modules/micromatch": {
7618
- "version": "4.0.5",
7619
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
7620
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
7621
  "dependencies": {
7622
- "braces": "^3.0.2",
7623
  "picomatch": "^2.3.1"
7624
  },
7625
  "engines": {
@@ -7660,7 +8161,6 @@
7660
  "version": "2.1.0",
7661
  "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
7662
  "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
7663
- "dev": true,
7664
  "engines": {
7665
  "node": ">=6"
7666
  }
@@ -8129,7 +8629,6 @@
8129
  "version": "5.1.2",
8130
  "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
8131
  "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
8132
- "dev": true,
8133
  "dependencies": {
8134
  "mimic-fn": "^2.1.0"
8135
  },
@@ -8389,7 +8888,6 @@
8389
  "version": "3.1.1",
8390
  "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
8391
  "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
8392
- "dev": true,
8393
  "engines": {
8394
  "node": ">=8"
8395
  }
@@ -8485,6 +8983,17 @@
8485
  "url": "https://github.com/sponsors/jonschlinkert"
8486
  }
8487
  },
 
 
 
 
 
 
 
 
 
 
 
8488
  "node_modules/pify": {
8489
  "version": "2.3.0",
8490
  "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
@@ -9379,6 +9888,21 @@
9379
  "node": ">=4"
9380
  }
9381
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9382
  "node_modules/reusify": {
9383
  "version": "1.0.4",
9384
  "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -9388,6 +9912,11 @@
9388
  "node": ">=0.10.0"
9389
  }
9390
  },
 
 
 
 
 
9391
  "node_modules/rimraf": {
9392
  "version": "3.0.2",
9393
  "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -9742,7 +10271,6 @@
9742
  "version": "2.0.0",
9743
  "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
9744
  "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
9745
- "dev": true,
9746
  "dependencies": {
9747
  "shebang-regex": "^3.0.0"
9748
  },
@@ -9754,7 +10282,6 @@
9754
  "version": "3.0.0",
9755
  "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
9756
  "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
9757
- "dev": true,
9758
  "engines": {
9759
  "node": ">=8"
9760
  }
@@ -9785,8 +10312,7 @@
9785
  "node_modules/signal-exit": {
9786
  "version": "3.0.7",
9787
  "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
9788
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
9789
- "dev": true
9790
  },
9791
  "node_modules/simple-concat": {
9792
  "version": "1.0.1",
@@ -9862,6 +10388,43 @@
9862
  "node": ">=8"
9863
  }
9864
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9865
  "node_modules/smart-buffer": {
9866
  "version": "4.2.0",
9867
  "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
@@ -9991,6 +10554,14 @@
9991
  "safe-buffer": "~5.2.0"
9992
  }
9993
  },
 
 
 
 
 
 
 
 
9994
  "node_modules/string-width": {
9995
  "version": "4.2.3",
9996
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -11764,7 +12335,6 @@
11764
  "version": "2.0.2",
11765
  "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
11766
  "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
11767
- "dev": true,
11768
  "dependencies": {
11769
  "isexe": "^2.0.0"
11770
  },
 
26
  "file-type": "^19.0.0",
27
  "handlebars": "^4.7.8",
28
  "highlight.js": "^11.7.0",
29
+ "husky": "^9.0.11",
30
  "image-size": "^1.0.2",
31
  "ip-address": "^9.0.5",
32
  "jose": "^5.3.0",
33
  "jsdom": "^22.0.0",
34
  "json5": "^2.2.3",
35
+ "lint-staged": "^15.2.7",
36
  "marked": "^12.0.1",
37
  "marked-katex-extension": "^5.0.1",
38
  "mongodb": "^5.8.0",
 
4762
  "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
4763
  "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
4764
  },
4765
+ "node_modules/cli-cursor": {
4766
+ "version": "4.0.0",
4767
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
4768
+ "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
4769
+ "dependencies": {
4770
+ "restore-cursor": "^4.0.0"
4771
+ },
4772
+ "engines": {
4773
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
4774
+ },
4775
+ "funding": {
4776
+ "url": "https://github.com/sponsors/sindresorhus"
4777
+ }
4778
+ },
4779
  "node_modules/cli-spinners": {
4780
  "version": "2.9.2",
4781
  "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
 
4787
  "url": "https://github.com/sponsors/sindresorhus"
4788
  }
4789
  },
4790
+ "node_modules/cli-truncate": {
4791
+ "version": "4.0.0",
4792
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz",
4793
+ "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==",
4794
+ "dependencies": {
4795
+ "slice-ansi": "^5.0.0",
4796
+ "string-width": "^7.0.0"
4797
+ },
4798
+ "engines": {
4799
+ "node": ">=18"
4800
+ },
4801
+ "funding": {
4802
+ "url": "https://github.com/sponsors/sindresorhus"
4803
+ }
4804
+ },
4805
+ "node_modules/cli-truncate/node_modules/ansi-regex": {
4806
+ "version": "6.0.1",
4807
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
4808
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
4809
+ "engines": {
4810
+ "node": ">=12"
4811
+ },
4812
+ "funding": {
4813
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
4814
+ }
4815
+ },
4816
+ "node_modules/cli-truncate/node_modules/string-width": {
4817
+ "version": "7.1.0",
4818
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz",
4819
+ "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==",
4820
+ "dependencies": {
4821
+ "emoji-regex": "^10.3.0",
4822
+ "get-east-asian-width": "^1.0.0",
4823
+ "strip-ansi": "^7.1.0"
4824
+ },
4825
+ "engines": {
4826
+ "node": ">=18"
4827
+ },
4828
+ "funding": {
4829
+ "url": "https://github.com/sponsors/sindresorhus"
4830
+ }
4831
+ },
4832
+ "node_modules/cli-truncate/node_modules/strip-ansi": {
4833
+ "version": "7.1.0",
4834
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
4835
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
4836
+ "dependencies": {
4837
+ "ansi-regex": "^6.0.1"
4838
+ },
4839
+ "engines": {
4840
+ "node": ">=12"
4841
+ },
4842
+ "funding": {
4843
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
4844
+ }
4845
+ },
4846
  "node_modules/cli-width": {
4847
  "version": "4.1.0",
4848
  "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
 
5048
  "version": "7.0.3",
5049
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
5050
  "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
 
5051
  "dependencies": {
5052
  "path-key": "^3.1.0",
5053
  "shebang-command": "^2.0.0",
 
5839
  "node": ">=6"
5840
  }
5841
  },
5842
+ "node_modules/eventemitter3": {
5843
+ "version": "5.0.1",
5844
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
5845
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
5846
+ },
5847
  "node_modules/events": {
5848
  "version": "3.3.0",
5849
  "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
 
6341
  "node": "6.* || 8.* || >= 10.*"
6342
  }
6343
  },
6344
+ "node_modules/get-east-asian-width": {
6345
+ "version": "1.2.0",
6346
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz",
6347
+ "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==",
6348
+ "engines": {
6349
+ "node": ">=18"
6350
+ },
6351
+ "funding": {
6352
+ "url": "https://github.com/sponsors/sindresorhus"
6353
+ }
6354
+ },
6355
  "node_modules/get-func-name": {
6356
  "version": "2.0.2",
6357
  "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
 
6739
  "ms": "^2.0.0"
6740
  }
6741
  },
6742
+ "node_modules/husky": {
6743
+ "version": "9.0.11",
6744
+ "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz",
6745
+ "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==",
6746
+ "license": "MIT",
6747
+ "bin": {
6748
+ "husky": "bin.mjs"
6749
+ },
6750
+ "engines": {
6751
+ "node": ">=18"
6752
+ },
6753
+ "funding": {
6754
+ "url": "https://github.com/sponsors/typicode"
6755
+ }
6756
+ },
6757
  "node_modules/iconv-lite": {
6758
  "version": "0.6.3",
6759
  "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
 
7016
  "node_modules/isexe": {
7017
  "version": "2.0.0",
7018
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
7019
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
 
7020
  },
7021
  "node_modules/isomorphic-dompurify": {
7022
  "version": "2.13.0",
 
7513
  "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
7514
  "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
7515
  },
7516
+ "node_modules/lint-staged": {
7517
+ "version": "15.2.7",
7518
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz",
7519
+ "integrity": "sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==",
7520
+ "dependencies": {
7521
+ "chalk": "~5.3.0",
7522
+ "commander": "~12.1.0",
7523
+ "debug": "~4.3.4",
7524
+ "execa": "~8.0.1",
7525
+ "lilconfig": "~3.1.1",
7526
+ "listr2": "~8.2.1",
7527
+ "micromatch": "~4.0.7",
7528
+ "pidtree": "~0.6.0",
7529
+ "string-argv": "~0.3.2",
7530
+ "yaml": "~2.4.2"
7531
+ },
7532
+ "bin": {
7533
+ "lint-staged": "bin/lint-staged.js"
7534
+ },
7535
+ "engines": {
7536
+ "node": ">=18.12.0"
7537
+ },
7538
+ "funding": {
7539
+ "url": "https://opencollective.com/lint-staged"
7540
+ }
7541
+ },
7542
+ "node_modules/lint-staged/node_modules/chalk": {
7543
+ "version": "5.3.0",
7544
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
7545
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
7546
+ "engines": {
7547
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
7548
+ },
7549
+ "funding": {
7550
+ "url": "https://github.com/chalk/chalk?sponsor=1"
7551
+ }
7552
+ },
7553
+ "node_modules/lint-staged/node_modules/commander": {
7554
+ "version": "12.1.0",
7555
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
7556
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
7557
+ "engines": {
7558
+ "node": ">=18"
7559
+ }
7560
+ },
7561
+ "node_modules/lint-staged/node_modules/execa": {
7562
+ "version": "8.0.1",
7563
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
7564
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
7565
+ "dependencies": {
7566
+ "cross-spawn": "^7.0.3",
7567
+ "get-stream": "^8.0.1",
7568
+ "human-signals": "^5.0.0",
7569
+ "is-stream": "^3.0.0",
7570
+ "merge-stream": "^2.0.0",
7571
+ "npm-run-path": "^5.1.0",
7572
+ "onetime": "^6.0.0",
7573
+ "signal-exit": "^4.1.0",
7574
+ "strip-final-newline": "^3.0.0"
7575
+ },
7576
+ "engines": {
7577
+ "node": ">=16.17"
7578
+ },
7579
+ "funding": {
7580
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
7581
+ }
7582
+ },
7583
+ "node_modules/lint-staged/node_modules/get-stream": {
7584
+ "version": "8.0.1",
7585
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
7586
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
7587
+ "engines": {
7588
+ "node": ">=16"
7589
+ },
7590
+ "funding": {
7591
+ "url": "https://github.com/sponsors/sindresorhus"
7592
+ }
7593
+ },
7594
+ "node_modules/lint-staged/node_modules/human-signals": {
7595
+ "version": "5.0.0",
7596
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
7597
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
7598
+ "engines": {
7599
+ "node": ">=16.17.0"
7600
+ }
7601
+ },
7602
+ "node_modules/lint-staged/node_modules/is-stream": {
7603
+ "version": "3.0.0",
7604
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
7605
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
7606
+ "engines": {
7607
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
7608
+ },
7609
+ "funding": {
7610
+ "url": "https://github.com/sponsors/sindresorhus"
7611
+ }
7612
+ },
7613
+ "node_modules/lint-staged/node_modules/lilconfig": {
7614
+ "version": "3.1.2",
7615
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
7616
+ "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
7617
+ "engines": {
7618
+ "node": ">=14"
7619
+ },
7620
+ "funding": {
7621
+ "url": "https://github.com/sponsors/antonk52"
7622
+ }
7623
+ },
7624
+ "node_modules/lint-staged/node_modules/mimic-fn": {
7625
+ "version": "4.0.0",
7626
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
7627
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
7628
+ "engines": {
7629
+ "node": ">=12"
7630
+ },
7631
+ "funding": {
7632
+ "url": "https://github.com/sponsors/sindresorhus"
7633
+ }
7634
+ },
7635
+ "node_modules/lint-staged/node_modules/npm-run-path": {
7636
+ "version": "5.3.0",
7637
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
7638
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
7639
+ "dependencies": {
7640
+ "path-key": "^4.0.0"
7641
+ },
7642
+ "engines": {
7643
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
7644
+ },
7645
+ "funding": {
7646
+ "url": "https://github.com/sponsors/sindresorhus"
7647
+ }
7648
+ },
7649
+ "node_modules/lint-staged/node_modules/onetime": {
7650
+ "version": "6.0.0",
7651
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
7652
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
7653
+ "dependencies": {
7654
+ "mimic-fn": "^4.0.0"
7655
+ },
7656
+ "engines": {
7657
+ "node": ">=12"
7658
+ },
7659
+ "funding": {
7660
+ "url": "https://github.com/sponsors/sindresorhus"
7661
+ }
7662
+ },
7663
+ "node_modules/lint-staged/node_modules/path-key": {
7664
+ "version": "4.0.0",
7665
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
7666
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
7667
+ "engines": {
7668
+ "node": ">=12"
7669
+ },
7670
+ "funding": {
7671
+ "url": "https://github.com/sponsors/sindresorhus"
7672
+ }
7673
+ },
7674
+ "node_modules/lint-staged/node_modules/signal-exit": {
7675
+ "version": "4.1.0",
7676
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
7677
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
7678
+ "engines": {
7679
+ "node": ">=14"
7680
+ },
7681
+ "funding": {
7682
+ "url": "https://github.com/sponsors/isaacs"
7683
+ }
7684
+ },
7685
+ "node_modules/lint-staged/node_modules/strip-final-newline": {
7686
+ "version": "3.0.0",
7687
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
7688
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
7689
+ "engines": {
7690
+ "node": ">=12"
7691
+ },
7692
+ "funding": {
7693
+ "url": "https://github.com/sponsors/sindresorhus"
7694
+ }
7695
+ },
7696
+ "node_modules/lint-staged/node_modules/yaml": {
7697
+ "version": "2.4.5",
7698
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz",
7699
+ "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==",
7700
+ "bin": {
7701
+ "yaml": "bin.mjs"
7702
+ },
7703
+ "engines": {
7704
+ "node": ">= 14"
7705
+ }
7706
+ },
7707
+ "node_modules/listr2": {
7708
+ "version": "8.2.3",
7709
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.3.tgz",
7710
+ "integrity": "sha512-Lllokma2mtoniUOS94CcOErHWAug5iu7HOmDrvWgpw8jyQH2fomgB+7lZS4HWZxytUuQwkGOwe49FvwVaA85Xw==",
7711
+ "dependencies": {
7712
+ "cli-truncate": "^4.0.0",
7713
+ "colorette": "^2.0.20",
7714
+ "eventemitter3": "^5.0.1",
7715
+ "log-update": "^6.0.0",
7716
+ "rfdc": "^1.4.1",
7717
+ "wrap-ansi": "^9.0.0"
7718
+ },
7719
+ "engines": {
7720
+ "node": ">=18.0.0"
7721
+ }
7722
+ },
7723
+ "node_modules/listr2/node_modules/ansi-regex": {
7724
+ "version": "6.0.1",
7725
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
7726
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
7727
+ "engines": {
7728
+ "node": ">=12"
7729
+ },
7730
+ "funding": {
7731
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
7732
+ }
7733
+ },
7734
+ "node_modules/listr2/node_modules/ansi-styles": {
7735
+ "version": "6.2.1",
7736
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
7737
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
7738
+ "engines": {
7739
+ "node": ">=12"
7740
+ },
7741
+ "funding": {
7742
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
7743
+ }
7744
+ },
7745
+ "node_modules/listr2/node_modules/string-width": {
7746
+ "version": "7.1.0",
7747
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz",
7748
+ "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==",
7749
+ "dependencies": {
7750
+ "emoji-regex": "^10.3.0",
7751
+ "get-east-asian-width": "^1.0.0",
7752
+ "strip-ansi": "^7.1.0"
7753
+ },
7754
+ "engines": {
7755
+ "node": ">=18"
7756
+ },
7757
+ "funding": {
7758
+ "url": "https://github.com/sponsors/sindresorhus"
7759
+ }
7760
+ },
7761
+ "node_modules/listr2/node_modules/strip-ansi": {
7762
+ "version": "7.1.0",
7763
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
7764
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
7765
+ "dependencies": {
7766
+ "ansi-regex": "^6.0.1"
7767
+ },
7768
+ "engines": {
7769
+ "node": ">=12"
7770
+ },
7771
+ "funding": {
7772
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
7773
+ }
7774
+ },
7775
+ "node_modules/listr2/node_modules/wrap-ansi": {
7776
+ "version": "9.0.0",
7777
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
7778
+ "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
7779
+ "dependencies": {
7780
+ "ansi-styles": "^6.2.1",
7781
+ "string-width": "^7.0.0",
7782
+ "strip-ansi": "^7.1.0"
7783
+ },
7784
+ "engines": {
7785
+ "node": ">=18"
7786
+ },
7787
+ "funding": {
7788
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
7789
+ }
7790
+ },
7791
  "node_modules/local-pkg": {
7792
  "version": "0.4.3",
7793
  "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz",
 
7845
  "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
7846
  "dev": true
7847
  },
7848
+ "node_modules/log-update": {
7849
+ "version": "6.0.0",
7850
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz",
7851
+ "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==",
7852
+ "dependencies": {
7853
+ "ansi-escapes": "^6.2.0",
7854
+ "cli-cursor": "^4.0.0",
7855
+ "slice-ansi": "^7.0.0",
7856
+ "strip-ansi": "^7.1.0",
7857
+ "wrap-ansi": "^9.0.0"
7858
+ },
7859
+ "engines": {
7860
+ "node": ">=18"
7861
+ },
7862
+ "funding": {
7863
+ "url": "https://github.com/sponsors/sindresorhus"
7864
+ }
7865
+ },
7866
+ "node_modules/log-update/node_modules/ansi-escapes": {
7867
+ "version": "6.2.1",
7868
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz",
7869
+ "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==",
7870
+ "engines": {
7871
+ "node": ">=14.16"
7872
+ },
7873
+ "funding": {
7874
+ "url": "https://github.com/sponsors/sindresorhus"
7875
+ }
7876
+ },
7877
+ "node_modules/log-update/node_modules/ansi-regex": {
7878
+ "version": "6.0.1",
7879
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
7880
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
7881
+ "engines": {
7882
+ "node": ">=12"
7883
+ },
7884
+ "funding": {
7885
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
7886
+ }
7887
+ },
7888
+ "node_modules/log-update/node_modules/ansi-styles": {
7889
+ "version": "6.2.1",
7890
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
7891
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
7892
+ "engines": {
7893
+ "node": ">=12"
7894
+ },
7895
+ "funding": {
7896
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
7897
+ }
7898
+ },
7899
+ "node_modules/log-update/node_modules/is-fullwidth-code-point": {
7900
+ "version": "5.0.0",
7901
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz",
7902
+ "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==",
7903
+ "dependencies": {
7904
+ "get-east-asian-width": "^1.0.0"
7905
+ },
7906
+ "engines": {
7907
+ "node": ">=18"
7908
+ },
7909
+ "funding": {
7910
+ "url": "https://github.com/sponsors/sindresorhus"
7911
+ }
7912
+ },
7913
+ "node_modules/log-update/node_modules/slice-ansi": {
7914
+ "version": "7.1.0",
7915
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz",
7916
+ "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==",
7917
+ "dependencies": {
7918
+ "ansi-styles": "^6.2.1",
7919
+ "is-fullwidth-code-point": "^5.0.0"
7920
+ },
7921
+ "engines": {
7922
+ "node": ">=18"
7923
+ },
7924
+ "funding": {
7925
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
7926
+ }
7927
+ },
7928
+ "node_modules/log-update/node_modules/string-width": {
7929
+ "version": "7.1.0",
7930
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz",
7931
+ "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==",
7932
+ "dependencies": {
7933
+ "emoji-regex": "^10.3.0",
7934
+ "get-east-asian-width": "^1.0.0",
7935
+ "strip-ansi": "^7.1.0"
7936
+ },
7937
+ "engines": {
7938
+ "node": ">=18"
7939
+ },
7940
+ "funding": {
7941
+ "url": "https://github.com/sponsors/sindresorhus"
7942
+ }
7943
+ },
7944
+ "node_modules/log-update/node_modules/strip-ansi": {
7945
+ "version": "7.1.0",
7946
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
7947
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
7948
+ "dependencies": {
7949
+ "ansi-regex": "^6.0.1"
7950
+ },
7951
+ "engines": {
7952
+ "node": ">=12"
7953
+ },
7954
+ "funding": {
7955
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
7956
+ }
7957
+ },
7958
+ "node_modules/log-update/node_modules/wrap-ansi": {
7959
+ "version": "9.0.0",
7960
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
7961
+ "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
7962
+ "dependencies": {
7963
+ "ansi-styles": "^6.2.1",
7964
+ "string-width": "^7.0.0",
7965
+ "strip-ansi": "^7.1.0"
7966
+ },
7967
+ "engines": {
7968
+ "node": ">=18"
7969
+ },
7970
+ "funding": {
7971
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
7972
+ }
7973
+ },
7974
  "node_modules/long": {
7975
  "version": "4.0.0",
7976
  "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
 
8097
  "node_modules/merge-stream": {
8098
  "version": "2.0.0",
8099
  "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
8100
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
 
8101
  },
8102
  "node_modules/merge2": {
8103
  "version": "1.4.1",
 
8116
  }
8117
  },
8118
  "node_modules/micromatch": {
8119
+ "version": "4.0.7",
8120
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
8121
+ "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
8122
  "dependencies": {
8123
+ "braces": "^3.0.3",
8124
  "picomatch": "^2.3.1"
8125
  },
8126
  "engines": {
 
8161
  "version": "2.1.0",
8162
  "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
8163
  "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
 
8164
  "engines": {
8165
  "node": ">=6"
8166
  }
 
8629
  "version": "5.1.2",
8630
  "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
8631
  "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
 
8632
  "dependencies": {
8633
  "mimic-fn": "^2.1.0"
8634
  },
 
8888
  "version": "3.1.1",
8889
  "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
8890
  "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
 
8891
  "engines": {
8892
  "node": ">=8"
8893
  }
 
8983
  "url": "https://github.com/sponsors/jonschlinkert"
8984
  }
8985
  },
8986
+ "node_modules/pidtree": {
8987
+ "version": "0.6.0",
8988
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
8989
+ "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
8990
+ "bin": {
8991
+ "pidtree": "bin/pidtree.js"
8992
+ },
8993
+ "engines": {
8994
+ "node": ">=0.10"
8995
+ }
8996
+ },
8997
  "node_modules/pify": {
8998
  "version": "2.3.0",
8999
  "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
 
9888
  "node": ">=4"
9889
  }
9890
  },
9891
+ "node_modules/restore-cursor": {
9892
+ "version": "4.0.0",
9893
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
9894
+ "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
9895
+ "dependencies": {
9896
+ "onetime": "^5.1.0",
9897
+ "signal-exit": "^3.0.2"
9898
+ },
9899
+ "engines": {
9900
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
9901
+ },
9902
+ "funding": {
9903
+ "url": "https://github.com/sponsors/sindresorhus"
9904
+ }
9905
+ },
9906
  "node_modules/reusify": {
9907
  "version": "1.0.4",
9908
  "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
 
9912
  "node": ">=0.10.0"
9913
  }
9914
  },
9915
+ "node_modules/rfdc": {
9916
+ "version": "1.4.1",
9917
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
9918
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="
9919
+ },
9920
  "node_modules/rimraf": {
9921
  "version": "3.0.2",
9922
  "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
 
10271
  "version": "2.0.0",
10272
  "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
10273
  "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
 
10274
  "dependencies": {
10275
  "shebang-regex": "^3.0.0"
10276
  },
 
10282
  "version": "3.0.0",
10283
  "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
10284
  "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
 
10285
  "engines": {
10286
  "node": ">=8"
10287
  }
 
10312
  "node_modules/signal-exit": {
10313
  "version": "3.0.7",
10314
  "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
10315
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
 
10316
  },
10317
  "node_modules/simple-concat": {
10318
  "version": "1.0.1",
 
10388
  "node": ">=8"
10389
  }
10390
  },
10391
+ "node_modules/slice-ansi": {
10392
+ "version": "5.0.0",
10393
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
10394
+ "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
10395
+ "dependencies": {
10396
+ "ansi-styles": "^6.0.0",
10397
+ "is-fullwidth-code-point": "^4.0.0"
10398
+ },
10399
+ "engines": {
10400
+ "node": ">=12"
10401
+ },
10402
+ "funding": {
10403
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
10404
+ }
10405
+ },
10406
+ "node_modules/slice-ansi/node_modules/ansi-styles": {
10407
+ "version": "6.2.1",
10408
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
10409
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
10410
+ "engines": {
10411
+ "node": ">=12"
10412
+ },
10413
+ "funding": {
10414
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
10415
+ }
10416
+ },
10417
+ "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": {
10418
+ "version": "4.0.0",
10419
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
10420
+ "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
10421
+ "engines": {
10422
+ "node": ">=12"
10423
+ },
10424
+ "funding": {
10425
+ "url": "https://github.com/sponsors/sindresorhus"
10426
+ }
10427
+ },
10428
  "node_modules/smart-buffer": {
10429
  "version": "4.2.0",
10430
  "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
 
10554
  "safe-buffer": "~5.2.0"
10555
  }
10556
  },
10557
+ "node_modules/string-argv": {
10558
+ "version": "0.3.2",
10559
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
10560
+ "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
10561
+ "engines": {
10562
+ "node": ">=0.6.19"
10563
+ }
10564
+ },
10565
  "node_modules/string-width": {
10566
  "version": "4.2.3",
10567
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
 
12335
  "version": "2.0.2",
12336
  "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
12337
  "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
 
12338
  "dependencies": {
12339
  "isexe": "^2.0.0"
12340
  },
package.json CHANGED
@@ -13,7 +13,8 @@
13
  "format": "prettier --plugin-search-dir . --write .",
14
  "test": "MONGODB_URL=mongodb://127.0.0.1:27017/ vitest",
15
  "updateLocalEnv": "node --loader ts-node/esm scripts/updateLocalEnv.ts",
16
- "populate": "vite-node --options.transformMode.ssr='/.*/' scripts/populate.ts"
 
17
  },
18
  "devDependencies": {
19
  "@faker-js/faker": "^8.4.1",
@@ -73,11 +74,13 @@
73
  "file-type": "^19.0.0",
74
  "handlebars": "^4.7.8",
75
  "highlight.js": "^11.7.0",
 
76
  "image-size": "^1.0.2",
77
  "ip-address": "^9.0.5",
78
  "jose": "^5.3.0",
79
  "jsdom": "^22.0.0",
80
  "json5": "^2.2.3",
 
81
  "marked": "^12.0.1",
82
  "marked-katex-extension": "^5.0.1",
83
  "mongodb": "^5.8.0",
 
13
  "format": "prettier --plugin-search-dir . --write .",
14
  "test": "MONGODB_URL=mongodb://127.0.0.1:27017/ vitest",
15
  "updateLocalEnv": "node --loader ts-node/esm scripts/updateLocalEnv.ts",
16
+ "populate": "vite-node --options.transformMode.ssr='/.*/' scripts/populate.ts",
17
+ "prepare": "husky"
18
  },
19
  "devDependencies": {
20
  "@faker-js/faker": "^8.4.1",
 
74
  "file-type": "^19.0.0",
75
  "handlebars": "^4.7.8",
76
  "highlight.js": "^11.7.0",
77
+ "husky": "^9.0.11",
78
  "image-size": "^1.0.2",
79
  "ip-address": "^9.0.5",
80
  "jose": "^5.3.0",
81
  "jsdom": "^22.0.0",
82
  "json5": "^2.2.3",
83
+ "lint-staged": "^15.2.7",
84
  "marked": "^12.0.1",
85
  "marked-katex-extension": "^5.0.1",
86
  "mongodb": "^5.8.0",