From 0e4a92b344d07f7521249f0738407ee3494be4bc Mon Sep 17 00:00:00 2001 From: CEbbinghaus Date: Fri, 16 Feb 2024 05:41:27 +1100 Subject: [PATCH] Feat: added docs framework (#15) * Proof of concept for codegenerating docs into the bundle * formatted rollup file * moved to basic markdown & added first iteration of rendering * formatted tsconfig * cleaned up Docs & micro-optimized * moved asset to correct directory * moved build script to js & fixed rendering problem * Removed nested docs & finished with a placeholder doc * updated github actioning & versioning script * Fixed up comment & updated version * moved rollup config to module * Moved everything from markdown to mdx * changed from path to name & added sorting * stole the styling from TabMaster * changed the version back. to stop people from getting version conflicts. will be updated together with a tabmaster patch --- .editorconfig | 2 +- .github/workflows/build.yml | 4 +- .gitignore | 5 +- README.md | 2 +- Logo.png => assets/Logo.png | Bin assets/logo.png | Bin 21108 -> 0 bytes backend/build.sh | 6 - build.sh | 48 +- deploy.example.json | 5 + docs/Credits.mdx | 9 + docs/index.mdx | 3 + package.json | 5 + pnpm-lock.yaml | 934 +++++++++++++++++++++++++++++++++++- rollup.config.js | 38 -- rollup.config.mjs | 42 ++ src/components/DocPage.tsx | 63 +++ src/index.tsx | 9 +- src/pages/Docs.tsx | 32 +- src/pages/docs.codegen | 54 +++ src/types.d.ts | 10 +- tsconfig.json | 46 +- util/build.mjs | 104 ++++ util/common.js | 19 - util/log.mjs | 10 + util/resetVersion.js | 9 - util/updateVersion.js | 13 - util/versioning.mjs | 58 +++ 27 files changed, 1349 insertions(+), 181 deletions(-) rename Logo.png => assets/Logo.png (100%) delete mode 100644 assets/logo.png delete mode 100755 backend/build.sh create mode 100644 deploy.example.json create mode 100644 docs/Credits.mdx create mode 100644 docs/index.mdx delete mode 100644 rollup.config.js create mode 100644 rollup.config.mjs create mode 100644 src/components/DocPage.tsx create mode 100644 src/pages/docs.codegen create mode 100644 util/build.mjs delete mode 100644 util/common.js create mode 100644 util/log.mjs delete mode 100644 util/resetVersion.js delete mode 100644 util/updateVersion.js create mode 100644 util/versioning.mjs diff --git a/.editorconfig b/.editorconfig index e92bc0c..524c263 100644 --- a/.editorconfig +++ b/.editorconfig @@ -3,6 +3,6 @@ charset = utf-8 insert_final_newline = true end_of_line = lf -[*.{json,js,ts,tsx,rs}] +[*.{json,js,ts,tsx,rs,codegen}] indent_size = 4 indent_style = tab diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c22afee..a81ff3b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,7 +19,7 @@ jobs: - name: Update Version run: | echo -n "-$(git rev-parse --short HEAD)" >> backend/version && \ - node util/updateVersion.js package.json lib/package.json + node util/versioning.mjs update package.json lib/package.json - name: Download Decky CLI run: | @@ -68,7 +68,7 @@ jobs: - name: Update Version run: | echo -n "-$(git rev-parse --short HEAD)" >> backend/version && \ - node util/updateVersion.js package.json lib/package.json + node util/versioning.mjs update package.json lib/package.json - uses: actions/setup-node@v3 with: diff --git a/.gitignore b/.gitignore index f2713b1..4a078e9 100644 --- a/.gitignore +++ b/.gitignore @@ -50,4 +50,7 @@ yalc.lock *.zip #ignore output directory -/build \ No newline at end of file +/build + +#ignore deploy config +deploy.json \ No newline at end of file diff --git a/README.md b/README.md index 21a6dc1..cac76ef 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![image](Logo.png) +![image](./assets/Logo.png) # MicroSDeck Manage your MicroSD Cards and view which card each game is on. diff --git a/Logo.png b/assets/Logo.png similarity index 100% rename from Logo.png rename to assets/Logo.png diff --git a/assets/logo.png b/assets/logo.png deleted file mode 100644 index 48c4851c91b074e80ef95af91ea3903e1adefe47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21108 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 - if [ $? -eq 0 ]; then - # exit code of sudo-command is 0 - echo "has_sudo__pass_set" - elif echo $prompt | grep -q '^sudo:'; then - echo "has_sudo__needs_pass" - else - echo "no_sudo" - fi -} - -PluginName=$(basename "$PWD") - -node util/updateVersion.js package.json lib/package.json - -echo "Building plugin $PluginName..." - -mkdir -p build - -if [[ "$*" != *"--skip-backend"* ]]; then - echo "Building backend..." - cd backend && ./build.sh && cd .. -fi - -if [[ "$*" != *"--skip-frontend"* ]]; then - echo "Building frontend..." - pnpm install && pnpm run build -fi - -echo "Collecting outputs into /build folder" -cp -r dist build/ -cp -r bin build/ -cp main.py build/ -cp plugin.json build/ -cp README.md build/ -cp package.json build/ - -if [[ "$*" != *"--skip-copy"* ]]; then - echo "Copying build folder to local plugin directory" - - sudo rm -rf /home/deck/homebrew/plugins/$PluginName - sudo cp -r build/ /home/deck/homebrew/plugins/$PluginName - sudo chmod 555 /home/deck/homebrew/plugins/$PluginName -fi - -node util/resetVersion.js package.json lib/package.json \ No newline at end of file diff --git a/deploy.example.json b/deploy.example.json new file mode 100644 index 0000000..a64f0b8 --- /dev/null +++ b/deploy.example.json @@ -0,0 +1,5 @@ +{ + "host": "steamdeck", + "user": "deck", + "keyfile": "~/.ssh/id_rsa" +} \ No newline at end of file diff --git a/docs/Credits.mdx b/docs/Credits.mdx new file mode 100644 index 0000000..e217c0e --- /dev/null +++ b/docs/Credits.mdx @@ -0,0 +1,9 @@ +# Credits + +Massive shout outs to: + +- [@jeiza]() +- [@rainbyte]() +- [@nabelo]() + +without whom this plugin just simply wouldn't exist as it does today. \ No newline at end of file diff --git a/docs/index.mdx b/docs/index.mdx new file mode 100644 index 0000000..25bf4a6 --- /dev/null +++ b/docs/index.mdx @@ -0,0 +1,3 @@ +# Hello, World! + +This is the beginning of the docs, Unfortunately they are still under construction ⚠️🚧👷 diff --git a/package.json b/package.json index d737d0d..5f98fa1 100644 --- a/package.json +++ b/package.json @@ -27,9 +27,11 @@ "@rollup/plugin-node-resolve": "^13.3.0", "@rollup/plugin-replace": "^4.0.0", "@rollup/plugin-typescript": "^8.5.0", + "@types/markdown-it": "^13.0.7", "@types/react": "16.14.0", "@types/webpack": "^5.28.5", "rollup": "^2.79.1", + "rollup-plugin-codegen": "^1.0.0", "rollup-plugin-import-assets": "^1.1.1", "shx": "^0.3.4", "tslib": "^2.6.2", @@ -37,8 +39,11 @@ }, "dependencies": { "@cebbinghaus/microsdeck": "link:lib", + "@mdx-js/react": "^3.0.1", + "@mdx-js/rollup": "^3.0.1", "decky-frontend-lib": "^3.24.5", "lipe": "^0.3.3", + "react": "^18.2.0", "react-icons": "^4.12.0" }, "pnpm": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a9fa273..9812419 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,15 +8,24 @@ dependencies: '@cebbinghaus/microsdeck': specifier: link:lib version: link:lib + '@mdx-js/react': + specifier: ^3.0.1 + version: 3.0.1(@types/react@16.14.0)(react@18.2.0) + '@mdx-js/rollup': + specifier: ^3.0.1 + version: 3.0.1(rollup@2.79.1) decky-frontend-lib: specifier: ^3.24.5 version: 3.24.5 lipe: specifier: ^0.3.3 version: 0.3.3(@babel/core@7.23.9)(typescript@4.9.5) + react: + specifier: ^18.2.0 + version: 18.2.0 react-icons: specifier: ^4.12.0 - version: 4.12.0 + version: 4.12.0(react@18.2.0) devDependencies: '@rollup/plugin-commonjs': @@ -34,6 +43,9 @@ devDependencies: '@rollup/plugin-typescript': specifier: ^8.5.0 version: 8.5.0(rollup@2.79.1)(tslib@2.6.2)(typescript@4.9.5) + '@types/markdown-it': + specifier: ^13.0.7 + version: 13.0.7 '@types/react': specifier: 16.14.0 version: 16.14.0 @@ -43,6 +55,9 @@ devDependencies: rollup: specifier: ^2.79.1 version: 2.79.1 + rollup-plugin-codegen: + specifier: ^1.0.0 + version: 1.0.0 rollup-plugin-import-assets: specifier: ^1.1.1 version: 1.1.1(rollup@2.79.1) @@ -724,6 +739,64 @@ packages: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + /@mdx-js/mdx@3.0.1: + resolution: {integrity: sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==} + dependencies: + '@types/estree': 1.0.5 + '@types/estree-jsx': 1.0.4 + '@types/hast': 3.0.4 + '@types/mdx': 2.0.11 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-build-jsx: 3.0.1 + estree-util-is-identifier-name: 3.0.0 + estree-util-to-js: 2.0.0 + estree-walker: 3.0.3 + hast-util-to-estree: 3.1.0 + hast-util-to-jsx-runtime: 2.3.0 + markdown-extensions: 2.0.0 + periscopic: 3.1.0 + remark-mdx: 3.0.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.0 + source-map: 0.7.4 + unified: 11.0.4 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@mdx-js/react@3.0.1(@types/react@16.14.0)(react@18.2.0): + resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + peerDependenciesMeta: + react: + optional: true + dependencies: + '@types/mdx': 2.0.11 + '@types/react': 16.14.0 + react: 18.2.0 + dev: false + + /@mdx-js/rollup@3.0.1(rollup@2.79.1): + resolution: {integrity: sha512-j0II91OCm4ld+l5QVgXXMQGxVVcAWIQJakYWi1dv5pefDHASJyCYER2TsdH7Alf958GoFSM7ugukWyvDq/UY4A==} + peerDependencies: + rollup: '>=2' + dependencies: + '@mdx-js/mdx': 3.0.1 + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + rollup: 2.79.1 + source-map: 0.7.4 + vfile: 6.0.1 + transitivePeerDependencies: + - supports-color + dev: false + /@rollup/plugin-commonjs@21.1.0(rollup@2.79.1): resolution: {integrity: sha512-6ZtHx3VHIp2ReNNDxHjuUml6ur+WcQ28N1yHgCQwsbNkQg2suhxGMDQGJOn/KuDxKtd1xuZP5xSTwBA4GQ8hbA==} engines: {node: '>= 8.0.0'} @@ -804,6 +877,21 @@ packages: rollup: 2.79.1 dev: true + /@rollup/pluginutils@5.1.0(rollup@2.79.1): + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: false + /@sinonjs/commons@1.8.6: resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} requiresBuild: true @@ -827,6 +915,12 @@ packages: dev: false optional: true + /@types/acorn@4.0.6: + resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + dependencies: + '@types/estree': 1.0.5 + dev: false + /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} requiresBuild: true @@ -864,6 +958,12 @@ packages: dev: false optional: true + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + dependencies: + '@types/ms': 0.7.34 + dev: false + /@types/eslint-scope@3.7.7: resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: @@ -878,13 +978,18 @@ packages: '@types/json-schema': 7.0.15 dev: true + /@types/estree-jsx@1.0.4: + resolution: {integrity: sha512-5idy3hvI9lAMqsyilBM+N+boaCf1MgoefbDxN6KEO5aK17TOHwFAYT9sjxzeKAiIWRUBgLxmZ9mPcnzZXtTcRQ==} + dependencies: + '@types/estree': 1.0.5 + dev: false + /@types/estree@0.0.39: resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} dev: true /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -894,6 +999,12 @@ packages: dev: false optional: true + /@types/hast@3.0.4: + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + dependencies: + '@types/unist': 3.0.2 + dev: false + /@types/istanbul-lib-coverage@2.0.6: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} requiresBuild: true @@ -929,6 +1040,35 @@ packages: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true + /@types/linkify-it@3.0.5: + resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} + dev: true + + /@types/markdown-it@13.0.7: + resolution: {integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==} + dependencies: + '@types/linkify-it': 3.0.5 + '@types/mdurl': 1.0.5 + dev: true + + /@types/mdast@4.0.3: + resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} + dependencies: + '@types/unist': 3.0.2 + dev: false + + /@types/mdurl@1.0.5: + resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} + dev: true + + /@types/mdx@2.0.11: + resolution: {integrity: sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw==} + dev: false + + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + dev: false + /@types/node@20.11.17: resolution: {integrity: sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==} dependencies: @@ -942,14 +1082,12 @@ packages: /@types/prop-types@15.7.11: resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - dev: true /@types/react@16.14.0: resolution: {integrity: sha512-jJjHo1uOe+NENRIBvF46tJimUvPnmbQ41Ax0pEm7pRvhPg+wuj8VMOHHiMvaGmZRzRrCtm7KnL5OOE/6kHPK8w==} dependencies: '@types/prop-types': 15.7.11 csstype: 3.1.3 - dev: true /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} @@ -963,6 +1101,14 @@ packages: dev: false optional: true + /@types/unist@2.0.10: + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + dev: false + + /@types/unist@3.0.2: + resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + dev: false + /@types/webpack@5.28.5: resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} dependencies: @@ -990,6 +1136,10 @@ packages: dev: false optional: true + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: false + /@webassemblyjs/ast@1.11.6: resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} dependencies: @@ -1128,6 +1278,14 @@ packages: acorn: 8.11.3 dev: true + /acorn-jsx@5.3.2(acorn@8.11.3): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.3 + dev: false + /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} @@ -1235,6 +1393,11 @@ packages: dev: false optional: true + /astring@1.8.6: + resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} + hasBin: true + dev: false + /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} requiresBuild: true @@ -1324,6 +1487,10 @@ packages: dev: false optional: true + /bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + dev: false + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -1407,6 +1574,10 @@ packages: /caniuse-lite@1.0.30001585: resolution: {integrity: sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==} + /ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + dev: false + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -1435,6 +1606,22 @@ packages: dev: false optional: true + /character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + dev: false + + /character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + dev: false + + /character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + dev: false + + /character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + dev: false + /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} @@ -1470,6 +1657,10 @@ packages: dev: false optional: true + /collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + dev: false + /collect-v8-coverage@1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} requiresBuild: true @@ -1514,6 +1705,10 @@ packages: dev: false optional: true + /comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + dev: false + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true @@ -1571,7 +1766,6 @@ packages: /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dev: true /data-urls@2.0.0: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} @@ -1596,7 +1790,6 @@ packages: dependencies: ms: 2.1.2 dev: false - optional: true /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -1608,6 +1801,12 @@ packages: resolution: {integrity: sha512-eYlbKDOOcIBPI0b76Rqvlryq2ym/QNiry4xf2pFrXmBa1f95dflqbQAb2gTq9uHEa5gFmeV4lUcMPGJ3M14Xqw==} dev: false + /decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 + dev: false + /dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} requiresBuild: true @@ -1625,6 +1824,11 @@ packages: dev: false optional: true + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: false + /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -1632,6 +1836,12 @@ packages: dev: false optional: true + /devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dependencies: + dequal: 2.0.3 + dev: false + /diff-sequences@27.5.1: resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -1749,6 +1959,40 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + /estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + dependencies: + '@types/estree': 1.0.5 + dev: false + + /estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + dependencies: + '@types/estree-jsx': 1.0.4 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + dev: false + + /estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + dev: false + + /estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + dependencies: + '@types/estree-jsx': 1.0.4 + astring: 1.8.6 + source-map: 0.7.4 + dev: false + + /estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + dependencies: + '@types/estree-jsx': 1.0.4 + '@types/unist': 3.0.2 + dev: false + /estree-walker@0.6.1: resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} dev: true @@ -1759,7 +2003,12 @@ packages: /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true + + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + dependencies: + '@types/estree': 1.0.5 + dev: false /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} @@ -1809,6 +2058,10 @@ packages: dev: false optional: true + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -1936,6 +2189,57 @@ packages: dependencies: function-bind: 1.1.2 + /hast-util-to-estree@3.1.0: + resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} + dependencies: + '@types/estree': 1.0.5 + '@types/estree-jsx': 1.0.4 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-jsx: 3.1.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 6.4.1 + space-separated-tokens: 2.0.2 + style-to-object: 0.4.4 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /hast-util-to-jsx-runtime@2.3.0: + resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} + dependencies: + '@types/estree': 1.0.5 + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-jsx: 3.1.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 6.4.1 + space-separated-tokens: 2.0.2 + style-to-object: 1.0.5 + unist-util-position: 5.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + dependencies: + '@types/hast': 3.0.4 + dev: false + /html-encoding-sniffer@2.0.1: resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} engines: {node: '>=10'} @@ -2019,11 +2323,30 @@ packages: /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + /inline-style-parser@0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + dev: false + + /inline-style-parser@0.2.2: + resolution: {integrity: sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==} + dev: false + /interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} dev: true + /is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + dev: false + + /is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + dev: false + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} requiresBuild: true @@ -2042,6 +2365,10 @@ packages: dependencies: hasown: 2.0.0 + /is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + dev: false + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -2056,6 +2383,10 @@ packages: dev: false optional: true + /is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + dev: false + /is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} dev: true @@ -2067,6 +2398,11 @@ packages: dev: false optional: true + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: false + /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} requiresBuild: true @@ -2079,6 +2415,12 @@ packages: '@types/estree': 1.0.5 dev: true + /is-reference@3.0.2: + resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + dependencies: + '@types/estree': 1.0.5 + dev: false + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -2679,7 +3021,6 @@ packages: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} requiresBuild: true dev: false - optional: true /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} @@ -2824,6 +3165,17 @@ packages: dev: false optional: true + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + dev: false + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} requiresBuild: true @@ -2870,9 +3222,393 @@ packages: dev: false optional: true + /markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + dev: false + + /mdast-util-from-markdown@2.0.0: + resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} + dependencies: + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-string: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx-expression@2.0.0: + resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} + dependencies: + '@types/estree-jsx': 1.0.4 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx-jsx@3.1.0: + resolution: {integrity: sha512-A8AJHlR7/wPQ3+Jre1+1rq040fX9A4Q1jG8JxmSNp/PLPHg80A6475wxTp3KzHpApFH6yWxFotHrJQA3dXP6/w==} + dependencies: + '@types/estree-jsx': 1.0.4 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + parse-entities: 4.0.1 + stringify-entities: 4.0.3 + unist-util-remove-position: 5.0.0 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + dependencies: + mdast-util-from-markdown: 2.0.0 + mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-jsx: 3.1.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + dependencies: + '@types/estree-jsx': 1.0.4 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + dependencies: + '@types/mdast': 4.0.3 + unist-util-is: 6.0.0 + dev: false + + /mdast-util-to-hast@13.1.0: + resolution: {integrity: sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==} + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + dev: false + + /mdast-util-to-markdown@2.1.0: + resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + dependencies: + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-decode-string: 2.0.0 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + dev: false + + /mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + dependencies: + '@types/mdast': 4.0.3 + dev: false + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + /micromark-core-commonmark@2.0.0: + resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} + dependencies: + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-factory-destination: 2.0.0 + micromark-factory-label: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-factory-title: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-html-tag-name: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-subtokenize: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-mdx-expression@3.0.0: + resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} + dependencies: + '@types/estree': 1.0.5 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-mdx-jsx@3.0.0: + resolution: {integrity: sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==} + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + vfile-message: 4.0.2 + dev: false + + /micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + dependencies: + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + dependencies: + '@types/estree': 1.0.5 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.2 + dev: false + + /micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + micromark-extension-mdx-expression: 3.0.0 + micromark-extension-mdx-jsx: 3.0.0 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-destination@2.0.0: + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-label@2.0.0: + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-mdx-expression@2.0.1: + resolution: {integrity: sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==} + dependencies: + '@types/estree': 1.0.5 + devlop: 1.1.0 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.2 + dev: false + + /micromark-factory-space@2.0.0: + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-title@2.0.0: + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-whitespace@2.0.0: + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + dependencies: + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-chunked@2.0.0: + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-classify-character@2.0.0: + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-combine-extensions@2.0.0: + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + dependencies: + micromark-util-chunked: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-decode-numeric-character-reference@2.0.1: + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-decode-string@2.0.0: + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 2.1.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + dev: false + + /micromark-util-events-to-acorn@2.0.2: + resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.5 + '@types/unist': 3.0.2 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + vfile-message: 4.0.2 + dev: false + + /micromark-util-html-tag-name@2.0.0: + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + dev: false + + /micromark-util-normalize-identifier@2.0.0: + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-resolve-all@2.0.0: + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + dependencies: + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-subtokenize@2.0.0: + resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + dev: false + + /micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + dev: false + + /micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.4 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-subtokenize: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: false + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -2919,7 +3655,6 @@ packages: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} requiresBuild: true dev: false - optional: true /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -3080,6 +3815,19 @@ packages: dev: false optional: true + /parse-entities@4.0.1: + resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + dependencies: + '@types/unist': 2.0.10 + character-entities: 2.0.2 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.0.2 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + dev: false + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -3119,6 +3867,14 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + /periscopic@3.1.0: + resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + dependencies: + '@types/estree': 1.0.5 + estree-walker: 3.0.3 + is-reference: 3.0.2 + dev: false + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -3163,6 +3919,10 @@ packages: dev: false optional: true + /property-information@6.4.1: + resolution: {integrity: sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==} + dev: false + /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} requiresBuild: true @@ -3185,13 +3945,15 @@ packages: safe-buffer: 5.2.1 dev: true - /react-icons@4.12.0: + /react-icons@4.12.0(react@18.2.0): resolution: {integrity: sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==} peerDependencies: react: '*' peerDependenciesMeta: react: optional: true + dependencies: + react: 18.2.0 dev: false /react-is@17.0.2: @@ -3200,6 +3962,13 @@ packages: dev: false optional: true + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + /rechoir@0.6.2: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} @@ -3207,6 +3976,36 @@ packages: resolve: 1.22.8 dev: true + /remark-mdx@3.0.1: + resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + dependencies: + '@types/mdast': 4.0.3 + mdast-util-from-markdown: 2.0.0 + micromark-util-types: 2.0.0 + unified: 11.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-rehype@11.1.0: + resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + mdast-util-to-hast: 13.1.0 + unified: 11.0.4 + vfile: 6.0.1 + dev: false + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -3260,6 +4059,11 @@ packages: dev: false optional: true + /rollup-plugin-codegen@1.0.0: + resolution: {integrity: sha512-dDGSP/I/y6BemGaOZoeUZVfjFi6Ky9uMGuFurJVZV08s0Q11qXLPTsMqvy1zmxPJptH2yV9PV7ruBwxQc03TmA==} + engines: {node: '>=14.0'} + dev: true + /rollup-plugin-import-assets@1.1.1(rollup@2.79.1): resolution: {integrity: sha512-u5zJwOjguTf2N+wETq2weNKGvNkuVc1UX/fPgg215p5xPvGOaI6/BTc024E9brvFjSQTfIYqgvwogQdipknu1g==} peerDependencies: @@ -3282,7 +4086,6 @@ packages: hasBin: true optionalDependencies: fsevents: 2.3.3 - dev: true /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -3404,13 +4207,16 @@ packages: engines: {node: '>= 8'} requiresBuild: true dev: false - optional: true /sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead dev: true + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + dev: false + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} requiresBuild: true @@ -3447,6 +4253,13 @@ packages: dev: false optional: true + /stringify-entities@4.0.3: + resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + dev: false + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -3477,6 +4290,18 @@ packages: dev: false optional: true + /style-to-object@0.4.4: + resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} + dependencies: + inline-style-parser: 0.1.1 + dev: false + + /style-to-object@1.0.5: + resolution: {integrity: sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==} + dependencies: + inline-style-parser: 0.2.2 + dev: false + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -3631,6 +4456,14 @@ packages: dev: false optional: true + /trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + dev: false + + /trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + dev: false + /ts-jest@27.1.5(@babel/core@7.23.9)(@types/jest@27.5.2)(jest@27.5.1)(typescript@4.9.5): resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -3702,6 +4535,64 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + /unified@11.0.4: + resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} + dependencies: + '@types/unist': 3.0.2 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.1 + dev: false + + /unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + dependencies: + '@types/unist': 3.0.2 + dev: false + + /unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + dependencies: + '@types/unist': 3.0.2 + dev: false + + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + dependencies: + '@types/unist': 3.0.2 + dev: false + + /unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + dependencies: + '@types/unist': 3.0.2 + unist-util-visit: 5.0.0 + dev: false + + /unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + dependencies: + '@types/unist': 3.0.2 + dev: false + + /unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + dev: false + + /unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + dependencies: + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + dev: false + /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} @@ -3749,6 +4640,21 @@ packages: dev: false optional: true + /vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-stringify-position: 4.0.0 + dev: false + + /vfile@6.0.1: + resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + dev: false + /w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} deprecated: Use your platform's native performance.now() and performance.timeOrigin. @@ -3970,6 +4876,10 @@ packages: dev: false optional: true + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + dev: false + github.com/CEbbinghaus/timer/38d27cc5157b5e44d06eae8fd0ffb8f778821d51(@babel/core@7.23.9)(typescript@4.9.5): resolution: {tarball: https://codeload.github.com/CEbbinghaus/timer/tar.gz/38d27cc5157b5e44d06eae8fd0ffb8f778821d51} id: github.com/CEbbinghaus/timer/38d27cc5157b5e44d06eae8fd0ffb8f778821d51 diff --git a/rollup.config.js b/rollup.config.js deleted file mode 100644 index f1175eb..0000000 --- a/rollup.config.js +++ /dev/null @@ -1,38 +0,0 @@ -import commonjs from '@rollup/plugin-commonjs'; -import json from '@rollup/plugin-json'; -import { nodeResolve } from '@rollup/plugin-node-resolve'; -import replace from '@rollup/plugin-replace'; -import typescript from '@rollup/plugin-typescript'; -import { defineConfig } from 'rollup'; -import importAssets from 'rollup-plugin-import-assets'; - -import { name } from "./plugin.json"; - -export default defineConfig({ - input: './src/index.tsx', - plugins: [ - commonjs(), - nodeResolve({browser: true}), - typescript(), - json(), - replace({ - preventAssignment: false, - 'process.env.NODE_ENV': JSON.stringify('production'), - }), - importAssets({ - publicPath: `http://127.0.0.1:1337/plugins/${name}/` - }) - ], - context: 'window', - external: ['react', 'react-dom', 'decky-frontend-lib'], - output: { - file: 'dist/index.js', - globals: { - react: 'SP_REACT', - 'react-dom': 'SP_REACTDOM', - 'decky-frontend-lib': 'DFL', - }, - format: 'iife', - exports: 'default', - }, -}); diff --git a/rollup.config.mjs b/rollup.config.mjs new file mode 100644 index 0000000..af3f289 --- /dev/null +++ b/rollup.config.mjs @@ -0,0 +1,42 @@ +import commonjs from '@rollup/plugin-commonjs'; +import json from '@rollup/plugin-json'; +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import replace from '@rollup/plugin-replace'; +import typescript from '@rollup/plugin-typescript'; +import { defineConfig } from 'rollup'; +import importAssets from 'rollup-plugin-import-assets'; +import codegen from 'rollup-plugin-codegen'; +import mdx from '@mdx-js/rollup' + +import plugin from "./plugin.json" assert {type: "json"}; + +export default defineConfig({ + input: './src/index.tsx', + plugins: [ + nodeResolve({ browser: true }), + codegen.default(), + mdx({providerImportSource: '@mdx-js/react'}), + commonjs(), + typescript(), + json(), + replace({ + preventAssignment: false, + 'process.env.NODE_ENV': JSON.stringify('production'), + }), + importAssets({ + publicPath: `http://127.0.0.1:1337/plugins/${plugin.name}/` + }) + ], + context: 'window', + external: ['react', 'react-dom', 'decky-frontend-lib'], + output: { + file: 'dist/index.js', + globals: { + react: 'SP_REACT', + 'react-dom': 'SP_REACTDOM', + 'decky-frontend-lib': 'DFL', + }, + format: 'iife', + exports: 'default', + }, +}); diff --git a/src/components/DocPage.tsx b/src/components/DocPage.tsx new file mode 100644 index 0000000..97f3128 --- /dev/null +++ b/src/components/DocPage.tsx @@ -0,0 +1,63 @@ +import { Focusable, ModalPosition, ScrollPanelGroup, gamepadDialogClasses } from "decky-frontend-lib"; +import React, { ReactElement } from "react"; + +export function DocPage({ content }: { content: JSX.Element }): ReactElement { + return ( + <> + +
+ + + + { }} noFocusRing={true} > + {content} + + + + +
+ + ); +}; \ No newline at end of file diff --git a/src/index.tsx b/src/index.tsx index 6ab7c0f..1b06d7f 100755 --- a/src/index.tsx +++ b/src/index.tsx @@ -15,7 +15,7 @@ import PatchAppScreen from "./patch/PatchAppScreen"; import { API_URL, DOCUMENTATION_PATH, UNAMED_CARD_NAME } from "./const"; import { Logger } from "./Logging"; import React from "react"; -import DocumentationPage from "./pages/Docs"; +import Docs from "./pages/Docs"; import { DeckyAPI } from "./lib/DeckyApi"; import { MicroSDeck, MicroSDeckContextProvider, useMicroSDeckContext, CardAndGames, MicroSDCard, IsMatchingSemver } from "../lib/src"; import { CardActionsContextMenu } from "./components/CardActions"; @@ -141,9 +141,6 @@ declare global { } export default definePlugin((serverApi: ServerAPI) => { - serverApi.routerHook.addRoute(DOCUMENTATION_PATH, DocumentationPage, { - exact: true, - }); if (window.MicroSDeck) { window.MicroSDeck.destruct(); @@ -152,9 +149,11 @@ export default definePlugin((serverApi: ServerAPI) => { DeckyAPI.SetApi(serverApi); + Logger.Log("Started MicroSDeck"); + const patch = PatchAppScreen(serverApi); - Logger.Log("Started MicroSDeck"); + serverApi.routerHook.addRoute(DOCUMENTATION_PATH, Docs); return { title:
MicroSDeck
, diff --git a/src/pages/Docs.tsx b/src/pages/Docs.tsx index 60b6b7f..77c0ef6 100644 --- a/src/pages/Docs.tsx +++ b/src/pages/Docs.tsx @@ -1,5 +1,31 @@ -import React from "react"; +import { ReactElement } from "react"; +import { FaBook } from "react-icons/fa"; +import { SidebarNavigation } from "decky-frontend-lib"; +import { DocPage } from "../components/DocPage"; +import { DOCUMENTATION_PATH } from "../const"; -export default function DocumentationPage() { - return (<>Hello, World!) +//@ts-ignore This gets codegenerated at build time +import docs from './docs.codegen'; + +// The docs are constant as they are baked into the bundle. +// This is more efficient since it precalculates the markdown and doesn't have to do it at every render +const docPages = docs.sort((a, b) => a.name == "index" ? -1 : (b.name == "index" ? 1 : a.name.localeCompare(b.name))).map(({ name, content }) => { + return { + title: (name == "index" ? "Main" : name).trim(), + //@ts-expect-error MDX & React don't play amazingly together... sadly + content: , + route: `${DOCUMENTATION_PATH}/${name.toLowerCase().replace(/ /g, "-")}`, + icon: , + hideTitle: true + }; +}); + +export default function Docs(): ReactElement { + return ( + + ); }; \ No newline at end of file diff --git a/src/pages/docs.codegen b/src/pages/docs.codegen new file mode 100644 index 0000000..45dd66b --- /dev/null +++ b/src/pages/docs.codegen @@ -0,0 +1,54 @@ +// @ts-nocheck +const { readdirSync, readFileSync, fil } = require('fs'); +const { parse, join } = require('path'); + +const docsDir = join(__dirname, '../../docs'); + +const docs = readdirSync(docsDir); + +const keyedDocs = docs.map(() => `_${Math.random().toString(36).slice(2) }`); + +const importStatements = docs.map((docPath, i) => { + return `import ${keyedDocs[i]} from "${join(docsDir, docPath)}";` +}) +const exportDeclarations = docs.map((docPath, i) => { + return `{name: "${parse(docPath).name}", content: ${keyedDocs[i]}}` +}) + +module.exports = function () { + return `//@ts-nocheck +${importStatements.join("\n")} +export default [${exportDeclarations.join(", ")}]; + `; +}; + +//NOTE: Kept for future possibilities of creating nested pages +// function walk(dir) { +// let results = [], err = null, i = 0, list = []; + +// try { +// list = readdirSync(dir) +// } catch (e) { +// return e.toString(); +// } + +// function next() { +// let entry = list[i++]; + +// if (!entry) +// return results; + +// entry = path.resolve(dir, entry); +// let stat = statSync(entry); + +// if (stat && stat.isDirectory()) { +// results = results.concat(walk(entry)); +// return next(); +// } + +// results.push(entry); +// return next(); +// }; + +// return next(); +// }; \ No newline at end of file diff --git a/src/types.d.ts b/src/types.d.ts index ce69634..abc4fd3 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -11,4 +11,12 @@ declare module "*.png" { declare module "*.jpg" { const content: string; export default content; -} \ No newline at end of file +} + + +type DocFile = { name: string, content: JSX.Element } + +declare module "*/docs.codegen" { + const content: DocFile[]; + export = content; +} diff --git a/tsconfig.json b/tsconfig.json index f1c2804..77e0588 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,25 +1,25 @@ { - "compilerOptions": { - "outDir": "build/dist", - "module": "ESNext", - "target": "ES2020", - "jsx": "react", - "jsxFactory": "window.SP_REACT.createElement", - "jsxFragmentFactory": "React.Fragment", - "declaration": false, - "moduleResolution": "nodenext", - "resolveJsonModule": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "esModuleInterop": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noImplicitAny": true, - "strict": true, - "suppressImplicitAnyIndexErrors": true, - "allowSyntheticDefaultImports": true, - "skipLibCheck": true - }, - "include": ["src", "lib"], - "exclude": ["node_modules"] + "compilerOptions": { + "outDir": "build/dist", + "module": "ESNext", + "target": "ES2020", + "jsx": "react", + "jsxFactory": "window.SP_REACT.createElement", + "jsxFragmentFactory": "React.Fragment", + "declaration": false, + "moduleResolution": "nodenext", + "resolveJsonModule": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "esModuleInterop": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noImplicitAny": true, + "strict": true, + "suppressImplicitAnyIndexErrors": true, + "allowSyntheticDefaultImports": true, + "skipLibCheck": true + }, + "include": ["src", "lib"], + "exclude": ["node_modules"] } diff --git a/util/build.mjs b/util/build.mjs new file mode 100644 index 0000000..61f209d --- /dev/null +++ b/util/build.mjs @@ -0,0 +1,104 @@ + +import { execSync, spawnSync } from 'child_process'; +import { join, resolve } from 'path'; +import { existsSync, mkdirSync, copyFileSync, statfsSync } from 'fs'; +import { Version, UpdateVersion, ResetVersion } from './versioning.mjs'; +import { Logger } from './log.mjs'; +import { exit } from 'process'; + +const basePath = resolve(process.cwd()); + +/** + * @param {string} command + * @param {string} directory + */ +function runCommand(command, directory = "") { + const args = command.split(' '); + var output = spawnSync(args[0], args.slice(1), { cwd: join(basePath, directory), encoding: 'utf-8' }); + + if (output.status != 0) { + Logger.Error(output.stderr); + exit(1); + } + + return output; +} + +async function importJson(file) { + return (await import(file, { assert: { type: "json" } })).default; +} + +const { name: PluginName } = await importJson(join(basePath, "plugin.json")); + +Logger.Log(`Building plugin ${PluginName}@${Version}`); + +if (!existsSync('plugin.json')) { + console.error('Build script must be run from the root of the repository.'); + process.exit(1); +} + +UpdateVersion("package.json", "lib/package.json"); + +if (!process.argv.includes('--skip-backend')) { + Logger.Log('Building backend'); + + runCommand('cargo build --release', 'backend'); +} + +if (!process.argv.includes('--skip-frontend')) { + if (!process.argv.includes('--skip-dependencies')) { + Logger.Log('Installing dependencies'); + runCommand('pnpm install'); + } + + Logger.Log('Building frontend'); + runCommand('pnpm run build'); +} + +if (!process.argv.includes('--skip-collect')) { + Logger.Log('Collecting outputs into /build folder'); + mkdirSync('build/dist', { recursive: true }); + mkdirSync('build/bin', { recursive: true }); + copyFileSync('dist/index.js', 'build/dist/index.js'); + copyFileSync('backend/target/release/backend', 'build/bin/backend'); + copyFileSync('main.py', 'build/main.py'); + copyFileSync('plugin.json', 'build/plugin.json'); + copyFileSync('README.md', 'build/README.md'); + copyFileSync('package.json', 'build/package.json'); +} + +const is_local = existsSync('/home/deck/homebrew'); + +if (!is_local) { + Logger.Info('Not running on steamdeck'); +} + +if (is_local && !process.argv.includes('--skip-copy')) { + Logger.Log('Copying build folder to local plugin directory'); + execSync(`sudo rm -rf /home/deck/homebrew/plugins/${PluginName}`); + execSync(`sudo cp -r build/ /home/deck/homebrew/plugins/${PluginName}`); + execSync(`sudo chmod 555 /home/deck/homebrew/plugins/${PluginName}`); +} else { + Logger.Log('Skipping copying build folder to local plugin directory'); +} + +if (process.argv.includes('--upload')) { + Logger.Log("Uploading plugin to SteamDeck"); + + if (!statfsSync(join(basePath, 'deploy.json'))) { + Logger.Error("deploy.json not found. Cannot deploy without it"); + exit(1); + } + + const { host, user, keyfile } = await importJson(join(basePath, "deploy.json")); + + const deployPath = `/home/${user}/homebrew/plugins/${PluginName}`; + + const tmpPath = `/tmp/${Date.now()}` + + execSync(`ssh -i ${keyfile} ${user}@${host} "[ -d ${deployPath} ] && sudo rm -rf ${deployPath} || exit 0"`); + execSync(`scp -i ${keyfile} -r build/ ${user}@${host}:"${tmpPath}"`); + execSync(`ssh -i ${keyfile} ${user}@${host} "sudo mv "${tmpPath}" "${deployPath}" && sudo chmod 555 ${deployPath}"`); +} + +ResetVersion("package.json", "lib/package.json"); diff --git a/util/common.js b/util/common.js deleted file mode 100644 index 0f9279b..0000000 --- a/util/common.js +++ /dev/null @@ -1,19 +0,0 @@ - -const { readFileSync, writeFileSync } = require("fs"); -const { resolve } = require("path"); - -function ReadPackageVersion() { - return readFileSync(resolve(__dirname, "../backend/version"), {encoding: "utf8"}); -} - -function WriteVersionToPackage(file, version) { - const package = JSON.parse(readFileSync(file)); - package.version = version; - writeFileSync(file, JSON.stringify(package, null, " ")); - -} - -module.exports = { - WriteVersionToPackage, - ReadPackageVersion -}; \ No newline at end of file diff --git a/util/log.mjs b/util/log.mjs new file mode 100644 index 0000000..e0c9179 --- /dev/null +++ b/util/log.mjs @@ -0,0 +1,10 @@ +import Lipe, { LoggerPipe } from "lipe" +import { PrefixWithColor, Splat, Timestamped, Console } from "lipe/defaults" + +const Pipe = new LoggerPipe() + .Pipe(PrefixWithColor) + .Pipe(Splat("{prefix} {Message}")) + .Pipe(Console()) + + +export const Logger = new Lipe().AddPipe(Pipe); \ No newline at end of file diff --git a/util/resetVersion.js b/util/resetVersion.js deleted file mode 100644 index bca9750..0000000 --- a/util/resetVersion.js +++ /dev/null @@ -1,9 +0,0 @@ -const { WriteVersionToPackage } = require("./common"); -const { resolve } = require("path"); - -const args = process.argv.slice(2); - -for(let package of (args || ["package.json"])) { - const packagePath = resolve(package); - WriteVersionToPackage(packagePath, "0.0.0"); -} diff --git a/util/updateVersion.js b/util/updateVersion.js deleted file mode 100644 index e9a1958..0000000 --- a/util/updateVersion.js +++ /dev/null @@ -1,13 +0,0 @@ -const { WriteVersionToPackage, ReadPackageVersion } = require("./common"); -const { resolve } = require("path"); - -const args = process.argv.slice(2); - -const version = ReadPackageVersion(); - -console.log(`Updating Version to ${version}`); - -for(let package of (args || ["package.json"])) { - const packagePath = resolve(package); - WriteVersionToPackage(packagePath, version); -} diff --git a/util/versioning.mjs b/util/versioning.mjs new file mode 100644 index 0000000..bfb8b4d --- /dev/null +++ b/util/versioning.mjs @@ -0,0 +1,58 @@ +import { readFileSync, writeFileSync } from "fs"; +import { dirname, resolve } from "path"; +import { fileURLToPath } from "url"; + +export const Version = ReadPackageVersion(); +function ReadPackageVersion() { + return readFileSync(resolve(dirname(fileURLToPath(import.meta.url)), "../backend/version"), { encoding: "utf8" }); +} + +function WriteVersionToPackage(file, version) { + const pkg = JSON.parse(readFileSync(file)); + pkg.version = version; + writeFileSync(file, JSON.stringify(pkg, null, " ")); +} + +/** + * Resets all versions back to 0.0.0 + * @param {...string} packages + */ +export function ResetVersion(...packages) { + for (let pkg of packages || ["package.json"]) { + const packagePath = resolve(pkg); + WriteVersionToPackage(packagePath, "0.0.0"); + } +} + +/** + * Updates one or more packages to the current version + * @param {...string} packages + */ +export function UpdateVersion(...packages) { + for (let pkg of packages || ["package.json"]) { + const packagePath = resolve(pkg); + WriteVersionToPackage(packagePath, Version); + } +} +if (process.argv[1] === fileURLToPath(import.meta.url)) { + // The script was run directly. + + let files = process.argv.slice(3); + if (files.length == 0) { + files = ["package.json"]; + } + + switch (process.argv[2]) { + case "reset": + console.log(`Resetting ${files.join(", ")}`); + ResetVersion(...files); + break; + case "update": + console.log(`Updating ${files.join(", ")} to version ${Version}`); + UpdateVersion(...files); + break; + default: + console.log("Invalid argument provided. Must be one of 'reset' | 'update'"); + process.exit(1); + } +} \ No newline at end of file