From 4c850f6c0ba36bf50f5e7c2c5264da8fd9977934 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20K=C3=B6rber?= Date: Mon, 11 Sep 2023 20:12:49 +0200 Subject: [PATCH] remove old stacks --- {rust/.cargo => .cargo}/config.toml | 0 rust/.dockerignore => .dockerignore | 0 .gitignore | 6 +- ...6c380f42202c5cd9b09d9a3e05a749a55a910.json | 0 ...7309bc5a881d2a2fc5364d9b666f6b53a8778.json | 0 ...9a5196039e6845598b8b22852b7665bcd5c0c.json | 0 ...8b3f1731b34404ec5ac3d1312a8d84dbf5c7d.json | 0 ...8a53cee248ac310fa620c272af1514f9ae951.json | 0 ...7e5c2aca78e794465ead29273172204534e73.json | 0 ...3c5e5ee04a315af737507001d9a128e981c52.json | 0 ...d05c87cd811a0f0d967d7be4bda908d8d45a1.json | 0 ...0ca73e5eb5d0794c679c9e5f05eb87d1defca.json | 12 + ...aa3f88762d37b4e7dbd7b72a76298dad00fd6.json | 0 ...930a1592512178477d210acfce662c857cf65.json | 0 ...34b1ad5d05976eec3432406a3d8ddf92d8b94.json | 0 ...a18780c6c416eda63b246daa75c5ff318331d.json | 0 ...2dbc3712ac4c2dcf48b90b6ec4ee8900ec2ef.json | 0 ...89827bcf2b75fa75af1ce238530377e25d7bd.json | 0 ...ac57eecfe176d49fc60f88d10244fbdd2e23c.json | 0 ...a2e8fef843f0c95affadfa66091e4b97756f0.json | 0 ...f227a77ef1a24c8fcf722bf8e49beb8c7ba83.json | 0 ...a78e7e7a312e101bdd9846123ee4de7c4751a.json | 0 ...4fe18ed0b89bb926cfa26d86cce19f20b3f4a.json | 0 ...8e429d65c85242b6b9cd1201cc8d9cfc48ab1.json | 0 ...613b8117a437f07e22b0e8204687f8485b872.json | 0 ...d141d34f699c58b6aa5bee492b6eef2115d74.json | 12 + ...c2a78c8d2f362142ce15ca28ee93c47bfbb7f.json | 0 ...e7c3d8202d3876a26505cd26be7ceeb10d06d.json | 0 ...d091314c0b206aee3bfe995d6295f4e0cc911.json | 0 ...1e470a0d80493e13478393f357da417a0208b.json | 0 ...3ca6f63b79252471ce4621d8692771e6fd3cc.json | 0 ...d471d9fd80b9fc943436185dcd25c7402271e.json | 0 ...7ed355fab4bb37a56b9061bc37f3f053703cb.json | 0 ...2a4b30ea2c88d120b4bf2c56cdf0f8d4c5d9d.json | 0 ...b7be6fe2441af601a77d462a99ca7a22ca7c4.json | 0 ...ee792afe635b41eea4d32db30ac9775794520.json | 0 ...46ddf23dbc8b618dca6c637f2d71d03841920.json | 0 ...791bfa1f16f1e0bae709122c15d26b26e3263.json | 0 ...0ef6d338e290460d4cebc4c580e7614ebabc7.json | 0 ...de1aff32eae0c645e9c544b48926f7ca16a66.json | 0 ...a054e1ba4ea5461e202cf329b929953c00894.json | 0 ...d2d9ec2f56bb7170d173f834ac766e4d3026f.json | 0 ...99b551fa40dbec71f1498974f9a07cdf5f70e.json | 0 ...31c4cbe1ff5b6c693d27e4879b56a7e850d86.json | 0 rust/Cargo.lock => Cargo.lock | 0 rust/Cargo.toml => Cargo.toml | 0 rust/Dockerfile => Dockerfile | 0 {rust/assets => assets}/luggage.svg | 0 rust/build-container.sh => build-container.sh | 0 rust/build.rs => build.rs | 0 rust/deps.sh => deps.sh | 0 {rust/js => js}/app.js | 0 .../20230519222555_initial.sql | 0 .../20230523190551_product.sql | 0 .../20230523212341_finalize.sql | 0 .../20230523221247_finalize2.sql | 0 .../20230614163747_add_ready.sql | 0 .../20230819125455_add_user.sql | 0 .../20230820094036_add_user_to_inventory.sql | 0 .../20230820193229_add_user_to_trips.sql | 0 .../20230820194457_add_user_to_trips2.sql | 0 ...20230820200039_add_user_to_trips_types.sql | 0 migrations/20230911175138_todos.sql | 1 + ...issue_2599.patch => patch_issue_2599.patch | 0 ...st-instance.sh => prepare-test-instance.sh | 0 rust/prometheus.yml => prometheus.yml | 0 python_flask/.gitignore | 7 - python_flask/NOTES.md | 42 - python_flask/migrations/README | 1 - python_flask/migrations/alembic.ini | 50 - python_flask/migrations/env.py | 91 - python_flask/migrations/script.py.mako | 24 - .../migrations/versions/4e1894be1cca_.py | 34 - .../migrations/versions/8593f77d68a3_.py | 34 - python_flask/packager/__init__.py | 21 - python_flask/packager/components/Base.py | 55 - python_flask/packager/components/Home.py | 18 - .../components/InventoryCategoryList.py | 85 - .../components/InventoryItemDetails.py | 143 - .../packager/components/InventoryItemList.py | 194 - .../components/InventoryItemManager.py | 33 - .../packager/components/InventoryNewItem.py | 152 - python_flask/packager/components/NewTrip.py | 145 - .../packager/components/TripCategoryList.py | 134 - .../packager/components/TripItemList.py | 266 - .../packager/components/TripItemManager.py | 21 - python_flask/packager/components/TripList.py | 19 - .../packager/components/TripManager.py | 381 - python_flask/packager/components/TripTable.py | 96 - python_flask/packager/components/__init__.py | 6 - python_flask/packager/helpers.py | 14 - python_flask/packager/js/app.js | 3 - python_flask/packager/models.py | 86 - python_flask/packager/views.py | 574 -- python_flask/requirements.txt | 16 - python_flask/run.sh | 12 - python_flask/selenium/.gitignore | 1 - python_flask/selenium/connect.sh | 3 - python_flask/selenium/requirements.txt | 3 - python_flask/selenium/run-driver.sh | 10 - python_flask/selenium/setup.sh | 11 - python_flask/selenium/test.py | 140 - ...d-schema-data.sh => rebuild-schema-data.sh | 0 rust/run-in-k8s.sh => run-in-k8s.sh | 0 ...n-test-instance.sh => run-test-instance.sh | 0 rust/.gitignore | 5 - rust/vendor/sqlx | 1 - rust_warp_svelte/api/.gitignore | 2 - rust_warp_svelte/api/Cargo.lock | 1189 --- rust_warp_svelte/api/Cargo.toml | 40 - rust_warp_svelte/api/README.md | 25 - rust_warp_svelte/api/src/db.rs | 1278 ---- rust_warp_svelte/api/src/lib.rs | 63 - rust_warp_svelte/api/src/main.rs | 50 - rust_warp_svelte/api/src/packagelist.rs | 251 - rust_warp_svelte/api/src/router.rs | 215 - rust_warp_svelte/api/src/trip.rs | 158 - rust_warp_svelte/ui/.gitignore | 4 - rust_warp_svelte/ui/.vscode/extensions.json | 3 - rust_warp_svelte/ui/README.md | 107 - rust_warp_svelte/ui/package-lock.json | 6707 ----------------- rust_warp_svelte/ui/package.json | 31 - rust_warp_svelte/ui/public/favicon.png | Bin 3127 -> 0 bytes rust_warp_svelte/ui/public/global.css | 63 - rust_warp_svelte/ui/public/index.html | 18 - rust_warp_svelte/ui/rollup.config.js | 83 - rust_warp_svelte/ui/src/App.svelte | 79 - .../ui/src/components/PackageItem.svelte | 10 - .../ui/src/components/PackageList.svelte | 51 - .../ui/src/components/PackageListTable.svelte | 78 - rust_warp_svelte/ui/src/global.d.ts | 1 - rust_warp_svelte/ui/src/main.ts | 9 - rust_warp_svelte/ui/src/routes/Home.svelte | 15 - .../ui/src/routes/NotFound.svelte | 10 - .../ui/src/routes/PackageList.svelte | 134 - .../ui/src/routes/PackageLists.svelte | 47 - .../ui/src/routes/Preparation.svelte | 41 - rust_warp_svelte/ui/src/routes/Trip.svelte | 78 - rust_warp_svelte/ui/src/routes/Trips.svelte | 64 - rust_warp_svelte/ui/tsconfig.json | 6 - {rust/src => src}/auth.rs | 0 {rust/src => src}/cli.rs | 0 {rust/src => src}/error.rs | 0 {rust/src => src}/htmx.rs | 0 {rust/src => src}/lib.rs | 0 {rust/src => src}/main.rs | 0 {rust/src => src}/models/error.rs | 0 {rust/src => src}/models/inventory.rs | 0 {rust/src => src}/models/mod.rs | 0 {rust/src => src}/models/trips.rs | 0 {rust/src => src}/models/user.rs | 0 {rust/src => src}/routing/html.rs | 0 {rust/src => src}/routing/mod.rs | 0 {rust/src => src}/routing/routes.rs | 0 {rust/src => src}/sqlite.rs | 0 {rust/src => src}/telemetry/metrics.rs | 0 {rust/src => src}/telemetry/mod.rs | 0 {rust/src => src}/telemetry/tracing/mod.rs | 0 {rust/src => src}/view/error.rs | 0 {rust/src => src}/view/home.rs | 0 {rust/src => src}/view/inventory.rs | 0 {rust/src => src}/view/mod.rs | 0 {rust/src => src}/view/root.rs | 0 {rust/src => src}/view/trip/mod.rs | 0 {rust/src => src}/view/trip/packagelist.rs | 0 {rust/src => src}/view/trip/types.rs | 0 rust/start-jaeger.sh => start-jaeger.sh | 0 ...start-prometheus.sh => start-prometheus.sh | 0 ...tokio-console.sh => start-tokio-console.sh | 0 {rust/test => test}/.gitignore | 0 {rust/test => test}/Cargo.lock | 0 {rust/test => test}/Cargo.toml | 0 {rust/test => test}/tests/main.rs | 0 rust/update-k8s.sh => update-k8s.sh | 0 174 files changed, 30 insertions(+), 13842 deletions(-) rename {rust/.cargo => .cargo}/config.toml (100%) rename rust/.dockerignore => .dockerignore (100%) rename {rust/.sqlx => .sqlx}/query-003e3585cc798a04c3bad7e74e16c380f42202c5cd9b09d9a3e05a749a55a910.json (100%) rename {rust/.sqlx => .sqlx}/query-0c1f320c3cd7b9a777c558836307309bc5a881d2a2fc5364d9b666f6b53a8778.json (100%) rename {rust/.sqlx => .sqlx}/query-12167f7d6f8b1bfc5f37c214b089a5196039e6845598b8b22852b7665bcd5c0c.json (100%) rename {rust/.sqlx => .sqlx}/query-1899fd9182e8791104be2c369298b3f1731b34404ec5ac3d1312a8d84dbf5c7d.json (100%) rename {rust/.sqlx => .sqlx}/query-2793ec31c3345d77a824314bffa8a53cee248ac310fa620c272af1514f9ae951.json (100%) rename {rust/.sqlx => .sqlx}/query-2be306559191f0e14e04c33d42b7e5c2aca78e794465ead29273172204534e73.json (100%) rename {rust/.sqlx => .sqlx}/query-31bd853345496b0680c337f7b9e3c5e5ee04a315af737507001d9a128e981c52.json (100%) rename {rust/.sqlx => .sqlx}/query-3abc853a3a44c7ecb411f4374bcd05c87cd811a0f0d967d7be4bda908d8d45a1.json (100%) create mode 100644 .sqlx/query-4017d92f0898c5046c4fbe1cd440ca73e5eb5d0794c679c9e5f05eb87d1defca.json rename {rust/.sqlx => .sqlx}/query-4118e44ba436f4ad7de970613fbaa3f88762d37b4e7dbd7b72a76298dad00fd6.json (100%) rename {rust/.sqlx => .sqlx}/query-4753028574932a6b8d118deb65a930a1592512178477d210acfce662c857cf65.json (100%) rename {rust/.sqlx => .sqlx}/query-4878a57b32697b1f18e3d2bf58d34b1ad5d05976eec3432406a3d8ddf92d8b94.json (100%) rename {rust/.sqlx => .sqlx}/query-48c563fdbc8ca0dbe14726eda25a18780c6c416eda63b246daa75c5ff318331d.json (100%) rename {rust/.sqlx => .sqlx}/query-5b1ddabd48e5407dae74a2f01eb2dbc3712ac4c2dcf48b90b6ec4ee8900ec2ef.json (100%) rename {rust/.sqlx => .sqlx}/query-5d27eb20c0f6c80bec63192b2ab89827bcf2b75fa75af1ce238530377e25d7bd.json (100%) rename {rust/.sqlx => .sqlx}/query-6183a38d7587836b782e9e44b8fac57eecfe176d49fc60f88d10244fbdd2e23c.json (100%) rename {rust/.sqlx => .sqlx}/query-67199202f732164b183ac4813e4a2e8fef843f0c95affadfa66091e4b97756f0.json (100%) rename {rust/.sqlx => .sqlx}/query-6aa1ef65325521e8b2655445f8bf227a77ef1a24c8fcf722bf8e49beb8c7ba83.json (100%) rename {rust/.sqlx => .sqlx}/query-6fd3243228d59a7ac2266f0c181a78e7e7a312e101bdd9846123ee4de7c4751a.json (100%) rename {rust/.sqlx => .sqlx}/query-72ed37defff5cacbdf0a733cdec4fe18ed0b89bb926cfa26d86cce19f20b3f4a.json (100%) rename {rust/.sqlx => .sqlx}/query-7a70ba0bac63bef015f36a56aab8e429d65c85242b6b9cd1201cc8d9cfc48ab1.json (100%) rename {rust/.sqlx => .sqlx}/query-85c45093fb8d01ea07cb2f9ec94613b8117a437f07e22b0e8204687f8485b872.json (100%) create mode 100644 .sqlx/query-905a4518c657a01831fead855bad141d34f699c58b6aa5bee492b6eef2115d74.json rename {rust/.sqlx => .sqlx}/query-961ee325bfb6af3005bad00f0c5c2a78c8d2f362142ce15ca28ee93c47bfbb7f.json (100%) rename {rust/.sqlx => .sqlx}/query-a5bedc046d5a4fd900903675794e7c3d8202d3876a26505cd26be7ceeb10d06d.json (100%) rename {rust/.sqlx => .sqlx}/query-a65f6e3cfb2261d37ce3e806ec8d091314c0b206aee3bfe995d6295f4e0cc911.json (100%) rename {rust/.sqlx => .sqlx}/query-b22e5d91f70638d4ed3b1592c661e470a0d80493e13478393f357da417a0208b.json (100%) rename {rust/.sqlx => .sqlx}/query-b36287d1b8c7905fb5fe6f8e9c73ca6f63b79252471ce4621d8692771e6fd3cc.json (100%) rename {rust/.sqlx => .sqlx}/query-b4d2e5f57ee95dd449ab0d69450d471d9fd80b9fc943436185dcd25c7402271e.json (100%) rename {rust/.sqlx => .sqlx}/query-baea696b94b2f73ec46c645ed4f7ed355fab4bb37a56b9061bc37f3f053703cb.json (100%) rename {rust/.sqlx => .sqlx}/query-bc01ec2128b21bbdfaab9fc42782a4b30ea2c88d120b4bf2c56cdf0f8d4c5d9d.json (100%) rename {rust/.sqlx => .sqlx}/query-c1afeeec7f57f4af47d9a99f807b7be6fe2441af601a77d462a99ca7a22ca7c4.json (100%) rename {rust/.sqlx => .sqlx}/query-c1c2a52d3de684ac473206fa348ee792afe635b41eea4d32db30ac9775794520.json (100%) rename {rust/.sqlx => .sqlx}/query-c34c9c567a98937e043424db17246ddf23dbc8b618dca6c637f2d71d03841920.json (100%) rename {rust/.sqlx => .sqlx}/query-cf1d82ba7f12a1bc315a2361599791bfa1f16f1e0bae709122c15d26b26e3263.json (100%) rename {rust/.sqlx => .sqlx}/query-d891f3002e38de15f1361e1f7db0ef6d338e290460d4cebc4c580e7614ebabc7.json (100%) rename {rust/.sqlx => .sqlx}/query-dd3f7d321b59961e4ab8a8c0946de1aff32eae0c645e9c544b48926f7ca16a66.json (100%) rename {rust/.sqlx => .sqlx}/query-ec968e7d97f30547cca37cb1834a054e1ba4ea5461e202cf329b929953c00894.json (100%) rename {rust/.sqlx => .sqlx}/query-f361f939fd66d550cdfb2f75833d2d9ec2f56bb7170d173f834ac766e4d3026f.json (100%) rename {rust/.sqlx => .sqlx}/query-f6a5ccd2290b8c3d12cddd7c80899b551fa40dbec71f1498974f9a07cdf5f70e.json (100%) rename {rust/.sqlx => .sqlx}/query-fc4d85404d4e9db18364616a13731c4cbe1ff5b6c693d27e4879b56a7e850d86.json (100%) rename rust/Cargo.lock => Cargo.lock (100%) rename rust/Cargo.toml => Cargo.toml (100%) rename rust/Dockerfile => Dockerfile (100%) rename {rust/assets => assets}/luggage.svg (100%) rename rust/build-container.sh => build-container.sh (100%) rename rust/build.rs => build.rs (100%) rename rust/deps.sh => deps.sh (100%) rename {rust/js => js}/app.js (100%) rename {rust/migrations => migrations}/20230519222555_initial.sql (100%) rename {rust/migrations => migrations}/20230523190551_product.sql (100%) rename {rust/migrations => migrations}/20230523212341_finalize.sql (100%) rename {rust/migrations => migrations}/20230523221247_finalize2.sql (100%) rename {rust/migrations => migrations}/20230614163747_add_ready.sql (100%) rename {rust/migrations => migrations}/20230819125455_add_user.sql (100%) rename {rust/migrations => migrations}/20230820094036_add_user_to_inventory.sql (100%) rename {rust/migrations => migrations}/20230820193229_add_user_to_trips.sql (100%) rename {rust/migrations => migrations}/20230820194457_add_user_to_trips2.sql (100%) rename {rust/migrations => migrations}/20230820200039_add_user_to_trips_types.sql (100%) create mode 100644 migrations/20230911175138_todos.sql rename rust/patch_issue_2599.patch => patch_issue_2599.patch (100%) rename rust/prepare-test-instance.sh => prepare-test-instance.sh (100%) rename rust/prometheus.yml => prometheus.yml (100%) delete mode 100644 python_flask/.gitignore delete mode 100644 python_flask/NOTES.md delete mode 100644 python_flask/migrations/README delete mode 100644 python_flask/migrations/alembic.ini delete mode 100644 python_flask/migrations/env.py delete mode 100644 python_flask/migrations/script.py.mako delete mode 100644 python_flask/migrations/versions/4e1894be1cca_.py delete mode 100644 python_flask/migrations/versions/8593f77d68a3_.py delete mode 100644 python_flask/packager/__init__.py delete mode 100644 python_flask/packager/components/Base.py delete mode 100644 python_flask/packager/components/Home.py delete mode 100644 python_flask/packager/components/InventoryCategoryList.py delete mode 100644 python_flask/packager/components/InventoryItemDetails.py delete mode 100644 python_flask/packager/components/InventoryItemList.py delete mode 100644 python_flask/packager/components/InventoryItemManager.py delete mode 100644 python_flask/packager/components/InventoryNewItem.py delete mode 100644 python_flask/packager/components/NewTrip.py delete mode 100644 python_flask/packager/components/TripCategoryList.py delete mode 100644 python_flask/packager/components/TripItemList.py delete mode 100644 python_flask/packager/components/TripItemManager.py delete mode 100644 python_flask/packager/components/TripList.py delete mode 100644 python_flask/packager/components/TripManager.py delete mode 100644 python_flask/packager/components/TripTable.py delete mode 100644 python_flask/packager/components/__init__.py delete mode 100644 python_flask/packager/helpers.py delete mode 100644 python_flask/packager/js/app.js delete mode 100644 python_flask/packager/models.py delete mode 100644 python_flask/packager/views.py delete mode 100644 python_flask/requirements.txt delete mode 100755 python_flask/run.sh delete mode 100644 python_flask/selenium/.gitignore delete mode 100755 python_flask/selenium/connect.sh delete mode 100644 python_flask/selenium/requirements.txt delete mode 100755 python_flask/selenium/run-driver.sh delete mode 100755 python_flask/selenium/setup.sh delete mode 100755 python_flask/selenium/test.py rename rust/rebuild-schema-data.sh => rebuild-schema-data.sh (100%) rename rust/run-in-k8s.sh => run-in-k8s.sh (100%) rename rust/run-test-instance.sh => run-test-instance.sh (100%) delete mode 100644 rust/.gitignore delete mode 160000 rust/vendor/sqlx delete mode 100644 rust_warp_svelte/api/.gitignore delete mode 100644 rust_warp_svelte/api/Cargo.lock delete mode 100644 rust_warp_svelte/api/Cargo.toml delete mode 100644 rust_warp_svelte/api/README.md delete mode 100644 rust_warp_svelte/api/src/db.rs delete mode 100644 rust_warp_svelte/api/src/lib.rs delete mode 100644 rust_warp_svelte/api/src/main.rs delete mode 100644 rust_warp_svelte/api/src/packagelist.rs delete mode 100644 rust_warp_svelte/api/src/router.rs delete mode 100644 rust_warp_svelte/api/src/trip.rs delete mode 100644 rust_warp_svelte/ui/.gitignore delete mode 100644 rust_warp_svelte/ui/.vscode/extensions.json delete mode 100644 rust_warp_svelte/ui/README.md delete mode 100644 rust_warp_svelte/ui/package-lock.json delete mode 100644 rust_warp_svelte/ui/package.json delete mode 100644 rust_warp_svelte/ui/public/favicon.png delete mode 100644 rust_warp_svelte/ui/public/global.css delete mode 100644 rust_warp_svelte/ui/public/index.html delete mode 100644 rust_warp_svelte/ui/rollup.config.js delete mode 100644 rust_warp_svelte/ui/src/App.svelte delete mode 100644 rust_warp_svelte/ui/src/components/PackageItem.svelte delete mode 100644 rust_warp_svelte/ui/src/components/PackageList.svelte delete mode 100644 rust_warp_svelte/ui/src/components/PackageListTable.svelte delete mode 100644 rust_warp_svelte/ui/src/global.d.ts delete mode 100644 rust_warp_svelte/ui/src/main.ts delete mode 100644 rust_warp_svelte/ui/src/routes/Home.svelte delete mode 100644 rust_warp_svelte/ui/src/routes/NotFound.svelte delete mode 100644 rust_warp_svelte/ui/src/routes/PackageList.svelte delete mode 100644 rust_warp_svelte/ui/src/routes/PackageLists.svelte delete mode 100644 rust_warp_svelte/ui/src/routes/Preparation.svelte delete mode 100644 rust_warp_svelte/ui/src/routes/Trip.svelte delete mode 100644 rust_warp_svelte/ui/src/routes/Trips.svelte delete mode 100644 rust_warp_svelte/ui/tsconfig.json rename {rust/src => src}/auth.rs (100%) rename {rust/src => src}/cli.rs (100%) rename {rust/src => src}/error.rs (100%) rename {rust/src => src}/htmx.rs (100%) rename {rust/src => src}/lib.rs (100%) rename {rust/src => src}/main.rs (100%) rename {rust/src => src}/models/error.rs (100%) rename {rust/src => src}/models/inventory.rs (100%) rename {rust/src => src}/models/mod.rs (100%) rename {rust/src => src}/models/trips.rs (100%) rename {rust/src => src}/models/user.rs (100%) rename {rust/src => src}/routing/html.rs (100%) rename {rust/src => src}/routing/mod.rs (100%) rename {rust/src => src}/routing/routes.rs (100%) rename {rust/src => src}/sqlite.rs (100%) rename {rust/src => src}/telemetry/metrics.rs (100%) rename {rust/src => src}/telemetry/mod.rs (100%) rename {rust/src => src}/telemetry/tracing/mod.rs (100%) rename {rust/src => src}/view/error.rs (100%) rename {rust/src => src}/view/home.rs (100%) rename {rust/src => src}/view/inventory.rs (100%) rename {rust/src => src}/view/mod.rs (100%) rename {rust/src => src}/view/root.rs (100%) rename {rust/src => src}/view/trip/mod.rs (100%) rename {rust/src => src}/view/trip/packagelist.rs (100%) rename {rust/src => src}/view/trip/types.rs (100%) rename rust/start-jaeger.sh => start-jaeger.sh (100%) rename rust/start-prometheus.sh => start-prometheus.sh (100%) rename rust/start-tokio-console.sh => start-tokio-console.sh (100%) rename {rust/test => test}/.gitignore (100%) rename {rust/test => test}/Cargo.lock (100%) rename {rust/test => test}/Cargo.toml (100%) rename {rust/test => test}/tests/main.rs (100%) rename rust/update-k8s.sh => update-k8s.sh (100%) diff --git a/rust/.cargo/config.toml b/.cargo/config.toml similarity index 100% rename from rust/.cargo/config.toml rename to .cargo/config.toml diff --git a/rust/.dockerignore b/.dockerignore similarity index 100% rename from rust/.dockerignore rename to .dockerignore diff --git a/.gitignore b/.gitignore index 7b402e8..bd04656 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ -*.bundle +/target/ +*.sqlite +*.sqlite-wal +*.sqlite-shm +*.sqlite-journal diff --git a/rust/.sqlx/query-003e3585cc798a04c3bad7e74e16c380f42202c5cd9b09d9a3e05a749a55a910.json b/.sqlx/query-003e3585cc798a04c3bad7e74e16c380f42202c5cd9b09d9a3e05a749a55a910.json similarity index 100% rename from rust/.sqlx/query-003e3585cc798a04c3bad7e74e16c380f42202c5cd9b09d9a3e05a749a55a910.json rename to .sqlx/query-003e3585cc798a04c3bad7e74e16c380f42202c5cd9b09d9a3e05a749a55a910.json diff --git a/rust/.sqlx/query-0c1f320c3cd7b9a777c558836307309bc5a881d2a2fc5364d9b666f6b53a8778.json b/.sqlx/query-0c1f320c3cd7b9a777c558836307309bc5a881d2a2fc5364d9b666f6b53a8778.json similarity index 100% rename from rust/.sqlx/query-0c1f320c3cd7b9a777c558836307309bc5a881d2a2fc5364d9b666f6b53a8778.json rename to .sqlx/query-0c1f320c3cd7b9a777c558836307309bc5a881d2a2fc5364d9b666f6b53a8778.json diff --git a/rust/.sqlx/query-12167f7d6f8b1bfc5f37c214b089a5196039e6845598b8b22852b7665bcd5c0c.json b/.sqlx/query-12167f7d6f8b1bfc5f37c214b089a5196039e6845598b8b22852b7665bcd5c0c.json similarity index 100% rename from rust/.sqlx/query-12167f7d6f8b1bfc5f37c214b089a5196039e6845598b8b22852b7665bcd5c0c.json rename to .sqlx/query-12167f7d6f8b1bfc5f37c214b089a5196039e6845598b8b22852b7665bcd5c0c.json diff --git a/rust/.sqlx/query-1899fd9182e8791104be2c369298b3f1731b34404ec5ac3d1312a8d84dbf5c7d.json b/.sqlx/query-1899fd9182e8791104be2c369298b3f1731b34404ec5ac3d1312a8d84dbf5c7d.json similarity index 100% rename from rust/.sqlx/query-1899fd9182e8791104be2c369298b3f1731b34404ec5ac3d1312a8d84dbf5c7d.json rename to .sqlx/query-1899fd9182e8791104be2c369298b3f1731b34404ec5ac3d1312a8d84dbf5c7d.json diff --git a/rust/.sqlx/query-2793ec31c3345d77a824314bffa8a53cee248ac310fa620c272af1514f9ae951.json b/.sqlx/query-2793ec31c3345d77a824314bffa8a53cee248ac310fa620c272af1514f9ae951.json similarity index 100% rename from rust/.sqlx/query-2793ec31c3345d77a824314bffa8a53cee248ac310fa620c272af1514f9ae951.json rename to .sqlx/query-2793ec31c3345d77a824314bffa8a53cee248ac310fa620c272af1514f9ae951.json diff --git a/rust/.sqlx/query-2be306559191f0e14e04c33d42b7e5c2aca78e794465ead29273172204534e73.json b/.sqlx/query-2be306559191f0e14e04c33d42b7e5c2aca78e794465ead29273172204534e73.json similarity index 100% rename from rust/.sqlx/query-2be306559191f0e14e04c33d42b7e5c2aca78e794465ead29273172204534e73.json rename to .sqlx/query-2be306559191f0e14e04c33d42b7e5c2aca78e794465ead29273172204534e73.json diff --git a/rust/.sqlx/query-31bd853345496b0680c337f7b9e3c5e5ee04a315af737507001d9a128e981c52.json b/.sqlx/query-31bd853345496b0680c337f7b9e3c5e5ee04a315af737507001d9a128e981c52.json similarity index 100% rename from rust/.sqlx/query-31bd853345496b0680c337f7b9e3c5e5ee04a315af737507001d9a128e981c52.json rename to .sqlx/query-31bd853345496b0680c337f7b9e3c5e5ee04a315af737507001d9a128e981c52.json diff --git a/rust/.sqlx/query-3abc853a3a44c7ecb411f4374bcd05c87cd811a0f0d967d7be4bda908d8d45a1.json b/.sqlx/query-3abc853a3a44c7ecb411f4374bcd05c87cd811a0f0d967d7be4bda908d8d45a1.json similarity index 100% rename from rust/.sqlx/query-3abc853a3a44c7ecb411f4374bcd05c87cd811a0f0d967d7be4bda908d8d45a1.json rename to .sqlx/query-3abc853a3a44c7ecb411f4374bcd05c87cd811a0f0d967d7be4bda908d8d45a1.json diff --git a/.sqlx/query-4017d92f0898c5046c4fbe1cd440ca73e5eb5d0794c679c9e5f05eb87d1defca.json b/.sqlx/query-4017d92f0898c5046c4fbe1cd440ca73e5eb5d0794c679c9e5f05eb87d1defca.json new file mode 100644 index 0000000..8182213 --- /dev/null +++ b/.sqlx/query-4017d92f0898c5046c4fbe1cd440ca73e5eb5d0794c679c9e5f05eb87d1defca.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "INSERT INTO trips_items (\n item_id, \n trip_id, \n pick, \n pack, \n ready,\n new,\n user_id\n ) SELECT \n item_id,\n $1 as trip_id,\n pick,\n false as pack,\n false as ready,\n false as new,\n user_id\n FROM trips_items\n WHERE trip_id = $2 AND user_id = $3", + "describe": { + "columns": [], + "parameters": { + "Right": 3 + }, + "nullable": [] + }, + "hash": "4017d92f0898c5046c4fbe1cd440ca73e5eb5d0794c679c9e5f05eb87d1defca" +} diff --git a/rust/.sqlx/query-4118e44ba436f4ad7de970613fbaa3f88762d37b4e7dbd7b72a76298dad00fd6.json b/.sqlx/query-4118e44ba436f4ad7de970613fbaa3f88762d37b4e7dbd7b72a76298dad00fd6.json similarity index 100% rename from rust/.sqlx/query-4118e44ba436f4ad7de970613fbaa3f88762d37b4e7dbd7b72a76298dad00fd6.json rename to .sqlx/query-4118e44ba436f4ad7de970613fbaa3f88762d37b4e7dbd7b72a76298dad00fd6.json diff --git a/rust/.sqlx/query-4753028574932a6b8d118deb65a930a1592512178477d210acfce662c857cf65.json b/.sqlx/query-4753028574932a6b8d118deb65a930a1592512178477d210acfce662c857cf65.json similarity index 100% rename from rust/.sqlx/query-4753028574932a6b8d118deb65a930a1592512178477d210acfce662c857cf65.json rename to .sqlx/query-4753028574932a6b8d118deb65a930a1592512178477d210acfce662c857cf65.json diff --git a/rust/.sqlx/query-4878a57b32697b1f18e3d2bf58d34b1ad5d05976eec3432406a3d8ddf92d8b94.json b/.sqlx/query-4878a57b32697b1f18e3d2bf58d34b1ad5d05976eec3432406a3d8ddf92d8b94.json similarity index 100% rename from rust/.sqlx/query-4878a57b32697b1f18e3d2bf58d34b1ad5d05976eec3432406a3d8ddf92d8b94.json rename to .sqlx/query-4878a57b32697b1f18e3d2bf58d34b1ad5d05976eec3432406a3d8ddf92d8b94.json diff --git a/rust/.sqlx/query-48c563fdbc8ca0dbe14726eda25a18780c6c416eda63b246daa75c5ff318331d.json b/.sqlx/query-48c563fdbc8ca0dbe14726eda25a18780c6c416eda63b246daa75c5ff318331d.json similarity index 100% rename from rust/.sqlx/query-48c563fdbc8ca0dbe14726eda25a18780c6c416eda63b246daa75c5ff318331d.json rename to .sqlx/query-48c563fdbc8ca0dbe14726eda25a18780c6c416eda63b246daa75c5ff318331d.json diff --git a/rust/.sqlx/query-5b1ddabd48e5407dae74a2f01eb2dbc3712ac4c2dcf48b90b6ec4ee8900ec2ef.json b/.sqlx/query-5b1ddabd48e5407dae74a2f01eb2dbc3712ac4c2dcf48b90b6ec4ee8900ec2ef.json similarity index 100% rename from rust/.sqlx/query-5b1ddabd48e5407dae74a2f01eb2dbc3712ac4c2dcf48b90b6ec4ee8900ec2ef.json rename to .sqlx/query-5b1ddabd48e5407dae74a2f01eb2dbc3712ac4c2dcf48b90b6ec4ee8900ec2ef.json diff --git a/rust/.sqlx/query-5d27eb20c0f6c80bec63192b2ab89827bcf2b75fa75af1ce238530377e25d7bd.json b/.sqlx/query-5d27eb20c0f6c80bec63192b2ab89827bcf2b75fa75af1ce238530377e25d7bd.json similarity index 100% rename from rust/.sqlx/query-5d27eb20c0f6c80bec63192b2ab89827bcf2b75fa75af1ce238530377e25d7bd.json rename to .sqlx/query-5d27eb20c0f6c80bec63192b2ab89827bcf2b75fa75af1ce238530377e25d7bd.json diff --git a/rust/.sqlx/query-6183a38d7587836b782e9e44b8fac57eecfe176d49fc60f88d10244fbdd2e23c.json b/.sqlx/query-6183a38d7587836b782e9e44b8fac57eecfe176d49fc60f88d10244fbdd2e23c.json similarity index 100% rename from rust/.sqlx/query-6183a38d7587836b782e9e44b8fac57eecfe176d49fc60f88d10244fbdd2e23c.json rename to .sqlx/query-6183a38d7587836b782e9e44b8fac57eecfe176d49fc60f88d10244fbdd2e23c.json diff --git a/rust/.sqlx/query-67199202f732164b183ac4813e4a2e8fef843f0c95affadfa66091e4b97756f0.json b/.sqlx/query-67199202f732164b183ac4813e4a2e8fef843f0c95affadfa66091e4b97756f0.json similarity index 100% rename from rust/.sqlx/query-67199202f732164b183ac4813e4a2e8fef843f0c95affadfa66091e4b97756f0.json rename to .sqlx/query-67199202f732164b183ac4813e4a2e8fef843f0c95affadfa66091e4b97756f0.json diff --git a/rust/.sqlx/query-6aa1ef65325521e8b2655445f8bf227a77ef1a24c8fcf722bf8e49beb8c7ba83.json b/.sqlx/query-6aa1ef65325521e8b2655445f8bf227a77ef1a24c8fcf722bf8e49beb8c7ba83.json similarity index 100% rename from rust/.sqlx/query-6aa1ef65325521e8b2655445f8bf227a77ef1a24c8fcf722bf8e49beb8c7ba83.json rename to .sqlx/query-6aa1ef65325521e8b2655445f8bf227a77ef1a24c8fcf722bf8e49beb8c7ba83.json diff --git a/rust/.sqlx/query-6fd3243228d59a7ac2266f0c181a78e7e7a312e101bdd9846123ee4de7c4751a.json b/.sqlx/query-6fd3243228d59a7ac2266f0c181a78e7e7a312e101bdd9846123ee4de7c4751a.json similarity index 100% rename from rust/.sqlx/query-6fd3243228d59a7ac2266f0c181a78e7e7a312e101bdd9846123ee4de7c4751a.json rename to .sqlx/query-6fd3243228d59a7ac2266f0c181a78e7e7a312e101bdd9846123ee4de7c4751a.json diff --git a/rust/.sqlx/query-72ed37defff5cacbdf0a733cdec4fe18ed0b89bb926cfa26d86cce19f20b3f4a.json b/.sqlx/query-72ed37defff5cacbdf0a733cdec4fe18ed0b89bb926cfa26d86cce19f20b3f4a.json similarity index 100% rename from rust/.sqlx/query-72ed37defff5cacbdf0a733cdec4fe18ed0b89bb926cfa26d86cce19f20b3f4a.json rename to .sqlx/query-72ed37defff5cacbdf0a733cdec4fe18ed0b89bb926cfa26d86cce19f20b3f4a.json diff --git a/rust/.sqlx/query-7a70ba0bac63bef015f36a56aab8e429d65c85242b6b9cd1201cc8d9cfc48ab1.json b/.sqlx/query-7a70ba0bac63bef015f36a56aab8e429d65c85242b6b9cd1201cc8d9cfc48ab1.json similarity index 100% rename from rust/.sqlx/query-7a70ba0bac63bef015f36a56aab8e429d65c85242b6b9cd1201cc8d9cfc48ab1.json rename to .sqlx/query-7a70ba0bac63bef015f36a56aab8e429d65c85242b6b9cd1201cc8d9cfc48ab1.json diff --git a/rust/.sqlx/query-85c45093fb8d01ea07cb2f9ec94613b8117a437f07e22b0e8204687f8485b872.json b/.sqlx/query-85c45093fb8d01ea07cb2f9ec94613b8117a437f07e22b0e8204687f8485b872.json similarity index 100% rename from rust/.sqlx/query-85c45093fb8d01ea07cb2f9ec94613b8117a437f07e22b0e8204687f8485b872.json rename to .sqlx/query-85c45093fb8d01ea07cb2f9ec94613b8117a437f07e22b0e8204687f8485b872.json diff --git a/.sqlx/query-905a4518c657a01831fead855bad141d34f699c58b6aa5bee492b6eef2115d74.json b/.sqlx/query-905a4518c657a01831fead855bad141d34f699c58b6aa5bee492b6eef2115d74.json new file mode 100644 index 0000000..83e2192 --- /dev/null +++ b/.sqlx/query-905a4518c657a01831fead855bad141d34f699c58b6aa5bee492b6eef2115d74.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "INSERT INTO trips_items (\n item_id, \n trip_id, \n pick, \n pack, \n ready,\n new,\n user_id\n ) SELECT \n id as item_id,\n $1 as trip_id,\n false as pick,\n false as pack,\n false as ready,\n false as new,\n user_id\n FROM inventory_items\n WHERE user_id = $2", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "905a4518c657a01831fead855bad141d34f699c58b6aa5bee492b6eef2115d74" +} diff --git a/rust/.sqlx/query-961ee325bfb6af3005bad00f0c5c2a78c8d2f362142ce15ca28ee93c47bfbb7f.json b/.sqlx/query-961ee325bfb6af3005bad00f0c5c2a78c8d2f362142ce15ca28ee93c47bfbb7f.json similarity index 100% rename from rust/.sqlx/query-961ee325bfb6af3005bad00f0c5c2a78c8d2f362142ce15ca28ee93c47bfbb7f.json rename to .sqlx/query-961ee325bfb6af3005bad00f0c5c2a78c8d2f362142ce15ca28ee93c47bfbb7f.json diff --git a/rust/.sqlx/query-a5bedc046d5a4fd900903675794e7c3d8202d3876a26505cd26be7ceeb10d06d.json b/.sqlx/query-a5bedc046d5a4fd900903675794e7c3d8202d3876a26505cd26be7ceeb10d06d.json similarity index 100% rename from rust/.sqlx/query-a5bedc046d5a4fd900903675794e7c3d8202d3876a26505cd26be7ceeb10d06d.json rename to .sqlx/query-a5bedc046d5a4fd900903675794e7c3d8202d3876a26505cd26be7ceeb10d06d.json diff --git a/rust/.sqlx/query-a65f6e3cfb2261d37ce3e806ec8d091314c0b206aee3bfe995d6295f4e0cc911.json b/.sqlx/query-a65f6e3cfb2261d37ce3e806ec8d091314c0b206aee3bfe995d6295f4e0cc911.json similarity index 100% rename from rust/.sqlx/query-a65f6e3cfb2261d37ce3e806ec8d091314c0b206aee3bfe995d6295f4e0cc911.json rename to .sqlx/query-a65f6e3cfb2261d37ce3e806ec8d091314c0b206aee3bfe995d6295f4e0cc911.json diff --git a/rust/.sqlx/query-b22e5d91f70638d4ed3b1592c661e470a0d80493e13478393f357da417a0208b.json b/.sqlx/query-b22e5d91f70638d4ed3b1592c661e470a0d80493e13478393f357da417a0208b.json similarity index 100% rename from rust/.sqlx/query-b22e5d91f70638d4ed3b1592c661e470a0d80493e13478393f357da417a0208b.json rename to .sqlx/query-b22e5d91f70638d4ed3b1592c661e470a0d80493e13478393f357da417a0208b.json diff --git a/rust/.sqlx/query-b36287d1b8c7905fb5fe6f8e9c73ca6f63b79252471ce4621d8692771e6fd3cc.json b/.sqlx/query-b36287d1b8c7905fb5fe6f8e9c73ca6f63b79252471ce4621d8692771e6fd3cc.json similarity index 100% rename from rust/.sqlx/query-b36287d1b8c7905fb5fe6f8e9c73ca6f63b79252471ce4621d8692771e6fd3cc.json rename to .sqlx/query-b36287d1b8c7905fb5fe6f8e9c73ca6f63b79252471ce4621d8692771e6fd3cc.json diff --git a/rust/.sqlx/query-b4d2e5f57ee95dd449ab0d69450d471d9fd80b9fc943436185dcd25c7402271e.json b/.sqlx/query-b4d2e5f57ee95dd449ab0d69450d471d9fd80b9fc943436185dcd25c7402271e.json similarity index 100% rename from rust/.sqlx/query-b4d2e5f57ee95dd449ab0d69450d471d9fd80b9fc943436185dcd25c7402271e.json rename to .sqlx/query-b4d2e5f57ee95dd449ab0d69450d471d9fd80b9fc943436185dcd25c7402271e.json diff --git a/rust/.sqlx/query-baea696b94b2f73ec46c645ed4f7ed355fab4bb37a56b9061bc37f3f053703cb.json b/.sqlx/query-baea696b94b2f73ec46c645ed4f7ed355fab4bb37a56b9061bc37f3f053703cb.json similarity index 100% rename from rust/.sqlx/query-baea696b94b2f73ec46c645ed4f7ed355fab4bb37a56b9061bc37f3f053703cb.json rename to .sqlx/query-baea696b94b2f73ec46c645ed4f7ed355fab4bb37a56b9061bc37f3f053703cb.json diff --git a/rust/.sqlx/query-bc01ec2128b21bbdfaab9fc42782a4b30ea2c88d120b4bf2c56cdf0f8d4c5d9d.json b/.sqlx/query-bc01ec2128b21bbdfaab9fc42782a4b30ea2c88d120b4bf2c56cdf0f8d4c5d9d.json similarity index 100% rename from rust/.sqlx/query-bc01ec2128b21bbdfaab9fc42782a4b30ea2c88d120b4bf2c56cdf0f8d4c5d9d.json rename to .sqlx/query-bc01ec2128b21bbdfaab9fc42782a4b30ea2c88d120b4bf2c56cdf0f8d4c5d9d.json diff --git a/rust/.sqlx/query-c1afeeec7f57f4af47d9a99f807b7be6fe2441af601a77d462a99ca7a22ca7c4.json b/.sqlx/query-c1afeeec7f57f4af47d9a99f807b7be6fe2441af601a77d462a99ca7a22ca7c4.json similarity index 100% rename from rust/.sqlx/query-c1afeeec7f57f4af47d9a99f807b7be6fe2441af601a77d462a99ca7a22ca7c4.json rename to .sqlx/query-c1afeeec7f57f4af47d9a99f807b7be6fe2441af601a77d462a99ca7a22ca7c4.json diff --git a/rust/.sqlx/query-c1c2a52d3de684ac473206fa348ee792afe635b41eea4d32db30ac9775794520.json b/.sqlx/query-c1c2a52d3de684ac473206fa348ee792afe635b41eea4d32db30ac9775794520.json similarity index 100% rename from rust/.sqlx/query-c1c2a52d3de684ac473206fa348ee792afe635b41eea4d32db30ac9775794520.json rename to .sqlx/query-c1c2a52d3de684ac473206fa348ee792afe635b41eea4d32db30ac9775794520.json diff --git a/rust/.sqlx/query-c34c9c567a98937e043424db17246ddf23dbc8b618dca6c637f2d71d03841920.json b/.sqlx/query-c34c9c567a98937e043424db17246ddf23dbc8b618dca6c637f2d71d03841920.json similarity index 100% rename from rust/.sqlx/query-c34c9c567a98937e043424db17246ddf23dbc8b618dca6c637f2d71d03841920.json rename to .sqlx/query-c34c9c567a98937e043424db17246ddf23dbc8b618dca6c637f2d71d03841920.json diff --git a/rust/.sqlx/query-cf1d82ba7f12a1bc315a2361599791bfa1f16f1e0bae709122c15d26b26e3263.json b/.sqlx/query-cf1d82ba7f12a1bc315a2361599791bfa1f16f1e0bae709122c15d26b26e3263.json similarity index 100% rename from rust/.sqlx/query-cf1d82ba7f12a1bc315a2361599791bfa1f16f1e0bae709122c15d26b26e3263.json rename to .sqlx/query-cf1d82ba7f12a1bc315a2361599791bfa1f16f1e0bae709122c15d26b26e3263.json diff --git a/rust/.sqlx/query-d891f3002e38de15f1361e1f7db0ef6d338e290460d4cebc4c580e7614ebabc7.json b/.sqlx/query-d891f3002e38de15f1361e1f7db0ef6d338e290460d4cebc4c580e7614ebabc7.json similarity index 100% rename from rust/.sqlx/query-d891f3002e38de15f1361e1f7db0ef6d338e290460d4cebc4c580e7614ebabc7.json rename to .sqlx/query-d891f3002e38de15f1361e1f7db0ef6d338e290460d4cebc4c580e7614ebabc7.json diff --git a/rust/.sqlx/query-dd3f7d321b59961e4ab8a8c0946de1aff32eae0c645e9c544b48926f7ca16a66.json b/.sqlx/query-dd3f7d321b59961e4ab8a8c0946de1aff32eae0c645e9c544b48926f7ca16a66.json similarity index 100% rename from rust/.sqlx/query-dd3f7d321b59961e4ab8a8c0946de1aff32eae0c645e9c544b48926f7ca16a66.json rename to .sqlx/query-dd3f7d321b59961e4ab8a8c0946de1aff32eae0c645e9c544b48926f7ca16a66.json diff --git a/rust/.sqlx/query-ec968e7d97f30547cca37cb1834a054e1ba4ea5461e202cf329b929953c00894.json b/.sqlx/query-ec968e7d97f30547cca37cb1834a054e1ba4ea5461e202cf329b929953c00894.json similarity index 100% rename from rust/.sqlx/query-ec968e7d97f30547cca37cb1834a054e1ba4ea5461e202cf329b929953c00894.json rename to .sqlx/query-ec968e7d97f30547cca37cb1834a054e1ba4ea5461e202cf329b929953c00894.json diff --git a/rust/.sqlx/query-f361f939fd66d550cdfb2f75833d2d9ec2f56bb7170d173f834ac766e4d3026f.json b/.sqlx/query-f361f939fd66d550cdfb2f75833d2d9ec2f56bb7170d173f834ac766e4d3026f.json similarity index 100% rename from rust/.sqlx/query-f361f939fd66d550cdfb2f75833d2d9ec2f56bb7170d173f834ac766e4d3026f.json rename to .sqlx/query-f361f939fd66d550cdfb2f75833d2d9ec2f56bb7170d173f834ac766e4d3026f.json diff --git a/rust/.sqlx/query-f6a5ccd2290b8c3d12cddd7c80899b551fa40dbec71f1498974f9a07cdf5f70e.json b/.sqlx/query-f6a5ccd2290b8c3d12cddd7c80899b551fa40dbec71f1498974f9a07cdf5f70e.json similarity index 100% rename from rust/.sqlx/query-f6a5ccd2290b8c3d12cddd7c80899b551fa40dbec71f1498974f9a07cdf5f70e.json rename to .sqlx/query-f6a5ccd2290b8c3d12cddd7c80899b551fa40dbec71f1498974f9a07cdf5f70e.json diff --git a/rust/.sqlx/query-fc4d85404d4e9db18364616a13731c4cbe1ff5b6c693d27e4879b56a7e850d86.json b/.sqlx/query-fc4d85404d4e9db18364616a13731c4cbe1ff5b6c693d27e4879b56a7e850d86.json similarity index 100% rename from rust/.sqlx/query-fc4d85404d4e9db18364616a13731c4cbe1ff5b6c693d27e4879b56a7e850d86.json rename to .sqlx/query-fc4d85404d4e9db18364616a13731c4cbe1ff5b6c693d27e4879b56a7e850d86.json diff --git a/rust/Cargo.lock b/Cargo.lock similarity index 100% rename from rust/Cargo.lock rename to Cargo.lock diff --git a/rust/Cargo.toml b/Cargo.toml similarity index 100% rename from rust/Cargo.toml rename to Cargo.toml diff --git a/rust/Dockerfile b/Dockerfile similarity index 100% rename from rust/Dockerfile rename to Dockerfile diff --git a/rust/assets/luggage.svg b/assets/luggage.svg similarity index 100% rename from rust/assets/luggage.svg rename to assets/luggage.svg diff --git a/rust/build-container.sh b/build-container.sh similarity index 100% rename from rust/build-container.sh rename to build-container.sh diff --git a/rust/build.rs b/build.rs similarity index 100% rename from rust/build.rs rename to build.rs diff --git a/rust/deps.sh b/deps.sh similarity index 100% rename from rust/deps.sh rename to deps.sh diff --git a/rust/js/app.js b/js/app.js similarity index 100% rename from rust/js/app.js rename to js/app.js diff --git a/rust/migrations/20230519222555_initial.sql b/migrations/20230519222555_initial.sql similarity index 100% rename from rust/migrations/20230519222555_initial.sql rename to migrations/20230519222555_initial.sql diff --git a/rust/migrations/20230523190551_product.sql b/migrations/20230523190551_product.sql similarity index 100% rename from rust/migrations/20230523190551_product.sql rename to migrations/20230523190551_product.sql diff --git a/rust/migrations/20230523212341_finalize.sql b/migrations/20230523212341_finalize.sql similarity index 100% rename from rust/migrations/20230523212341_finalize.sql rename to migrations/20230523212341_finalize.sql diff --git a/rust/migrations/20230523221247_finalize2.sql b/migrations/20230523221247_finalize2.sql similarity index 100% rename from rust/migrations/20230523221247_finalize2.sql rename to migrations/20230523221247_finalize2.sql diff --git a/rust/migrations/20230614163747_add_ready.sql b/migrations/20230614163747_add_ready.sql similarity index 100% rename from rust/migrations/20230614163747_add_ready.sql rename to migrations/20230614163747_add_ready.sql diff --git a/rust/migrations/20230819125455_add_user.sql b/migrations/20230819125455_add_user.sql similarity index 100% rename from rust/migrations/20230819125455_add_user.sql rename to migrations/20230819125455_add_user.sql diff --git a/rust/migrations/20230820094036_add_user_to_inventory.sql b/migrations/20230820094036_add_user_to_inventory.sql similarity index 100% rename from rust/migrations/20230820094036_add_user_to_inventory.sql rename to migrations/20230820094036_add_user_to_inventory.sql diff --git a/rust/migrations/20230820193229_add_user_to_trips.sql b/migrations/20230820193229_add_user_to_trips.sql similarity index 100% rename from rust/migrations/20230820193229_add_user_to_trips.sql rename to migrations/20230820193229_add_user_to_trips.sql diff --git a/rust/migrations/20230820194457_add_user_to_trips2.sql b/migrations/20230820194457_add_user_to_trips2.sql similarity index 100% rename from rust/migrations/20230820194457_add_user_to_trips2.sql rename to migrations/20230820194457_add_user_to_trips2.sql diff --git a/rust/migrations/20230820200039_add_user_to_trips_types.sql b/migrations/20230820200039_add_user_to_trips_types.sql similarity index 100% rename from rust/migrations/20230820200039_add_user_to_trips_types.sql rename to migrations/20230820200039_add_user_to_trips_types.sql diff --git a/migrations/20230911175138_todos.sql b/migrations/20230911175138_todos.sql new file mode 100644 index 0000000..8ddc1d3 --- /dev/null +++ b/migrations/20230911175138_todos.sql @@ -0,0 +1 @@ +-- Add migration script here diff --git a/rust/patch_issue_2599.patch b/patch_issue_2599.patch similarity index 100% rename from rust/patch_issue_2599.patch rename to patch_issue_2599.patch diff --git a/rust/prepare-test-instance.sh b/prepare-test-instance.sh similarity index 100% rename from rust/prepare-test-instance.sh rename to prepare-test-instance.sh diff --git a/rust/prometheus.yml b/prometheus.yml similarity index 100% rename from rust/prometheus.yml rename to prometheus.yml diff --git a/python_flask/.gitignore b/python_flask/.gitignore deleted file mode 100644 index f9107e1..0000000 --- a/python_flask/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -__pycache__/ -/venv/ -*.sqlite -*.sqlite3 -*.bak -*.bundle -/*.sqlite diff --git a/python_flask/NOTES.md b/python_flask/NOTES.md deleted file mode 100644 index fca5cd4..0000000 --- a/python_flask/NOTES.md +++ /dev/null @@ -1,42 +0,0 @@ -# ideas - -Trip info: -* Itinerary -* Members - ---- - -Item info: - -Comments -Links -n:1 Product - ---- - -Item groups that can be selected together. 1:1 product. - ---- - -State management. - ---- - -Item comments per trip (that are added to item overview page) - -"This item was already on the following trips:" - ---- - -Todos, with preparation time window. - ---- - -Review when setting to "done", review per item and for the whole trip. - -"Would take again" (default yes) - -# todos - -Category CRUD - diff --git a/python_flask/migrations/README b/python_flask/migrations/README deleted file mode 100644 index 0e04844..0000000 --- a/python_flask/migrations/README +++ /dev/null @@ -1 +0,0 @@ -Single-database configuration for Flask. diff --git a/python_flask/migrations/alembic.ini b/python_flask/migrations/alembic.ini deleted file mode 100644 index ec9d45c..0000000 --- a/python_flask/migrations/alembic.ini +++ /dev/null @@ -1,50 +0,0 @@ -# A generic, single database configuration. - -[alembic] -# template used to generate migration files -# file_template = %%(rev)s_%%(slug)s - -# set to 'true' to run the environment during -# the 'revision' command, regardless of autogenerate -# revision_environment = false - - -# Logging configuration -[loggers] -keys = root,sqlalchemy,alembic,flask_migrate - -[handlers] -keys = console - -[formatters] -keys = generic - -[logger_root] -level = WARN -handlers = console -qualname = - -[logger_sqlalchemy] -level = WARN -handlers = -qualname = sqlalchemy.engine - -[logger_alembic] -level = INFO -handlers = -qualname = alembic - -[logger_flask_migrate] -level = INFO -handlers = -qualname = flask_migrate - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = NOTSET -formatter = generic - -[formatter_generic] -format = %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %H:%M:%S diff --git a/python_flask/migrations/env.py b/python_flask/migrations/env.py deleted file mode 100644 index 68feded..0000000 --- a/python_flask/migrations/env.py +++ /dev/null @@ -1,91 +0,0 @@ -from __future__ import with_statement - -import logging -from logging.config import fileConfig - -from flask import current_app - -from alembic import context - -# this is the Alembic Config object, which provides -# access to the values within the .ini file in use. -config = context.config - -# Interpret the config file for Python logging. -# This line sets up loggers basically. -fileConfig(config.config_file_name) -logger = logging.getLogger('alembic.env') - -# add your model's MetaData object here -# for 'autogenerate' support -# from myapp import mymodel -# target_metadata = mymodel.Base.metadata -config.set_main_option( - 'sqlalchemy.url', - str(current_app.extensions['migrate'].db.get_engine().url).replace( - '%', '%%')) -target_metadata = current_app.extensions['migrate'].db.metadata - -# other values from the config, defined by the needs of env.py, -# can be acquired: -# my_important_option = config.get_main_option("my_important_option") -# ... etc. - - -def run_migrations_offline(): - """Run migrations in 'offline' mode. - - This configures the context with just a URL - and not an Engine, though an Engine is acceptable - here as well. By skipping the Engine creation - we don't even need a DBAPI to be available. - - Calls to context.execute() here emit the given string to the - script output. - - """ - url = config.get_main_option("sqlalchemy.url") - context.configure( - url=url, target_metadata=target_metadata, literal_binds=True - ) - - with context.begin_transaction(): - context.run_migrations() - - -def run_migrations_online(): - """Run migrations in 'online' mode. - - In this scenario we need to create an Engine - and associate a connection with the context. - - """ - - # this callback is used to prevent an auto-migration from being generated - # when there are no changes to the schema - # reference: http://alembic.zzzcomputing.com/en/latest/cookbook.html - def process_revision_directives(context, revision, directives): - if getattr(config.cmd_opts, 'autogenerate', False): - script = directives[0] - if script.upgrade_ops.is_empty(): - directives[:] = [] - logger.info('No changes in schema detected.') - - connectable = current_app.extensions['migrate'].db.get_engine() - - with connectable.connect() as connection: - context.configure( - connection=connection, - target_metadata=target_metadata, - process_revision_directives=process_revision_directives, - **current_app.extensions['migrate'].configure_args - ) - - with context.begin_transaction(): - context.run_migrations() - - -if context.is_offline_mode(): - run_migrations_offline() -else: - run_migrations_online() diff --git a/python_flask/migrations/script.py.mako b/python_flask/migrations/script.py.mako deleted file mode 100644 index 2c01563..0000000 --- a/python_flask/migrations/script.py.mako +++ /dev/null @@ -1,24 +0,0 @@ -"""${message} - -Revision ID: ${up_revision} -Revises: ${down_revision | comma,n} -Create Date: ${create_date} - -""" -from alembic import op -import sqlalchemy as sa -${imports if imports else ""} - -# revision identifiers, used by Alembic. -revision = ${repr(up_revision)} -down_revision = ${repr(down_revision)} -branch_labels = ${repr(branch_labels)} -depends_on = ${repr(depends_on)} - - -def upgrade(): - ${upgrades if upgrades else "pass"} - - -def downgrade(): - ${downgrades if downgrades else "pass"} diff --git a/python_flask/migrations/versions/4e1894be1cca_.py b/python_flask/migrations/versions/4e1894be1cca_.py deleted file mode 100644 index d7a93fe..0000000 --- a/python_flask/migrations/versions/4e1894be1cca_.py +++ /dev/null @@ -1,34 +0,0 @@ -"""empty message - -Revision ID: 4e1894be1cca -Revises: 8593f77d68a3 -Create Date: 2022-09-21 16:13:06.405648 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '4e1894be1cca' -down_revision = '8593f77d68a3' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('trip_to_triptype') - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('trip_to_triptype', - sa.Column('trip_id', sa.VARCHAR(length=36), nullable=False), - sa.Column('trip_type_id', sa.VARCHAR(length=36), nullable=False), - sa.ForeignKeyConstraint(['trip_id'], ['trips.id'], ), - sa.ForeignKeyConstraint(['trip_type_id'], ['triptypes.id'], ), - sa.PrimaryKeyConstraint('trip_id', 'trip_type_id') - ) - # ### end Alembic commands ### diff --git a/python_flask/migrations/versions/8593f77d68a3_.py b/python_flask/migrations/versions/8593f77d68a3_.py deleted file mode 100644 index 1bbbf12..0000000 --- a/python_flask/migrations/versions/8593f77d68a3_.py +++ /dev/null @@ -1,34 +0,0 @@ -"""empty message - -Revision ID: 8593f77d68a3 -Revises: -Create Date: 2022-09-21 16:11:14.063997 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '8593f77d68a3' -down_revision = None -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('trip_to_triptype') - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('trip_to_triptype', - sa.Column('trip_id', sa.VARCHAR(length=36), nullable=False), - sa.Column('trip_type_id', sa.VARCHAR(length=36), nullable=False), - sa.ForeignKeyConstraint(['trip_id'], ['trips.id'], ), - sa.ForeignKeyConstraint(['trip_type_id'], ['triptypes.id'], ), - sa.PrimaryKeyConstraint('trip_id', 'trip_type_id') - ) - # ### end Alembic commands ### diff --git a/python_flask/packager/__init__.py b/python_flask/packager/__init__.py deleted file mode 100644 index f3e2ff9..0000000 --- a/python_flask/packager/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -import uuid -import sqlalchemy -import csv -from flask import Flask -from flask_migrate import Migrate - -from .helpers import * - -from flask_sqlalchemy import SQLAlchemy - -app = Flask(__name__) -app.config["SQLALCHEMY_DATABASE_URI"] = f"sqlite:///{app.root_path}/../items.sqlite" -app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False - -db = SQLAlchemy(app) -migrate = Migrate(app, db, render_as_batch=True) - -from packager.models import * -import packager.views - -db.create_all() diff --git a/python_flask/packager/components/Base.py b/python_flask/packager/components/Base.py deleted file mode 100644 index c7d9076..0000000 --- a/python_flask/packager/components/Base.py +++ /dev/null @@ -1,55 +0,0 @@ -import os - -import dominate -import dominate.tags as t -from dominate.util import raw - -from ..helpers import * - - -class Base: - def __init__(self, element, root_path, active_page=None): - doc = dominate.document(title="Packager") - with doc.head: - t.script(src="https://unpkg.com/htmx.org@1.7.0") - t.script(src="https://cdn.tailwindcss.com") - t.script(src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.js", defer=True) - t.link( - rel="stylesheet", - href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css", - ) - with doc: - t.script(raw(open(os.path.join(root_path, "js/app.js")).read())) - with t.header( - _class=cls( - "bg-gray-200", - "p-5", - "flex", - "flex-row", - "flex-nowrap", - "justify-between", - "items-center", - ) - ): - t.span("Packager", _class=cls("text-xl", "font-semibold")) - with t.nav( - _class=cls("grow", "flex", "flex-row", "justify-center", "gap-x-6") - ): - basecls = ["text-lg"] - activecls = ["font-bold", "underline"] - t.a( - "Inventory", - href="/inventory/", - _class=cls( - *basecls, *(activecls if active_page == "inventory" else []) - ), - ) - t.a( - "Trips", - href="/trips/", - _class=cls( - *basecls, *(activecls if active_page == "trips" else []) - ), - ) - doc.add(element.doc) - self.doc = doc diff --git a/python_flask/packager/components/Home.py b/python_flask/packager/components/Home.py deleted file mode 100644 index 3c28ed8..0000000 --- a/python_flask/packager/components/Home.py +++ /dev/null @@ -1,18 +0,0 @@ -import os - -import dominate -import dominate.tags as t -from dominate.util import raw - -from ..helpers import * - - -class Home: - def __init__(self): - with t.div(id="home", _class=cls("p-8", "max-w-xl")) as doc: - with t.p(): - t.a("Inventory", href="/inventory/") - with t.p(): - t.a("Trips", href="/trips/") - - self.doc = doc diff --git a/python_flask/packager/components/InventoryCategoryList.py b/python_flask/packager/components/InventoryCategoryList.py deleted file mode 100644 index 2c4d372..0000000 --- a/python_flask/packager/components/InventoryCategoryList.py +++ /dev/null @@ -1,85 +0,0 @@ -import dominate -import dominate.tags as t -from dominate.util import raw - -from ..helpers import * - - -def InventoryCategoryList(categories): - with t.div() as doc: - t.h1("Categories", _class=cls("text-2xl", "mb-5")) - with t.table( - _class=cls( - "table", - "table-auto", - "border-collapse", - "border-spacing-0", - "border", - "w-full", - ) - ): - with t.thead(_class=cls("bg-gray-200")): - t.tr( - t.th("Name", _class=cls("border", "p-2")), - t.th("Weight", _class=cls("border", "p-2")), - _class="h-10", - ) - with t.tbody() as b: - biggest_category_weight = max( - [sum([i.weight for i in c.items]) for c in categories] or [0] - ) - for category in categories: - with t.tr( - _class=cls("h-10", "hover:bg-purple-100", "m-3", "h-full") - ) as doc: - with t.td( - _class=cls( - "border", - "p-0", - "m-0", - *["font-bold"] if category.active else [], - ) - ): - t.a( - category.name, - id="select-category", - # data_hx_post=f"/list/{pkglist.id}/edit", - href=f"/inventory/category/{category.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - _class=cls("inline-block", "p-2", "m-0", "w-full"), - ) - with t.td( - _class=cls("border", "p-0", "m-0"), - style="position:relative;", - ): - with t.a( - id="select-category", - # data_hx_post=f"/list/{pkglist.id}/edit", - href=f"/inventory/category/{category.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - _class=cls("inline-block", "p-2", "m-0", "w-full"), - ): - weight = sum([i.weight for i in category.items]) - width = int(weight / biggest_category_weight * 100) - t.p(weight) - t.div( - _class=cls("bg-blue-600", "h-1.5"), - style=f"width: {width}%;position:absolute;left:0;bottom:0;right:0;", - ) - # t.progress(max=biggest_category_weight, value=weight) - with t.tr( - _class=cls( - "h-10", "hover:bg-purple-200", "bg-gray-300", "font-bold" - ) - ) as doc: - with t.td(_class=cls("border", "p-0", "m-0")): - t.a("Sum", _class=cls("block", "p-2", "m-2")) - with t.td(_class=cls("border", "p-0", "m-0")): - t.a( - sum([sum([i.weight for i in c.items]) for c in categories]), - _class=cls("block", "p-2", "m-2"), - ) - - return doc diff --git a/python_flask/packager/components/InventoryItemDetails.py b/python_flask/packager/components/InventoryItemDetails.py deleted file mode 100644 index 25ade23..0000000 --- a/python_flask/packager/components/InventoryItemDetails.py +++ /dev/null @@ -1,143 +0,0 @@ -import dominate -import dominate.tags as t -from dominate.util import raw - -from ..helpers import * - -import urllib - -class InventoryItemInfoEditRow: - def __init__(self, baseurl, name, value, attribute, inputtype="text"): - - with t.tr() as doc: - t.form( - id=f"edit-{attribute}", - action=urllib.parse.urljoin(baseurl, f"edit/{attribute}/submit/"), - target="_self", - method="post", - # data_hx_post=f"/list/{pkglist.id}/edit/submit", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - ) - with t.tr(_class=cls("h-full")): - t.td(name, _class=cls("border", "p-2", "h-full")) - with t.td(_class=cls("border", "p-0")): - t._input( - _class=cls("bg-blue-200", "w-full", "h-full", "px-2"), - type=inputtype, - id="item-edit-name", - form=f"edit-{attribute}", - name=attribute, - value=value, - ) - - with t.td( - _class=cls( - "border", - "bg-red-200", - "hover:bg-red-400", - "cursor-pointer", - "w-8", - "text-center", - ), - id=f"edit-{attribute}-abort", - ): - with t.a(href=baseurl): - with t.button(): - t.span(_class=cls("mdi", "mdi-cancel", "text-xl")), - with t.td( - id=f"edit-{attribute}-save", - _class=cls( - "border", - "bg-green-200", - "hover:bg-green-400", - "cursor-pointer", - "w-8", - "text-center", - ), - ): - with t.button(type="submit", form=f"edit-{attribute}"): - t.span(_class=cls("mdi", "mdi-content-save", "text-xl")), - self.doc = doc - - -class InventoryItemInfoNormalRow: - def __init__(self, editable, baseurl, name, value, attribute): - with t.tr() as doc: - t.td(name, _class=cls("border", "p-2")) - t.td(value, _class=cls("border", "p-2")) - if editable: - with t.td( - _class=cls( - "border", - "bg-blue-200", - "hover:bg-blue-400", - "cursor-pointer", - "w-8", - "text-center", - ) - ): - if editable: - with t.a( - # data_hx_post=f"/item/{item.id}/edit", - href=f"?edit={attribute}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - ): - with t.button(): - t.span(_class=cls("mdi", "mdi-pencil", "text-xl")), - - self.doc = doc - - -class InventoryItemInfo: - def __init__(self, item, edit, baseurl): - with t.table( - id="trip-table", - _class=cls( - "table", - "table-auto", - "border-collapse", - "border-spacing-0", - "border", - "w-full", - ), - ) as doc: - with t.tbody() as b: - if edit == "name": - InventoryItemInfoEditRow(baseurl, "Name", item.name, "name") - else: - InventoryItemInfoNormalRow( - True, baseurl, "Name", item.name, "name" - ) - - if edit == "weight": - InventoryItemInfoEditRow( - baseurl, - "Weight", - str(item.weight), - "weight", - inputtype="number", - ) - else: - InventoryItemInfoNormalRow( - True, baseurl, "Weight", str(item.weight), "weight" - ) - - self.doc = doc - - - -class InventoryItemDetails: - def __init__( - self, - item, edit, baseurl - ): - with t.div(_class=cls("p-8") - ) as doc: - t.h1("Item", _class=cls("text-2xl", "font-semibold")) - with t.div(_class=cls("my-6")): - InventoryItemInfo(item, edit, baseurl) - - self.doc = doc - diff --git a/python_flask/packager/components/InventoryItemList.py b/python_flask/packager/components/InventoryItemList.py deleted file mode 100644 index 9194c1b..0000000 --- a/python_flask/packager/components/InventoryItemList.py +++ /dev/null @@ -1,194 +0,0 @@ -import dominate -import dominate.tags as t -from dominate.util import raw - -from ..helpers import * - - -class InventoryItemRowEdit(object): - def __init__(self, item, biggest_item_weight): - with t.tr(_class=cls("h-10", "even:bg-gray-100", "hover:bg-purple-100")) as doc: - with t.td(colspan=2, _class=cls("border-none", "bg-purple-100", "h-10")): - with t.div(): - t.form( - id="edit-item", - action=f"/inventory/item/{item.id}/edit/submit/", - target="_self", - method="post", - # data_hx_post=f"/list/{pkglist.id}/edit/submit", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - ) - with t.div(_class=cls("flex", "flex-row", "h-full")): - with t.span( - _class=cls( - "border", - "border-1", - "border-purple-500", - "bg-purple-100", - "mr-1", - ) - ): - t._input( - _class=cls("bg-purple-100", "w-full", "h-full", "px-2"), - type="text", - id="item-edit-name", - form="edit-item", - name="name", - value=item.name, - **{ - "x-on:input": "edit_submit_enabled = $event.srcElement.value.trim().length !== 0;" - }, - ) - with t.span( - _class=cls( - "border", "border-1", "border-purple-500", "bg-purple-100" - ) - ): - t._input( - _class=cls("bg-purple-100", "w-full", "h-full", "px-2"), - type="text", - id="item-edit-weight", - name="weight", - form="edit-item", - value=item.weight, - ) - with t.td( - _class=cls( - "border", - "bg-red-200", - "hover:bg-red-400", - "cursor-pointer", - "w-8", - "text-center", - ), - id="edit-item-abort", - ): - with t.a( - href=f"/inventory/category/{item.category.id}", - # data_hx_post=f"/item/{item.id}/edit/cancel", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - ): - with t.button(): - t.span(_class=cls("mdi", "mdi-cancel", "text-xl")), - with t.td( - id="edit-item-save", - _class=cls( - "border", - "bg-green-200", - "hover:bg-green-400", - "cursor-pointer", - "w-8", - "text-center", - ), - # **{ - # "x-bind:class": 'edit_submit_enabled || "cursor-not-allowed opacity-50"', - # "x-on:htmx:before-request": "(e) => edit_submit_enabled || e.preventDefault()", - # }, - ): - with t.button(type="submit", form="edit-item"): - t.span(_class=cls("mdi", "mdi-content-save", "text-xl")), - self.doc = doc - - -class InventoryItemRowNormal(object): - def __init__(self, item, biggest_item_weight): - with t.tr(_class=cls("h-10", "even:bg-gray-100", "hover:bg-purple-100")) as doc: - with t.td(_class=cls("border", "p-0", "m-0")): - t.a( - item.name, - href=f"/inventory/item/{item.id}/", - _class=cls("p-2", "w-full", "inline-block"), - ) - width = int(item.weight / biggest_item_weight * 100) - with t.td(_class=cls("border", "px-2"), style="position:relative;"): - t.p(str(item.weight)) - t.div( - _class=cls("bg-blue-600", "h-1.5"), - style=";".join( - [ - f"width: {width}%", - "position:absolute", - "left:0", - "bottom:0", - "right:0", - ] - ), - ) - with t.td( - _class=cls( - "border", - "bg-blue-200", - "hover:bg-blue-400", - "cursor-pointer", - "w-8", - "text-center", - ) - ): - with t.a( - # data_hx_post=f"/item/{item.id}/edit", - href=f"?edit={item.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - id="start-edit-item", - ): - with t.button(): - t.span(_class=cls("mdi", "mdi-pencil", "text-xl")), - with t.td( - _class=cls( - "border", - "bg-red-200", - "hover:bg-red-400", - "cursor-pointer", - "w-8", - "text-center", - ) - ): - with t.a( - # data_hx_delete=f"/item/{item.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - href=f"/inventory/item/{item.id}/delete" - ): - with t.button(): - t.span(_class=cls("mdi", "mdi-delete", "text-xl")) - self.doc = doc - - -class InventoryItemRow(object): - def __init__(self, item, biggest_item_weight): - if item.edit: - self.doc = InventoryItemRowEdit(item, biggest_item_weight) - else: - self.doc = InventoryItemRowNormal(item, biggest_item_weight) - - -def InventoryItemList(items): - with t.div() as doc: - t.h1("Items", _class=cls("text-2xl", "mb-5")) - with t.table( - id="item-table", - _class=cls( - "table", - "table-auto", - "border-collapse", - "border-spacing-0", - "border", - "w-full", - ), - ): - with t.thead(_class=cls("bg-gray-200")): - t.tr( - t.th("Name", _class=cls("border", "p-2")), - t.th("Weight", _class=cls("border", "p-2")), - _class="h-10", - ) - with t.tbody() as b: - biggest_item_weight = max([i.weight for i in items] or [0]) - if biggest_item_weight <= 0: - biggest_item_weight = 1 - for item in items: - InventoryItemRow(item, biggest_item_weight).doc - - return doc diff --git a/python_flask/packager/components/InventoryItemManager.py b/python_flask/packager/components/InventoryItemManager.py deleted file mode 100644 index ea41e72..0000000 --- a/python_flask/packager/components/InventoryItemManager.py +++ /dev/null @@ -1,33 +0,0 @@ -import dominate -import dominate.tags as t -from dominate.util import raw - -from .InventoryItemList import InventoryItemList -from .InventoryCategoryList import InventoryCategoryList -from .InventoryNewItem import InventoryNewItem - -from ..helpers import * - - -class InventoryItemManager: - def __init__( - self, - categories, - items, - active_category, - name=None, - description=None, - error=False, - errormsg=None, - ): - assert not (error and not errormsg) - with t.div( - id="pkglist-item-manager", _class=cls("p-8", "grid", "grid-cols-4", "gap-3") - ) as doc: - with t.div(_class=cls("col-span-2")): - InventoryCategoryList(categories), - with t.div(_class=cls("col-span-2")): - InventoryItemList(items), - InventoryNewItem(categories, active_category) - - self.doc = doc diff --git a/python_flask/packager/components/InventoryNewItem.py b/python_flask/packager/components/InventoryNewItem.py deleted file mode 100644 index 427d8a5..0000000 --- a/python_flask/packager/components/InventoryNewItem.py +++ /dev/null @@ -1,152 +0,0 @@ -import dominate -import dominate.tags as t -from dominate.util import raw - -from ..helpers import * - - -def InventoryNewItem(categories, active_category, name=None, weight=None): - with t.form( - id="new-item", - name="new_item", - # data_hx_post="/list/", - # data_hx_target="#item-manager", - # data_hx_swap="outerHTML", - action="/inventory/item/", - target="_self", - method="post", - _class=cls("mt-8", "p-5", "border-2", "border-gray-200"), - # **{ - # "x-on:htmx:before-request": "(e) => submit_enabled || e.preventDefault()", - # "x-data": alpinedata( - # { - # "submit_enabled": ( - # jsbool(not error) - # + '&& document.getElementById("listname").value.trim().length !== 0' - # ) - # } - # ), - # }, - ) as doc: - with t.div(_class=cls("mb-5", "flex", "flex-row", "items-center")): - t.span(_class=cls("mdi", "mdi-playlist-plus", "text-2xl", "mr-4")) - t.p("Add new item", _class=cls("inline", "text-xl")) - with t.div(_class=cls("w-11/12", "mx-auto")): - with t.div(_class=cls("pb-8")): - with t.div( - _class=cls("flex", "flex-row", "justify-center", "items-start") - ): - t.label( - "Name", - _for="item-name", - _class=cls("font-bold", "w-1/2", "p-2", "text-center"), - ) - with t.span(_class=cls("w-1/2")): - t._input( - type="text", - id="item-name", - name="name", - **{"value": name} if name is not None else {}, - # data_hx_target="#new-item", - # data_hx_post="/item/name/validate", - # data_hx_swap="outerHTML", - # data_hx_trigger="changed", - _class=cls( - "block", - "w-full", - "p-2", - "bg-gray-50", - # "appearance-none" if error else None, - "border-2", - # "border-red-400" if error else "border-gray-300", - "rounded", - "focus:outline-none", - "focus:bg-white", - # "focus:border-purple-500" if not error else None, - ), - # **{ - # "x-on:input": "submit_enabled = $event.srcElement.value.trim().length !== 0;" - # }, - ) - # t.p( - # errormsg, _class=cls("mt-1", "text-red-400", "text-sm") - # ) if error else None - with t.div( - _class=cls("flex", "flex-row", "justify-center", "items-center", "pb-8") - ): - t.label( - "Weight", - _for="item-weight", - _class=cls("font-bold", "w-1/2", "text-center"), - ) - with t.span(_class=cls("w-1/2")): - t._input( - type="text", - id="item-weight", - name="weight", - **{"value": weight} if weight is not None else {}, - _class=cls( - "block", - "w-full", - "p-2", - "bg-gray-50", - "appearance-none", - "border-2", - "border-gray-300", - "rounded", - "focus:outline-none", - "focus:bg-white", - "focus:border-purple-500", - ), - ) - with t.div( - _class=cls("flex", "flex-row", "justify-center", "items-center", "pb-8") - ): - t.label( - "Category", - _for="item-category", - _class=cls("font-bold", "w-1/2", "text-center"), - ) - with t.span(_class=cls("w-1/2")): - with t.select( - id="item-category", - name="category", - _class=cls( - "block", - "w-full", - "p-2", - "bg-gray-50", - # "appearance-none", - "border-2", - "border-gray-300", - "rounded", - "focus:outline-none", - "focus:bg-white", - "focus:border-purple-500", - ), - ): - for category in categories: - if active_category and category.id == active_category.id: - t.option( - category.name, value=category.id, selected=True - ) - else: - t.option(category.name, value=category.id) - t._input( - type="submit", - value="Add", - # **{ - # "x-bind:class": 'submit_enabled ? "cursor-pointer" : "cursor-not-allowed opacity-50"' - # }, - _class=cls( - "py-2", - "border-2", - "rounded", - "border-gray-300", - "mx-auto", - "w-full", - # "hover:border-purple-500" if not error else None, - # "hover:bg-purple-200" if not error else None, - ), - ) - return doc diff --git a/python_flask/packager/components/NewTrip.py b/python_flask/packager/components/NewTrip.py deleted file mode 100644 index 04af8d5..0000000 --- a/python_flask/packager/components/NewTrip.py +++ /dev/null @@ -1,145 +0,0 @@ -import dominate -import dominate.tags as t -from dominate.util import raw - -from ..helpers import * - - -def NewTrip(name=None): - with t.form( - id="new-trip", - name="new_trip", - # data_hx_post="/list/", - # data_hx_target="#trip-manager", - # data_hx_swap="outerHTML", - action="/trip/", - target="_self", - method="post", - _class=cls("mt-8", "p-5", "border-2", "border-gray-200"), - # **{ - # "x-on:htmx:before-request": "(e) => submit_enabled || e.preventDefault()", - # "x-data": alpinedata( - # { - # "submit_enabled": ( - # jsbool(not error) - # + '&& document.getElementById("listname").value.trim().length !== 0' - # ) - # } - # ), - # }, - ) as doc: - with t.div(_class=cls("mb-5", "flex", "flex-row", "trips-center")): - t.span(_class=cls("mdi", "mdi-playlist-plus", "text-2xl", "mr-4")) - t.p("Add new trip", _class=cls("inline", "text-xl")) - with t.div(_class=cls("w-11/12", "mx-auto")): - with t.div(_class=cls("pb-8")): - with t.div( - _class=cls("flex", "flex-row", "justify-center", "trips-start") - ): - t.label( - "Name", - _for="trip-name", - _class=cls("font-bold", "w-1/2", "p-2", "text-center"), - ) - with t.span(_class=cls("w-1/2")): - t._input( - type="text", - id="trip-name", - name="name", - **{"value": name} if name is not None else {}, - # data_hx_target="#new-trip", - # data_hx_post="/trip/name/validate", - # data_hx_swap="outerHTML", - # data_hx_trigger="changed", - _class=cls( - "block", - "w-full", - "p-2", - "bg-gray-50", - # "appearance-none" if error else None, - "border-2", - # "border-red-400" if error else "border-gray-300", - "rounded", - "focus:outline-none", - "focus:bg-white", - # "focus:border-purple-500" if not error else None, - ), - # **{ - # "x-on:input": "submit_enabled = $event.srcElement.value.trim().length !== 0;" - # }, - ) - # t.p( - # errormsg, _class=cls("mt-1", "text-red-400", "text-sm") - # ) if error else None - with t.div( - _class=cls("flex", "flex-row", "justify-center", "trips-center", "pb-8") - ): - t.label( - "Start date", - _for="start-date", - _class=cls("font-bold", "w-1/2", "text-center"), - ) - with t.span(_class=cls("w-1/2")): - t._input( - type="date", - id="start-date", - name="start-date", - _class=cls( - "block", - "w-full", - "p-2", - "bg-gray-50", - "appearance-none", - "border-2", - "border-gray-300", - "rounded", - "focus:outline-none", - "focus:bg-white", - "focus:border-purple-500", - ), - ) - with t.div( - _class=cls("flex", "flex-row", "justify-center", "trips-center", "pb-8") - ): - t.label( - "End date", - _for="end-date", - _class=cls("font-bold", "w-1/2", "text-center"), - ) - with t.span(_class=cls("w-1/2")): - t._input( - type="date", - id="end-date", - name="end-date", - _class=cls( - "block", - "w-full", - "p-2", - "bg-gray-50", - "appearance-none", - "border-2", - "border-gray-300", - "rounded", - "focus:outline-none", - "focus:bg-white", - "focus:border-purple-500", - ), - ) - t._input( - type="submit", - value="Add", - # **{ - # "x-bind:class": 'submit_enabled ? "cursor-pointer" : "cursor-not-allowed opacity-50"' - # }, - _class=cls( - "py-2", - "border-2", - "rounded", - "border-gray-300", - "mx-auto", - "w-full", - # "hover:border-purple-500" if not error else None, - # "hover:bg-purple-200" if not error else None, - ), - ) - return doc diff --git a/python_flask/packager/components/TripCategoryList.py b/python_flask/packager/components/TripCategoryList.py deleted file mode 100644 index 662ee45..0000000 --- a/python_flask/packager/components/TripCategoryList.py +++ /dev/null @@ -1,134 +0,0 @@ -import dominate -import dominate.tags as t -from dominate.util import raw - -from ..helpers import * - - -class TripCategoryList: - def __init__(self, trip, categories): - with t.div() as doc: - t.h1("Categories", _class=cls("text-xl", "mb-5")) - with t.table( - _class=cls( - "table", - "table-auto", - "border-collapse", - "border-spacing-0", - "border", - "w-full", - ) - ): - with t.thead(_class=cls("bg-gray-200")): - t.tr( - t.th("Name", _class=cls("border", "p-2")), - t.th("Weight", _class=cls("border", "p-2")), - t.th("Max", _class=cls("border", "p-2")), - _class="h-10", - ) - with t.tbody() as b: - for category in categories: - items = [ - i - for i in trip.items - if i.inventory_item.category_id == category.id - ] - biggest_category_weight = 1 - - for cat in categories: - category_items = [ - i - for i in trip.items - if i.inventory_item.category_id == cat.id - ] - weight_sum = sum( - [ - i.inventory_item.weight - for i in category_items - if i.pick - ] - ) - if weight_sum > biggest_category_weight: - biggest_category_weight = weight_sum - - weight = sum([i.inventory_item.weight for i in items if i.pick]) - - with t.tr( - _class=cls( - "h-10", - "hover:bg-purple-100", - "m-3", - "h-full", - *["bg-blue-100"] - if category.active - else ( - ["bg-red-100"] - if any([i.pick != i.pack for i in items]) - else [] - ), - ) - ) as doc: - with t.td( - _class=cls( - "border", - "p-0", - "m-0", - *["font-bold"] if category.active else [], - ) - ): - t.a( - category.name, - id="select-category", - # data_hx_post=f"/list/{pkglist.id}/edit", - href=f"/trip/{trip.id}/category/{category.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - _class=cls("inline-block", "p-2", "m-0", "w-full"), - ) - - with t.td( - _class=cls("border", "p-0", "m-0"), - style="position:relative;", - ): - with t.a( - id="select-category", - # data_hx_post=f"/list/{pkglist.id}/edit", - href=f"/category/{category.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - _class=cls("inline-block", "p-2", "m-0", "w-full"), - ): - width = int(weight / biggest_category_weight * 100) - t.p(weight) - t.div( - _class=cls("bg-blue-600", "h-1.5"), - style=f"width: {width}%;position:absolute;left:0;bottom:0;right:0;", - ) - with t.td(_class=cls("border", "p-0", "m-0")): - t.a( - sum([i.inventory_item.weight for i in items]), - id="select-category", - # data_hx_post=f"/list/{pkglist.id}/edit", - href=f"/category/{category.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - _class=cls("inline-block", "p-2", "m-0", "w-full"), - ) - # with t.tr(_class=cls("h-10", "hover:bg-purple-200", "bg-gray-300", "font-bold")) as doc: - # with t.td(_class=cls("border", "p-0", "m-0")): - # t.a( - # "Sum", - # _class=cls("block", "p-2", "m-2"), - # ) - # with t.td(_class=cls("border", "p-0", "m-0")): - # t.a( - # sum(([i.inventory_item.weight for i in c.items]) for c in categories]), - # _class=cls("block", "p-2", "m-2"), - # ) - # with t.td(_class=cls("border", "p-0", "m-0", "font-normal")): - # t.a( - # sum(([i.inventory_item.weight for i in c.items]) for c in categories]), - # _class=cls("block", "p-2", "m-2"), - # ) - - self.doc = doc diff --git a/python_flask/packager/components/TripItemList.py b/python_flask/packager/components/TripItemList.py deleted file mode 100644 index 41e7748..0000000 --- a/python_flask/packager/components/TripItemList.py +++ /dev/null @@ -1,266 +0,0 @@ -import dominate -import dominate.tags as t -from dominate.util import raw - -from ..helpers import * - - -class TripItemRowEdit(object): - def __init__(self, item, biggest_item_weight): - with t.tr(_class=cls("h-10", "even:bg-gray-100", "hover:bg-purple-100")) as doc: - with t.td(_class=cls("border")): - with t.a( - id="select-category", - # data_hx_post=f"/list/{pkglist.id}/edit", - href=f"?item_{'unpick' if item.pick else 'pick'}={item.inventory_item.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - _class=cls( - "inline-block", - "p-2", - "m-0", - "w-full", - "flex", - "justify-center", - "content-center", - ), - ): - t._input( - type="checkbox", **({"checked": True} if item.pick else {}) - ) - with t.td(_class=cls("border")): - with t.a( - id="select-category", - # data_hx_post=f"/list/{pkglist.id}/edit", - href=f"?item_{'unpack' if item.pack else 'pack'}={item.inventory_item.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - _class=cls( - "inline-block", - "p-2", - "m-0", - "w-full", - "flex", - "justify-center", - "content-center", - ), - ): - t._input( - type="checkbox", **({"checked": True} if item.pack else {}) - ) - # with t.td(item.name, _class=cls("border", "px-2")), - with t.td(colspan=2, _class=cls("border-none", "bg-purple-100", "h-10")): - with t.div(): - t.form( - id="edit-item", - action=f"/inventory/item/{item.inventory_item.id}/edit/submit/", - target="_self", - method="post", - # data_hx_post=f"/list/{pkglist.id}/edit/submit", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - ) - with t.div(_class=cls("flex", "flex-row", "h-full")): - with t.span( - _class=cls( - "border", - "border-1", - "border-purple-500", - "bg-purple-100", - "mr-1", - ) - ): - t._input( - _class=cls("bg-purple-100", "w-full", "h-full", "px-2"), - type="text", - id="item-edit-name", - form="edit-item", - name="name", - value=item.name, - **{ - "x-on:input": "edit_submit_enabled = $event.srcElement.value.trim().length !== 0;" - }, - ) - with t.span( - _class=cls( - "border", "border-1", "border-purple-500", "bg-purple-100" - ) - ): - t._input( - _class=cls("bg-purple-100", "w-full", "h-full", "px-2"), - type="text", - id="item-edit-weight", - name="weight", - form="edit-item", - value=item.weight, - ) - with t.td( - _class=cls( - "border", - "bg-red-200", - "hover:bg-red-400", - "cursor-pointer", - "w-8", - "text-center", - ), - id="edit-item-abort", - ): - with t.a( - href=f"/inventory/category/{item.category.id}", - # data_hx_post=f"/item/{item.id}/edit/cancel", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - ): - with t.button(): - t.span(_class=cls("mdi", "mdi-cancel", "text-xl")), - with t.td( - id="edit-item-save", - _class=cls( - "border", - "bg-green-200", - "hover:bg-green-400", - "cursor-pointer", - "w-8", - "text-center", - ), - # **{ - # "x-bind:class": 'edit_submit_enabled || "cursor-not-allowed opacity-50"', - # "x-on:htmx:before-request": "(e) => edit_submit_enabled || e.preventDefault()", - # }, - ): - with t.button(type="submit", form="edit-item"): - t.span(_class=cls("mdi", "mdi-content-save", "text-xl")), - self.doc = doc - - -class TripItemRowNormal(object): - def __init__(self, item, biggest_item_weight): - with t.tr(_class=cls("h-10", "even:bg-gray-100", "hover:bg-purple-100")) as doc: - with t.td(_class=cls("border")): - with t.a( - id="select-category", - # data_hx_post=f"/list/{pkglist.id}/edit", - href=f"?item_{'unpick' if item.pick else 'pick'}={item.inventory_item.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - _class=cls( - "inline-block", - "p-2", - "m-0", - "w-full", - "justify-center", - "content-center", - "flex", - ), - ): - t._input( - type="checkbox", - form=f"toggle-item-pick", - name="pick-{item.inventory_item.id}", - **({"checked": True} if item.pick else {}), - ) # , xstyle="position: relative;z-index: 1;pointer-events: auto; ") - with t.td(_class=cls("border")): - with t.a( - id="select-category", - # data_hx_post=f"/list/{pkglist.id}/edit", - href=f"?item_{'unpack' if item.pack else 'pack'}={item.inventory_item.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - _class=cls( - "inline-block", - "p-2", - "m-0", - "w-full", - "flex", - "justify-center", - "content-center", - ), - ): - t._input( - type="checkbox", - form=f"toggle-item-pack", - name="pack-{item.inventory_item.id}", - **({"checked": True} if item.pack else {}), - ) # , xstyle="position: relative;z-index: 1;pointer-events: auto; ") - t.td( - item.inventory_item.name, - _class=cls( - "border", - "px-2", - *(("bg-red-100",) if item.pick != item.pack else ()), - ), - ), - width = int(item.inventory_item.weight / biggest_item_weight * 100) - with t.td(_class=cls("border", "px-2"), style="position:relative;"): - t.p(str(item.inventory_item.weight)) - t.div( - _class=cls("bg-blue-600", "h-1.5"), - style=";".join( - [ - f"width: {width}%", - "position:absolute", - "left:0", - "bottom:0", - "right:0", - ] - ), - ) - self.doc = doc - - -class TripItemRow(object): - def __init__(self, item, biggest_item_weight): - if item.edit: - self.doc = TripItemRowEdit(item, biggest_item_weight) - else: - self.doc = TripItemRowNormal(item, biggest_item_weight) - - -class TripItemList: - def __init__(self, trip, active_category): - with t.div() as doc: - t.h1("Items", _class=cls("text-xl", "mb-5")) - with t.table( - id="item-table", - _class=cls( - "table", - "table-auto", - "border-collapse", - "border-spacing-0", - "border", - "w-full", - ), - ): - with t.thead(_class=cls("bg-gray-200")): - t.tr( - t.th("Take?", _class=cls("border", "p-2", "w-0")), - t.th("Packed?", _class=cls("border", "p-2", "w-0")), - t.th("Name", _class=cls("border", "p-2")), - t.th("Weight", _class=cls("border", "p-2")), - _class="h-10", - ) - with t.tbody() as b: - if active_category: - biggest_item_weight = max( - [ - i.inventory_item.weight - for i in trip.items - if i.inventory_item.category_id == active_category.id - ] - or [0] - ) - else: - biggest_item_weight = max( - [i.inventory_item.weight for i in trip.items] or [0] - ) - if biggest_item_weight <= 0: - biggest_item_weight = 1 - print(active_category) - for item in trip.items: - if ( - not active_category - or item.inventory_item.category_id == active_category.id - ): - TripItemRow(item, biggest_item_weight).doc - - self.doc = doc diff --git a/python_flask/packager/components/TripItemManager.py b/python_flask/packager/components/TripItemManager.py deleted file mode 100644 index eaf6c05..0000000 --- a/python_flask/packager/components/TripItemManager.py +++ /dev/null @@ -1,21 +0,0 @@ -import dominate -import dominate.tags as t -from dominate.util import raw - -from .TripCategoryList import TripCategoryList -from .TripItemList import TripItemList - -from ..helpers import * - - -class TripItemManager: - def __init__(self, trip, categories, active_category): - with t.div( - id="pkglist-item-manager", _class=cls("grid", "grid-cols-4", "gap-3") - ) as doc: - with t.div(_class=cls("col-span-2")): - TripCategoryList(trip, categories), - with t.div(_class=cls("col-span-2")): - TripItemList(trip, active_category=active_category), - - self.doc = doc diff --git a/python_flask/packager/components/TripList.py b/python_flask/packager/components/TripList.py deleted file mode 100644 index b0c0df3..0000000 --- a/python_flask/packager/components/TripList.py +++ /dev/null @@ -1,19 +0,0 @@ -import dominate -import dominate.tags as t -from dominate.util import raw - -from .TripTable import TripTable -from .NewTrip import NewTrip - -from ..helpers import * - - -class TripList: - def __init__(self, trips): - with t.div(id="trips-manager", _class=cls("p-8")) as doc: - TripTable(trips), - NewTrip( - # name=name, description=description, error=error, errormsg=errormsg - ) - - self.doc = doc diff --git a/python_flask/packager/components/TripManager.py b/python_flask/packager/components/TripManager.py deleted file mode 100644 index 0a8421c..0000000 --- a/python_flask/packager/components/TripManager.py +++ /dev/null @@ -1,381 +0,0 @@ -import dominate -import dominate.tags as t -from dominate.util import raw - -import urllib -import decimal - -from .TripTable import TripTable -from .NewTrip import NewTrip -from .TripItemManager import TripItemManager - -from ..helpers import * -from ..models import TripState - - -class TripInfoEditRow: - def __init__(self, baseurl, name, value, attribute, inputtype="text"): - - with t.tr() as doc: - t.form( - id=f"edit-{attribute}", - action=urllib.parse.urljoin(baseurl, f"edit/{attribute}/submit/"), - target="_self", - method="post", - # data_hx_post=f"/list/{pkglist.id}/edit/submit", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - ) - with t.tr(_class=cls("h-full")): - t.td(name, _class=cls("border", "p-2", "h-full")) - with t.td(_class=cls("border", "p-0")): - t._input( - _class=cls("bg-blue-200", "w-full", "h-full", "px-2"), - type=inputtype, - id="item-edit-name", - form=f"edit-{attribute}", - name=attribute, - value=value, - ) - - with t.td( - _class=cls( - "border", - "bg-red-200", - "hover:bg-red-400", - "cursor-pointer", - "w-8", - "text-center", - ), - id=f"edit-{attribute}-abort", - ): - with t.a(href=baseurl): - with t.button(): - t.span(_class=cls("mdi", "mdi-cancel", "text-xl")), - with t.td( - id=f"edit-{attribute}-save", - _class=cls( - "border", - "bg-green-200", - "hover:bg-green-400", - "cursor-pointer", - "w-8", - "text-center", - ), - ): - with t.button(type="submit", form=f"edit-{attribute}"): - t.span(_class=cls("mdi", "mdi-content-save", "text-xl")), - self.doc = doc - - -class TripInfoNormalRow: - def __init__(self, editable, baseurl, name, value, attribute): - with t.tr() as doc: - t.td(name, _class=cls("border", "p-2")) - t.td(value, _class=cls("border", "p-2")) - if editable: - with t.td( - _class=cls( - "border", - "bg-blue-200", - "hover:bg-blue-400", - "cursor-pointer", - "w-8", - "text-center", - ) - ): - if editable: - with t.a( - # data_hx_post=f"/item/{item.id}/edit", - href=f"?edit={attribute}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - ): - with t.button(): - t.span(_class=cls("mdi", "mdi-pencil", "text-xl")), - - self.doc = doc - - -class TripInfo: - def __init__(self, trip, edit, baseurl, triptypes): - with t.table( - id="trip-table", - _class=cls( - "table", - "table-auto", - "border-collapse", - "border-spacing-0", - "border", - "w-full", - ), - ) as doc: - with t.tbody() as b: - TripInfoNormalRow(False, "", "State", trip.state.name, "") - - if edit == "location": - TripInfoEditRow(baseurl, "Location", trip.location, "location") - else: - TripInfoNormalRow( - True, baseurl, "Location", trip.location, "location" - ) - - if edit == "start_date": - TripInfoEditRow( - baseurl, - "From", - str(trip.start_date), - "start_date", - inputtype="date", - ) - else: - TripInfoNormalRow( - True, baseurl, "From", str(trip.start_date), "start_date" - ) - - if edit == "end_date": - TripInfoEditRow( - baseurl, "To", str(trip.end_date), "end_date", inputtype="date" - ) - else: - TripInfoNormalRow( - True, baseurl, "To", str(trip.end_date), "end_date" - ) - - if edit == "temp_min": - TripInfoEditRow( - baseurl, - "Temp (min)", - trip.temp_min, - "temp_min", - inputtype="number", - ) - else: - TripInfoNormalRow( - True, baseurl, "Temp (min)", trip.temp_min, "temp_min" - ) - - if edit == "temp_max": - TripInfoEditRow( - baseurl, - "Temp (max)", - trip.temp_max, - "temp_max", - inputtype="number", - ) - else: - TripInfoNormalRow( - True, baseurl, "Temp (max)", trip.temp_max, "temp_max" - ) - - with t.tr(): - t.td(f"Types", _class=cls("border", "p-2")) - with t.td(_class=cls("border", "p-2")): - with t.ul( - _class=cls( - "flex", - "flex-row", - "flex-wrap", - "gap-2", - "justify-between", - ) - ): - with t.div( - _class=cls( - "flex", - "flex-row", - "flex-wrap", - "gap-2", - "justify-start", - ) - ): - for triptype in trip.types: - with t.a(href=f"?type_remove={triptype.id}"): - with t.li( - _class=cls( - "border", - "rounded-2xl", - "py-0.5", - "px-2", - "bg-green-100", - "cursor-pointer", - "flex", - "flex-column", - "items-center", - "hover:bg-red-200", - "gap-1", - ) - ): - t.span(triptype.name) - t.span( - _class=cls( - "mdi", "mdi-delete", "text-sm" - ) - ) - - with t.div( - _class=cls( - "flex", - "flex-row", - "flex-wrap", - "gap-2", - "justify-start", - ) - ): - for triptype in triptypes: - if triptype not in trip.types: - with t.a(href=f"?type_add={triptype.id}"): - with t.li( - _class=cls( - "border", - "rounded-2xl", - "py-0.5", - "px-2", - "bg-gray-100", - "cursor-pointer", - "flex", - "flex-column", - "items-center", - "hover:bg-green-200", - "gap-1", - "opacity-60", - ) - ): - t.span(triptype.name) - t.span( - _class=cls( - "mdi", "mdi-plus", "text-sm" - ) - ) - - with t.tr(): - t.td(f"Carried weight", _class=cls("border", "p-2")) - weight = sum( - [i.inventory_item.weight for i in trip.items if i.pick] - ) / decimal.Decimal(1000) - t.td(f"{weight} kg", _class=cls("border", "p-2")) - - self.doc = doc - - -class TripComments: - def __init__(self, trip, baseurl): - with t.div() as doc: - t.h1("Comments", _class=cls("text-xl", "mb-5")) - t.form( - id="edit-comment", - action=urllib.parse.urljoin(baseurl, f"edit/comment/submit/"), - target="_self", - method="post", - # data_hx_post=f"/list/{pkglist.id}/edit/submit", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - ) - # https://stackoverflow.com/a/48460773 - t.textarea( - trip.comment or "", - name="comment", - form="edit-comment", - _class=cls("border", "w-full", "h-48"), - oninput='this.style.height = "";this.style.height = this.scrollHeight + 2 + "px"', - ) - - with t.button( - type="submit", - form=f"edit-comment", - _class=cls( - "mt-2", - "border", - "bg-green-200", - "hover:bg-green-400", - "cursor-pointer", - "flex", - "flex-column", - "p-2", - "gap-2", - "items-center", - ), - ): - t.span(_class=cls("mdi", "mdi-content-save", "text-xl")), - t.span("Save") - - self.doc = doc - - -class TripActions: - def __init__(self, trip): - with t.div() as doc: - t.h1("Actions", _class=cls("text-xl", "mb-5")) - - with t.div(_class=cls("flex", "flex-column", "gap-2")): - if trip.state == TripState.Planning: - t.button("Finish planning", _class=cls("border", "p-2")) - if trip.state in (TripState.Planned, TripState.Active): - t.button("Start review", _class=cls("border", "p-2")) - if trip.state == TripState.Done: - t.button("Back to review", _class=cls("border", "p-2")) - - self.doc = doc - - -class TripManager: - def __init__(self, trip, categories, active_category, edit, baseurl, triptypes): - with t.div(id="trips-manager", _class=cls("p-8")) as doc: - if edit == "name": - t.form( - id=f"edit-name", - action=urllib.parse.urljoin(baseurl, f"edit/name/submit/"), - target="_self", - method="post", - # data_hx_post=f"/list/{pkglist.id}/edit/submit", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - ) - with t.div(_class=cls("flex", "flex-row", "items-center", "gap-x-3")): - t._input( - _class=cls("bg-blue-200", "w-full", "h-full", "px-2", "text-2xl", "font-semibold"), - type="text", - id="item-edit-name", - form=f"edit-name", - name="name", - value=trip.name, - ) - with t.a(href=baseurl): - with t.button(_class=cls( - "bg-red-200", - "hover:bg-red-400", - "cursor-pointer")): - t.span(_class=cls("mdi", "mdi-cancel", "text-xl")), - with t.button(type="submit", form=f"edit-name", _class=cls( - "bg-green-200", - "hover:bg-green-400", - "cursor-pointer")): - t.span(_class=cls("mdi", "mdi-content-save", "text-xl")), - else: - with t.div(_class=cls("flex", "flex-row", "items-center", "gap-x-3")): - t.h1(trip.name, _class=cls("text-2xl", "font-semibold")) - with t.span(): - with t.a( - # data_hx_post=f"/item/{item.id}/edit", - href=f"?edit=name", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - ): - with t.button(): - t.span(_class=cls("mdi", "mdi-pencil", "text-xl", "opacity-50")), - - with t.div(_class=cls("my-6")): - TripInfo(trip, edit, baseurl, triptypes).doc - - with t.div(_class=cls("my-6")): - TripComments(trip, baseurl).doc - - with t.div(_class=cls("my-6")): - TripActions(trip).doc - - with t.div(_class=cls("my-6")): - TripItemManager( - trip, categories=categories, active_category=active_category - ).doc - - self.doc = doc diff --git a/python_flask/packager/components/TripTable.py b/python_flask/packager/components/TripTable.py deleted file mode 100644 index 0d0cc33..0000000 --- a/python_flask/packager/components/TripTable.py +++ /dev/null @@ -1,96 +0,0 @@ -import datetime - -import dominate -import dominate.tags as t -from dominate.util import raw - -from ..helpers import * - - -class TripRow(object): - def __init__(self, trip): - with t.tr( - _class=cls("h-10", "even:bg-gray-100", "hover:bg-purple-100", "h-full") - ) as doc: - with t.td(_class=cls("border", "p-0", "m-0")): - t.a( - trip.name, - id="select-trip", - # data_hx_post=f"/list/{pkglist.id}/edit", - href=f"/trip/{trip.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - _class=cls("inline-block", "p-2", "m-0", "w-full"), - ) - with t.td(_class=cls("border", "p-0", "m-0")): - t.a( - t.p(str(trip.start_date)), - id="select-trip", - # data_hx_post=f"/list/{pkglist.id}/edit", - href=f"/trip/{trip.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - _class=cls("inline-block", "p-2", "m-0", "w-full"), - ) - with t.td(_class=cls("border", "p-0", "m-0")): - t.a( - t.p(str(trip.end_date)), - id="select-trip", - # data_hx_post=f"/list/{pkglist.id}/edit", - href=f"/trip/{trip.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - _class=cls("inline-block", "p-2", "m-0", "w-full"), - ) - with t.td(_class=cls("border", "p-0", "m-0")): - t.a( - t.p((trip.end_date - trip.start_date).days), - id="select-trip", - # data_hx_post=f"/list/{pkglist.id}/edit", - href=f"/trip/{trip.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - _class=cls("inline-block", "p-2", "m-0", "w-full"), - ) - today = datetime.datetime.now().date() - with t.td(_class=cls("border", "p-0", "m-0")): - t.a( - t.p(trip.state.name), - id="select-trip", - # data_hx_post=f"/list/{pkglist.id}/edit", - href=f"/trip/{trip.id}", - # data_hx_target="closest tr", - # data_hx_swap="outerHTML", - _class=cls("inline-block", "p-2", "m-0", "w-full"), - ) - self.doc = doc - - -def TripTable(trips): - with t.div() as doc: - t.h1("Trips", _class=cls("text-2xl", "mb-5")) - with t.table( - id="trip-table", - _class=cls( - "table", - "table-auto", - "border-collapse", - "border-spacing-0", - "border", - "w-full", - ), - ): - with t.thead(_class=cls("bg-gray-200")): - t.tr( - t.th("Name", _class=cls("border", "p-2")), - t.th("From", _class=cls("border", "p-2")), - t.th("To", _class=cls("border", "p-2")), - t.th("Nights", _class=cls("border", "p-2")), - t.th("State", _class=cls("border", "p-2")), - _class="h-10", - ) - with t.tbody() as b: - for trip in trips: - TripRow(trip).doc - - return doc diff --git a/python_flask/packager/components/__init__.py b/python_flask/packager/components/__init__.py deleted file mode 100644 index 5c7363f..0000000 --- a/python_flask/packager/components/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from .Base import Base -from .Home import Home -from .InventoryItemManager import InventoryItemManager -from .InventoryItemDetails import InventoryItemDetails -from .TripManager import TripManager -from .TripList import TripList diff --git a/python_flask/packager/helpers.py b/python_flask/packager/helpers.py deleted file mode 100644 index 5053546..0000000 --- a/python_flask/packager/helpers.py +++ /dev/null @@ -1,14 +0,0 @@ -def cls(*args): - return " ".join([a for a in args if a is not None]) - - -def jsbool(b): - return "true" if b else "false" - - -def alpinedata(d): - elements = [] - for k, v in d.items(): - elements.append(f"{k}: " + v) - - return "{" + ",".join(elements) + "}" diff --git a/python_flask/packager/js/app.js b/python_flask/packager/js/app.js deleted file mode 100644 index b0f02ec..0000000 --- a/python_flask/packager/js/app.js +++ /dev/null @@ -1,3 +0,0 @@ -document.body.addEventListener('htmx:responseError', function(evt) { - console.log(evt.detail); -}); diff --git a/python_flask/packager/models.py b/python_flask/packager/models.py deleted file mode 100644 index 9dc6dd0..0000000 --- a/python_flask/packager/models.py +++ /dev/null @@ -1,86 +0,0 @@ -from . import db -import enum - - -class InventoryItemCategory(db.Model): - __tablename__ = "inventoryitemcategories" - id = db.Column(db.String(36), primary_key=True) - name = db.Column(db.Text, unique=True, nullable=False) - description = db.Column(db.Text) - items = db.relationship("InventoryItem", backref="category", lazy=True) - - active = False - - -class InventoryItem(db.Model): - __tablename__ = "inventoryitems" - id = db.Column(db.String(36), primary_key=True) - name = db.Column(db.Text, unique=True, nullable=False) - description = db.Column(db.Text) - weight = db.Column(db.Integer, nullable=False) - category_id = db.Column( - db.String(36), db.ForeignKey("inventoryitemcategories.id"), nullable=False - ) - - edit = False - - -class TripItems(db.Model): - __tablename__ = "tripitems" - item_id = db.Column( - db.String(36), - db.ForeignKey("inventoryitems.id"), - nullable=False, - primary_key=True, - ) - trip_id = db.Column( - db.String(36), db.ForeignKey("trips.id"), nullable=False, primary_key=True - ) - inventory_item = db.relationship("InventoryItem", lazy=True) - - pick = db.Column(db.Boolean, nullable=False) - pack = db.Column(db.Boolean, nullable=False) - - edit = False - - -class TripType(db.Model): - __tablename__ = "triptypes" - id = db.Column(db.String(36), primary_key=True) - name = db.Column(db.Text, unique=True, nullable=False) - - -class TripToTripType(db.Model): - __tablename__ = "trips_to_triptypes" - trip_id = db.Column( - db.String(36), db.ForeignKey("trips.id"), nullable=False, primary_key=True - ) - trip_type_id = db.Column( - db.String(36), db.ForeignKey("triptypes.id"), nullable=False, primary_key=True - ) - - -class TripState(enum.Enum): - Planning = 1 - Planned = 2 - Active = 3 - Review = 4 - Done = 5 - - -class Trip(db.Model): - __tablename__ = "trips" - id = db.Column(db.String(36), primary_key=True) - name = db.Column(db.Text, unique=True, nullable=False) - start_date = db.Column(db.Date, nullable=False) - end_date = db.Column(db.Date, nullable=False) - location = db.Column(db.Text, nullable=False) - temp_min = db.Column(db.Integer, nullable=False) - temp_max = db.Column(db.Integer, nullable=False) - - comment = db.Column(db.Text, nullable=False) - - types = db.relationship("TripType", secondary="trips_to_triptypes", lazy=True) - items = db.relationship("TripItems", lazy=True) - - state = db.Column(db.Enum(TripState), nullable=False) diff --git a/python_flask/packager/views.py b/python_flask/packager/views.py deleted file mode 100644 index 275843f..0000000 --- a/python_flask/packager/views.py +++ /dev/null @@ -1,574 +0,0 @@ -import sqlalchemy -from . import app -from .models import * -from .helpers import * - -import uuid -import os -import urllib -import datetime - -import dominate -import dominate.tags as t -from dominate.util import raw - -from .components import ( - InventoryItemManager, - Base, - Home, - TripList, - TripManager, - InventoryItemDetails, -) - -from flask import request, make_response - - -def get_categories(): - return InventoryItemCategory.query.all() - - -def get_trips(): - return Trip.query.all() - - -def get_all_items(): - return InventoryItem.query.all() - - -def get_triptypes(): - return TripType.query.all() - - -def get_items(category): - return InventoryItem.query.filter_by(category_id=str(category.id)) - - -def get_item(id): - return InventoryItem.query.filter_by(id=str(id)).first() - - -def get_trip(id): - return Trip.query.filter_by(id=str(id)).first() - - -def pick_item(trip_id, item_id): - item = TripItems.query.filter_by(item_id=str(item_id), trip_id=str(trip_id)).first() - item.pick = True - db.session.commit() - - -def unpick_item(trip_id, item_id): - item = TripItems.query.filter_by(item_id=str(item_id), trip_id=str(trip_id)).first() - item.pick = False - db.session.commit() - - -def pack_item(trip_id, item_id): - item = TripItems.query.filter_by(item_id=str(item_id), trip_id=str(trip_id)).first() - item.pack = True - db.session.commit() - - -def unpack_item(trip_id, item_id): - item = TripItems.query.filter_by(item_id=str(item_id), trip_id=str(trip_id)).first() - item.pack = False - db.session.commit() - - -def add_item(name, weight, category_id): - db.session.add( - InventoryItem( - id=str(uuid.uuid4()), - name=name, - description="", - weight=weight, - category_id=category_id, - ) - ) - db.session.commit() - - -@app.route("/") -def root(): - return make_response(Base(Home(), app.root_path).doc.render(), 200) - - -@app.route("/inventory/") -def inventory(): - categories = get_categories() - items = get_all_items() - - args = request.args.to_dict() - - error = False - if not is_htmx(): - edit = request.args.get("edit") - if edit is not None: - match = [i for i in items if i.id == edit] - if match: - match[0].edit = True - - return make_response( - Base( - InventoryItemManager(categories, items, active_category=None), - app.root_path, - active_page="inventory", - ).doc.render(), - 200, - ) - - -@app.route("/inventory/item//") -def inventory_item(id): - item = get_item(id) - - args = request.args.to_dict() - edit = args.pop("edit", None) - - return make_response( - Base( - InventoryItemDetails(item, edit=edit, baseurl=f"/inventory/item/{id}/",), app.root_path, active_page="inventory" - ).doc.render(), - 200, - ) - -@app.route( - "/inventory/item//edit//submit/", - methods=["POST"], -) -def edit_inventory_submit(id, attribute): - new_value = request.form[attribute] - - if attribute in ("weight"): - new_value = int(new_value) - - updates = InventoryItem.query.filter_by(id=str(id)).update({attribute: new_value}) - db.session.commit() - if updates == 0: - # todo what to do without js? - return make_response("", 404) - - redirect = request.path[: -(len(f"edit/{attribute}/submit/"))] - - r = make_response("", 303) - r.headers["Location"] = redirect - return r - -@app.route("/trips/") -def trips(): - trips = get_trips() - - return make_response( - Base(TripList(trips), app.root_path, active_page="trips").doc.render(), 200 - ) - - -@app.route("/trip//") -def trip(id): - - args = request.args.to_dict() - - item_to_pick = args.pop("item_pick", None) - if item_to_pick: - pick_item(id, item_to_pick) - r = make_response("", 303) - if args: - r.headers["Location"] = f"/trip/{id}/?" + urllib.parse.urlencode(params) - else: - r.headers["Location"] = f"/trip/{id}/" - return r - - item_to_unpick = args.pop("item_unpick", None) - if item_to_unpick: - unpick_item(id, item_to_unpick) - r = make_response("", 303) - if args: - r.headers["Location"] = f"/trip/{id}/?" + urllib.parse.urlencode(params) - else: - r.headers["Location"] = f"/trip/{id}/" - return r - - item_to_pack = args.pop("item_pack", None) - if item_to_pack: - pack_item(id, item_to_pack) - r = make_response("", 303) - if args: - r.headers["Location"] = f"/trip/{id}/?" + urllib.parse.urlencode(params) - else: - r.headers["Location"] = f"/trip/{id}/" - return r - - item_to_unpack = args.pop("item_unpack", None) - if item_to_unpack: - unpack_item(id, item_to_unpack) - r = make_response("", 303) - if args: - r.headers["Location"] = f"/trip/{id}/?" + urllib.parse.urlencode(params) - else: - r.headers["Location"] = f"/trip/{id}/" - return r - - type_to_add = args.pop("type_add", None) - if type_to_add: - newtype = TripToTripType(trip_id=str(id), trip_type_id=str(type_to_add)) - db.session.add(newtype) - db.session.commit() - r = make_response("", 303) - if args: - r.headers["Location"] = f"/trip/{id}/?" + urllib.parse.urlencode(params) - else: - r.headers["Location"] = f"/trip/{id}/" - return r - - type_to_remove = args.pop("type_remove", None) - if type_to_remove: - newtype = TripToTripType.query.filter_by( - trip_id=str(id), trip_type_id=str(type_to_remove) - ).delete() - db.session.commit() - r = make_response("", 303) - if args: - r.headers["Location"] = f"/trip/{id}/?" + urllib.parse.urlencode(params) - else: - r.headers["Location"] = f"/trip/{id}/" - return r - - trip = get_trip(id) - - items = get_all_items() - - categories = get_categories() - - edit = args.pop("edit", None) - - for item in items: - try: - db.session.add( - TripItems(trip_id=str(id), item_id=str(item.id), pick=False, pack=False) - ) - db.session.commit() - except sqlalchemy.exc.IntegrityError: - db.session.rollback() - - return make_response( - Base( - TripManager( - trip, - categories=categories, - active_category=None, - edit=edit, - baseurl=f"/trip/{id}/", - triptypes=get_triptypes(), - ), - app.root_path, - active_page="trips", - ).doc.render(), - 200, - ) - - -@app.route( - "/trip//category//edit//submit/", - methods=["POST"], -) -@app.route("/trip//edit//submit/", methods=["POST"]) -def edit_trip_category_location_edit_submit(id, category_id=None, attribute=None): - new_value = request.form[attribute] - - if attribute in ("start_date", "end_date"): - new_value = datetime.date.fromisoformat(new_value) - - updates = Trip.query.filter_by(id=str(id)).update({attribute: new_value}) - db.session.commit() - if updates == 0: - # todo what to do without js? - return make_response("", 404) - - redirect = request.path[: -(len(f"edit/{attribute}/submit/"))] - - r = make_response("", 303) - r.headers["Location"] = redirect - return r - - -@app.route("/trip//category//") -def trip_with_active_category(id, category_id): - trip = get_trip(id) - - args = request.args.to_dict() - - item_to_pick = args.pop("item_pick", None) - if item_to_pick: - pick_item(id, item_to_pick) - r = make_response("", 303) - if args: - r.headers[ - "Location" - ] = f"/trip/{id}/category/{category_id}/?" + urllib.parse.urlencode(params) - else: - r.headers["Location"] = f"/trip/{id}/category/{category_id}/" - return r - - item_to_unpick = args.pop("item_unpick", None) - if item_to_unpick: - unpick_item(id, item_to_unpick) - r = make_response("", 303) - if args: - r.headers[ - "Location" - ] = f"/trip/{id}/category/{category_id}/?" + urllib.parse.urlencode(params) - else: - r.headers["Location"] = f"/trip/{id}/category/{category_id}/" - return r - - item_to_pack = args.pop("item_pack", None) - if item_to_pack: - pack_item(id, item_to_pack) - r = make_response("", 303) - if args: - r.headers[ - "Location" - ] = f"/trip/{id}/category/{category_id}/?" + urllib.parse.urlencode(params) - else: - r.headers["Location"] = f"/trip/{id}/category/{category_id}/" - return r - - item_to_unpack = args.pop("item_unpack", None) - if item_to_unpack: - unpack_item(id, item_to_unpack) - r = make_response("", 303) - if args: - r.headers[ - "Location" - ] = f"/trip/{id}/category/{category_id}/?" + urllib.parse.urlencode(params) - else: - r.headers["Location"] = f"/trip/{id}/category/{category_id}/" - return r - - type_to_add = args.pop("type_add", None) - if type_to_add: - newtype = TripToTripType(trip_id=str(id), trip_type_id=str(type_to_add)) - db.session.add(newtype) - db.session.commit() - r = make_response("", 303) - if args: - r.headers[ - "Location" - ] = f"/trip/{id}/category/{category_id}/?" + urllib.parse.urlencode(params) - else: - r.headers["Location"] = f"/trip/{id}/category/{category_id}/" - return r - - type_to_remove = args.pop("type_remove", None) - if type_to_remove: - newtype = TripToTripType.query.filter_by( - trip_id=str(id), trip_type_id=str(type_to_remove) - ).delete() - db.session.commit() - r = make_response("", 303) - if args: - r.headers[ - "Location" - ] = f"/trip/{id}/category/{category_id}/?" + urllib.parse.urlencode(params) - else: - r.headers["Location"] = f"/trip/{id}/category/{category_id}/" - return r - - items = get_all_items() - - categories = get_categories() - active_category = [c for c in categories if str(c.id) == str(category_id)][0] - active_category.active = True - - for item in items: - try: - db.session.add( - TripItems(trip_id=str(id), item_id=str(item.id), pick=False, pack=False) - ) - db.session.commit() - except sqlalchemy.exc.IntegrityError: - db.session.rollback() - - edit = args.pop("edit", None) - - return make_response( - Base( - TripManager( - trip, - categories=categories, - active_category=active_category, - edit=edit, - baseurl=f"/trip/{id}/category/{category_id}/", - triptypes=get_triptypes(), - ), - app.root_path, - active_page="trips", - ).doc.render(), - 200, - ) - - -@app.route("/inventory/category//") -def category(id): - categories = get_categories() - print(id) - active_category = [c for c in categories if str(c.id) == str(id)][0] - active_category.active = True - - args = request.args.to_dict() - - items = get_items(active_category) - error = False - if not is_htmx(): - edit = request.args.get("edit") - if edit is not None: - match = [i for i in items if i.id == edit] - if match: - match[0].edit = True - - return make_response( - Base( - InventoryItemManager(categories, items, active_category), - app.root_path, - active_page="inventory", - ).doc.render(), - 200, - ) - - -def is_htmx(): - return request.headers.get("HX-Request") is not None - - -@app.route("/inventory/item/", methods=["POST"]) -def add_new_item(): - name = request.form["name"] - weight = int(request.form["weight"]) - category_id = request.form["category"] - - add_item(name=name, weight=weight, category_id=category_id) - - r = make_response("", 303) - r.headers["Location"] = f"/inventory/category/{category_id}" - return r - - -@app.route("/trip/", methods=["POST"]) -def add_new_trip(): - name = request.form["name"] - start_date = datetime.date.fromisoformat(request.form["start-date"]) - end_date = datetime.date.fromisoformat(request.form["end-date"]) - - newid = str(uuid.uuid4()) - db.session.add(Trip(id=newid, name=name, start_date=start_date, end_date=end_date, location="Unknown", temp_min=0, temp_max=0, state=TripState.Planning)) - db.session.commit() - - r = make_response("", 303) - r.headers["Location"] = f"/trip/{newid}" # TODO enable this - r.headers["Location"] = f"/trip/" - return r - - -def validate_name(name): - error, errormsg = False, None - - if len(name) == 0: - error = True - errormsg = f"Name cannot be empty" - elif name.isspace(): - error = True - errormsg = f"Name cannot be only whitespace" - - return error, errormsg - - -@app.route("/inventory/item//edit/submit/", methods=["POST"]) -def edit_item_submit(id): - name = request.form["name"] - weight = int(request.form["weight"]) - - item = InventoryItem.query.filter_by(id=str(id)).first() - if item is None: - # todo what to do without js? - return make_response("", 404) - - item.name = name - item.weight = weight - - db.session.commit() - - r = make_response("", 303) - r.headers["Location"] = f"/inventory/category/{item.category.id}" - return r - - -@app.route("/inventory/item//pick/submit/", methods=["POST"]) -def edit_item_pick(id): - print(request.form) - if "pick" in request.form: - pick = request.form["pick"] == "on" - else: - pick = False - print(pick) - - item = InventoryItem.query.filter_by(id=str(id)).first() - if item is None: - # todo what to do without js? - return make_response("", 404) - - item.picked = pick - - db.session.commit() - - r = make_response("", 303) - r.headers["Location"] = f"/inventory/category/{item.category.id}" - return r - - -@app.route("/inventory/item//pack/submit/", methods=["POST"]) -def edit_item_pack(id): - print(request.form) - if "pack" in request.form: - pack = request.form["pack"] == "on" - else: - pack = False - print(pack) - - item = InventoryItem.query.filter_by(id=str(id)).first() - if item is None: - # todo what to do without js? - return make_response("", 404) - - item.pack = pack - - db.session.commit() - - r = make_response("", 303) - r.headers["Location"] = f"/inventory/category/{item.category.id}" - return r - - -@app.route("/inventory/item/", methods=["DELETE"]) -def delete_item(id): - deletions = InventoryItem.query.filter_by(id=str(id)).delete() - if deletions == 0: - return make_response("", 404) - else: - db.session.commit() - return make_response("", 200) - - -@app.route("/inventory/item//delete", methods=["GET"]) -def delete_item_get(id): - print(request.headers) - print(request.args) - print(f"deleting {id}") - deletions = InventoryItem.query.filter_by(id=str(id)).delete() - if deletions == 0: - return make_response("", 404) - else: - db.session.commit() - r = make_response("", 303) - r.headers["Location"] = request.headers["Referer"] - return r diff --git a/python_flask/requirements.txt b/python_flask/requirements.txt deleted file mode 100644 index e970621..0000000 --- a/python_flask/requirements.txt +++ /dev/null @@ -1,16 +0,0 @@ -alembic==1.8.1 -click==8.1.3 -dominate==2.6.0 -Flask==2.1.2 -Flask-Migrate==3.1.0 -Flask-SQLAlchemy==2.5.1 -greenlet==1.1.2 -importlib-metadata==4.12.0 -importlib-resources==5.9.0 -itsdangerous==2.1.2 -Jinja2==3.1.2 -Mako==1.2.2 -MarkupSafe==2.1.1 -SQLAlchemy==1.4.39 -Werkzeug==2.1.2 -zipp==3.8.0 diff --git a/python_flask/run.sh b/python_flask/run.sh deleted file mode 100755 index e1e0bd9..0000000 --- a/python_flask/run.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -source ./venv/bin/activate - -export FLASK_APP=packager -export FLASK_ENV=development - -if (( $# == 0 )) ; then - python3 -m flask run --reload --host 0.0.0.0 --port 5000 -else - python3 -m flask "${@}" -fi diff --git a/python_flask/selenium/.gitignore b/python_flask/selenium/.gitignore deleted file mode 100644 index 9f21b54..0000000 --- a/python_flask/selenium/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/venv/ diff --git a/python_flask/selenium/connect.sh b/python_flask/selenium/connect.sh deleted file mode 100755 index a59157b..0000000 --- a/python_flask/selenium/connect.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -xtightvncviewer 127.0.0.1::5900 -passwd <(printf %s secret | vncpasswd -f) diff --git a/python_flask/selenium/requirements.txt b/python_flask/selenium/requirements.txt deleted file mode 100644 index 6acfc18..0000000 --- a/python_flask/selenium/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -helium==3.0.8 -selenium==3.141.0 -urllib3==1.26.10 diff --git a/python_flask/selenium/run-driver.sh b/python_flask/selenium/run-driver.sh deleted file mode 100755 index 07ced3e..0000000 --- a/python_flask/selenium/run-driver.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -docker run \ - --rm \ - --publish 4444:4444 \ - --env SE_OPTS="--session-timeout 36000" \ - --shm-size="2g" \ - --net=host \ - --name docker-selenium \ - selenium/standalone-firefox:4.3.0-20220706 diff --git a/python_flask/selenium/setup.sh b/python_flask/selenium/setup.sh deleted file mode 100755 index 8434070..0000000 --- a/python_flask/selenium/setup.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -set -o errexit -set -o nounset -set -p pipefail - -python3 -m venv ./venv -source ./venv/bin/activate -python3 -m pip install -r requirements.txt - -sudo apt install tigervnc-common xtightvncviewer diff --git a/python_flask/selenium/test.py b/python_flask/selenium/test.py deleted file mode 100755 index 2ff6d42..0000000 --- a/python_flask/selenium/test.py +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/env python3 - -import time -import argparse -import code -import readline - -from helium import * -import selenium - -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.common.by import By - -parser = argparse.ArgumentParser() -parser.add_argument("--repl", action="store_true") -args = parser.parse_args() - -opts = selenium.webdriver.firefox.options.Options() - -for has_javascript in [True, False]: - profile = selenium.webdriver.FirefoxProfile() - profile.DEFAULT_PREFERENCES["frozen"]["javascript.enabled"] = has_javascript - opts.profile = profile - - driver = selenium.webdriver.Remote( - command_executor="http://localhost:4444/wd/hub", options=opts - ) - driver.implicitly_wait(0) - Config.implicit_wait_secs = 1 - - try: - helium.set_driver(driver) - helium.go_to("http://localhost:5000") - - assert driver.title == "Packager" - - new_entry = Text("Add new package list") - - lists_before = find_all(S("table > tbody > tr", below=Text("Package Lists"))) - - write("newlist", into=TextField(to_right_of="Name")) - write("newlistdesc", into=TextField(to_right_of="Description")) - click(Button("Add")) - - lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists"))) - - assert len(lists_before) == len(lists_after) - 1 - - nameidx = next( - i - for i, v in enumerate(find_all(S("table > thead > tr > th"))) - if v.web_element.text == "Name" - ) - descidx = next( - i - for i, v in enumerate(find_all(S("table > thead > tr > th"))) - if v.web_element.text == "Description" - ) - - write("newlist2", into=TextField(to_right_of="Name")) - write("newlistdesc2", into=TextField(to_right_of="Description")) - click(Button("Add")) - - lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists"))) - assert len(lists_before) == len(lists_after) - 2 - - new_entry1 = lists_after[-2] - cells = new_entry1.web_element.find_elements_by_tag_name("td") - assert cells[nameidx].text == "newlist" - assert cells[descidx].text == "newlistdesc" - - new_entry2 = lists_after[-1] - cells = new_entry2.web_element.find_elements_by_tag_name("td") - assert cells[nameidx].text == "newlist2" - assert cells[descidx].text == "newlistdesc2" - - editbtn = new_entry1.web_element.find_element_by_class_name("mdi-pencil") - click(editbtn) - - lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists"))) - editrow = find_all(S("table > tbody > tr"))[-2] - - inputs = editrow.web_element.find_elements_by_xpath("//input") - write("editedname", into=inputs[0]) - write("editeddesc", into=inputs[1]) - - savebtn = editrow.web_element.find_element_by_class_name("mdi-content-save") - click(savebtn) - - lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists"))) - new_entry1 = lists_after[-2] - - cells = new_entry1.web_element.find_elements_by_tag_name("td") - assert cells[nameidx].text == "editedname" - assert cells[descidx].text == "editeddesc" - - editbtn = new_entry1.web_element.find_element_by_class_name("mdi-pencil") - click(editbtn) - - lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists"))) - editrow = find_all(S("table > tbody > tr"))[-2] - - inputs = editrow.web_element.find_elements_by_xpath("//input") - write("editedname_again", into=inputs[0]) - write("editeddesc_again", into=inputs[1]) - - cancelbtn = editrow.web_element.find_element_by_class_name("mdi-cancel") - click(cancelbtn) - lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists"))) - new_entry1 = lists_after[-2] - - cells = new_entry1.web_element.find_elements_by_tag_name("td") - assert cells[nameidx].text == "editedname" - assert cells[descidx].text == "editeddesc" - - lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists"))) - - new_entry1 = lists_after[-2] - deletebtn = new_entry1.web_element.find_element_by_class_name("mdi-delete") - click(deletebtn) - - lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists"))) - - assert len(lists_before) + 1 == len(lists_after) - - new_entry2 = lists_after[-1] - deletebtn = new_entry2.web_element.find_element_by_class_name("mdi-delete") - click(deletebtn) - lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists"))) - - assert len(lists_before) == len(lists_after) - - if args.repl: - code.InteractiveConsole(locals=globals()).interact() - - finally: - driver.quit() - - -time.sleep(5) diff --git a/rust/rebuild-schema-data.sh b/rebuild-schema-data.sh similarity index 100% rename from rust/rebuild-schema-data.sh rename to rebuild-schema-data.sh diff --git a/rust/run-in-k8s.sh b/run-in-k8s.sh similarity index 100% rename from rust/run-in-k8s.sh rename to run-in-k8s.sh diff --git a/rust/run-test-instance.sh b/run-test-instance.sh similarity index 100% rename from rust/run-test-instance.sh rename to run-test-instance.sh diff --git a/rust/.gitignore b/rust/.gitignore deleted file mode 100644 index bd04656..0000000 --- a/rust/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -/target/ -*.sqlite -*.sqlite-wal -*.sqlite-shm -*.sqlite-journal diff --git a/rust/vendor/sqlx b/rust/vendor/sqlx deleted file mode 160000 index 1744240..0000000 --- a/rust/vendor/sqlx +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 17442400f0ff0f71e25e94d3b83cd18bd51e7961 diff --git a/rust_warp_svelte/api/.gitignore b/rust_warp_svelte/api/.gitignore deleted file mode 100644 index fc52778..0000000 --- a/rust_warp_svelte/api/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/target/ -/sqlite.db diff --git a/rust_warp_svelte/api/Cargo.lock b/rust_warp_svelte/api/Cargo.lock deleted file mode 100644 index bc071c6..0000000 --- a/rust_warp_svelte/api/Cargo.lock +++ /dev/null @@ -1,1189 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "ahash" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43bb833f0bf979d8475d38fbf09ed3b8a55e1885fe93ad3f93239fc6a4f17b98" -dependencies = [ - "getrandom 0.2.3", - "once_cell", - "version_check", -] - -[[package]] -name = "autocfg" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" - -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - -[[package]] -name = "buf_redux" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" -dependencies = [ - "memchr", - "safemem", -] - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cpufeatures" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" -dependencies = [ - "libc", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - -[[package]] -name = "fallible-streaming-iterator" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "form_urlencoded" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" -dependencies = [ - "matches", - "percent-encoding", -] - -[[package]] -name = "futures" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" - -[[package]] -name = "futures-io" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" - -[[package]] -name = "futures-sink" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" - -[[package]] -name = "futures-task" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" - -[[package]] -name = "futures-util" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" -dependencies = [ - "autocfg", - "futures-core", - "futures-sink", - "futures-task", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.10.2+wasi-snapshot-preview1", -] - -[[package]] -name = "h2" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7f3675cfef6a30c8031cf9e6493ebdc3bb3272a3fea3923c4210d1830e6a472" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashlink" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf" -dependencies = [ - "hashbrown", -] - -[[package]] -name = "headers" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0b7591fb62902706ae8e7aaff416b1b0fa2c0fd0878b46dc13baa3712d8a855" -dependencies = [ - "base64", - "bitflags", - "bytes", - "headers-core", - "http", - "mime", - "sha-1", - "time", -] - -[[package]] -name = "headers-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" -dependencies = [ - "http", -] - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "http" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "399c583b2979440c60be0821a6199eca73bc3c8dcd9d070d75ac726e2c6186e5" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" - -[[package]] -name = "httpdate" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" - -[[package]] -name = "hyper" -version = "0.14.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13f67199e765030fa08fe0bd581af683f0d5bc04ea09c2b1102012c5fb90e7fd" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "idna" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "indexmap" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] -name = "input_buffer" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f97967975f448f1a7ddb12b0bc41069d09ed6a1c161a92687e057325db35d413" -dependencies = [ - "bytes", -] - -[[package]] -name = "instant" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.101" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21" - -[[package]] -name = "libsqlite3-sys" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abd5850c449b40bacb498b2bbdfaff648b1b055630073ba8db499caf2d0ea9f2" -dependencies = [ - "pkg-config", - "vcpkg", -] - -[[package]] -name = "lock_api" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - -[[package]] -name = "memchr" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" - -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - -[[package]] -name = "mime_guess" -version = "2.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "mio" -version = "0.7.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16" -dependencies = [ - "libc", - "log", - "miow", - "ntapi", - "winapi", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi", -] - -[[package]] -name = "multipart" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050aeedc89243f5347c3e237e3e13dc76fbe4ae3742a57b94dc14f69acf76d4" -dependencies = [ - "buf_redux", - "httparse", - "log", - "mime", - "mime_guess", - "quick-error", - "rand 0.7.3", - "safemem", - "tempfile", - "twoway", -] - -[[package]] -name = "ntapi" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" -dependencies = [ - "winapi", -] - -[[package]] -name = "num_cpus" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "once_cell" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "packager-api" -version = "0.1.0" -dependencies = [ - "rusqlite", - "serde", - "serde_json", - "tokio", - "uuid", - "warp", -] - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi", -] - -[[package]] -name = "percent-encoding" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" - -[[package]] -name = "pin-project" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576bc800220cc65dac09e99e97b08b358cfab6e17078de8dc5fee223bd2d0c08" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c9b1041b4387893b91ee6746cddfc28516aff326a3519fb2adf820932c5e6cb" - -[[package]] -name = "ppv-lite86" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" - -[[package]] -name = "proc-macro2" -version = "1.0.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" -dependencies = [ - "unicode-xid", -] - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quote" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc 0.2.0", -] - -[[package]] -name = "rand" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.3", - "rand_hc 0.3.1", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.3", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" -dependencies = [ - "getrandom 0.2.3", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_hc" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" -dependencies = [ - "rand_core 0.6.3", -] - -[[package]] -name = "redox_syscall" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" -dependencies = [ - "bitflags", -] - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - -[[package]] -name = "rusqlite" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e4dc548c68ef586f0f623263ca633733d596d15fbcd1b9cb97babf98adc487" -dependencies = [ - "bitflags", - "fallible-iterator", - "fallible-streaming-iterator", - "hashlink", - "libsqlite3-sys", - "memchr", - "smallvec", - "uuid", -] - -[[package]] -name = "ryu" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "scoped-tls" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "serde" -version = "1.0.130" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.130" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7f9e390c27c3c0ce8bc5d725f6e4d30a29d26659494aa4b17535f7522c5c950" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha-1" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" -dependencies = [ - "block-buffer", - "cfg-if", - "cpufeatures", - "digest", - "opaque-debug", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" -dependencies = [ - "libc", -] - -[[package]] -name = "slab" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" - -[[package]] -name = "smallvec" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" - -[[package]] -name = "socket2" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765f090f0e423d2b55843402a07915add955e7d60657db13707a159727326cad" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "syn" -version = "1.0.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "tempfile" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" -dependencies = [ - "cfg-if", - "libc", - "rand 0.8.4", - "redox_syscall", - "remove_dir_all", - "winapi", -] - -[[package]] -name = "time" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "tinyvec" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" - -[[package]] -name = "tokio" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52963f91310c08d91cb7bff5786dfc8b79642ab839e188187e92105dbfb9d2c8" -dependencies = [ - "autocfg", - "bytes", - "libc", - "memchr", - "mio", - "num_cpus", - "once_cell", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "tokio-macros", - "winapi", -] - -[[package]] -name = "tokio-macros" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54473be61f4ebe4efd09cec9bd5d16fa51d70ea0192213d754d2d500457db110" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-stream" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2f3f698253f03119ac0102beaa64f67a67e08074d03a22d18784104543727f" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1a5f475f1b9d077ea1017ecbc60890fda8e54942d680ca0b1d2b47cfa2d861b" -dependencies = [ - "futures-util", - "log", - "pin-project", - "tokio", - "tungstenite", -] - -[[package]] -name = "tokio-util" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d3725d3efa29485e87311c5b699de63cde14b00ed4d256b8318aa30ca452cd" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tower-service" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" - -[[package]] -name = "tracing" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-core", -] - -[[package]] -name = "tracing-core" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ca517f43f0fb96e0c3072ed5c275fe5eece87e8cb52f4a77b69226d3b1c9df8" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - -[[package]] -name = "tungstenite" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ada8297e8d70872fa9a551d93250a9f407beb9f37ef86494eb20012a2ff7c24" -dependencies = [ - "base64", - "byteorder", - "bytes", - "http", - "httparse", - "input_buffer", - "log", - "rand 0.8.4", - "sha-1", - "url", - "utf-8", -] - -[[package]] -name = "twoway" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" -dependencies = [ - "memchr", -] - -[[package]] -name = "typenum" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" - -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246f4c42e67e7a4e3c6106ff716a5d067d4132a642840b242e357e468a2a0085" - -[[package]] -name = "unicode-normalization" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-xid" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" - -[[package]] -name = "url" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" -dependencies = [ - "form_urlencoded", - "idna", - "matches", - "percent-encoding", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" -dependencies = [ - "getrandom 0.2.3", - "serde", -] - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version_check" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "warp" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "332d47745e9a0c38636dbd454729b147d16bd1ed08ae67b3ab281c4506771054" -dependencies = [ - "bytes", - "futures", - "headers", - "http", - "hyper", - "log", - "mime", - "mime_guess", - "multipart", - "percent-encoding", - "pin-project", - "scoped-tls", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tokio-util", - "tower-service", - "tracing", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/rust_warp_svelte/api/Cargo.toml b/rust_warp_svelte/api/Cargo.toml deleted file mode 100644 index bcd7284..0000000 --- a/rust_warp_svelte/api/Cargo.toml +++ /dev/null @@ -1,40 +0,0 @@ -[package] -name = "packager-api" -version = "0.1.0" -authors = [ - "Hannes Körber " -] -edition = "2021" -readme = "README.md" -repository = "https://github.com/hkoerber/packager/" -license = "AGPL-3.0-only" - -publish = false - -[profile.release] -lto = true - -[lib] -name = "packager" - -[dependencies] -warp = "0.3" -serde_json = "1.0" - -[dependencies.tokio] -version = "1" -features = ["full"] - - -[dependencies.serde] -version = "1.0" -features = ["derive", "rc"] - -[dependencies.uuid] -version = "0.8" -features = ["serde", "v4"] - -[dependencies.rusqlite] -version = "0.26.2" -features = ["uuid"] - diff --git a/rust_warp_svelte/api/README.md b/rust_warp_svelte/api/README.md deleted file mode 100644 index 1265a77..0000000 --- a/rust_warp_svelte/api/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Setup - -* Install `rustup` - -On Arch Linux: - -``` -$ sudo pacman -S rustup -``` - -``` -$ rustup toolchain install nightly -``` - -# Run Dev - -``` -$ rustup run nightly cargo run -``` - -# Build - -``` -$ rustup run nightly cargo build --release -``` diff --git a/rust_warp_svelte/api/src/db.rs b/rust_warp_svelte/api/src/db.rs deleted file mode 100644 index 87a697e..0000000 --- a/rust_warp_svelte/api/src/db.rs +++ /dev/null @@ -1,1278 +0,0 @@ -use std::collections::HashMap; -use std::rc::Rc; - -use rusqlite; -use uuid::Uuid; - -use super::Duration; -use super::ItemSize; -use super::ItemUsage; -use super::PackageItem; -use super::PackageList; -use super::Period; -use super::Preparation; -use super::PreparationStep; -use super::Trip; -use super::TripParameters; -use super::TripState; -use super::TripItem; -use super::TripItemStatus; - -pub fn load() -> rusqlite::Result<()> { - let example_lists = vec![ - PackageList::new_from_items( - Uuid::parse_str("5f95d8c7-c4da-44bc-af30-2d10c479de8a").unwrap(), - String::from("EDC"), - vec![ - PackageItem::new_simple( - Uuid::parse_str("48703b81-037a-401f-8f46-56c242bb16c3").unwrap(), - String::from("Rucksack"), - ), - PackageItem::new_simple( - Uuid::parse_str("39b26f98-0cbc-46d5-ac17-43d61ba1a503").unwrap(), - String::from("Regenhülle für Rucksack"), - ), - PackageItem::new_simple( - Uuid::parse_str("a5934361-bc5d-4092-bad4-95c15c875dca").unwrap(), - String::from("Normale Schuhe"), - ), - PackageItem::new_simple( - Uuid::parse_str("4b0a6dbb-652b-464a-b413-93dd4f010ce3").unwrap(), - String::from("Taschenmesser"), - ), - PackageItem::new( - Uuid::parse_str("9823e841-64d1-43ab-a05f-95606b89482c").unwrap(), - String::from("Taschentücher"), - ItemSize::Pack(1), - 1, - ItemUsage::Infinite, - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("a7eac657-e870-4181-a644-16fe229d917a").unwrap(), - String::from("Handy"), - ItemSize::None, - 1, - ItemUsage::Infinite, - Preparation::Steps(vec![ - PreparationStep::new( - Uuid::parse_str("36cf6bfe-d4d9-461b-84e9-6e52b941f8b9").unwrap(), - String::from("Vertrag überprüfen"), - Duration::Days(30), - ), - PreparationStep::new( - Uuid::parse_str("1f795db7-094f-440d-b29a-66eb93787697").unwrap(), - String::from("Aufladen"), - Duration::Days(1), - ), - ]), - ), - PackageItem::new( - Uuid::parse_str("c0d97e46-a9fe-4d20-a3e9-8cf7c69d2fbf").unwrap(), - String::from("Kopfhörer"), - ItemSize::None, - 1, - ItemUsage::Infinite, - Preparation::Steps(vec![PreparationStep::new( - Uuid::parse_str("9fa1a53e-4884-4324-b49f-3a390bfebf67").unwrap(), - String::from("Aufladen"), - Duration::Days(1), - )]), - ), - PackageItem::new( - Uuid::parse_str("9b04e117-1a61-4643-8238-55c401a2dd00").unwrap(), - String::from("Mundschutz"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Weekly(1)), - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("5efe30c7-896d-4c32-9976-81ac93ff6aa0").unwrap(), - String::from("Kokain"), - ItemSize::Gram(100), - 3, - ItemUsage::Periodic(Period::Weekly(1)), - Preparation::Steps(vec![PreparationStep::new( - Uuid::parse_str("ab3e49c1-cc46-4d25-a43a-0e18f4a6dd0b").unwrap(), - String::from("Beim Dealer kaufen"), - Duration::Days(3), - )]), - ), - PackageItem::new_simple( - Uuid::parse_str("8fb8d7ce-7766-4203-bc38-058fe2440519").unwrap(), - String::from("Ladekabel"), - ), - ], - ), - PackageList::new_from_items( - Uuid::parse_str("3ea0714e-3115-46c4-8ae0-f2a37398cc7a").unwrap(), - String::from("Geld & Karten"), - vec![ - PackageItem::new( - Uuid::parse_str("18ebb1bc-e01f-4dc7-bda7-919dd8f069c7").unwrap(), - String::from("Bargeld"), - ItemSize::Name(String::from("Euro")), - 100, - ItemUsage::Infinite, - Preparation::Steps(vec![PreparationStep::new( - Uuid::parse_str("bed380b8-b9fa-412d-b767-c57fbd9e5d94").unwrap(), - String::from("Abheben"), - Duration::Days(1), - )]), - ), - PackageItem::new_simple( - Uuid::parse_str("2aba4c22-9c3d-4b19-95b5-265f1846b8f9").unwrap(), - String::from("Kreditkarte"), - ), - PackageItem::new_simple( - Uuid::parse_str("aeec841e-0691-4af9-b719-16a6752c33d6").unwrap(), - String::from("Pass"), - ), - PackageItem::new_simple( - Uuid::parse_str("1a598c16-a238-4d02-baef-03208beb9509").unwrap(), - String::from("Krankenversicherungskarte"), - ), - PackageItem::new_simple( - Uuid::parse_str("584955e2-3bf4-459c-8c87-631414842571").unwrap(), - String::from("Krankenversicherungskarte (Zusatz)"), - ), - PackageItem::new_simple( - Uuid::parse_str("571dd7b6-0420-4f8f-8e83-fb430c6f1c23").unwrap(), - String::from("Auslandskrankenversicherungsnachweis"), - ), - PackageItem::new_simple( - Uuid::parse_str("25937e62-4ade-495b-9535-c4db1176fbab").unwrap(), - String::from("Notfalltelefonnummernliste"), - ), - PackageItem::new_simple( - Uuid::parse_str("6464f872-00f6-4621-9d37-ff6b75c8d79a").unwrap(), - String::from("ADAC-Karte"), - ), - PackageItem::new_simple( - Uuid::parse_str("0b9298b7-6bdb-4fdc-a171-1953654b160e").unwrap(), - String::from("Impfausweiß (EU)"), - ), - PackageItem::new_simple( - Uuid::parse_str("fac04399-e092-4aeb-bf61-edd081890fa6").unwrap(), - String::from("Führerschein"), - ), - PackageItem::new_simple( - Uuid::parse_str("17ef3d3a-010f-44c1-acae-ef0ea9a985b8").unwrap(), - String::from("Internationaler Führerschein"), - ), - PackageItem::new_simple( - Uuid::parse_str("b256cd9f-8c5c-45f2-9e08-04cc62800cfe").unwrap(), - String::from("Tagebuch"), - ), - ], - ), - PackageList::new_from_items( - Uuid::parse_str("4b2c2d4e-3014-48aa-95e0-39f352cb6494").unwrap(), - String::from("Waschzeug"), - vec![ - PackageItem::new_simple( - Uuid::parse_str("c91e2295-7fa6-4165-bb6c-0de60069c410").unwrap(), - String::from("Waschbeutel"), - ), - PackageItem::new_simple( - Uuid::parse_str("005639bb-b336-4e7c-bb88-aeaca20fc488").unwrap(), - String::from("Sonnencreme"), - ), - PackageItem::new_simple( - Uuid::parse_str("9a907ab6-3e49-4cc0-af86-637821127354").unwrap(), - String::from("After-Sun"), - ), - PackageItem::new_simple( - Uuid::parse_str("7ed5be40-929e-4ae2-a723-61e6514e9592").unwrap(), - String::from("Nagelset"), - ), - PackageItem::new_simple( - Uuid::parse_str("40f9bc11-1e24-4a60-b183-7f9a2eab0e42").unwrap(), - String::from("Rasurbox"), - ), - PackageItem::new_simple( - Uuid::parse_str("c72126c8-5639-4952-b4a7-d588d636a6f0").unwrap(), - String::from("Rasierer"), - ), - PackageItem::new( - Uuid::parse_str("9f6e9c09-e550-411c-a89d-7f79608b1bb6").unwrap(), - String::from("Ersatzklingen"), - ItemSize::Pack(1), - 1, - ItemUsage::Infinite, - Preparation::None, - ), - PackageItem::new_simple( - Uuid::parse_str("547fb1cd-568b-44d2-9618-0f4de7ca2ca5").unwrap(), - String::from("Zahnbürste"), - ), - PackageItem::new( - Uuid::parse_str("09259ebe-407b-4808-9a19-db3b95f77846").unwrap(), - String::from("Zahnputztabletten"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Daily(2)), - Preparation::None, - ), - PackageItem::new_simple( - Uuid::parse_str("10342277-9984-4c9a-ad07-155e148f91fd").unwrap(), - String::from("Deo"), - ), - PackageItem::new_simple( - Uuid::parse_str("e323ca57-8487-4b3f-a3f9-6dd8e26ff0e4").unwrap(), - String::from("Duschgel / Shampoo"), - ), - ], - ), - PackageList::new_from_items( - Uuid::parse_str("4ba0462f-5c75-4926-9ca2-ea93ef5b66ef").unwrap(), - String::from("Apotheke"), - vec![ - PackageItem::new( - Uuid::parse_str("bdeea898-479b-41e9-8d33-1c79743b3011").unwrap(), - String::from("Blasenpflaster"), - ItemSize::Pack(1), - 1, - ItemUsage::Infinite, - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("2175fa92-0ef2-48a1-bea0-f70268b0ad68").unwrap(), - String::from("Erste-Hilfe-Set"), - ItemSize::None, - 1, - ItemUsage::Infinite, - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("bad9f320-eaf8-4240-bfa6-890b755eb03a").unwrap(), - String::from("Paracetamol"), - ItemSize::Pack(1), - 1, - ItemUsage::Infinite, - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("b9d3f29d-4448-42ba-aeff-ba179542b4ae").unwrap(), - String::from("Autan"), - ItemSize::Pack(1), - 1, - ItemUsage::Infinite, - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("bfeb6d0f-5122-4f80-94e9-be54a1d1c838").unwrap(), - String::from("Pflaster"), - ItemSize::Pack(1), - 1, - ItemUsage::Infinite, - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("3f08c3e2-a0d9-40fb-b3fb-f4bb79815b9d").unwrap(), - String::from("Zeckenkarte"), - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::None, - ), - ], - ), - PackageList::new_from_items( - Uuid::parse_str("9aa4ee9f-2f00-42d2-980e-8fd1ede0283c").unwrap(), - String::from("Badesachen"), - vec![ - PackageItem::new_simple( - Uuid::parse_str("879b9d32-0de5-45f3-bffb-0c1e73b5a7b8").unwrap(), - String::from("Badehose"), - ), - PackageItem::new_simple( - Uuid::parse_str("5610ab1f-308d-4ef9-b8e4-3721fa4c4172").unwrap(), - String::from("Badehandtuch"), - ), - PackageItem::new_simple( - Uuid::parse_str("e7e3c053-a269-4f0d-b6bd-99b48bf4573a").unwrap(), - String::from("Surfshirt (Lang)"), - ), - PackageItem::new_simple( - Uuid::parse_str("360c20f5-8142-48d1-add4-a8f2a48a242b").unwrap(), - String::from("Wasserschuhe"), - ), - ], - ), - PackageList::new_from_items( - Uuid::parse_str("1e0728d1-9dd9-48ff-a206-a73b604b9748").unwrap(), - String::from("Camping"), - vec![ - PackageItem::new_simple( - Uuid::parse_str("fb6eec8c-a1ad-420f-b8de-9695e9ccb67d").unwrap(), - String::from("Schlafsack"), - ), - PackageItem::new_simple( - Uuid::parse_str("69a06abd-34f4-4991-9a41-b3ec50bcbbd7").unwrap(), - String::from("Zelt"), - ), - PackageItem::new_simple( - Uuid::parse_str("22169568-1976-43ab-8c40-37c7e6193e18").unwrap(), - String::from("Luftmatratze"), - ), - PackageItem::new_simple( - Uuid::parse_str("dd10738b-0162-4e0a-9db9-ea5e16ee5566").unwrap(), - String::from("Campingstuhl"), - ), - PackageItem::new_simple( - Uuid::parse_str("a88c14c1-8194-4fea-be6c-b532517bbf97").unwrap(), - String::from("Panzertape"), - ), - PackageItem::new_simple( - Uuid::parse_str("fb67fbf1-cd04-4b39-b0a3-bff4bf07f38e").unwrap(), - String::from("Tarp"), - ), - PackageItem::new_simple( - Uuid::parse_str("6de5825b-0e39-4693-9664-2edc7353db3b").unwrap(), - String::from("Hängematte"), - ), - PackageItem::new_simple( - Uuid::parse_str("c6f14fb7-c598-4a47-8b12-b96ff3856a21").unwrap(), - String::from("Topf"), - ), - PackageItem::new_simple( - Uuid::parse_str("2fb43b9c-c6ca-4fda-9e09-e1a83efdc4f7").unwrap(), - String::from("Teller"), - ), - PackageItem::new_simple( - Uuid::parse_str("a203f34c-e912-4479-ad8e-e16150122cad").unwrap(), - String::from("Messer"), - ), - PackageItem::new_simple( - Uuid::parse_str("63837c0a-7a8e-40ae-aced-818066bd9e89").unwrap(), - String::from("Gabel"), - ), - PackageItem::new_simple( - Uuid::parse_str("437a45d9-4fc5-459e-b790-7628945d7c38").unwrap(), - String::from("Löffel"), - ), - PackageItem::new_simple( - Uuid::parse_str("a461859f-b430-42da-bf52-8cdb3eb42d13").unwrap(), - String::from("Stirnlampe"), - ), - PackageItem::new_simple( - Uuid::parse_str("f109c12f-10dd-4249-a02e-c28aaa20a8f6").unwrap(), - String::from("Geschirrtuch"), - ), - PackageItem::new_simple( - Uuid::parse_str("1f2ffc7e-060a-4277-a15d-119b85481438").unwrap(), - String::from("Spüllappen"), - ), - PackageItem::new_simple( - Uuid::parse_str("bf6d49fe-25cc-4114-a374-3c4772cf5f3a").unwrap(), - String::from("Taschenlampe"), - ), - PackageItem::new_simple( - Uuid::parse_str("03994e35-f0f0-4ccd-bc24-0a331ffbba96").unwrap(), - String::from("Feuerzeug"), - ), - PackageItem::new_simple( - Uuid::parse_str("fc3ecdab-eb3a-4d27-8f95-cd78d37e063e").unwrap(), - String::from("Tasse"), - ), - PackageItem::new_simple( - Uuid::parse_str("8b55efae-6e18-4d7f-a5b7-83ba15c50995").unwrap(), - String::from("Grill"), - ), - PackageItem::new( - Uuid::parse_str("b6d821e5-3285-4bf2-bd71-be9154f94937").unwrap(), - String::from("Grillkohle"), - ItemSize::Gram(1500), - 1, - ItemUsage::Periodic(Period::Days(2)), - Preparation::None, - ), - PackageItem::new_simple( - Uuid::parse_str("d2338ac1-9995-4319-8ca5-12654a266266").unwrap(), - String::from("Campingkocher"), - ), - PackageItem::new( - Uuid::parse_str("4ff62940-f691-4982-b1fd-54a2850e06f4").unwrap(), - String::from("Campinggas"), - ItemSize::Pack(1), - 1, - ItemUsage::Periodic(Period::Days(3)), - Preparation::None, - ), - PackageItem::new_simple( - Uuid::parse_str("a024c67a-6e61-4749-b2a4-1ec8ca132184").unwrap(), - String::from("Kaffeekochaufsatz"), - ), - PackageItem::new( - Uuid::parse_str("054e1610-1e8e-421e-95ad-c76e88cb45ab").unwrap(), - String::from("Küchenrolle"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Days(5)), - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("181310a8-946c-4075-9f95-c7a82d0269fd").unwrap(), - String::from("Müllsäcke"), - ItemSize::Pack(1), - 1, - ItemUsage::Infinite, - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("c823ce3f-922e-4300-95ad-21ff221cd896").unwrap(), - String::from("Teelichter"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Daily(3)), - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("e86bfb7c-a840-4b88-b216-afd3c173754b").unwrap(), - String::from("Klopapier"), - ItemSize::Name(String::from("Rolle")), - 1, - ItemUsage::Periodic(Period::Weekly(1)), - Preparation::None, - ), - ], - ), - PackageList::new_from_items( - Uuid::parse_str("e5ecb3cc-a893-44cd-b4f8-4b41af003c96").unwrap(), - String::from("Essen"), - vec![PackageItem::new( - Uuid::parse_str("6ebf5d87-6b97-4d80-8e03-25fa62e641d9").unwrap(), - String::from("Kaffee"), - ItemSize::Gram(100), - 1, - ItemUsage::Periodic(Period::Days(3)), - Preparation::None, - )], - ), - PackageList::new_from_items( - Uuid::parse_str("4e9042db-1db8-4912-8179-d0a3ebb80876").unwrap(), - String::from("Wanderzeug"), - vec![ - PackageItem::new_simple( - Uuid::parse_str("2eccd528-17a7-429f-b97a-70faae1b4dac").unwrap(), - String::from("Wanderschuhe"), - ), - PackageItem::new( - Uuid::parse_str("d8c52786-d50e-4a9f-b8c6-e9396c5be789").unwrap(), - String::from("Trinkblase"), - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::Steps(vec![PreparationStep::new( - Uuid::parse_str("50548e94-9a1c-4509-bbb5-eb5831b3c4c1").unwrap(), - String::from("Auffüllen"), - Duration::None, - )]), - ), - ], - ), - PackageList::new_from_items( - Uuid::parse_str("5b272c8e-bf54-4af6-94e0-63071c92a8e3").unwrap(), - String::from("Klamotten"), - vec![ - PackageItem::new( - Uuid::parse_str("d18215d2-9cf9-48c7-894b-b9680ba39879").unwrap(), - String::from("Cap"), - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("83c03986-cc34-4500-9cee-1cc1778f5cf3").unwrap(), - String::from("Regenjacke"), - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("00c116ba-840d-47c4-a081-5e256941d3b9").unwrap(), - String::from("Daunenjacke"), - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("35834bec-6c63-41df-825c-05b943e07bc8").unwrap(), - String::from("Pullover"), - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("127704a8-1e4d-4c49-b74f-34130ed08f83").unwrap(), - String::from("Lange Hose"), - ItemSize::None, - 2, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("e15a6772-3d5d-454d-8f7d-bf9066ba5d23").unwrap(), - String::from("Kurze Hose"), - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("09992e6d-408a-43e4-beee-1925e727415f").unwrap(), - String::from("Jogginghose"), - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("799f0fd4-2be7-44b5-b286-889242900be3").unwrap(), - String::from("Socken"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Daily(1)), - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("f57f3299-a46a-4ed3-aff0-ffc5d2627a6a").unwrap(), - String::from("Unterhose"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Daily(1)), - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("c100f7be-ceb7-46a6-aded-380a201bfe45").unwrap(), - String::from("T-Shirt"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Days(2)), - Preparation::None, - ), - PackageItem::new_simple( - Uuid::parse_str("22908312-a8d2-4005-893c-12e56d9af022").unwrap(), - String::from("Schmutzwäschebeutel"), - ), - ], - ), - PackageList::new_from_items( - Uuid::parse_str("929bc029-ec8f-4294-9484-ec32f0170f5c").unwrap(), - String::from("Fahrrad"), - vec![ - PackageItem::new_simple( - Uuid::parse_str("d91ed4fd-ef9b-4ad5-849f-1481dbbc95b0").unwrap(), - String::from("Fahrrad"), - ), - PackageItem::new_simple( - Uuid::parse_str("2f2a09d7-2d97-4ff8-9fb1-ace86eaf6de5").unwrap(), - String::from("Fahrradhelm"), - ), - ], - ), - PackageList::new_from_items( - Uuid::parse_str("0103e348-b4e8-4cc9-95e6-4ef85b7c76ab").unwrap(), - String::from("Misc"), - vec![ - PackageItem::new_simple( - Uuid::parse_str("990c7121-7342-48a2-9abb-4d0e274b6759").unwrap(), - String::from("Trinkflasche"), - ), - PackageItem::new_simple( - Uuid::parse_str("0ead2b93-9b81-4e32-a856-0a562557598c").unwrap(), - String::from("Dyneemaschnur"), - ), - PackageItem::new_simple( - Uuid::parse_str("be5d49bc-9c06-4747-b954-9ca003694018").unwrap(), - String::from("Ladegerät"), - ), - PackageItem::new( - Uuid::parse_str("aab7b03b-19f9-4149-a23d-3c14d938cca4").unwrap(), - String::from("Powerbank"), - ItemSize::None, - 1, - ItemUsage::Infinite, - Preparation::Steps(vec![PreparationStep::new( - Uuid::parse_str("d9f040b0-4e60-4a70-8c47-3819294ed380").unwrap(), - String::from("Aufladen"), - Duration::Days(1), - )]), - ), - PackageItem::new( - Uuid::parse_str("c54deb17-fe62-4300-8297-c5dfc4773a02").unwrap(), - String::from("Desinfektionsgel"), - ItemSize::None, - 1, - ItemUsage::Periodic(Period::Weekly(1)), - Preparation::None, - ), - PackageItem::new( - Uuid::parse_str("3fb87c86-7155-4df5-8f7b-68c288ba1147").unwrap(), - String::from("Karabiner"), - ItemSize::None, - 3, - ItemUsage::Singleton, - Preparation::None, - ), - PackageItem::new_simple( - Uuid::parse_str("c965176c-9014-4e8f-8e99-8cd2e37a64ac").unwrap(), - String::from("Ersatzbrille"), - ), - PackageItem::new_simple( - Uuid::parse_str("b0909ce6-5a8c-42fa-a384-de108f19ee5d").unwrap(), - String::from("Sonnenbrille"), - ), - PackageItem::new_simple( - Uuid::parse_str("7ec347d4-0c28-48bb-9c32-558a1988a164").unwrap(), - String::from("Ohrenstöpsel"), - ), - ], - ), - ]; - - let example_trips = vec![ - Trip::from_package_list( - Uuid::parse_str("98dd50f9-b945-48e0-8fa9-41a3fd8b897e").unwrap(), - String::from("Campingtrip"), - String::from("2021-09-06"), - TripParameters { days: 5 }, - vec![ - (example_lists[0].id, example_lists[0].name.clone()), - (example_lists[1].id, example_lists[0].name.clone()), - ], - TripState::Active, - ), - Trip::from_package_list( - Uuid::parse_str("1a8e3f23-fb24-43f0-ad09-5945a1da708e").unwrap(), - String::from("Städtereise"), - String::from("2021-12-12"), - TripParameters { days: 2 }, - vec![ - (example_lists[0].id, example_lists[0].name.clone()), - (example_lists[2].id, example_lists[0].name.clone()), - (example_lists[3].id, example_lists[0].name.clone()), - ], - TripState::Planned, - ), - ]; - - print!("Loading data ... "); - - let conn = rusqlite::Connection::open("./sqlite.db")?; - - conn.execute( - "CREATE TABLE packagelists ( - id TEXT PRIMARY KEY, - name TEXT NOT NULL - )", - [], - )?; - - conn.execute( - "CREATE TABLE packagelistitems ( - id TEXT PRIMARY KEY, - name TEXT NOT NULL, - packagelist TEXT NOT NULL, - count INTEGER NOT NULL, - - FOREIGN KEY(packagelist) REFERENCES packagelists(id) - )", - [], - )?; - - conn.execute( - "CREATE TABLE preparation ( - id TEXT PRIMARY KEY, - packagelistitem TEXT NOT NULL, - - FOREIGN KEY(packagelistitem) REFERENCES packagelistitems(id) - )", - [], - )?; - - conn.execute( - "CREATE TABLE preparationstep ( - id TEXT PRIMARY KEY, - preparation TEXT NOT NULL, - name TEXT NOT NULL, - start_days INTEGER NOT NULL, - - FOREIGN KEY(preparation) REFERENCES preparation(id) - )", - [], - )?; - - conn.execute( - "CREATE TABLE trips ( - id TEXT PRIMARY KEY, - name TEXT NOT NULL, - date TEXT NOT NULL, - days INTEGER NOT NULL, - state INTEGER NOT NULL - )", - [], - )?; - - conn.execute( - "CREATE TABLE trip_packagelist ( - trip_id TEXT NOT NULL, - packagelist_id TEXT NOT NULL, - - FOREIGN KEY(trip_id) REFERENCES trips(id) - FOREIGN KEY(packagelist_id) REFERENCES packagelists(id) - )", - [], - )?; - - conn.execute( - "CREATE TABLE trip_items ( - trip_id TEXT NOT NULL, - packagelistitem_id TEXT NOT NULL, - status INTEGER NOT NULL, - - FOREIGN KEY(trip_id) REFERENCES trips(id) - FOREIGN KEY(packagelistitem_id) REFERENCES packagelistitems(id) - - PRIMARY KEY(trip_id, packagelistitem_id) - )", - [], - )?; - - for list in example_lists { - conn.execute( - "INSERT INTO - packagelists (id, name) - VALUES (?1, ?2)", - rusqlite::params![list.id, list.name], - )?; - - for item in list.items { - conn.execute( - "INSERT INTO - packagelistitems (id, name, packagelist, count) - VALUES (?1, ?2, ?3, ?4)", - rusqlite::params![item.id, item.name, list.id, item.count], - )?; - - let prep = item.preparation; - match prep { - Preparation::None => (), - Preparation::Steps(steps) => { - let prep_id = Uuid::new_v4(); - conn.execute( - "INSERT INTO - preparation (id, packagelistitem) - VALUES (?1, ?2)", - rusqlite::params![prep_id, item.id], - )?; - for step in steps { - let id = Uuid::new_v4(); - let start = match step.start { - Duration::None => 0, - Duration::Days(d) => d, - }; - conn.execute( - "INSERT INTO - preparationstep (id, name, start_days, preparation) - VALUES (?1, ?2, ?3, ?4)", - rusqlite::params![id, step.name, start, prep_id], - )?; - } - } - }; - } - } - - for trip in example_trips { - conn.execute( - "INSERT INTO - trips (id, name, date, days, state) - VALUES (?1, ?2, ?3, ?4, ?5)", - rusqlite::params![ - trip.id, - trip.name, - trip.date, - trip.parameters.days, - trip.state - ], - )?; - for package_list in trip.package_lists { - conn.execute( - "INSERT INTO - trip_packagelist (trip_id, packagelist_id) - VALUES (?1, ?2)", - rusqlite::params![trip.id, package_list.id], - )?; - } - } - - println!("Done!"); - - Ok(()) -} - -pub fn get_list(id: Uuid) -> rusqlite::Result> { - let conn = rusqlite::Connection::open("./sqlite.db")?; - - let mut statement = conn.prepare( - "SELECT - id, name - FROM packagelists - WHERE id = ?1", - )?; - - let packagelist_iter = statement.query_map(rusqlite::params![id], |row| { - Ok(PackageList::new(row.get(0)?, row.get(1)?)) - })?; - - let mut lists: Vec = packagelist_iter.map(|row| row.unwrap()).collect(); - - if lists.is_empty() { - return Ok(None); - } - - let i1: PackageList = lists.remove(0); - - Ok(Some(i1)) -} - -pub fn get_lists() -> rusqlite::Result> { - let conn = rusqlite::Connection::open("./sqlite.db")?; - - let mut statement = conn.prepare("SELECT id, name from packagelists")?; - - let packagelist_iter = - statement.query_map([], |row| Ok(PackageList::new(row.get(0)?, row.get(1)?)))?; - - let mut lists: Vec = Vec::new(); - for list in packagelist_iter { - let mut l = list.unwrap(); - let items = get_list_items(l.id).unwrap(); - l.set_items(items); - lists.push(l); - } - - Ok(lists) -} - -fn get_preparation_steps(item_id: Uuid) -> rusqlite::Result { - let conn = rusqlite::Connection::open("./sqlite.db")?; - let mut statement = conn.prepare( - "SELECT - pli.id AS packageitem_id, - pr.id AS preparation_id, - prs.id AS preparation_step_id, - prs.name AS preparation_step_name, - prs.start_days AS preparation_step_start_days - FROM packagelistitems AS pli - LEFT JOIN preparation AS pr - ON pr.packagelistitem = pli.id - LEFT JOIN preparationstep AS prs - ON prs.preparation = pr.id - WHERE pli.id = ?1", - )?; - - struct Prep { - id: Uuid, - name: Option, - start_days: Option, - } - - let preparation_steps: Vec = statement - .query_map(rusqlite::params![item_id], |row| { - let id: Option = row.get_unwrap(2); - let name: Option = row.get_unwrap(3); - let start_days: Option = row.get_unwrap(4); - match id { - None => Ok(None), - Some(id) => Ok(Some(Prep { - id, - name, - start_days, - })), - } - })? - .flatten() // Result - .flatten() // Option - .map(|step| PreparationStep { - id: step.id, - name: step.name.unwrap(), - start: Duration::Days(step.start_days.unwrap()), - }) - .collect(); - - Ok(Preparation::Steps(preparation_steps)) -} - -pub fn get_list_items(list_id: Uuid) -> rusqlite::Result> { - let conn = rusqlite::Connection::open("./sqlite.db")?; - let mut statement = conn.prepare( - "SELECT - pli.id AS packageitem_id, - pli.name AS packageitem_name, - pli.count AS packageitem_count - FROM packagelists AS pl - JOIN packagelistitems AS pli - ON pli.packagelist = pl.id - WHERE pl.id = ?1 - GROUP BY pli.id", - )?; - - let items_iter = statement.query_map(rusqlite::params![list_id], |row| { - let item_id = row.get_unwrap(0); - - Ok(PackageItem::new( - item_id, - row.get(1)?, - ItemSize::None, - row.get(2)?, - ItemUsage::Singleton, - get_preparation_steps(item_id)?, - )) - })?; - - let items: Vec = items_iter.map(|i| i.unwrap()).collect(); - - Ok(items) -} - -pub fn get_preparation(list_id: Uuid, item_id: Uuid) -> rusqlite::Result> { - let conn = rusqlite::Connection::open("./sqlite.db")?; - let mut statement = conn.prepare( - "SELECT - pr.id AS preparation_id, - prs.id AS preparation_step_id, - prs.name AS preparation_step_name, - prs.start_days AS preparation_step_start_days - FROM packagelists AS pl - JOIN packagelistitems as pli - ON pli.packagelist = pl.id - JOIN preparation AS pr - ON pr.packagelistitem = pli.id - JOIN preparationstep AS prs - ON prs.preparation = pr.id - WHERE - pl.id = ?1 - AND - pli.id = ?2 - ", - )?; - - let steps: Vec = statement - .query_map(rusqlite::params![list_id, item_id], |row| { - Ok(PreparationStep::new( - row.get_unwrap(1), - row.get_unwrap(2), - Duration::Days(row.get_unwrap(3)), - )) - })? - .flatten() - .collect(); - - Ok(steps) -} - -pub fn save_item(list_id: Uuid, item: PackageItem) -> rusqlite::Result { - let conn = rusqlite::Connection::open("./sqlite.db")?; - - conn.execute( - " - INSERT INTO - packagelistitems - ( - id, - name, - count, - packagelist - ) VALUES ( - ?2, - ?3, - ?4, - ?1 - ) - ", - rusqlite::params![list_id, item.id, item.name, item.count], - )?; - - Ok(item) -} - -pub fn get_trips() -> rusqlite::Result> { - let conn = rusqlite::Connection::open("./sqlite.db")?; - - let mut statement = conn.prepare( - "SELECT - trips.id AS trip_id, - trips.name AS trip_name, - trips.date AS trip_date, - trips.days AS trip_days, - trips.state AS trip_state - FROM trips - ", - )?; - - let mut trips: Vec = statement - .query_map(rusqlite::params![], |row| { - Ok(Trip::new( - row.get_unwrap(0), - row.get_unwrap(1), - row.get_unwrap(2), - TripParameters { - days: row.get_unwrap(3), - }, - row.get_unwrap(4), - )) - })? - .flatten() - .collect(); - - for trip in &mut trips { - let mut statement = conn.prepare( - "SELECT - trip_packagelist.packagelist_id as package_list_id, - packagelists.name as package_list_name - FROM trip_packagelist - INNER JOIN packagelists - ON packagelists.id == trip_packagelist.packagelist_id - WHERE - trip_packagelist.trip_id = ?1 - - ", - )?; - - let lists: Vec<(Uuid, String)> = statement - .query_map(rusqlite::params![trip.id], |row| { - Ok((row.get_unwrap(0), row.get_unwrap(1))) - })? - .flatten() - .collect(); - - trip.set_package_lists(lists); - } - - Ok(trips) -} - -pub fn get_trip(trip_id: Uuid) -> rusqlite::Result> { - let conn = rusqlite::Connection::open("./sqlite.db")?; - - let mut statement = conn.prepare( - "SELECT - trips.id AS trip_id, - trips.name AS trip_name, - trips.date AS trip_date, - trips.days AS trip_days, - trips.state AS trip_state - FROM trips - WHERE - trip_id = ?1 - ", - )?; - - let trip_query_result = statement.query_map(rusqlite::params![trip_id], |row| { - Ok(Trip{ - id: row.get_unwrap(0), - name: row.get_unwrap(1), - date: row.get_unwrap(2), - parameters: TripParameters{ - days: row.get_unwrap(3), - }, - package_lists: vec![], - state: row.get_unwrap(4), - }) - })?; - - let mut trip_query_result: Vec = trip_query_result.flatten().collect(); - - if trip_query_result.is_empty() { - return Ok(None); - } - - let mut trip: Trip = trip_query_result.remove(0); - - let mut statement = conn.prepare( - "SELECT - trip_packagelist.packagelist_id as package_list_id, - packagelists.name as package_list_name - FROM trip_packagelist - INNER JOIN packagelists - ON packagelists.id == trip_packagelist.packagelist_id - WHERE - trip_packagelist.trip_id = ?1 - - ", - )?; - - let lists: Vec<(Uuid, String)> = statement - .query_map(rusqlite::params![trip_id], |row| { - Ok((row.get_unwrap(0), row.get_unwrap(1))) - })? - .flatten() - .collect(); - - trip.set_package_lists(lists); - - Ok(Some(trip)) -} - -pub fn get_trip_items(trip_id: Uuid) -> rusqlite::Result>> { - // there has to be better way to get the rested option result - let trip: Option = get_trip(trip_id)?; - println!("Getting trip items"); - if let None = trip { - return Ok(None) - } - let trip = trip.unwrap(); - - let conn = rusqlite::Connection::open("./sqlite.db")?; - - let mut statement = conn.prepare( - "SELECT - trip_items.packagelistitem_id, - status AS status, - pli.id AS packageitem_id, - pli.name AS packageitem_name, - pli.count AS packageitem_count, - FROM trip_items - INNER JOIN packagelistitems as pli - ON trip_items.packagelistitem_id = pli.id - WHERE - trip_items.trip_id = ?1 - ", - )?; - - let mut result : Vec = Vec::new(); - - let trip_items : Vec = statement.query_map(rusqlite::params![trip_id], |row| { - let package_item = PackageItem::new( - row.get_unwrap(2), - row.get_unwrap(3), - ItemSize::None, - row.get_unwrap(4), - ItemUsage::Singleton, - Preparation::None, - ); - - let package_list_id = row.get_unwrap(5); - - let package_list = Rc::new(PackageList::new( - package_list_id, - row.get_unwrap(6), - )); - - Ok(TripItem{ - status: row.get_unwrap(1), - package_item, - package_list: Rc::clone(package_lists.get(&package_list_id).unwrap()), - }) - })?.flatten().collect(); - - println!("Found {} trip items in database", trip_items.len()); - // get all package list items, so we know what we SHOULD have - let mut package_list_items = vec![]; - for package_list in &trip.package_lists { - package_list_items.append(&mut get_list_items(package_list.id)?); - } - - println!("There should be {} items according to the package lists", package_list_items.len()); - - let package_list_item_ids: Vec = package_list_items.iter().map(|item| item.id).collect(); - - // three possibilities: - // - // * The trip item is there => use it - // * The trip item is not there => create it with defaults - // * There is a trip item that should no be there (e.g. because the package - // list was changed and a package item was removed) - // - // We can either just not use it (letting it rot in the database). It will - // never be removed automatically. But if we later add it again, something - // will break (e.g. if someone re-attaches the package list to the trip). - - // first run: get all trip items that have the trip id set. We need to - // check this list against the items. If there are any returned that are - // NOT part of the package list items, we remove them - for package_item in package_list_items { - - - for trip_item in &trip_items { - let item_id = trip_item.package_item.id; - if !package_list_item_ids.contains(&item_id) { - // there is a trip item that does no longer have a corresponding - // package list item (because a package list was detached). - // Remove it - println!("Would remove package item with id {} (\"{}\")", - package_item.id, package_item.name); - // conn.execute( - // "DELETE - // FROM trip_items - // WHERE - // trip_items.trip_id = ?1 - // AND - // trip_items.packagelistitem_id = ?2 - // ", - // rusqlite::params![trip_id, package_item.id] - // )?; - continue - } - } - - if !trip_items.iter().map(|i| i.package_item.id).collect::>().contains(&package_item.id) { - println!("Found new trip item!"); - - println!("Looking into hashmap with {:?}", package_item.id); - let list = Rc::clone(package_lists.get(&package_item.id).unwrap()); - let new_trip_item = TripItem { - status: TripItemStatus::Pending, - package_item, - package_list: list, - }; - - conn.execute( - "INSERT INTO - trip_items ( - trip_id, - packagelistitem_id, - status - ) VALUES ( - ?1, - ?2, - ?3 - ) - ", - rusqlite::params![ - trip_id, - new_trip_item.package_item.id, - new_trip_item.status - ] - )?; - - - result.push(new_trip_item); - continue; - } - - // If we've come so far, the trip is actually in the database, so let's - // just use it - println!("Using trip item from database"); - let list = Rc::clone(package_lists.get(&package_item.id).unwrap()); - result.push(TripItem { - status: TripItemStatus::Pending, - package_item, - package_list: list, - }); - - } - - - - - Ok(Some(result)) -} diff --git a/rust_warp_svelte/api/src/lib.rs b/rust_warp_svelte/api/src/lib.rs deleted file mode 100644 index 3745767..0000000 --- a/rust_warp_svelte/api/src/lib.rs +++ /dev/null @@ -1,63 +0,0 @@ -pub mod packagelist; - -use uuid::Uuid; - -pub use packagelist::Duration; -pub use packagelist::ItemSize; -pub use packagelist::ItemUsage; -pub use packagelist::PackageItem; -pub use packagelist::PackageList; -pub use packagelist::Period; -pub use packagelist::Preparation; -pub use packagelist::PreparationStep; - -pub mod router; - -pub mod db; - -pub mod trip; -pub use trip::Trip; -pub use trip::TripParameters; -pub use trip::TripState; -pub use trip::TripItem; -pub use trip::TripItemStatus; - -pub fn get_list(id: Uuid) -> Option { - self::db::get_list(id).unwrap() -} - -pub fn get_lists() -> Vec { - self::db::get_lists().unwrap() -} - -pub fn get_packagelist_items(id: Uuid) -> Vec { - self::db::get_list_items(id).unwrap() -} - -pub fn get_preparation(list_id: Uuid, item_id: Uuid) -> Vec { - self::db::get_preparation(list_id, item_id).unwrap() -} - -pub fn new_item(list_id: Uuid, item_name: String, item_count: i32) -> packagelist::PackageItem { - let item = PackageItem::new( - Uuid::new_v4(), - item_name, - ItemSize::None, - item_count, - ItemUsage::Singleton, - Preparation::None, - ); - self::db::save_item(list_id, item).unwrap() -} - -pub fn get_trips() -> Vec { - self::db::get_trips().unwrap() -} - -pub fn get_trip(trip_id: Uuid) -> Option { - self::db::get_trip(trip_id).unwrap() -} - -pub fn get_trip_items(trip_id: Uuid) -> Option> { - self::db::get_trip_items(trip_id).unwrap() -} diff --git a/rust_warp_svelte/api/src/main.rs b/rust_warp_svelte/api/src/main.rs deleted file mode 100644 index f54284c..0000000 --- a/rust_warp_svelte/api/src/main.rs +++ /dev/null @@ -1,50 +0,0 @@ -use std::env; - -#[tokio::main] -async fn main() { - // let lists = packager::get_lists(); - - // for list in &lists { - // println!("Contents of package list {:?}:", list.name); - // for item in &list.items { - // println!("\t{:?}", item); - // } - // } - - // println!("\nNow we're starting an actual trip!"); - - // let mut trip = packager::trip::Trip::from_package_list( - // String::from("Campingtrip"), - // String::from("2021-09-06"), - // &lists[0], - // ); - - // println!( - // "\nPackage list for trip {:?} at {:?}:", - // trip.name, trip.date - // ); - // for item in &trip.list.items { - // println!("{:?}", item); - // } - - // trip.list.items[0].set_status(packager::trip::TripItemStatus::Ready); - // trip.list.items[1].set_status(packager::trip::TripItemStatus::Packed); - // for item in &trip.list.items { - // println!("{:?}", item); - // } - let args: Vec = env::args().skip(1).collect(); - match args.get(0) { - None => (), - Some(cmd) => match cmd.as_ref() { - "--load-example-data" => { - packager::db::load().unwrap(); - } - _ => panic!("Unknown argument: \"{}\"", cmd), - }, - }; - - let router = packager::router::new(); - - println!("Initialization done, listening for connections"); - warp::serve(router).run(([127, 0, 0, 1], 9000)).await; -} diff --git a/rust_warp_svelte/api/src/packagelist.rs b/rust_warp_svelte/api/src/packagelist.rs deleted file mode 100644 index 6955538..0000000 --- a/rust_warp_svelte/api/src/packagelist.rs +++ /dev/null @@ -1,251 +0,0 @@ -use serde::ser::{SerializeStruct, Serializer}; -use serde::Serialize; - -use uuid::Uuid; - -#[derive(Debug, Serialize)] -#[serde(rename_all = "camelCase")] -pub enum Duration { - None, - Days(i32), -} - -impl Duration { - pub fn is_none(d: &Duration) -> bool { - matches!(d, Duration::None) - } -} - -#[derive(Debug)] -pub enum Period { - Daily(i32), - Weekly(i32), - Days(i32), -} - -impl Serialize for Period { - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - match self { - Period::Daily(i) => { - let mut s = serializer.serialize_struct("period", 2)?; - s.serialize_field("type", "daily")?; - s.serialize_field("value", &i)?; - s.end() - } - Period::Weekly(i) => { - let mut s = serializer.serialize_struct("period", 2)?; - s.serialize_field("type", "weekly")?; - s.serialize_field("value", &i)?; - s.end() - } - Period::Days(i) => { - let mut s = serializer.serialize_struct("period", 2)?; - s.serialize_field("type", "days")?; - s.serialize_field("value", &i)?; - s.end() - } - } - } -} - -#[derive(Debug)] -pub enum ItemUsage { - Singleton, - Periodic(Period), - Infinite, -} - -impl Serialize for ItemUsage { - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - match self { - ItemUsage::Singleton => { - let mut s = serializer.serialize_struct("usage", 1)?; - s.serialize_field("type", "singleton")?; - s.end() - } - ItemUsage::Periodic(p) => { - let mut s = serializer.serialize_struct("usage", 2)?; - s.serialize_field("type", "peridoic")?; - s.serialize_field("value", &p)?; - s.end() - } - ItemUsage::Infinite => { - let mut s = serializer.serialize_struct("size", 1)?; - s.serialize_field("type", "infinite")?; - s.end() - } - } - } -} - -#[derive(Debug)] -pub enum ItemSize { - None, - Pack(i32), - Name(String), - Gram(i32), -} - -impl Serialize for ItemSize { - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - match self { - ItemSize::None => { - let mut s = serializer.serialize_struct("size", 1)?; - s.serialize_field("type", "none")?; - s.end() - } - ItemSize::Pack(i) => { - let mut s = serializer.serialize_struct("size", 2)?; - s.serialize_field("type", "pack")?; - s.serialize_field("value", &i)?; - s.end() - } - ItemSize::Name(n) => { - let mut s = serializer.serialize_struct("size", 2)?; - s.serialize_field("type", "name")?; - s.serialize_field("value", &n)?; - s.end() - } - ItemSize::Gram(i) => { - let mut s = serializer.serialize_struct("size", 2)?; - s.serialize_field("type", "gram")?; - s.serialize_field("value", &i)?; - s.end() - } - } - } -} - -impl ItemSize { - pub fn is_none(d: &ItemSize) -> bool { - matches!(d, ItemSize::None) - } -} - -#[derive(Debug, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct PreparationStep { - pub id: Uuid, - pub name: String, - - #[serde(skip_serializing_if = "Duration::is_none")] - pub start: Duration, -} - -impl PreparationStep { - pub fn new(id: Uuid, name: String, start: Duration) -> PreparationStep { - PreparationStep { id, name, start } - } -} - -#[derive(Debug)] -pub enum Preparation { - None, - Steps(Vec), -} - -impl Preparation { - pub fn is_none(d: &Preparation) -> bool { - matches!(d, Preparation::None) - } -} - -impl Serialize for Preparation { - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - match self { - Preparation::None => { - // serializer.serialize_unit_variant("Preparation", 0, "null") - let steps: Vec = vec![]; - serializer.serialize_newtype_variant("Preparation", 1, "steps", &steps) - // let mut s = serializer.serialize_seq(Some(0))?; - // s.end() - } - Preparation::Steps(steps) => { - serializer.serialize_newtype_variant("Preparation", 1, "steps", steps) - } - } - } -} - -#[derive(Debug, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct PackageItem { - pub id: Uuid, - pub name: String, - - #[serde(skip_serializing_if = "ItemSize::is_none")] - size: ItemSize, - pub count: i32, - usage: ItemUsage, - - pub preparation: Preparation, -} - -impl PackageItem { - pub fn new( - id: Uuid, - name: String, - size: ItemSize, - count: i32, - usage: ItemUsage, - preparation: Preparation, - ) -> PackageItem { - PackageItem { - id, - name, - size, - count, - usage, - preparation, - } - } - - pub fn new_simple(id: Uuid, name: String) -> PackageItem { - PackageItem::new( - id, - name, - ItemSize::None, - 1, - ItemUsage::Singleton, - Preparation::None, - ) - } -} - -#[derive(Debug, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct PackageList { - pub id: Uuid, - pub name: String, - pub items: Vec, -} - -impl PackageList { - pub fn new_from_items(id: Uuid, name: String, items: Vec) -> PackageList { - PackageList { id, name, items } - } - - pub fn new(id: Uuid, name: String) -> PackageList { - PackageList { - id, - name, - items: Vec::new(), - } - } - - pub fn set_items(&mut self, items: Vec) { - self.items = items; - } -} diff --git a/rust_warp_svelte/api/src/router.rs b/rust_warp_svelte/api/src/router.rs deleted file mode 100644 index 12745b3..0000000 --- a/rust_warp_svelte/api/src/router.rs +++ /dev/null @@ -1,215 +0,0 @@ -use serde::{Deserialize, Serialize}; -use std::convert::Infallible; - -use warp; -use warp::http::StatusCode; -use warp::Filter; - -use uuid::Uuid; - -#[derive(Debug)] -struct InvalidUuid; - -impl warp::reject::Reject for InvalidUuid {} - -#[derive(Serialize)] -struct ErrorMessage { - code: u16, - success: bool, - message: String, -} - -#[derive(Deserialize, Clone)] -#[serde(deny_unknown_fields)] -struct JsonListItem { - name: String, - count: i32, -} - -pub fn new() -> warp::filters::BoxedFilter<(impl warp::Reply,)> { - let accept_json = warp::header::exact("accept", "application/json"); - let content_json = warp::header::exact("content-type", "application/json"); - let cors = warp::cors() - .allow_any_origin() - .allow_methods(&[ - warp::http::Method::GET, - warp::http::Method::POST, - warp::http::Method::DELETE, - ]) - .allow_headers(vec!["accept", "content-type"]); - - fn json_body() -> impl Filter + Clone { - warp::body::content_length_limit(1024 * 16).and(warp::body::json()) - } - - let root = warp::path::end().map(|| "Hi"); - - let v1 = warp::path!("v1") - .and(warp::get()) - .and(warp::path::end()) - .map(warp::reply); - - let lists = warp::path!("v1" / "lists") - .and(warp::path::end()) - .and(warp::get()) - .and(accept_json) - .map(|| warp::reply::json(&super::get_lists())) - .with(&cors); - - let list = warp::path!("v1" / "lists" / String) - .and(warp::path::end()) - .and(warp::get()) - .and(accept_json) - .and_then(|id: String| async move { - match Uuid::parse_str(&id) { - Ok(uuid) => { - let list = &super::get_list(uuid); - match list { - Some(l) => Ok(warp::reply::json(l)), - None => Err(warp::reject::not_found()), - } - } - Err(_) => Err(warp::reject::custom(InvalidUuid)), - } - }) - .with(&cors); - - let list_items = warp::path!("v1" / "lists" / String / "items") - .and(warp::path::end()) - .and(warp::get()) - .and(accept_json) - .and_then(|list_id: String| async move { - match Uuid::parse_str(&list_id) { - Ok(uuid) => { - let items = &super::get_packagelist_items(uuid); - Ok(warp::reply::json(items)) - } - Err(_) => Err(warp::reject::custom(InvalidUuid)), - } - }) - .with(&cors); - - let preparation = warp::path!("v1" / "lists" / String / "items" / String / "preparation") - .and(warp::path::end()) - .and(warp::get()) - .and(accept_json) - .and_then(|list_id: String, item_id: String| async move { - match Uuid::parse_str(&list_id) { - Ok(list_id) => match Uuid::parse_str(&item_id) { - Err(_) => Err(warp::reject::custom(InvalidUuid)), - Ok(item_id) => { - let items = &super::get_preparation(list_id, item_id); - Ok(warp::reply::json(items)) - } - }, - Err(_) => Err(warp::reject::custom(InvalidUuid)), - } - }) - .with(&cors); - - let new_item = warp::path!("v1" / "lists" / String / "items") - .and(warp::path::end()) - .and(warp::post()) - .and(accept_json) - .and(content_json) - .and(json_body()) - .and_then(|list_id: String, item: JsonListItem| async move { - match Uuid::parse_str(&list_id) { - Ok(list_id) => { - let new_item = &super::new_item(list_id, item.name, item.count); - Ok(warp::reply::json(new_item)) - } - Err(_) => Err(warp::reject::custom(InvalidUuid)), - } - }) - .with(&cors); - - let trips = warp::path!("v1" / "trips") - .and(warp::path::end()) - .and(warp::get()) - .and(accept_json) - .map(|| warp::reply::json(&super::get_trips())) - .with(&cors); - - let trip = warp::path!("v1" / "trips" / String) - .and(warp::path::end()) - .and(warp::get()) - .and(accept_json) - .and_then(|trip_id: String| async move { - match Uuid::parse_str(&trip_id) { - Ok(trip_id) => { - match &super::get_trip(trip_id) { - Some(trip) => Ok(warp::reply::json(trip)), - None => Err(warp::reject::not_found()), - } - }, - Err(_) => Err(warp::reject::custom(InvalidUuid)), - } - }) - .with(&cors); - - let trip_items = warp::path!("v1" / "trips" / String / "items") - .and(warp::path::end()) - .and(warp::get()) - .and(accept_json) - .and_then(|trip_id: String| async move { - match Uuid::parse_str(&trip_id) { - Ok(trip_id) => { - match &super::get_trip_items(trip_id) { - Some(trip) => Ok(warp::reply::json(trip)), - None => Err(warp::reject::not_found()), - } - }, - Err(_) => Err(warp::reject::custom(InvalidUuid)), - } - }) - .with(&cors); - - root.or(v1) - .or(lists) - .or(list) - .or(new_item) - .or(list_items) - .or(preparation) - .or(trips) - .or(trip) - .or(trip_items) - .recover(handle_rejection) - .boxed() -} - -// See https://github.com/seanmonstar/warp/blob/master/examples/rejections.rs -async fn handle_rejection(err: warp::Rejection) -> Result { - let code; - let message; - - if err.is_not_found() { - message = "NOT_FOUND"; - code = StatusCode::NOT_FOUND; - } else if let Some(InvalidUuid) = err.find() { - code = StatusCode::BAD_REQUEST; - message = "INVALID_UUID"; - } else if err - .find::() - .is_some() - { - message = "BAD_REQUEST"; - code = StatusCode::BAD_REQUEST; - } else if err.find::().is_some() { - message = "METHOD_NOT_ALLOWED"; - code = StatusCode::METHOD_NOT_ALLOWED; - } else { - // We should have expected this... Just log and say its a 500 - eprintln!("unhandled rejection: {:?}", err); - message = "UNHANDLED_REJECTION"; - code = StatusCode::INTERNAL_SERVER_ERROR; - } - - let json = warp::reply::json(&ErrorMessage { - success: false, - code: code.as_u16(), - message: message.into(), - }); - - Ok(warp::reply::with_status(json, code)) -} diff --git a/rust_warp_svelte/api/src/trip.rs b/rust_warp_svelte/api/src/trip.rs deleted file mode 100644 index 8e2188b..0000000 --- a/rust_warp_svelte/api/src/trip.rs +++ /dev/null @@ -1,158 +0,0 @@ -use std::rc::Rc; - -use serde::Serialize; -use uuid::Uuid; - -use crate::PackageItem; -use crate::PackageList; - -#[derive(Debug, Serialize)] -#[serde(rename_all = "camelCase")] -pub enum TripItemStatus { - Pending, - Ready, - Packed, -} - -impl rusqlite::types::FromSql for TripItemStatus { - fn column_result(value: rusqlite::types::ValueRef) -> rusqlite::types::FromSqlResult { - match value.as_i64()? { - 1 => Ok(TripItemStatus::Pending), - 2 => Ok(TripItemStatus::Ready), - 3 => Ok(TripItemStatus::Packed), - v => Err(rusqlite::types::FromSqlError::OutOfRange(v)), - } - } -} - -impl rusqlite::types::ToSql for TripItemStatus { - fn to_sql(&self) -> rusqlite::Result { - let v = rusqlite::types::Value::Integer(match self { - TripItemStatus::Pending => 1, - TripItemStatus::Ready => 2, - TripItemStatus::Packed => 3, - }); - rusqlite::Result::Ok(rusqlite::types::ToSqlOutput::Owned(v)) - } -} - -#[derive(Debug, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct TripItem { - pub status: TripItemStatus, - pub package_item: PackageItem, - pub package_list: Rc, -} - -#[derive(Debug, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct TripParameters { - pub days: i32, -} - -#[derive(Debug, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct TripPackageList { - pub id: Uuid, - pub name: String, -} - -impl TripPackageList { - fn construct(item: (Uuid, String)) -> TripPackageList { - TripPackageList { - id: item.0, - name: item.1, - } - } - - fn construct_vec(items: Vec<(Uuid, String)>) -> Vec { - items.into_iter().map(TripPackageList::construct).collect() - } -} - -#[derive(Debug, Serialize)] -#[serde(rename_all = "camelCase")] -pub enum TripState { - Planned, - Packing, - Active, - Finished, -} - -impl rusqlite::types::FromSql for TripState { - fn column_result(value: rusqlite::types::ValueRef) -> rusqlite::types::FromSqlResult { - match value.as_i64()? { - 1 => Ok(TripState::Planned), - 2 => Ok(TripState::Packing), - 3 => Ok(TripState::Active), - 4 => Ok(TripState::Finished), - v => Err(rusqlite::types::FromSqlError::OutOfRange(v)), - } - } -} - -impl rusqlite::types::ToSql for TripState { - fn to_sql(&self) -> rusqlite::Result { - let v = rusqlite::types::Value::Integer(match self { - TripState::Planned => 1, - TripState::Packing => 2, - TripState::Active => 3, - TripState::Finished => 4, - }); - rusqlite::Result::Ok(rusqlite::types::ToSqlOutput::Owned(v)) - } -} - -#[derive(Debug, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct Trip { - pub id: Uuid, - pub name: String, - pub date: String, - pub parameters: TripParameters, - pub package_lists: Vec, - pub state: TripState, -} - -impl Trip { - pub fn new( - id: Uuid, - name: String, - date: String, - parameters: TripParameters, - state: TripState, - ) -> Trip { - Trip { - id, - name, - date, - parameters, - package_lists: vec![], - state, - } - } - - pub fn from_package_list( - id: Uuid, - name: String, - date: String, - parameters: TripParameters, - package_lists: Vec<(Uuid, String)>, - state: TripState, - ) -> Trip { - let lists = TripPackageList::construct_vec(package_lists); - Trip { - id, - name, - date, - parameters, - package_lists: lists, - state, - } - } - - pub fn set_package_lists(&mut self, package_lists: Vec<(Uuid, String)>) { - let v = TripPackageList::construct_vec(package_lists); - self.package_lists = v; - } -} diff --git a/rust_warp_svelte/ui/.gitignore b/rust_warp_svelte/ui/.gitignore deleted file mode 100644 index da93220..0000000 --- a/rust_warp_svelte/ui/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/node_modules/ -/public/build/ - -.DS_Store diff --git a/rust_warp_svelte/ui/.vscode/extensions.json b/rust_warp_svelte/ui/.vscode/extensions.json deleted file mode 100644 index bdef820..0000000 --- a/rust_warp_svelte/ui/.vscode/extensions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "recommendations": ["svelte.svelte-vscode"] -} diff --git a/rust_warp_svelte/ui/README.md b/rust_warp_svelte/ui/README.md deleted file mode 100644 index debe24c..0000000 --- a/rust_warp_svelte/ui/README.md +++ /dev/null @@ -1,107 +0,0 @@ -*Looking for a shareable component template? Go here --> [sveltejs/component-template](https://github.com/sveltejs/component-template)* - ---- - -# svelte app - -This is a project template for [Svelte](https://svelte.dev) apps. It lives at https://github.com/sveltejs/template. - -To create a new project based on this template using [degit](https://github.com/Rich-Harris/degit): - -```bash -npx degit sveltejs/template svelte-app -cd svelte-app -``` - -*Note that you will need to have [Node.js](https://nodejs.org) installed.* - - -## Get started - -Install the dependencies... - -```bash -cd svelte-app -npm install -``` - -...then start [Rollup](https://rollupjs.org): - -```bash -npm run dev -``` - -Navigate to [localhost:5000](http://localhost:5000). You should see your app running. Edit a component file in `src`, save it, and reload the page to see your changes. - -By default, the server will only respond to requests from localhost. To allow connections from other computers, edit the `sirv` commands in package.json to include the option `--host 0.0.0.0`. - -If you're using [Visual Studio Code](https://code.visualstudio.com/) we recommend installing the official extension [Svelte for VS Code](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode). If you are using other editors you may need to install a plugin in order to get syntax highlighting and intellisense. - -## Building and running in production mode - -To create an optimised version of the app: - -```bash -npm run build -``` - -You can run the newly built app with `npm run start`. This uses [sirv](https://github.com/lukeed/sirv), which is included in your package.json's `dependencies` so that the app will work when you deploy to platforms like [Heroku](https://heroku.com). - - -## Single-page app mode - -By default, sirv will only respond to requests that match files in `public`. This is to maximise compatibility with static fileservers, allowing you to deploy your app anywhere. - -If you're building a single-page app (SPA) with multiple routes, sirv needs to be able to respond to requests for *any* path. You can make it so by editing the `"start"` command in package.json: - -```js -"start": "sirv public --single" -``` - -## Using TypeScript - -This template comes with a script to set up a TypeScript development environment, you can run it immediately after cloning the template with: - -```bash -node scripts/setupTypeScript.js -``` - -Or remove the script via: - -```bash -rm scripts/setupTypeScript.js -``` - -If you want to use `baseUrl` or `path` aliases within your `tsconfig`, you need to set up `@rollup/plugin-alias` to tell Rollup to resolve the aliases. For more info, see [this StackOverflow question](https://stackoverflow.com/questions/63427935/setup-tsconfig-path-in-svelte). - -## Deploying to the web - -### With [Vercel](https://vercel.com) - -Install `vercel` if you haven't already: - -```bash -npm install -g vercel -``` - -Then, from within your project folder: - -```bash -cd public -vercel deploy --name my-project -``` - -### With [surge](https://surge.sh/) - -Install `surge` if you haven't already: - -```bash -npm install -g surge -``` - -Then, from within your project folder: - -```bash -npm run build -surge public my-project.surge.sh -``` diff --git a/rust_warp_svelte/ui/package-lock.json b/rust_warp_svelte/ui/package-lock.json deleted file mode 100644 index 7db1ccc..0000000 --- a/rust_warp_svelte/ui/package-lock.json +++ /dev/null @@ -1,6707 +0,0 @@ -{ - "name": "svelte-app", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "svelte-app", - "version": "1.0.0", - "dependencies": { - "sirv-cli": "^1.0.0" - }, - "devDependencies": { - "@rollup/plugin-commonjs": "^17.0.0", - "@rollup/plugin-node-resolve": "^11.0.0", - "@rollup/plugin-typescript": "^8.0.0", - "@tsconfig/svelte": "^2.0.0", - "npm": "^8.11.0", - "rollup": "^2.3.4", - "rollup-plugin-css-only": "^3.1.0", - "rollup-plugin-livereload": "^2.0.0", - "rollup-plugin-svelte": "^7.0.0", - "rollup-plugin-terser": "^7.0.0", - "svelte": "^3.49.0", - "svelte-check": "^2.0.0", - "svelte-preprocess": "^4.0.0", - "tslib": "^2.0.0", - "typescript": "^4.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.20", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.20.tgz", - "integrity": "sha512-88p7+M0QGxKpmnkfXjS4V26AnoC/eiqZutE8GLdaI5X12NY75bXSdTY9NkmYb2Xyk1O+MmkuO6Frmsj84V6I8Q==" - }, - "node_modules/@rollup/plugin-commonjs": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", - "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^2.30.0" - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-typescript": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.2.5.tgz", - "integrity": "sha512-QL/LvDol/PAGB2O0S7/+q2HpSUNodpw7z6nGn9BfoVCPOZ0r4EALrojFU29Bkoi2Hr2jgTocTejJ5GGWZfOxbQ==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "resolve": "^1.17.0" - }, - "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "rollup": "^2.14.0", - "tslib": "*", - "typescript": ">=3.7.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "node_modules/@tsconfig/svelte": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-2.0.1.tgz", - "integrity": "sha512-aqkICXbM1oX5FfgZd2qSSAGdyo/NRxjWCamxoyi3T8iVQnzGge19HhDYzZ6NrVOW7bhcWNSq9XexWFtMzbB24A==", - "dev": true - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.7.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.10.tgz", - "integrity": "sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA==", - "dev": true - }, - "node_modules/@types/pug": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.5.tgz", - "integrity": "sha512-LOnASQoeNZMkzexRuyqcBBDZ6rS+rQxUMkmj5A0PkhhiSZivLIuz6Hxyr1mkGoEZEkk66faROmpMi4fFkrKsBA==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/sass": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.16.1.tgz", - "integrity": "sha512-iZUcRrGuz/Tbg3loODpW7vrQJkUtpY2fFSf4ELqqkApcS2TkZ1msk7ie8iZPB86lDOP8QOTTmuvWjc5S0R9OjQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/console-clear": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz", - "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", - "engines": { - "node": ">=4" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", - "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/livereload": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz", - "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.0", - "livereload-js": "^3.3.1", - "opts": ">= 1.2.0", - "ws": "^7.4.3" - }, - "bin": { - "livereload": "bin/livereload.js" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/livereload-js": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.3.2.tgz", - "integrity": "sha512-w677WnINxFkuixAoUEXOStewzLYGI76XVag+0JWMMEyjJQKs0ibWZMxkTlB96Lm3EjZ7IeOxVziBEbtxVQqQZA==", - "dev": true - }, - "node_modules/local-access": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.1.0.tgz", - "integrity": "sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mri": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", - "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.11.0.tgz", - "integrity": "sha512-4qmtwHa28J4SPmwCNoQI07KIF/ljmBhhuqG+xNXsIIRpwdKB5OXkMIGfH6KlThR6kzusxlkgR7t1haFDB88dcQ==", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/ci-detect", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/package-json", - "@npmcli/run-script", - "abbrev", - "archy", - "cacache", - "chalk", - "chownr", - "cli-columns", - "cli-table3", - "columnify", - "fastest-levenshtein", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", - "is-cidr", - "json-parse-even-better-errors", - "libnpmaccess", - "libnpmdiff", - "libnpmexec", - "libnpmfund", - "libnpmhook", - "libnpmorg", - "libnpmpack", - "libnpmpublish", - "libnpmsearch", - "libnpmteam", - "libnpmversion", - "make-fetch-happen", - "minipass", - "minipass-pipeline", - "mkdirp", - "mkdirp-infer-owner", - "ms", - "node-gyp", - "nopt", - "npm-audit-report", - "npm-install-checks", - "npm-package-arg", - "npm-pick-manifest", - "npm-profile", - "npm-registry-fetch", - "npm-user-validate", - "npmlog", - "opener", - "pacote", - "parse-conflict-json", - "proc-log", - "qrcode-terminal", - "read", - "read-package-json", - "read-package-json-fast", - "readdir-scoped-modules", - "rimraf", - "semver", - "ssri", - "tar", - "text-table", - "tiny-relative-date", - "treeverse", - "validate-npm-package-name", - "which", - "write-file-atomic" - ], - "dev": true, - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^5.0.4", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/config": "^4.1.0", - "@npmcli/fs": "^2.1.0", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^3.0.1", - "abbrev": "~1.1.1", - "archy": "~1.0.0", - "cacache": "^16.1.0", - "chalk": "^4.1.2", - "chownr": "^2.0.0", - "cli-columns": "^4.0.0", - "cli-table3": "^0.6.2", - "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.12", - "glob": "^8.0.1", - "graceful-fs": "^4.2.10", - "hosted-git-info": "^5.0.0", - "ini": "^3.0.0", - "init-package-json": "^3.0.2", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^2.3.1", - "libnpmaccess": "^6.0.2", - "libnpmdiff": "^4.0.2", - "libnpmexec": "^4.0.2", - "libnpmfund": "^3.0.1", - "libnpmhook": "^8.0.2", - "libnpmorg": "^4.0.2", - "libnpmpack": "^4.0.2", - "libnpmpublish": "^6.0.2", - "libnpmsearch": "^5.0.2", - "libnpmteam": "^4.0.2", - "libnpmversion": "^3.0.1", - "make-fetch-happen": "^10.1.5", - "minipass": "^3.1.6", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "ms": "^2.1.2", - "node-gyp": "^9.0.0", - "nopt": "^5.0.0", - "npm-audit-report": "^3.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.2", - "npm-pick-manifest": "^7.0.1", - "npm-profile": "^6.0.3", - "npm-registry-fetch": "^13.1.1", - "npm-user-validate": "^1.0.1", - "npmlog": "^6.0.2", - "opener": "^1.5.2", - "pacote": "^13.4.1", - "parse-conflict-json": "^2.0.2", - "proc-log": "^2.0.1", - "qrcode-terminal": "^0.12.0", - "read": "~1.0.7", - "read-package-json": "^5.0.1", - "read-package-json-fast": "^2.0.3", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.1", - "tar": "^6.1.11", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^2.0.0", - "validate-npm-package-name": "^4.0.0", - "which": "^2.0.2", - "write-file-atomic": "^4.0.1" - }, - "bin": { - "npm": "bin/npm-cli.js", - "npx": "bin/npx-cli.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/npm/node_modules/@colors/colors": { - "version": "1.5.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/npm/node_modules/@gar/promisify": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "5.2.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^3.0.0", - "bin-links": "^3.0.0", - "cacache": "^16.0.6", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.0.5", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/ci-detect": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/map-workspaces": "^2.0.2", - "ini": "^3.0.0", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "proc-log": "^2.0.0", - "read-package-json-fast": "^2.0.3", - "semver": "^7.3.5", - "walk-up-path": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/disparity-colors": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "ansi-styles": "^4.3.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/fs": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/git": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "installed-package-contents": "index.js" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "2.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/move-file": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^2.3.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "infer-owner": "^1.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@tootallnate/once": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/abbrev": { - "version": "1.1.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/npm/node_modules/agentkeepalive": { - "version": "4.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/npm/node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/npm/node_modules/aproba": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/archy": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/are-we-there-yet": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/npm/node_modules/asap": { - "version": "2.0.6", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/bin-links": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/binary-extensions": { - "version": "2.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/npm/node_modules/builtins": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/npm/node_modules/cacache": { - "version": "16.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/npm/node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/cidr-regex": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "ip-regex": "^4.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/cli-columns": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/cli-table3": { - "version": "0.6.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/npm/node_modules/clone": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "mkdirp-infer-owner": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/npm/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/color-support": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/npm/node_modules/columnify": { - "version": "1.6.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/console-control-strings": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/npm/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/debuglog": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/defaults": { - "version": "1.0.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/npm/node_modules/delegates": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/depd": { - "version": "1.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/dezalgo": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/diff": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/npm/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/encoding": { - "version": "0.1.13", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/npm/node_modules/env-paths": { - "version": "2.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/err-code": { - "version": "2.0.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.12", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/gauge": { - "version": "4.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/glob": { - "version": "8.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.10", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/has": { - "version": "1.0.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/npm/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/has-unicode": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/hosted-git-info": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/http-proxy-agent": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/humanize-ms": { - "version": "1.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/npm/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/ignore-walk": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minimatch": "^5.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/npm/node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/infer-owner": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/ini": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/init-package-json": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/ip": { - "version": "1.1.8", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/ip-regex": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/is-cidr": { - "version": "4.0.2", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "cidr-regex": "^3.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/is-core-module": { - "version": "2.9.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/npm/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/is-lambda": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/json-stringify-nice": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/jsonparse": { - "version": "1.3.1", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff": { - "version": "5.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.2.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/libnpmaccess": { - "version": "6.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmdiff": { - "version": "4.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/disparity-colors": "^2.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "binary-extensions": "^2.2.0", - "diff": "^5.0.0", - "minimatch": "^5.0.1", - "npm-package-arg": "^9.0.1", - "pacote": "^13.0.5", - "tar": "^6.1.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmexec": { - "version": "4.0.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^5.0.0", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/run-script": "^3.0.0", - "chalk": "^4.1.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-package-arg": "^9.0.1", - "npmlog": "^6.0.2", - "pacote": "^13.0.5", - "proc-log": "^2.0.0", - "read": "^1.0.7", - "read-package-json-fast": "^2.0.2", - "walk-up-path": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmfund": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmhook": { - "version": "8.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmorg": { - "version": "4.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpack": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/run-script": "^3.0.0", - "npm-package-arg": "^9.0.1", - "pacote": "^13.5.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpublish": { - "version": "6.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", - "semver": "^7.3.7", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmsearch": { - "version": "5.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmteam": { - "version": "4.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmversion": { - "version": "3.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/run-script": "^3.0.0", - "json-parse-even-better-errors": "^2.3.1", - "proc-log": "^2.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/lru-cache": { - "version": "7.9.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/npm/node_modules/make-fetch-happen": { - "version": "10.1.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.1.1", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/minimatch": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/minipass": { - "version": "3.1.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-fetch": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/npm/node_modules/minipass-flush": { - "version": "1.0.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-json-stream": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized": { - "version": "1.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minizlib": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/mkdirp-infer-owner": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/mute-stream": { - "version": "0.0.8", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/negotiator": { - "version": "0.6.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/node-gyp": { - "version": "9.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.22 || ^14.13 || >=16" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/glob": { - "version": "7.2.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/nopt": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/normalize-package-data": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/npm/node_modules/npm-audit-report": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-bundled": { - "version": "1.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm/node_modules/npm-install-checks": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/npm-package-arg": { - "version": "9.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-packlist": { - "version": "5.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "7.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-profile": { - "version": "6.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "13.1.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-user-validate": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/npmlog": { - "version": "6.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/once": { - "version": "1.4.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/opener": { - "version": "1.5.2", - "dev": true, - "inBundle": true, - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/npm/node_modules/p-map": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/pacote": { - "version": "13.5.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^3.0.1", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/parse-conflict-json": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/proc-log": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/promise-all-reject-late": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-call-limit": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-inflight": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/promise-retry": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/promzard": { - "version": "0.3.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "read": "1" - } - }, - "node_modules/npm/node_modules/qrcode-terminal": { - "version": "0.12.0", - "dev": true, - "inBundle": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/npm/node_modules/read": { - "version": "1.0.7", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/npm/node_modules/read-cmd-shim": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/read-package-json": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/read-package-json-fast": { - "version": "2.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/readdir-scoped-modules": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "node_modules/npm/node_modules/retry": { - "version": "0.12.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/glob": { - "version": "7.2.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/npm/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/smart-buffer": { - "version": "4.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks": { - "version": "2.6.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "6.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/spdx-correct": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "inBundle": true, - "license": "CC-BY-3.0" - }, - "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.11", - "dev": true, - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/npm/node_modules/ssri": { - "version": "9.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/string_decoder": { - "version": "1.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/npm/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/tar": { - "version": "6.1.11", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/tiny-relative-date": { - "version": "1.3.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/treeverse": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/unique-filename": { - "version": "1.1.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/npm/node_modules/unique-slug": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/walk-up-path": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/wcwidth": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/npm/node_modules/which": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/wide-align": { - "version": "1.1.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/npm/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "4.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/npm/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/opts": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz", - "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==", - "dev": true - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/require-relative": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", - "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/rollup": { - "version": "2.56.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.3.tgz", - "integrity": "sha512-Au92NuznFklgQCUcV96iXlxUbHuB1vQMaH76DHl5M11TotjOHwqk9CwcrT78+Tnv4FN9uTBxq6p4EJoYkpyekg==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-css-only": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-css-only/-/rollup-plugin-css-only-3.1.0.tgz", - "integrity": "sha512-TYMOE5uoD76vpj+RTkQLzC9cQtbnJNktHPB507FzRWBVaofg7KhIqq1kGbcVOadARSozWF883Ho9KpSPKH8gqA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "4" - }, - "engines": { - "node": ">=10.12.0" - }, - "peerDependencies": { - "rollup": "1 || 2" - } - }, - "node_modules/rollup-plugin-css-only/node_modules/@rollup/pluginutils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz", - "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==", - "dev": true, - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/rollup-plugin-livereload": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-2.0.5.tgz", - "integrity": "sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA==", - "dev": true, - "dependencies": { - "livereload": "^0.9.1" - }, - "engines": { - "node": ">=8.3" - } - }, - "node_modules/rollup-plugin-svelte": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.0.tgz", - "integrity": "sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==", - "dev": true, - "dependencies": { - "require-relative": "^0.8.7", - "rollup-pluginutils": "^2.8.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "rollup": ">=2.0.0", - "svelte": ">=3.5.0" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/rollup-pluginutils/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/sade": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", - "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/sander": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", - "integrity": "sha1-dB4kXiMfB8r7b98PEzrfohalAq0=", - "dev": true, - "dependencies": { - "es6-promise": "^3.1.2", - "graceful-fs": "^4.1.3", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.2" - } - }, - "node_modules/semiver": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", - "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/sirv": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.17.tgz", - "integrity": "sha512-qx9go5yraB7ekT7bCMqUHJ5jEaOC/GXBxUWv+jeWnb7WzHUFdcQPGWk7YmAwFBaQBrogpuSqd/azbC2lZRqqmw==", - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mime": "^2.3.1", - "totalist": "^1.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sirv-cli": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-1.0.14.tgz", - "integrity": "sha512-yyUTNr984ANKDloqepkYbBSqvx3buwYg2sQKPWjSU+IBia5loaoka2If8N9CMwt8AfP179cdEl7kYJ//iWJHjQ==", - "dependencies": { - "console-clear": "^1.1.0", - "get-port": "^3.2.0", - "kleur": "^3.0.0", - "local-access": "^1.0.1", - "sade": "^1.6.0", - "semiver": "^1.0.0", - "sirv": "^1.0.13", - "tinydate": "^1.0.0" - }, - "bin": { - "sirv": "bin.js" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sorcery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", - "integrity": "sha1-iukK19fLBfxZ8asMY3hF1cFaUrc=", - "dev": true, - "dependencies": { - "buffer-crc32": "^0.2.5", - "minimist": "^1.2.0", - "sander": "^0.5.0", - "sourcemap-codec": "^1.3.0" - }, - "bin": { - "sorcery": "bin/index.js" - } - }, - "node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svelte": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.49.0.tgz", - "integrity": "sha512-+lmjic1pApJWDfPCpUUTc1m8azDqYCG1JN9YEngrx/hUyIcFJo6VZhj0A1Ai0wqoHcEIuQy+e9tk+4uDgdtsFA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/svelte-check": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.2.5.tgz", - "integrity": "sha512-EstDoqxjqWStWELh7Z0qytqUDl/ikdNEr21dveNc4fUDnhnqO2F2jHEufqoNnC3GfBji3GIUHvoXsp/I5lMbCg==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "chokidar": "^3.4.1", - "glob": "^7.1.6", - "import-fresh": "^3.2.1", - "minimist": "^1.2.5", - "sade": "^1.7.4", - "source-map": "^0.7.3", - "svelte-preprocess": "^4.0.0", - "typescript": "*" - }, - "bin": { - "svelte-check": "bin/svelte-check" - }, - "peerDependencies": { - "svelte": "^3.24.0" - } - }, - "node_modules/svelte-check/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/svelte-check/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/svelte-check/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/svelte-check/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/svelte-check/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/svelte-check/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/svelte-preprocess": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.9.1.tgz", - "integrity": "sha512-nNGilNME8T7a1Yuisdo6MDfpVxHURR4Vj9rGsgdd1EfoS7H+8SF3qaVE92aJQt2IhTB7+BshBqBLeVP080gnpg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@types/pug": "^2.0.4", - "@types/sass": "^1.16.0", - "detect-indent": "^6.0.0", - "magic-string": "^0.25.7", - "sorcery": "^0.10.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">= 9.11.2" - }, - "peerDependencies": { - "@babel/core": "^7.10.2", - "coffeescript": "^2.5.1", - "less": "^3.11.3", - "postcss": "^7 || ^8", - "postcss-load-config": "^2.1.0 || ^3.0.0", - "pug": "^3.0.0", - "sass": "^1.26.8", - "stylus": "^0.54.7", - "sugarss": "^2.0.0", - "svelte": "^3.23.0", - "typescript": "^4.4.2" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "coffeescript": { - "optional": true - }, - "less": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "postcss": { - "optional": true - }, - "postcss-load-config": { - "optional": true - }, - "pug": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/terser": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", - "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tinydate": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz", - "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/typescript": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", - "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/ws": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.4.tgz", - "integrity": "sha512-zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljohg==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@polka/url": { - "version": "1.0.0-next.20", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.20.tgz", - "integrity": "sha512-88p7+M0QGxKpmnkfXjS4V26AnoC/eiqZutE8GLdaI5X12NY75bXSdTY9NkmYb2Xyk1O+MmkuO6Frmsj84V6I8Q==" - }, - "@rollup/plugin-commonjs": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", - "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/plugin-typescript": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.2.5.tgz", - "integrity": "sha512-QL/LvDol/PAGB2O0S7/+q2HpSUNodpw7z6nGn9BfoVCPOZ0r4EALrojFU29Bkoi2Hr2jgTocTejJ5GGWZfOxbQ==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "resolve": "^1.17.0" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - } - } - }, - "@tsconfig/svelte": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-2.0.1.tgz", - "integrity": "sha512-aqkICXbM1oX5FfgZd2qSSAGdyo/NRxjWCamxoyi3T8iVQnzGge19HhDYzZ6NrVOW7bhcWNSq9XexWFtMzbB24A==", - "dev": true - }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "@types/node": { - "version": "16.7.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.10.tgz", - "integrity": "sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA==", - "dev": true - }, - "@types/pug": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.5.tgz", - "integrity": "sha512-LOnASQoeNZMkzexRuyqcBBDZ6rS+rQxUMkmj5A0PkhhiSZivLIuz6Hxyr1mkGoEZEkk66faROmpMi4fFkrKsBA==", - "dev": true - }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/sass": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.16.1.tgz", - "integrity": "sha512-iZUcRrGuz/Tbg3loODpW7vrQJkUtpY2fFSf4ELqqkApcS2TkZ1msk7ie8iZPB86lDOP8QOTTmuvWjc5S0R9OjQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "console-clear": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz", - "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==" - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=" - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", - "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "livereload": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz", - "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==", - "dev": true, - "requires": { - "chokidar": "^3.5.0", - "livereload-js": "^3.3.1", - "opts": ">= 1.2.0", - "ws": "^7.4.3" - } - }, - "livereload-js": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.3.2.tgz", - "integrity": "sha512-w677WnINxFkuixAoUEXOStewzLYGI76XVag+0JWMMEyjJQKs0ibWZMxkTlB96Lm3EjZ7IeOxVziBEbtxVQqQZA==", - "dev": true - }, - "local-access": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.1.0.tgz", - "integrity": "sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==" - }, - "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mri": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", - "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.11.0.tgz", - "integrity": "sha512-4qmtwHa28J4SPmwCNoQI07KIF/ljmBhhuqG+xNXsIIRpwdKB5OXkMIGfH6KlThR6kzusxlkgR7t1haFDB88dcQ==", - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^5.0.4", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/config": "^4.1.0", - "@npmcli/fs": "^2.1.0", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^3.0.1", - "abbrev": "~1.1.1", - "archy": "~1.0.0", - "cacache": "^16.1.0", - "chalk": "^4.1.2", - "chownr": "^2.0.0", - "cli-columns": "^4.0.0", - "cli-table3": "^0.6.2", - "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.12", - "glob": "^8.0.1", - "graceful-fs": "^4.2.10", - "hosted-git-info": "^5.0.0", - "ini": "^3.0.0", - "init-package-json": "^3.0.2", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^2.3.1", - "libnpmaccess": "^6.0.2", - "libnpmdiff": "^4.0.2", - "libnpmexec": "^4.0.2", - "libnpmfund": "^3.0.1", - "libnpmhook": "^8.0.2", - "libnpmorg": "^4.0.2", - "libnpmpack": "^4.0.2", - "libnpmpublish": "^6.0.2", - "libnpmsearch": "^5.0.2", - "libnpmteam": "^4.0.2", - "libnpmversion": "^3.0.1", - "make-fetch-happen": "^10.1.5", - "minipass": "^3.1.6", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "ms": "^2.1.2", - "node-gyp": "^9.0.0", - "nopt": "^5.0.0", - "npm-audit-report": "^3.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.2", - "npm-pick-manifest": "^7.0.1", - "npm-profile": "^6.0.3", - "npm-registry-fetch": "^13.1.1", - "npm-user-validate": "^1.0.1", - "npmlog": "^6.0.2", - "opener": "^1.5.2", - "pacote": "^13.4.1", - "parse-conflict-json": "^2.0.2", - "proc-log": "^2.0.1", - "qrcode-terminal": "^0.12.0", - "read": "~1.0.7", - "read-package-json": "^5.0.1", - "read-package-json-fast": "^2.0.3", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.1", - "tar": "^6.1.11", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^2.0.0", - "validate-npm-package-name": "^4.0.0", - "which": "^2.0.2", - "write-file-atomic": "^4.0.1" - }, - "dependencies": { - "@colors/colors": { - "version": "1.5.0", - "bundled": true, - "dev": true, - "optional": true - }, - "@gar/promisify": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "@npmcli/arborist": { - "version": "5.2.0", - "bundled": true, - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^3.0.0", - "bin-links": "^3.0.0", - "cacache": "^16.0.6", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.0.5", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - } - }, - "@npmcli/ci-detect": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "@npmcli/config": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/map-workspaces": "^2.0.2", - "ini": "^3.0.0", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "proc-log": "^2.0.0", - "read-package-json-fast": "^2.0.3", - "semver": "^7.3.5", - "walk-up-path": "^1.0.0" - } - }, - "@npmcli/disparity-colors": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.3.0" - } - }, - "@npmcli/fs": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "bundled": true, - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/map-workspaces": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - } - }, - "@npmcli/metavuln-calculator": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/name-from-folder": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "@npmcli/node-gyp": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "@npmcli/package-json": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1" - } - }, - "@npmcli/promise-spawn": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "aproba": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "archy": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "asap": { - "version": "2.0.6", - "bundled": true, - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "bin-links": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" - } - }, - "binary-extensions": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "builtins": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "cacache": { - "version": "16.1.0", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - } - }, - "chalk": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chownr": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "cidr-regex": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "requires": { - "ip-regex": "^4.1.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "cli-columns": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - } - }, - "cli-table3": { - "version": "0.6.2", - "bundled": true, - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "clone": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "cmd-shim": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true, - "dev": true - }, - "color-support": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "columnify": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - } - }, - "common-ancestor-path": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "debug": { - "version": "4.3.4", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true - } - } - }, - "debuglog": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "defaults": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "depd": { - "version": "1.1.2", - "bundled": true, - "dev": true - }, - "dezalgo": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "diff": { - "version": "5.0.0", - "bundled": true, - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "bundled": true, - "dev": true - }, - "encoding": { - "version": "0.1.13", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "env-paths": { - "version": "2.2.1", - "bundled": true, - "dev": true - }, - "err-code": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.12", - "bundled": true, - "dev": true - }, - "fs-minipass": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "gauge": { - "version": "4.0.4", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "glob": { - "version": "8.0.1", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "bundled": true, - "dev": true - }, - "has": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "hosted-git-info": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "http-proxy-agent": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "humanize-ms": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ignore-walk": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "minimatch": "^5.0.1" - } - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true - }, - "ini": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "init-package-json": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" - } - }, - "ip": { - "version": "1.1.8", - "bundled": true, - "dev": true - }, - "ip-regex": { - "version": "4.3.0", - "bundled": true, - "dev": true - }, - "is-cidr": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "cidr-regex": "^3.1.1" - } - }, - "is-core-module": { - "version": "2.9.0", - "bundled": true, - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "is-lambda": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "bundled": true, - "dev": true - }, - "json-stringify-nice": { - "version": "1.1.4", - "bundled": true, - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "bundled": true, - "dev": true - }, - "just-diff": { - "version": "5.0.2", - "bundled": true, - "dev": true - }, - "just-diff-apply": { - "version": "5.2.0", - "bundled": true, - "dev": true - }, - "libnpmaccess": { - "version": "6.0.3", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" - } - }, - "libnpmdiff": { - "version": "4.0.3", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/disparity-colors": "^2.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "binary-extensions": "^2.2.0", - "diff": "^5.0.0", - "minimatch": "^5.0.1", - "npm-package-arg": "^9.0.1", - "pacote": "^13.0.5", - "tar": "^6.1.0" - } - }, - "libnpmexec": { - "version": "4.0.5", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/arborist": "^5.0.0", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/run-script": "^3.0.0", - "chalk": "^4.1.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-package-arg": "^9.0.1", - "npmlog": "^6.0.2", - "pacote": "^13.0.5", - "proc-log": "^2.0.0", - "read": "^1.0.7", - "read-package-json-fast": "^2.0.2", - "walk-up-path": "^1.0.0" - } - }, - "libnpmfund": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/arborist": "^5.0.0" - } - }, - "libnpmhook": { - "version": "8.0.3", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - } - }, - "libnpmorg": { - "version": "4.0.3", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - } - }, - "libnpmpack": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/run-script": "^3.0.0", - "npm-package-arg": "^9.0.1", - "pacote": "^13.5.0" - } - }, - "libnpmpublish": { - "version": "6.0.4", - "bundled": true, - "dev": true, - "requires": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", - "semver": "^7.3.7", - "ssri": "^9.0.0" - } - }, - "libnpmsearch": { - "version": "5.0.3", - "bundled": true, - "dev": true, - "requires": { - "npm-registry-fetch": "^13.0.0" - } - }, - "libnpmteam": { - "version": "4.0.3", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - } - }, - "libnpmversion": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/run-script": "^3.0.0", - "json-parse-even-better-errors": "^2.3.1", - "proc-log": "^2.0.0", - "semver": "^7.3.7" - } - }, - "lru-cache": { - "version": "7.9.0", - "bundled": true, - "dev": true - }, - "make-fetch-happen": { - "version": "10.1.5", - "bundled": true, - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.1.1", - "ssri": "^9.0.0" - } - }, - "minimatch": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minipass": { - "version": "3.1.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "minipass-flush": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "mkdirp-infer-owner": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - } - }, - "ms": { - "version": "2.1.3", - "bundled": true, - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "bundled": true, - "dev": true - }, - "node-gyp": { - "version": "9.0.0", - "bundled": true, - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.0", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "nopt": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "npm-audit-report": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "npm-bundled": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-install-checks": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "npm-package-arg": { - "version": "9.0.2", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "npm-packlist": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "7.0.1", - "bundled": true, - "dev": true, - "requires": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - } - }, - "npm-profile": { - "version": "6.0.3", - "bundled": true, - "dev": true, - "requires": { - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0" - } - }, - "npm-registry-fetch": { - "version": "13.1.1", - "bundled": true, - "dev": true, - "requires": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - } - }, - "npm-user-validate": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "npmlog": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.2", - "bundled": true, - "dev": true - }, - "p-map": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "pacote": { - "version": "13.5.0", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^3.0.1", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - } - }, - "parse-conflict-json": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", - "just-diff-apply": "^5.2.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "proc-log": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "promise-all-reject-late": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "promise-call-limit": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "promzard": { - "version": "0.3.0", - "bundled": true, - "dev": true, - "requires": { - "read": "1" - } - }, - "qrcode-terminal": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "read": { - "version": "1.0.7", - "bundled": true, - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-cmd-shim": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "read-package-json": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "retry": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.0", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "7.3.7", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "bundled": true, - "dev": true - }, - "smart-buffer": { - "version": "4.2.0", - "bundled": true, - "dev": true - }, - "socks": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "6.2.0", - "bundled": true, - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "spdx-correct": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "bundled": true, - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "bundled": true, - "dev": true - }, - "ssri": { - "version": "9.0.1", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tar": { - "version": "6.1.11", - "bundled": true, - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, - "tiny-relative-date": { - "version": "1.3.0", - "bundled": true, - "dev": true - }, - "treeverse": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "walk-up-path": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "wcwidth": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "write-file-atomic": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "yallist": { - "version": "4.0.0", - "bundled": true, - "dev": true - } - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "opts": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz", - "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "require-relative": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", - "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.56.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.3.tgz", - "integrity": "sha512-Au92NuznFklgQCUcV96iXlxUbHuB1vQMaH76DHl5M11TotjOHwqk9CwcrT78+Tnv4FN9uTBxq6p4EJoYkpyekg==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-css-only": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-css-only/-/rollup-plugin-css-only-3.1.0.tgz", - "integrity": "sha512-TYMOE5uoD76vpj+RTkQLzC9cQtbnJNktHPB507FzRWBVaofg7KhIqq1kGbcVOadARSozWF883Ho9KpSPKH8gqA==", - "dev": true, - "requires": { - "@rollup/pluginutils": "4" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz", - "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - } - } - }, - "rollup-plugin-livereload": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-2.0.5.tgz", - "integrity": "sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA==", - "dev": true, - "requires": { - "livereload": "^0.9.1" - } - }, - "rollup-plugin-svelte": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.0.tgz", - "integrity": "sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==", - "dev": true, - "requires": { - "require-relative": "^0.8.7", - "rollup-pluginutils": "^2.8.2" - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - } - }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1" - }, - "dependencies": { - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - } - } - }, - "sade": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", - "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", - "requires": { - "mri": "^1.1.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "sander": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", - "integrity": "sha1-dB4kXiMfB8r7b98PEzrfohalAq0=", - "dev": true, - "requires": { - "es6-promise": "^3.1.2", - "graceful-fs": "^4.1.3", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.2" - } - }, - "semiver": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", - "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==" - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "sirv": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.17.tgz", - "integrity": "sha512-qx9go5yraB7ekT7bCMqUHJ5jEaOC/GXBxUWv+jeWnb7WzHUFdcQPGWk7YmAwFBaQBrogpuSqd/azbC2lZRqqmw==", - "requires": { - "@polka/url": "^1.0.0-next.20", - "mime": "^2.3.1", - "totalist": "^1.0.0" - } - }, - "sirv-cli": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-1.0.14.tgz", - "integrity": "sha512-yyUTNr984ANKDloqepkYbBSqvx3buwYg2sQKPWjSU+IBia5loaoka2If8N9CMwt8AfP179cdEl7kYJ//iWJHjQ==", - "requires": { - "console-clear": "^1.1.0", - "get-port": "^3.2.0", - "kleur": "^3.0.0", - "local-access": "^1.0.1", - "sade": "^1.6.0", - "semiver": "^1.0.0", - "sirv": "^1.0.13", - "tinydate": "^1.0.0" - } - }, - "sorcery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", - "integrity": "sha1-iukK19fLBfxZ8asMY3hF1cFaUrc=", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.5", - "minimist": "^1.2.0", - "sander": "^0.5.0", - "sourcemap-codec": "^1.3.0" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "svelte": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.49.0.tgz", - "integrity": "sha512-+lmjic1pApJWDfPCpUUTc1m8azDqYCG1JN9YEngrx/hUyIcFJo6VZhj0A1Ai0wqoHcEIuQy+e9tk+4uDgdtsFA==", - "dev": true - }, - "svelte-check": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.2.5.tgz", - "integrity": "sha512-EstDoqxjqWStWELh7Z0qytqUDl/ikdNEr21dveNc4fUDnhnqO2F2jHEufqoNnC3GfBji3GIUHvoXsp/I5lMbCg==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "chokidar": "^3.4.1", - "glob": "^7.1.6", - "import-fresh": "^3.2.1", - "minimist": "^1.2.5", - "sade": "^1.7.4", - "source-map": "^0.7.3", - "svelte-preprocess": "^4.0.0", - "typescript": "*" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "svelte-preprocess": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.9.1.tgz", - "integrity": "sha512-nNGilNME8T7a1Yuisdo6MDfpVxHURR4Vj9rGsgdd1EfoS7H+8SF3qaVE92aJQt2IhTB7+BshBqBLeVP080gnpg==", - "dev": true, - "requires": { - "@types/pug": "^2.0.4", - "@types/sass": "^1.16.0", - "detect-indent": "^6.0.0", - "magic-string": "^0.25.7", - "sorcery": "^0.10.0", - "strip-indent": "^3.0.0" - } - }, - "terser": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", - "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } - }, - "tinydate": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz", - "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "typescript": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", - "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.4.tgz", - "integrity": "sha512-zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljohg==", - "dev": true, - "requires": {} - } - } -} diff --git a/rust_warp_svelte/ui/package.json b/rust_warp_svelte/ui/package.json deleted file mode 100644 index 9f240e3..0000000 --- a/rust_warp_svelte/ui/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "svelte-app", - "version": "1.0.0", - "private": true, - "scripts": { - "build": "rollup -c", - "dev": "rollup -c -w", - "start": "sirv public --no-clear", - "check": "svelte-check --tsconfig ./tsconfig.json" - }, - "devDependencies": { - "@rollup/plugin-commonjs": "^17.0.0", - "@rollup/plugin-node-resolve": "^11.0.0", - "@rollup/plugin-typescript": "^8.0.0", - "@tsconfig/svelte": "^2.0.0", - "npm": "^8.11.0", - "rollup": "^2.3.4", - "rollup-plugin-css-only": "^3.1.0", - "rollup-plugin-livereload": "^2.0.0", - "rollup-plugin-svelte": "^7.0.0", - "rollup-plugin-terser": "^7.0.0", - "svelte": "^3.49.0", - "svelte-check": "^2.0.0", - "svelte-preprocess": "^4.0.0", - "tslib": "^2.0.0", - "typescript": "^4.0.0" - }, - "dependencies": { - "sirv-cli": "^1.0.0" - } -} diff --git a/rust_warp_svelte/ui/public/favicon.png b/rust_warp_svelte/ui/public/favicon.png deleted file mode 100644 index 7e6f5eb5a2f1f1c882d265cf479de25caa925645..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3127 zcmV-749N3|P)i z7)}s4L53SJCkR}iVi00SFk;`MXX*#X*kkwKs@nFGS}c;=?XFjU|G$3t^5sjIVS2G+ zw)WGF83CpoGXhLGW(1gW%uV|X7>1P6VhCX=Ux)Lb!*DZ%@I3!{Gsf7d?gtIQ%nQiK z3%(LUSkBji;C5Rfgd6$VsF@H`Pk@xtY6t<>FNR-pD}=C~$?)9pdm3XZ36N5PNWYjb z$xd$yNQR9N!dfj-Vd@BwQo^FIIWPPmT&sZyQ$v81(sCBV=PGy{0wltEjB%~h157*t zvbe_!{=I_783x!0t1-r#-d{Y?ae$Q4N_Nd^Ui^@y(%)Gjou6y<3^XJdu{rmUf-Me?)zZ>9OR&6U5H*cK; z$gUlB{g0O4gN0sLSO|Of?hU(l?;h(jA3uH!Z{EBKuV23ouU@^Y6#%v+QG;>e*E}%?wlu-NT4DG zs)z)7WbLr)vGAu(ohrKc^em@OpO&f~6_>E61n_e0_V3@{U3^O;j{`^mNCJUj_>;7v zsMs6Hu3g7+@v+lSo;=yTYFqq}jZmQ-BK8K{C4kqi_i*jBaQE(Au0607V-zKeT;EPg zX(`vrn=L+e74+-Tqeok@_`tDa$G9I|$nTU5H*2V8@y()n*zqM?J1G!-1aX;CfDC9B zTnJ#j_%*n8Qb1)re*Bno7g0RG{Eb;IK14irJYJp$5Z6ac9~b_P?+5t~95~SRG$g?1 znFJ7p$xV&GZ18m~79TGRdfsc-BcX$9yXTR*n)mPD@1~O(_?cT$ZvFPucRmGlq&se0 zKrcUf^k}4hM*biEJOWKzz!qQe;CB_ZtSOO9Owg#lZAc=s65^rb{fZe(TYu_rk!wKkEf}RIt=#Om( zR8mN`DM<^xj~59euMMspBolVN zAPTr8sSDI104orIAdmL$uOXn*6hga1G+0WD0E?UtabxC#VC~vf3|10|phW;yQ3CY8 z2CM=)ErF;xq-YJ5G|um}>*1#E+O_Mu|Nr#qQ&G1P-NMq@f?@*XUcSbV?tX=)ilM-Q zBZP|!Bpv0V;#ojKcpc7$=eqO;#Uy~#?^kNI{vSZfLx&DEt~LTmaKWXcx=joubklI<*Aw z>LtMaQ7DR<1I2LkWvwyu#Rwn~;ezT}_g(@5l3h?W%-a86Y-t#O1PubP+z<%?V5D(U zy57A6{h+{?kOZp7&WKZR+=sznMJ}+Dnpo=C_0%R_x_t~J5T?E_{+))l5v1%52>)d-`iiZyx|5!%M2Fb2dU zW3~MwwpEH9Rhue+k$UIOoo($Ds!NbOyMR36fRHu;*15(YcA7siIZk#%JWz>P!qX1?IUojG&nKR>^gArBt2 zit(ETyZ=@V&7mv_Fi4bABcnwP+jzQuHcfU&BrAV91u-rFvEi7y-KnWsvHH=d2 zgAk(GKm_S8RcTJ>2N3~&Hbwp{Z3NF_Xeh}g4Eke)V&dY{W(3&b1j9t4yK_aYJisZZ{1rcU5- z;eD>K;ndPq&B-8yA_S0F!4ThA&{1{x)H<#?k9a#6Pc6L?V^s0``ynL&D;p(!Nmx`Y zFkHex{4p!Ggm^@DlehW}iHHVi}~u=$&N? z(NEBLQ#UxxAkdW>X9LnqUr#t4Lu0=9L8&o>JsqTtT5|%gb3QA~hr0pED71+iFFr)dZ=Q=E6ng{NE{Z~0)C?deO#?Aj zSDQ$z#TeC2T^|=}6GBo-&$;E{HL3!q3Z-szuf)O=G#zDjin4SSP%o%6+2IT#sLjQa ziyxFFz~LMjWY+_a5H!U6%a<=b7QVP^ z*90a62;bVq{?@)P6^DWd^Yilq4|YTV2Nw!Yu;a1lPI-sxR)rf@Fe5DhDP7FH zZZ%4S*1C30P;|O+jB!1;m|rXT90Sm5*RBbQN`PKu+hDD*S^yE(CdtSfg=z>u$cIj> z - - - - - - Svelte app - - - - - - - - - - - diff --git a/rust_warp_svelte/ui/rollup.config.js b/rust_warp_svelte/ui/rollup.config.js deleted file mode 100644 index 1615645..0000000 --- a/rust_warp_svelte/ui/rollup.config.js +++ /dev/null @@ -1,83 +0,0 @@ -import svelte from 'rollup-plugin-svelte'; -import commonjs from '@rollup/plugin-commonjs'; -import resolve from '@rollup/plugin-node-resolve'; -import livereload from 'rollup-plugin-livereload'; -import { terser } from 'rollup-plugin-terser'; -import sveltePreprocess from 'svelte-preprocess'; -import typescript from '@rollup/plugin-typescript'; -import css from 'rollup-plugin-css-only'; - -const production = !process.env.ROLLUP_WATCH; - -function serve() { - let server; - - function toExit() { - if (server) server.kill(0); - } - - return { - writeBundle() { - if (server) return; - server = require('child_process').spawn('npm', ['run', 'start', '--', '--dev', '--single'], { - stdio: ['ignore', 'inherit', 'inherit'], - shell: true - }); - - process.on('SIGTERM', toExit); - process.on('exit', toExit); - } - }; -} - -export default { - input: 'src/main.ts', - output: { - sourcemap: true, - format: 'iife', - name: 'app', - file: 'public/build/bundle.js' - }, - plugins: [ - svelte({ - preprocess: sveltePreprocess({ sourceMap: !production }), - compilerOptions: { - // enable run-time checks when not in production - dev: !production - } - }), - // we'll extract any component CSS out into - // a separate file - better for performance - css({ output: 'bundle.css' }), - - // If you have external dependencies installed from - // npm, you'll most likely need these plugins. In - // some cases you'll need additional configuration - - // consult the documentation for details: - // https://github.com/rollup/plugins/tree/master/packages/commonjs - resolve({ - browser: true, - dedupe: ['svelte'] - }), - commonjs(), - typescript({ - sourceMap: !production, - inlineSources: !production - }), - - // In dev mode, call `npm run start` once - // the bundle has been generated - !production && serve(), - - // Watch the `public` directory and refresh the - // browser on changes when not in production - !production && livereload('public'), - - // If we're building for production (npm run build - // instead of npm run dev), minify - production && terser() - ], - watch: { - clearScreen: false - } -}; diff --git a/rust_warp_svelte/ui/src/App.svelte b/rust_warp_svelte/ui/src/App.svelte deleted file mode 100644 index 3937403..0000000 --- a/rust_warp_svelte/ui/src/App.svelte +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - -
- -
diff --git a/rust_warp_svelte/ui/src/components/PackageItem.svelte b/rust_warp_svelte/ui/src/components/PackageItem.svelte deleted file mode 100644 index 59e122c..0000000 --- a/rust_warp_svelte/ui/src/components/PackageItem.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -
- {data.name} -
- - diff --git a/rust_warp_svelte/ui/src/components/PackageList.svelte b/rust_warp_svelte/ui/src/components/PackageList.svelte deleted file mode 100644 index 416ee67..0000000 --- a/rust_warp_svelte/ui/src/components/PackageList.svelte +++ /dev/null @@ -1,51 +0,0 @@ - - -
-

{name}

-
    - {#each shown_items as item} -
  • - {/each} - {#if !active && ellipsed} - ... - {/if} -
-
- - diff --git a/rust_warp_svelte/ui/src/components/PackageListTable.svelte b/rust_warp_svelte/ui/src/components/PackageListTable.svelte deleted file mode 100644 index 8a7f92b..0000000 --- a/rust_warp_svelte/ui/src/components/PackageListTable.svelte +++ /dev/null @@ -1,78 +0,0 @@ - - -
- - - - - {#if has_sizes } - - {/if} - {#if has_counts} - - {/if} - {#if has_preparations} - - {/if} - - - - {#each items as item} - - - {#if has_sizes } - - {/if} - {#if has_counts} - - {/if} - {#if has_preparations} - - {/if} - - {/each} - -
NameSizeCountPreparation Steps
{item.name} - {#if item.size.type == "None"} - {:else if item.size.type == "Gram"} - {#if item.size.value == 1} - {item.size.value} Gram - {:else} - {item.size.value} Grams - {/if} - {:else if item.size.type == "Pack"} - {#if item.size.value == 1} - {item.size.value} Pack - {:else} - {item.size.value} Packs - {/if} - {:else} - {item.size.value} {item.size.type} - {/if} - - {#if item.count > 1} - {item.count} - {/if} - - {#if item.preparation.steps.length > 0} - {item.preparation.steps.length} steps - - {/if} -
-
diff --git a/rust_warp_svelte/ui/src/global.d.ts b/rust_warp_svelte/ui/src/global.d.ts deleted file mode 100644 index 0e72969..0000000 --- a/rust_warp_svelte/ui/src/global.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// \ No newline at end of file diff --git a/rust_warp_svelte/ui/src/main.ts b/rust_warp_svelte/ui/src/main.ts deleted file mode 100644 index 10bf999..0000000 --- a/rust_warp_svelte/ui/src/main.ts +++ /dev/null @@ -1,9 +0,0 @@ -import App from './App.svelte'; - -const app = new App({ - target: document.body, - props: { - } -}); - -export default app; diff --git a/rust_warp_svelte/ui/src/routes/Home.svelte b/rust_warp_svelte/ui/src/routes/Home.svelte deleted file mode 100644 index dedcebf..0000000 --- a/rust_warp_svelte/ui/src/routes/Home.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -
-
- Welcome to Packager, your helper for your next trip! -
- - -
diff --git a/rust_warp_svelte/ui/src/routes/NotFound.svelte b/rust_warp_svelte/ui/src/routes/NotFound.svelte deleted file mode 100644 index a8dbba8..0000000 --- a/rust_warp_svelte/ui/src/routes/NotFound.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -
-
- 404 -- Not Found -
- -
diff --git a/rust_warp_svelte/ui/src/routes/PackageList.svelte b/rust_warp_svelte/ui/src/routes/PackageList.svelte deleted file mode 100644 index 93449ea..0000000 --- a/rust_warp_svelte/ui/src/routes/PackageList.svelte +++ /dev/null @@ -1,134 +0,0 @@ - - -
-
-

{list.name}

-
-
- - -
-
-
- {#if sidebarActive} -
- - -
-
- - -
-
- {#each activeElement.preparationsteps as step} - {step} - {/each} -
-
- - -
- {/if} -
-
-
-
diff --git a/rust_warp_svelte/ui/src/routes/PackageLists.svelte b/rust_warp_svelte/ui/src/routes/PackageLists.svelte deleted file mode 100644 index d6823a5..0000000 --- a/rust_warp_svelte/ui/src/routes/PackageLists.svelte +++ /dev/null @@ -1,47 +0,0 @@ - - -
-
- - - - - - - - - {#await getLists()} -

Loading

- {:then lists} - {#each lists as list} - redirect(url + list.id)}> - - - - {/each} - {:catch error} -

Error: {error}

- {/await} - -
Name# Items
{list.name}{list.items.length}
-
-
diff --git a/rust_warp_svelte/ui/src/routes/Preparation.svelte b/rust_warp_svelte/ui/src/routes/Preparation.svelte deleted file mode 100644 index 687772b..0000000 --- a/rust_warp_svelte/ui/src/routes/Preparation.svelte +++ /dev/null @@ -1,41 +0,0 @@ - - -
- - - - - - - - - {#await getSteps()} -

Loading

- {:then steps} - {#each steps as step} - - - - - {/each} - {:catch error} -

Error: {error}

- {/await} - -
NameStart
{step.name}{step.start.days} days before
-
diff --git a/rust_warp_svelte/ui/src/routes/Trip.svelte b/rust_warp_svelte/ui/src/routes/Trip.svelte deleted file mode 100644 index 8cdff42..0000000 --- a/rust_warp_svelte/ui/src/routes/Trip.svelte +++ /dev/null @@ -1,78 +0,0 @@ - - -
-
- {#await getTrip()} -

Loading

- {:then trip} -

{trip.name}

- - - - - - - - - - - - - - -
Date{trip.date}
Duration{trip.parameters.days} Days
Status{trip.state}
- - - - - - - - - - {#await getTripItems()} -

Loading

- {:then items} - {#each items as item} - - - - - {/each} - {:catch error} - {error} - {/await} - -
NameStatus
{item.packageItem.name}{item.status}
- {/await} -
-
diff --git a/rust_warp_svelte/ui/src/routes/Trips.svelte b/rust_warp_svelte/ui/src/routes/Trips.svelte deleted file mode 100644 index 9b99350..0000000 --- a/rust_warp_svelte/ui/src/routes/Trips.svelte +++ /dev/null @@ -1,64 +0,0 @@ - - -
-
-

Trips

- - - - - - - - - - - - {#await getTrips()} -

Loading

- {:then trips} - {#each trips as trip} - redirect(url + trip.id)}> - - - - {#if trip.state == "active"} - - {:else if trip.state == "planned"} - - {:else} - - {/if} - - - {/each} - {:catch error} -

Error: {error}

- {/await} - -
NameDateDaysStatePackage Lists
redirect(`/trips/${trip.id}`)}>{trip.name}{trip.date}{trip.parameters.days}{trip.state}{trip.state}{trip.state} -
    - {#each trip.packageLists as list} -
  • - {/each} -
-
-
-
diff --git a/rust_warp_svelte/ui/tsconfig.json b/rust_warp_svelte/ui/tsconfig.json deleted file mode 100644 index b082e96..0000000 --- a/rust_warp_svelte/ui/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@tsconfig/svelte/tsconfig.json", - - "include": ["src/**/*"], - "exclude": ["node_modules/*", "__sapper__/*", "public/*"] -} \ No newline at end of file diff --git a/rust/src/auth.rs b/src/auth.rs similarity index 100% rename from rust/src/auth.rs rename to src/auth.rs diff --git a/rust/src/cli.rs b/src/cli.rs similarity index 100% rename from rust/src/cli.rs rename to src/cli.rs diff --git a/rust/src/error.rs b/src/error.rs similarity index 100% rename from rust/src/error.rs rename to src/error.rs diff --git a/rust/src/htmx.rs b/src/htmx.rs similarity index 100% rename from rust/src/htmx.rs rename to src/htmx.rs diff --git a/rust/src/lib.rs b/src/lib.rs similarity index 100% rename from rust/src/lib.rs rename to src/lib.rs diff --git a/rust/src/main.rs b/src/main.rs similarity index 100% rename from rust/src/main.rs rename to src/main.rs diff --git a/rust/src/models/error.rs b/src/models/error.rs similarity index 100% rename from rust/src/models/error.rs rename to src/models/error.rs diff --git a/rust/src/models/inventory.rs b/src/models/inventory.rs similarity index 100% rename from rust/src/models/inventory.rs rename to src/models/inventory.rs diff --git a/rust/src/models/mod.rs b/src/models/mod.rs similarity index 100% rename from rust/src/models/mod.rs rename to src/models/mod.rs diff --git a/rust/src/models/trips.rs b/src/models/trips.rs similarity index 100% rename from rust/src/models/trips.rs rename to src/models/trips.rs diff --git a/rust/src/models/user.rs b/src/models/user.rs similarity index 100% rename from rust/src/models/user.rs rename to src/models/user.rs diff --git a/rust/src/routing/html.rs b/src/routing/html.rs similarity index 100% rename from rust/src/routing/html.rs rename to src/routing/html.rs diff --git a/rust/src/routing/mod.rs b/src/routing/mod.rs similarity index 100% rename from rust/src/routing/mod.rs rename to src/routing/mod.rs diff --git a/rust/src/routing/routes.rs b/src/routing/routes.rs similarity index 100% rename from rust/src/routing/routes.rs rename to src/routing/routes.rs diff --git a/rust/src/sqlite.rs b/src/sqlite.rs similarity index 100% rename from rust/src/sqlite.rs rename to src/sqlite.rs diff --git a/rust/src/telemetry/metrics.rs b/src/telemetry/metrics.rs similarity index 100% rename from rust/src/telemetry/metrics.rs rename to src/telemetry/metrics.rs diff --git a/rust/src/telemetry/mod.rs b/src/telemetry/mod.rs similarity index 100% rename from rust/src/telemetry/mod.rs rename to src/telemetry/mod.rs diff --git a/rust/src/telemetry/tracing/mod.rs b/src/telemetry/tracing/mod.rs similarity index 100% rename from rust/src/telemetry/tracing/mod.rs rename to src/telemetry/tracing/mod.rs diff --git a/rust/src/view/error.rs b/src/view/error.rs similarity index 100% rename from rust/src/view/error.rs rename to src/view/error.rs diff --git a/rust/src/view/home.rs b/src/view/home.rs similarity index 100% rename from rust/src/view/home.rs rename to src/view/home.rs diff --git a/rust/src/view/inventory.rs b/src/view/inventory.rs similarity index 100% rename from rust/src/view/inventory.rs rename to src/view/inventory.rs diff --git a/rust/src/view/mod.rs b/src/view/mod.rs similarity index 100% rename from rust/src/view/mod.rs rename to src/view/mod.rs diff --git a/rust/src/view/root.rs b/src/view/root.rs similarity index 100% rename from rust/src/view/root.rs rename to src/view/root.rs diff --git a/rust/src/view/trip/mod.rs b/src/view/trip/mod.rs similarity index 100% rename from rust/src/view/trip/mod.rs rename to src/view/trip/mod.rs diff --git a/rust/src/view/trip/packagelist.rs b/src/view/trip/packagelist.rs similarity index 100% rename from rust/src/view/trip/packagelist.rs rename to src/view/trip/packagelist.rs diff --git a/rust/src/view/trip/types.rs b/src/view/trip/types.rs similarity index 100% rename from rust/src/view/trip/types.rs rename to src/view/trip/types.rs diff --git a/rust/start-jaeger.sh b/start-jaeger.sh similarity index 100% rename from rust/start-jaeger.sh rename to start-jaeger.sh diff --git a/rust/start-prometheus.sh b/start-prometheus.sh similarity index 100% rename from rust/start-prometheus.sh rename to start-prometheus.sh diff --git a/rust/start-tokio-console.sh b/start-tokio-console.sh similarity index 100% rename from rust/start-tokio-console.sh rename to start-tokio-console.sh diff --git a/rust/test/.gitignore b/test/.gitignore similarity index 100% rename from rust/test/.gitignore rename to test/.gitignore diff --git a/rust/test/Cargo.lock b/test/Cargo.lock similarity index 100% rename from rust/test/Cargo.lock rename to test/Cargo.lock diff --git a/rust/test/Cargo.toml b/test/Cargo.toml similarity index 100% rename from rust/test/Cargo.toml rename to test/Cargo.toml diff --git a/rust/test/tests/main.rs b/test/tests/main.rs similarity index 100% rename from rust/test/tests/main.rs rename to test/tests/main.rs diff --git a/rust/update-k8s.sh b/update-k8s.sh similarity index 100% rename from rust/update-k8s.sh rename to update-k8s.sh