format20 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/backend/mybd.sql +56 -0
- package/backend/node_modules/.bin/node-gyp-build +16 -0
- package/backend/node_modules/.bin/node-gyp-build-optional +16 -0
- package/backend/node_modules/.bin/node-gyp-build-optional.cmd +17 -0
- package/backend/node_modules/.bin/node-gyp-build-optional.ps1 +28 -0
- package/backend/node_modules/.bin/node-gyp-build-test +16 -0
- package/backend/node_modules/.bin/node-gyp-build-test.cmd +17 -0
- package/backend/node_modules/.bin/node-gyp-build-test.ps1 +28 -0
- package/backend/node_modules/.bin/node-gyp-build.cmd +17 -0
- package/backend/node_modules/.bin/node-gyp-build.ps1 +28 -0
- package/backend/node_modules/.package-lock.json +1109 -0
- package/backend/node_modules/@types/node/LICENSE +21 -0
- package/backend/node_modules/@types/node/README.md +15 -0
- package/backend/node_modules/@types/node/assert/strict.d.ts +59 -0
- package/backend/node_modules/@types/node/assert.d.ts +950 -0
- package/backend/node_modules/@types/node/async_hooks.d.ts +711 -0
- package/backend/node_modules/@types/node/buffer.buffer.d.ts +466 -0
- package/backend/node_modules/@types/node/buffer.d.ts +1765 -0
- package/backend/node_modules/@types/node/child_process.d.ts +1366 -0
- package/backend/node_modules/@types/node/cluster.d.ts +432 -0
- package/backend/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
- package/backend/node_modules/@types/node/console.d.ts +93 -0
- package/backend/node_modules/@types/node/constants.d.ts +14 -0
- package/backend/node_modules/@types/node/crypto.d.ts +4058 -0
- package/backend/node_modules/@types/node/dgram.d.ts +537 -0
- package/backend/node_modules/@types/node/diagnostics_channel.d.ts +552 -0
- package/backend/node_modules/@types/node/dns/promises.d.ts +497 -0
- package/backend/node_modules/@types/node/dns.d.ts +876 -0
- package/backend/node_modules/@types/node/domain.d.ts +150 -0
- package/backend/node_modules/@types/node/events.d.ts +1008 -0
- package/backend/node_modules/@types/node/fs/promises.d.ts +1468 -0
- package/backend/node_modules/@types/node/fs.d.ts +4780 -0
- package/backend/node_modules/@types/node/globals.d.ts +150 -0
- package/backend/node_modules/@types/node/globals.typedarray.d.ts +101 -0
- package/backend/node_modules/@types/node/http.d.ts +2147 -0
- package/backend/node_modules/@types/node/http2.d.ts +2485 -0
- package/backend/node_modules/@types/node/https.d.ts +400 -0
- package/backend/node_modules/@types/node/index.d.ts +117 -0
- package/backend/node_modules/@types/node/inspector/promises.d.ts +35 -0
- package/backend/node_modules/@types/node/inspector.d.ts +264 -0
- package/backend/node_modules/@types/node/inspector.generated.d.ts +4406 -0
- package/backend/node_modules/@types/node/module.d.ts +755 -0
- package/backend/node_modules/@types/node/net.d.ts +970 -0
- package/backend/node_modules/@types/node/os.d.ts +498 -0
- package/backend/node_modules/@types/node/package.json +155 -0
- package/backend/node_modules/@types/node/path/posix.d.ts +8 -0
- package/backend/node_modules/@types/node/path/win32.d.ts +8 -0
- package/backend/node_modules/@types/node/path.d.ts +178 -0
- package/backend/node_modules/@types/node/perf_hooks.d.ts +612 -0
- package/backend/node_modules/@types/node/process.d.ts +2204 -0
- package/backend/node_modules/@types/node/punycode.d.ts +89 -0
- package/backend/node_modules/@types/node/querystring.d.ts +139 -0
- package/backend/node_modules/@types/node/quic.d.ts +897 -0
- package/backend/node_modules/@types/node/readline/promises.d.ts +158 -0
- package/backend/node_modules/@types/node/readline.d.ts +507 -0
- package/backend/node_modules/@types/node/repl.d.ts +420 -0
- package/backend/node_modules/@types/node/sea.d.ts +47 -0
- package/backend/node_modules/@types/node/sqlite.d.ts +1068 -0
- package/backend/node_modules/@types/node/stream/consumers.d.ts +114 -0
- package/backend/node_modules/@types/node/stream/iter.d.ts +301 -0
- package/backend/node_modules/@types/node/stream/promises.d.ts +211 -0
- package/backend/node_modules/@types/node/stream/web.d.ts +300 -0
- package/backend/node_modules/@types/node/stream.d.ts +1774 -0
- package/backend/node_modules/@types/node/string_decoder.d.ts +27 -0
- package/backend/node_modules/@types/node/test/reporters.d.ts +59 -0
- package/backend/node_modules/@types/node/test.d.ts +2279 -0
- package/backend/node_modules/@types/node/timers/promises.d.ts +93 -0
- package/backend/node_modules/@types/node/timers.d.ts +149 -0
- package/backend/node_modules/@types/node/tls.d.ts +1193 -0
- package/backend/node_modules/@types/node/trace_events.d.ts +103 -0
- package/backend/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
- package/backend/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
- package/backend/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
- package/backend/node_modules/@types/node/ts5.6/index.d.ts +119 -0
- package/backend/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
- package/backend/node_modules/@types/node/ts5.7/index.d.ts +119 -0
- package/backend/node_modules/@types/node/tty.d.ts +225 -0
- package/backend/node_modules/@types/node/url.d.ts +556 -0
- package/backend/node_modules/@types/node/util/types.d.ts +558 -0
- package/backend/node_modules/@types/node/util.d.ts +1677 -0
- package/backend/node_modules/@types/node/v8.d.ts +980 -0
- package/backend/node_modules/@types/node/vm.d.ts +1136 -0
- package/backend/node_modules/@types/node/wasi.d.ts +131 -0
- package/backend/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
- package/backend/node_modules/@types/node/web-globals/blob.d.ts +23 -0
- package/backend/node_modules/@types/node/web-globals/console.d.ts +9 -0
- package/backend/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
- package/backend/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
- package/backend/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
- package/backend/node_modules/@types/node/web-globals/events.d.ts +106 -0
- package/backend/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
- package/backend/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
- package/backend/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
- package/backend/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
- package/backend/node_modules/@types/node/web-globals/performance.d.ts +45 -0
- package/backend/node_modules/@types/node/web-globals/storage.d.ts +24 -0
- package/backend/node_modules/@types/node/web-globals/streams.d.ts +115 -0
- package/backend/node_modules/@types/node/web-globals/timers.d.ts +44 -0
- package/backend/node_modules/@types/node/web-globals/url.d.ts +24 -0
- package/backend/node_modules/@types/node/worker_threads.d.ts +671 -0
- package/backend/node_modules/@types/node/zlib/iter.d.ts +131 -0
- package/backend/node_modules/@types/node/zlib.d.ts +589 -0
- package/backend/node_modules/accepts/HISTORY.md +250 -0
- package/backend/node_modules/accepts/LICENSE +23 -0
- package/backend/node_modules/accepts/README.md +140 -0
- package/backend/node_modules/accepts/index.js +238 -0
- package/backend/node_modules/accepts/package.json +47 -0
- package/backend/node_modules/aws-ssl-profiles/LICENSE +19 -0
- package/backend/node_modules/aws-ssl-profiles/README.md +146 -0
- package/backend/node_modules/aws-ssl-profiles/lib/@types/profiles.d.ts +4 -0
- package/backend/node_modules/aws-ssl-profiles/lib/@types/profiles.js +2 -0
- package/backend/node_modules/aws-ssl-profiles/lib/index.d.ts +8 -0
- package/backend/node_modules/aws-ssl-profiles/lib/index.js +13 -0
- package/backend/node_modules/aws-ssl-profiles/lib/profiles/ca/defaults.d.ts +9 -0
- package/backend/node_modules/aws-ssl-profiles/lib/profiles/ca/defaults.js +2888 -0
- package/backend/node_modules/aws-ssl-profiles/lib/profiles/ca/proxies.d.ts +8 -0
- package/backend/node_modules/aws-ssl-profiles/lib/profiles/ca/proxies.js +111 -0
- package/backend/node_modules/aws-ssl-profiles/package.json +52 -0
- package/backend/node_modules/bcrypt/.dockerignore +6 -0
- package/backend/node_modules/bcrypt/.editorconfig +19 -0
- package/backend/node_modules/bcrypt/.github/workflows/build-pack-publish.yml +110 -0
- package/backend/node_modules/bcrypt/.github/workflows/ci.yaml +42 -0
- package/backend/node_modules/bcrypt/CHANGELOG.md +184 -0
- package/backend/node_modules/bcrypt/Dockerfile +57 -0
- package/backend/node_modules/bcrypt/Dockerfile-alpine +41 -0
- package/backend/node_modules/bcrypt/ISSUE_TEMPLATE.md +18 -0
- package/backend/node_modules/bcrypt/LICENSE +19 -0
- package/backend/node_modules/bcrypt/Makefile +19 -0
- package/backend/node_modules/bcrypt/README.md +388 -0
- package/backend/node_modules/bcrypt/SECURITY.md +15 -0
- package/backend/node_modules/bcrypt/bcrypt.js +242 -0
- package/backend/node_modules/bcrypt/binding.gyp +49 -0
- package/backend/node_modules/bcrypt/build-all.sh +37 -0
- package/backend/node_modules/bcrypt/examples/async_compare.js +28 -0
- package/backend/node_modules/bcrypt/examples/forever_gen_salt.js +8 -0
- package/backend/node_modules/bcrypt/package.json +62 -0
- package/backend/node_modules/bcrypt/prebuilds/darwin-arm64/bcrypt.node +0 -0
- package/backend/node_modules/bcrypt/prebuilds/darwin-x64/bcrypt.node +0 -0
- package/backend/node_modules/bcrypt/prebuilds/linux-arm/bcrypt.glibc.node +0 -0
- package/backend/node_modules/bcrypt/prebuilds/linux-arm/bcrypt.musl.node +0 -0
- package/backend/node_modules/bcrypt/prebuilds/linux-arm64/bcrypt.glibc.node +0 -0
- package/backend/node_modules/bcrypt/prebuilds/linux-arm64/bcrypt.musl.node +0 -0
- package/backend/node_modules/bcrypt/prebuilds/linux-x64/bcrypt.glibc.node +0 -0
- package/backend/node_modules/bcrypt/prebuilds/linux-x64/bcrypt.musl.node +0 -0
- package/backend/node_modules/bcrypt/prebuilds/win32-arm64/bcrypt.node +0 -0
- package/backend/node_modules/bcrypt/prebuilds/win32-x64/bcrypt.node +0 -0
- package/backend/node_modules/bcrypt/promises.js +45 -0
- package/backend/node_modules/bcrypt/src/bcrypt.cc +315 -0
- package/backend/node_modules/bcrypt/src/bcrypt_node.cc +288 -0
- package/backend/node_modules/bcrypt/src/blowfish.cc +679 -0
- package/backend/node_modules/bcrypt/src/node_blf.h +132 -0
- package/backend/node_modules/bcrypt/test/async.test.js +209 -0
- package/backend/node_modules/bcrypt/test/implementation.test.js +48 -0
- package/backend/node_modules/bcrypt/test/promise.test.js +168 -0
- package/backend/node_modules/bcrypt/test/repetitions.test.js +55 -0
- package/backend/node_modules/bcrypt/test/sync.test.js +125 -0
- package/backend/node_modules/body-parser/LICENSE +23 -0
- package/backend/node_modules/body-parser/README.md +494 -0
- package/backend/node_modules/body-parser/index.js +71 -0
- package/backend/node_modules/body-parser/lib/read.js +247 -0
- package/backend/node_modules/body-parser/lib/types/json.js +158 -0
- package/backend/node_modules/body-parser/lib/types/raw.js +42 -0
- package/backend/node_modules/body-parser/lib/types/text.js +36 -0
- package/backend/node_modules/body-parser/lib/types/urlencoded.js +142 -0
- package/backend/node_modules/body-parser/lib/utils.js +98 -0
- package/backend/node_modules/body-parser/package.json +52 -0
- package/backend/node_modules/bytes/History.md +97 -0
- package/backend/node_modules/bytes/LICENSE +23 -0
- package/backend/node_modules/bytes/Readme.md +152 -0
- package/backend/node_modules/bytes/index.js +170 -0
- package/backend/node_modules/bytes/package.json +42 -0
- package/backend/node_modules/call-bind-apply-helpers/.eslintrc +17 -0
- package/backend/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +12 -0
- package/backend/node_modules/call-bind-apply-helpers/.nycrc +9 -0
- package/backend/node_modules/call-bind-apply-helpers/CHANGELOG.md +30 -0
- package/backend/node_modules/call-bind-apply-helpers/LICENSE +21 -0
- package/backend/node_modules/call-bind-apply-helpers/README.md +62 -0
- package/backend/node_modules/call-bind-apply-helpers/actualApply.d.ts +1 -0
- package/backend/node_modules/call-bind-apply-helpers/actualApply.js +10 -0
- package/backend/node_modules/call-bind-apply-helpers/applyBind.d.ts +19 -0
- package/backend/node_modules/call-bind-apply-helpers/applyBind.js +10 -0
- package/backend/node_modules/call-bind-apply-helpers/functionApply.d.ts +1 -0
- package/backend/node_modules/call-bind-apply-helpers/functionApply.js +4 -0
- package/backend/node_modules/call-bind-apply-helpers/functionCall.d.ts +1 -0
- package/backend/node_modules/call-bind-apply-helpers/functionCall.js +4 -0
- package/backend/node_modules/call-bind-apply-helpers/index.d.ts +64 -0
- package/backend/node_modules/call-bind-apply-helpers/index.js +15 -0
- package/backend/node_modules/call-bind-apply-helpers/package.json +85 -0
- package/backend/node_modules/call-bind-apply-helpers/reflectApply.d.ts +3 -0
- package/backend/node_modules/call-bind-apply-helpers/reflectApply.js +4 -0
- package/backend/node_modules/call-bind-apply-helpers/test/index.js +63 -0
- package/backend/node_modules/call-bind-apply-helpers/tsconfig.json +9 -0
- package/backend/node_modules/call-bound/.eslintrc +13 -0
- package/backend/node_modules/call-bound/.github/FUNDING.yml +12 -0
- package/backend/node_modules/call-bound/.nycrc +9 -0
- package/backend/node_modules/call-bound/CHANGELOG.md +42 -0
- package/backend/node_modules/call-bound/LICENSE +21 -0
- package/backend/node_modules/call-bound/README.md +53 -0
- package/backend/node_modules/call-bound/index.d.ts +94 -0
- package/backend/node_modules/call-bound/index.js +19 -0
- package/backend/node_modules/call-bound/package.json +99 -0
- package/backend/node_modules/call-bound/test/index.js +61 -0
- package/backend/node_modules/call-bound/tsconfig.json +10 -0
- package/backend/node_modules/content-disposition/LICENSE +22 -0
- package/backend/node_modules/content-disposition/README.md +141 -0
- package/backend/node_modules/content-disposition/index.js +536 -0
- package/backend/node_modules/content-disposition/package.json +40 -0
- package/backend/node_modules/content-type/HISTORY.md +29 -0
- package/backend/node_modules/content-type/LICENSE +22 -0
- package/backend/node_modules/content-type/README.md +94 -0
- package/backend/node_modules/content-type/index.js +225 -0
- package/backend/node_modules/content-type/package.json +42 -0
- package/backend/node_modules/cookie/LICENSE +24 -0
- package/backend/node_modules/cookie/README.md +317 -0
- package/backend/node_modules/cookie/SECURITY.md +25 -0
- package/backend/node_modules/cookie/index.js +335 -0
- package/backend/node_modules/cookie/package.json +44 -0
- package/backend/node_modules/cookie-signature/History.md +70 -0
- package/backend/node_modules/cookie-signature/LICENSE +22 -0
- package/backend/node_modules/cookie-signature/Readme.md +23 -0
- package/backend/node_modules/cookie-signature/index.js +47 -0
- package/backend/node_modules/cookie-signature/package.json +24 -0
- package/backend/node_modules/cors/LICENSE +22 -0
- package/backend/node_modules/cors/README.md +277 -0
- package/backend/node_modules/cors/lib/index.js +238 -0
- package/backend/node_modules/cors/package.json +42 -0
- package/backend/node_modules/debug/LICENSE +20 -0
- package/backend/node_modules/debug/README.md +481 -0
- package/backend/node_modules/debug/package.json +64 -0
- package/backend/node_modules/debug/src/browser.js +272 -0
- package/backend/node_modules/debug/src/common.js +292 -0
- package/backend/node_modules/debug/src/index.js +10 -0
- package/backend/node_modules/debug/src/node.js +263 -0
- package/backend/node_modules/denque/CHANGELOG.md +29 -0
- package/backend/node_modules/denque/LICENSE +201 -0
- package/backend/node_modules/denque/README.md +77 -0
- package/backend/node_modules/denque/index.d.ts +47 -0
- package/backend/node_modules/denque/index.js +481 -0
- package/backend/node_modules/denque/package.json +58 -0
- package/backend/node_modules/depd/History.md +103 -0
- package/backend/node_modules/depd/LICENSE +22 -0
- package/backend/node_modules/depd/Readme.md +280 -0
- package/backend/node_modules/depd/index.js +538 -0
- package/backend/node_modules/depd/lib/browser/index.js +77 -0
- package/backend/node_modules/depd/package.json +45 -0
- package/backend/node_modules/dunder-proto/.eslintrc +5 -0
- package/backend/node_modules/dunder-proto/.github/FUNDING.yml +12 -0
- package/backend/node_modules/dunder-proto/.nycrc +13 -0
- package/backend/node_modules/dunder-proto/CHANGELOG.md +24 -0
- package/backend/node_modules/dunder-proto/LICENSE +21 -0
- package/backend/node_modules/dunder-proto/README.md +54 -0
- package/backend/node_modules/dunder-proto/get.d.ts +5 -0
- package/backend/node_modules/dunder-proto/get.js +30 -0
- package/backend/node_modules/dunder-proto/package.json +76 -0
- package/backend/node_modules/dunder-proto/set.d.ts +5 -0
- package/backend/node_modules/dunder-proto/set.js +35 -0
- package/backend/node_modules/dunder-proto/test/get.js +34 -0
- package/backend/node_modules/dunder-proto/test/index.js +4 -0
- package/backend/node_modules/dunder-proto/test/set.js +50 -0
- package/backend/node_modules/dunder-proto/tsconfig.json +9 -0
- package/backend/node_modules/ee-first/LICENSE +22 -0
- package/backend/node_modules/ee-first/README.md +80 -0
- package/backend/node_modules/ee-first/index.js +95 -0
- package/backend/node_modules/ee-first/package.json +29 -0
- package/backend/node_modules/encodeurl/LICENSE +22 -0
- package/backend/node_modules/encodeurl/README.md +109 -0
- package/backend/node_modules/encodeurl/index.js +60 -0
- package/backend/node_modules/encodeurl/package.json +40 -0
- package/backend/node_modules/es-define-property/.eslintrc +13 -0
- package/backend/node_modules/es-define-property/.github/FUNDING.yml +12 -0
- package/backend/node_modules/es-define-property/.nycrc +9 -0
- package/backend/node_modules/es-define-property/CHANGELOG.md +29 -0
- package/backend/node_modules/es-define-property/LICENSE +21 -0
- package/backend/node_modules/es-define-property/README.md +49 -0
- package/backend/node_modules/es-define-property/index.d.ts +3 -0
- package/backend/node_modules/es-define-property/index.js +14 -0
- package/backend/node_modules/es-define-property/package.json +81 -0
- package/backend/node_modules/es-define-property/test/index.js +56 -0
- package/backend/node_modules/es-define-property/tsconfig.json +10 -0
- package/backend/node_modules/es-errors/.eslintrc +5 -0
- package/backend/node_modules/es-errors/.github/FUNDING.yml +12 -0
- package/backend/node_modules/es-errors/CHANGELOG.md +40 -0
- package/backend/node_modules/es-errors/LICENSE +21 -0
- package/backend/node_modules/es-errors/README.md +55 -0
- package/backend/node_modules/es-errors/eval.d.ts +3 -0
- package/backend/node_modules/es-errors/eval.js +4 -0
- package/backend/node_modules/es-errors/index.d.ts +3 -0
- package/backend/node_modules/es-errors/index.js +4 -0
- package/backend/node_modules/es-errors/package.json +80 -0
- package/backend/node_modules/es-errors/range.d.ts +3 -0
- package/backend/node_modules/es-errors/range.js +4 -0
- package/backend/node_modules/es-errors/ref.d.ts +3 -0
- package/backend/node_modules/es-errors/ref.js +4 -0
- package/backend/node_modules/es-errors/syntax.d.ts +3 -0
- package/backend/node_modules/es-errors/syntax.js +4 -0
- package/backend/node_modules/es-errors/test/index.js +19 -0
- package/backend/node_modules/es-errors/tsconfig.json +49 -0
- package/backend/node_modules/es-errors/type.d.ts +3 -0
- package/backend/node_modules/es-errors/type.js +4 -0
- package/backend/node_modules/es-errors/uri.d.ts +3 -0
- package/backend/node_modules/es-errors/uri.js +4 -0
- package/backend/node_modules/es-object-atoms/.eslintrc +16 -0
- package/backend/node_modules/es-object-atoms/.github/FUNDING.yml +12 -0
- package/backend/node_modules/es-object-atoms/CHANGELOG.md +44 -0
- package/backend/node_modules/es-object-atoms/LICENSE +21 -0
- package/backend/node_modules/es-object-atoms/README.md +63 -0
- package/backend/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +3 -0
- package/backend/node_modules/es-object-atoms/RequireObjectCoercible.js +11 -0
- package/backend/node_modules/es-object-atoms/ToObject.d.ts +7 -0
- package/backend/node_modules/es-object-atoms/ToObject.js +10 -0
- package/backend/node_modules/es-object-atoms/index.d.ts +3 -0
- package/backend/node_modules/es-object-atoms/index.js +4 -0
- package/backend/node_modules/es-object-atoms/isObject.d.ts +3 -0
- package/backend/node_modules/es-object-atoms/isObject.js +6 -0
- package/backend/node_modules/es-object-atoms/package.json +79 -0
- package/backend/node_modules/es-object-atoms/test/index.js +38 -0
- package/backend/node_modules/es-object-atoms/tsconfig.json +7 -0
- package/backend/node_modules/escape-html/LICENSE +24 -0
- package/backend/node_modules/escape-html/Readme.md +43 -0
- package/backend/node_modules/escape-html/index.js +78 -0
- package/backend/node_modules/escape-html/package.json +24 -0
- package/backend/node_modules/etag/HISTORY.md +83 -0
- package/backend/node_modules/etag/LICENSE +22 -0
- package/backend/node_modules/etag/README.md +159 -0
- package/backend/node_modules/etag/index.js +131 -0
- package/backend/node_modules/etag/package.json +47 -0
- package/backend/node_modules/express/LICENSE +24 -0
- package/backend/node_modules/express/Readme.md +276 -0
- package/backend/node_modules/express/index.js +11 -0
- package/backend/node_modules/express/lib/application.js +631 -0
- package/backend/node_modules/express/lib/express.js +81 -0
- package/backend/node_modules/express/lib/request.js +514 -0
- package/backend/node_modules/express/lib/response.js +1053 -0
- package/backend/node_modules/express/lib/utils.js +271 -0
- package/backend/node_modules/express/lib/view.js +205 -0
- package/backend/node_modules/express/package.json +99 -0
- package/backend/node_modules/express-session/LICENSE +24 -0
- package/backend/node_modules/express-session/README.md +1061 -0
- package/backend/node_modules/express-session/index.js +700 -0
- package/backend/node_modules/express-session/node_modules/cookie-signature/History.md +42 -0
- package/backend/node_modules/express-session/node_modules/cookie-signature/Readme.md +42 -0
- package/backend/node_modules/express-session/node_modules/cookie-signature/index.js +51 -0
- package/backend/node_modules/express-session/node_modules/cookie-signature/package.json +18 -0
- package/backend/node_modules/express-session/node_modules/debug/.coveralls.yml +1 -0
- package/backend/node_modules/express-session/node_modules/debug/.eslintrc +11 -0
- package/backend/node_modules/express-session/node_modules/debug/.travis.yml +14 -0
- package/backend/node_modules/express-session/node_modules/debug/CHANGELOG.md +362 -0
- package/backend/node_modules/express-session/node_modules/debug/LICENSE +19 -0
- package/backend/node_modules/express-session/node_modules/debug/Makefile +50 -0
- package/backend/node_modules/express-session/node_modules/debug/README.md +312 -0
- package/backend/node_modules/express-session/node_modules/debug/component.json +19 -0
- package/backend/node_modules/express-session/node_modules/debug/karma.conf.js +70 -0
- package/backend/node_modules/express-session/node_modules/debug/node.js +1 -0
- package/backend/node_modules/express-session/node_modules/debug/package.json +49 -0
- package/backend/node_modules/express-session/node_modules/debug/src/browser.js +185 -0
- package/backend/node_modules/express-session/node_modules/debug/src/debug.js +202 -0
- package/backend/node_modules/express-session/node_modules/debug/src/index.js +10 -0
- package/backend/node_modules/express-session/node_modules/debug/src/inspector-log.js +15 -0
- package/backend/node_modules/express-session/node_modules/debug/src/node.js +248 -0
- package/backend/node_modules/express-session/node_modules/ms/index.js +152 -0
- package/backend/node_modules/express-session/node_modules/ms/license.md +21 -0
- package/backend/node_modules/express-session/node_modules/ms/package.json +37 -0
- package/backend/node_modules/express-session/node_modules/ms/readme.md +51 -0
- package/backend/node_modules/express-session/package.json +50 -0
- package/backend/node_modules/express-session/session/cookie.js +152 -0
- package/backend/node_modules/express-session/session/memory.js +187 -0
- package/backend/node_modules/express-session/session/session.js +143 -0
- package/backend/node_modules/express-session/session/store.js +102 -0
- package/backend/node_modules/finalhandler/HISTORY.md +239 -0
- package/backend/node_modules/finalhandler/LICENSE +22 -0
- package/backend/node_modules/finalhandler/README.md +150 -0
- package/backend/node_modules/finalhandler/index.js +293 -0
- package/backend/node_modules/finalhandler/package.json +47 -0
- package/backend/node_modules/forwarded/HISTORY.md +21 -0
- package/backend/node_modules/forwarded/LICENSE +22 -0
- package/backend/node_modules/forwarded/README.md +57 -0
- package/backend/node_modules/forwarded/index.js +90 -0
- package/backend/node_modules/forwarded/package.json +45 -0
- package/backend/node_modules/fresh/HISTORY.md +80 -0
- package/backend/node_modules/fresh/LICENSE +23 -0
- package/backend/node_modules/fresh/README.md +117 -0
- package/backend/node_modules/fresh/index.js +136 -0
- package/backend/node_modules/fresh/package.json +46 -0
- package/backend/node_modules/function-bind/.eslintrc +21 -0
- package/backend/node_modules/function-bind/.github/FUNDING.yml +12 -0
- package/backend/node_modules/function-bind/.github/SECURITY.md +3 -0
- package/backend/node_modules/function-bind/.nycrc +13 -0
- package/backend/node_modules/function-bind/CHANGELOG.md +136 -0
- package/backend/node_modules/function-bind/LICENSE +20 -0
- package/backend/node_modules/function-bind/README.md +46 -0
- package/backend/node_modules/function-bind/implementation.js +84 -0
- package/backend/node_modules/function-bind/index.js +5 -0
- package/backend/node_modules/function-bind/package.json +87 -0
- package/backend/node_modules/function-bind/test/.eslintrc +9 -0
- package/backend/node_modules/function-bind/test/index.js +252 -0
- package/backend/node_modules/generate-function/.travis.yml +3 -0
- package/backend/node_modules/generate-function/LICENSE +21 -0
- package/backend/node_modules/generate-function/README.md +89 -0
- package/backend/node_modules/generate-function/example.js +27 -0
- package/backend/node_modules/generate-function/index.js +181 -0
- package/backend/node_modules/generate-function/package.json +32 -0
- package/backend/node_modules/generate-function/test.js +49 -0
- package/backend/node_modules/get-intrinsic/.eslintrc +42 -0
- package/backend/node_modules/get-intrinsic/.github/FUNDING.yml +12 -0
- package/backend/node_modules/get-intrinsic/.nycrc +9 -0
- package/backend/node_modules/get-intrinsic/CHANGELOG.md +186 -0
- package/backend/node_modules/get-intrinsic/LICENSE +21 -0
- package/backend/node_modules/get-intrinsic/README.md +71 -0
- package/backend/node_modules/get-intrinsic/index.js +378 -0
- package/backend/node_modules/get-intrinsic/package.json +97 -0
- package/backend/node_modules/get-intrinsic/test/GetIntrinsic.js +274 -0
- package/backend/node_modules/get-proto/.eslintrc +10 -0
- package/backend/node_modules/get-proto/.github/FUNDING.yml +12 -0
- package/backend/node_modules/get-proto/.nycrc +9 -0
- package/backend/node_modules/get-proto/CHANGELOG.md +21 -0
- package/backend/node_modules/get-proto/LICENSE +21 -0
- package/backend/node_modules/get-proto/Object.getPrototypeOf.d.ts +5 -0
- package/backend/node_modules/get-proto/Object.getPrototypeOf.js +6 -0
- package/backend/node_modules/get-proto/README.md +50 -0
- package/backend/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +3 -0
- package/backend/node_modules/get-proto/Reflect.getPrototypeOf.js +4 -0
- package/backend/node_modules/get-proto/index.d.ts +5 -0
- package/backend/node_modules/get-proto/index.js +27 -0
- package/backend/node_modules/get-proto/package.json +81 -0
- package/backend/node_modules/get-proto/test/index.js +68 -0
- package/backend/node_modules/get-proto/tsconfig.json +9 -0
- package/backend/node_modules/gopd/.eslintrc +16 -0
- package/backend/node_modules/gopd/.github/FUNDING.yml +12 -0
- package/backend/node_modules/gopd/CHANGELOG.md +45 -0
- package/backend/node_modules/gopd/LICENSE +21 -0
- package/backend/node_modules/gopd/README.md +40 -0
- package/backend/node_modules/gopd/gOPD.d.ts +1 -0
- package/backend/node_modules/gopd/gOPD.js +4 -0
- package/backend/node_modules/gopd/index.d.ts +5 -0
- package/backend/node_modules/gopd/index.js +15 -0
- package/backend/node_modules/gopd/package.json +77 -0
- package/backend/node_modules/gopd/test/index.js +36 -0
- package/backend/node_modules/gopd/tsconfig.json +9 -0
- package/backend/node_modules/has-symbols/.eslintrc +11 -0
- package/backend/node_modules/has-symbols/.github/FUNDING.yml +12 -0
- package/backend/node_modules/has-symbols/.nycrc +9 -0
- package/backend/node_modules/has-symbols/CHANGELOG.md +91 -0
- package/backend/node_modules/has-symbols/LICENSE +21 -0
- package/backend/node_modules/has-symbols/README.md +46 -0
- package/backend/node_modules/has-symbols/index.d.ts +3 -0
- package/backend/node_modules/has-symbols/index.js +14 -0
- package/backend/node_modules/has-symbols/package.json +111 -0
- package/backend/node_modules/has-symbols/shams.d.ts +3 -0
- package/backend/node_modules/has-symbols/shams.js +45 -0
- package/backend/node_modules/has-symbols/test/index.js +22 -0
- package/backend/node_modules/has-symbols/test/shams/core-js.js +29 -0
- package/backend/node_modules/has-symbols/test/shams/get-own-property-symbols.js +29 -0
- package/backend/node_modules/has-symbols/test/tests.js +58 -0
- package/backend/node_modules/has-symbols/tsconfig.json +10 -0
- package/backend/node_modules/hasown/.github/FUNDING.yml +12 -0
- package/backend/node_modules/hasown/.nycrc +13 -0
- package/backend/node_modules/hasown/CHANGELOG.md +58 -0
- package/backend/node_modules/hasown/LICENSE +21 -0
- package/backend/node_modules/hasown/README.md +40 -0
- package/backend/node_modules/hasown/eslint.config.mjs +6 -0
- package/backend/node_modules/hasown/index.d.ts +3 -0
- package/backend/node_modules/hasown/index.js +8 -0
- package/backend/node_modules/hasown/package.json +91 -0
- package/backend/node_modules/hasown/tsconfig.json +6 -0
- package/backend/node_modules/http-errors/HISTORY.md +186 -0
- package/backend/node_modules/http-errors/LICENSE +23 -0
- package/backend/node_modules/http-errors/README.md +169 -0
- package/backend/node_modules/http-errors/index.js +290 -0
- package/backend/node_modules/http-errors/package.json +54 -0
- package/backend/node_modules/iconv-lite/LICENSE +21 -0
- package/backend/node_modules/iconv-lite/README.md +138 -0
- package/backend/node_modules/iconv-lite/encodings/dbcs-codec.js +532 -0
- package/backend/node_modules/iconv-lite/encodings/dbcs-data.js +185 -0
- package/backend/node_modules/iconv-lite/encodings/index.js +23 -0
- package/backend/node_modules/iconv-lite/encodings/internal.js +218 -0
- package/backend/node_modules/iconv-lite/encodings/sbcs-codec.js +75 -0
- package/backend/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
- package/backend/node_modules/iconv-lite/encodings/sbcs-data.js +178 -0
- package/backend/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
- package/backend/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
- package/backend/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
- package/backend/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
- package/backend/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
- package/backend/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
- package/backend/node_modules/iconv-lite/encodings/tables/gbk-added.json +56 -0
- package/backend/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
- package/backend/node_modules/iconv-lite/encodings/utf16.js +187 -0
- package/backend/node_modules/iconv-lite/encodings/utf32.js +307 -0
- package/backend/node_modules/iconv-lite/encodings/utf7.js +283 -0
- package/backend/node_modules/iconv-lite/lib/bom-handling.js +48 -0
- package/backend/node_modules/iconv-lite/lib/helpers/merge-exports.js +13 -0
- package/backend/node_modules/iconv-lite/lib/index.d.ts +129 -0
- package/backend/node_modules/iconv-lite/lib/index.js +182 -0
- package/backend/node_modules/iconv-lite/lib/streams.js +105 -0
- package/backend/node_modules/iconv-lite/package.json +70 -0
- package/backend/node_modules/iconv-lite/types/encodings.d.ts +423 -0
- package/backend/node_modules/inherits/LICENSE +16 -0
- package/backend/node_modules/inherits/README.md +42 -0
- package/backend/node_modules/inherits/inherits.js +9 -0
- package/backend/node_modules/inherits/inherits_browser.js +27 -0
- package/backend/node_modules/inherits/package.json +29 -0
- package/backend/node_modules/ipaddr.js/LICENSE +19 -0
- package/backend/node_modules/ipaddr.js/README.md +233 -0
- package/backend/node_modules/ipaddr.js/ipaddr.min.js +1 -0
- package/backend/node_modules/ipaddr.js/lib/ipaddr.js +673 -0
- package/backend/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +68 -0
- package/backend/node_modules/ipaddr.js/package.json +35 -0
- package/backend/node_modules/is-promise/LICENSE +19 -0
- package/backend/node_modules/is-promise/index.d.ts +2 -0
- package/backend/node_modules/is-promise/index.js +6 -0
- package/backend/node_modules/is-promise/index.mjs +3 -0
- package/backend/node_modules/is-promise/package.json +30 -0
- package/backend/node_modules/is-promise/readme.md +33 -0
- package/backend/node_modules/is-property/LICENSE +22 -0
- package/backend/node_modules/is-property/README.md +28 -0
- package/backend/node_modules/is-property/is-property.js +5 -0
- package/backend/node_modules/is-property/package.json +36 -0
- package/backend/node_modules/long/LICENSE +202 -0
- package/backend/node_modules/long/README.md +286 -0
- package/backend/node_modules/long/index.d.ts +2 -0
- package/backend/node_modules/long/index.js +1581 -0
- package/backend/node_modules/long/package.json +58 -0
- package/backend/node_modules/long/types.d.ts +474 -0
- package/backend/node_modules/long/umd/index.d.ts +3 -0
- package/backend/node_modules/long/umd/index.js +1622 -0
- package/backend/node_modules/long/umd/package.json +3 -0
- package/backend/node_modules/long/umd/types.d.ts +474 -0
- package/backend/node_modules/lru.min/LICENSE +21 -0
- package/backend/node_modules/lru.min/README.md +392 -0
- package/backend/node_modules/lru.min/browser/lru.min.js +1 -0
- package/backend/node_modules/lru.min/lib/index.d.ts +38 -0
- package/backend/node_modules/lru.min/lib/index.js +248 -0
- package/backend/node_modules/lru.min/lib/index.mjs +227 -0
- package/backend/node_modules/lru.min/package.json +87 -0
- package/backend/node_modules/math-intrinsics/.eslintrc +16 -0
- package/backend/node_modules/math-intrinsics/.github/FUNDING.yml +12 -0
- package/backend/node_modules/math-intrinsics/CHANGELOG.md +24 -0
- package/backend/node_modules/math-intrinsics/LICENSE +21 -0
- package/backend/node_modules/math-intrinsics/README.md +50 -0
- package/backend/node_modules/math-intrinsics/abs.d.ts +1 -0
- package/backend/node_modules/math-intrinsics/abs.js +4 -0
- package/backend/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +3 -0
- package/backend/node_modules/math-intrinsics/constants/maxArrayLength.js +4 -0
- package/backend/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +3 -0
- package/backend/node_modules/math-intrinsics/constants/maxSafeInteger.js +5 -0
- package/backend/node_modules/math-intrinsics/constants/maxValue.d.ts +3 -0
- package/backend/node_modules/math-intrinsics/constants/maxValue.js +5 -0
- package/backend/node_modules/math-intrinsics/floor.d.ts +1 -0
- package/backend/node_modules/math-intrinsics/floor.js +4 -0
- package/backend/node_modules/math-intrinsics/isFinite.d.ts +3 -0
- package/backend/node_modules/math-intrinsics/isFinite.js +12 -0
- package/backend/node_modules/math-intrinsics/isInteger.d.ts +3 -0
- package/backend/node_modules/math-intrinsics/isInteger.js +16 -0
- package/backend/node_modules/math-intrinsics/isNaN.d.ts +1 -0
- package/backend/node_modules/math-intrinsics/isNaN.js +6 -0
- package/backend/node_modules/math-intrinsics/isNegativeZero.d.ts +3 -0
- package/backend/node_modules/math-intrinsics/isNegativeZero.js +6 -0
- package/backend/node_modules/math-intrinsics/max.d.ts +1 -0
- package/backend/node_modules/math-intrinsics/max.js +4 -0
- package/backend/node_modules/math-intrinsics/min.d.ts +1 -0
- package/backend/node_modules/math-intrinsics/min.js +4 -0
- package/backend/node_modules/math-intrinsics/mod.d.ts +3 -0
- package/backend/node_modules/math-intrinsics/mod.js +9 -0
- package/backend/node_modules/math-intrinsics/package.json +86 -0
- package/backend/node_modules/math-intrinsics/pow.d.ts +1 -0
- package/backend/node_modules/math-intrinsics/pow.js +4 -0
- package/backend/node_modules/math-intrinsics/round.d.ts +1 -0
- package/backend/node_modules/math-intrinsics/round.js +4 -0
- package/backend/node_modules/math-intrinsics/sign.d.ts +3 -0
- package/backend/node_modules/math-intrinsics/sign.js +11 -0
- package/backend/node_modules/math-intrinsics/test/index.js +192 -0
- package/backend/node_modules/math-intrinsics/tsconfig.json +3 -0
- package/backend/node_modules/media-typer/HISTORY.md +50 -0
- package/backend/node_modules/media-typer/LICENSE +22 -0
- package/backend/node_modules/media-typer/README.md +93 -0
- package/backend/node_modules/media-typer/index.js +143 -0
- package/backend/node_modules/media-typer/package.json +33 -0
- package/backend/node_modules/merge-descriptors/index.d.ts +11 -0
- package/backend/node_modules/merge-descriptors/index.js +26 -0
- package/backend/node_modules/merge-descriptors/license +11 -0
- package/backend/node_modules/merge-descriptors/package.json +50 -0
- package/backend/node_modules/merge-descriptors/readme.md +55 -0
- package/backend/node_modules/mime-db/HISTORY.md +541 -0
- package/backend/node_modules/mime-db/LICENSE +23 -0
- package/backend/node_modules/mime-db/README.md +109 -0
- package/backend/node_modules/mime-db/db.json +9342 -0
- package/backend/node_modules/mime-db/index.js +12 -0
- package/backend/node_modules/mime-db/package.json +56 -0
- package/backend/node_modules/mime-types/HISTORY.md +428 -0
- package/backend/node_modules/mime-types/LICENSE +23 -0
- package/backend/node_modules/mime-types/README.md +126 -0
- package/backend/node_modules/mime-types/index.js +211 -0
- package/backend/node_modules/mime-types/mimeScore.js +57 -0
- package/backend/node_modules/mime-types/package.json +49 -0
- package/backend/node_modules/ms/index.js +162 -0
- package/backend/node_modules/ms/license.md +21 -0
- package/backend/node_modules/ms/package.json +38 -0
- package/backend/node_modules/ms/readme.md +59 -0
- package/backend/node_modules/mysql2/License +19 -0
- package/backend/node_modules/mysql2/README.md +114 -0
- package/backend/node_modules/mysql2/index.d.ts +1 -0
- package/backend/node_modules/mysql2/index.js +77 -0
- package/backend/node_modules/mysql2/lib/auth_41.js +95 -0
- package/backend/node_modules/mysql2/lib/auth_plugins/caching_sha2_password.js +115 -0
- package/backend/node_modules/mysql2/lib/auth_plugins/caching_sha2_password.md +18 -0
- package/backend/node_modules/mysql2/lib/auth_plugins/index.js +8 -0
- package/backend/node_modules/mysql2/lib/auth_plugins/mysql_clear_password.js +17 -0
- package/backend/node_modules/mysql2/lib/auth_plugins/mysql_native_password.js +34 -0
- package/backend/node_modules/mysql2/lib/auth_plugins/sha256_password.js +74 -0
- package/backend/node_modules/mysql2/lib/base/connection.js +1139 -0
- package/backend/node_modules/mysql2/lib/base/pool.js +347 -0
- package/backend/node_modules/mysql2/lib/commands/auth_switch.js +151 -0
- package/backend/node_modules/mysql2/lib/commands/binlog_dump.js +109 -0
- package/backend/node_modules/mysql2/lib/commands/change_user.js +68 -0
- package/backend/node_modules/mysql2/lib/commands/client_handshake.js +386 -0
- package/backend/node_modules/mysql2/lib/commands/close_statement.js +18 -0
- package/backend/node_modules/mysql2/lib/commands/command.js +54 -0
- package/backend/node_modules/mysql2/lib/commands/execute.js +116 -0
- package/backend/node_modules/mysql2/lib/commands/index.js +29 -0
- package/backend/node_modules/mysql2/lib/commands/ping.js +36 -0
- package/backend/node_modules/mysql2/lib/commands/prepare.js +143 -0
- package/backend/node_modules/mysql2/lib/commands/query.js +365 -0
- package/backend/node_modules/mysql2/lib/commands/quit.js +29 -0
- package/backend/node_modules/mysql2/lib/commands/register_slave.js +27 -0
- package/backend/node_modules/mysql2/lib/commands/reset_connection.js +29 -0
- package/backend/node_modules/mysql2/lib/commands/server_handshake.js +205 -0
- package/backend/node_modules/mysql2/lib/compressed_protocol.js +153 -0
- package/backend/node_modules/mysql2/lib/connection.js +12 -0
- package/backend/node_modules/mysql2/lib/connection_config.js +300 -0
- package/backend/node_modules/mysql2/lib/constants/charset_encodings.js +317 -0
- package/backend/node_modules/mysql2/lib/constants/charsets.js +317 -0
- package/backend/node_modules/mysql2/lib/constants/client.js +39 -0
- package/backend/node_modules/mysql2/lib/constants/commands.js +37 -0
- package/backend/node_modules/mysql2/lib/constants/cursor.js +9 -0
- package/backend/node_modules/mysql2/lib/constants/encoding_charset.js +50 -0
- package/backend/node_modules/mysql2/lib/constants/errors.js +3973 -0
- package/backend/node_modules/mysql2/lib/constants/field_flags.js +20 -0
- package/backend/node_modules/mysql2/lib/constants/server_status.js +44 -0
- package/backend/node_modules/mysql2/lib/constants/session_track.js +11 -0
- package/backend/node_modules/mysql2/lib/constants/ssl_profiles.js +11 -0
- package/backend/node_modules/mysql2/lib/constants/types.js +64 -0
- package/backend/node_modules/mysql2/lib/create_connection.js +10 -0
- package/backend/node_modules/mysql2/lib/create_pool.js +10 -0
- package/backend/node_modules/mysql2/lib/create_pool_cluster.js +9 -0
- package/backend/node_modules/mysql2/lib/helpers.js +83 -0
- package/backend/node_modules/mysql2/lib/packet_parser.js +195 -0
- package/backend/node_modules/mysql2/lib/packets/auth_next_factor.js +35 -0
- package/backend/node_modules/mysql2/lib/packets/auth_switch_request.js +38 -0
- package/backend/node_modules/mysql2/lib/packets/auth_switch_request_more_data.js +33 -0
- package/backend/node_modules/mysql2/lib/packets/auth_switch_response.js +30 -0
- package/backend/node_modules/mysql2/lib/packets/binary_row.js +95 -0
- package/backend/node_modules/mysql2/lib/packets/binlog_dump.js +33 -0
- package/backend/node_modules/mysql2/lib/packets/binlog_query_statusvars.js +115 -0
- package/backend/node_modules/mysql2/lib/packets/change_user.js +97 -0
- package/backend/node_modules/mysql2/lib/packets/close_statement.js +21 -0
- package/backend/node_modules/mysql2/lib/packets/column_definition.js +291 -0
- package/backend/node_modules/mysql2/lib/packets/encode_parameter.js +69 -0
- package/backend/node_modules/mysql2/lib/packets/execute.js +177 -0
- package/backend/node_modules/mysql2/lib/packets/handshake.js +112 -0
- package/backend/node_modules/mysql2/lib/packets/handshake_response.js +173 -0
- package/backend/node_modules/mysql2/lib/packets/index.js +154 -0
- package/backend/node_modules/mysql2/lib/packets/packet.js +978 -0
- package/backend/node_modules/mysql2/lib/packets/prepare_statement.js +27 -0
- package/backend/node_modules/mysql2/lib/packets/prepared_statement_header.js +16 -0
- package/backend/node_modules/mysql2/lib/packets/query.js +102 -0
- package/backend/node_modules/mysql2/lib/packets/register_slave.js +46 -0
- package/backend/node_modules/mysql2/lib/packets/reset_connection.js +17 -0
- package/backend/node_modules/mysql2/lib/packets/resultset_header.js +124 -0
- package/backend/node_modules/mysql2/lib/packets/ssl_request.js +25 -0
- package/backend/node_modules/mysql2/lib/packets/text_row.js +47 -0
- package/backend/node_modules/mysql2/lib/parsers/binary_parser.js +235 -0
- package/backend/node_modules/mysql2/lib/parsers/parser_cache.js +68 -0
- package/backend/node_modules/mysql2/lib/parsers/static_binary_parser.js +213 -0
- package/backend/node_modules/mysql2/lib/parsers/static_text_parser.js +152 -0
- package/backend/node_modules/mysql2/lib/parsers/string.js +50 -0
- package/backend/node_modules/mysql2/lib/parsers/text_parser.js +214 -0
- package/backend/node_modules/mysql2/lib/pool.js +12 -0
- package/backend/node_modules/mysql2/lib/pool_cluster.js +375 -0
- package/backend/node_modules/mysql2/lib/pool_config.js +34 -0
- package/backend/node_modules/mysql2/lib/pool_connection.js +81 -0
- package/backend/node_modules/mysql2/lib/promise/capture_local_err.js +25 -0
- package/backend/node_modules/mysql2/lib/promise/connection.js +237 -0
- package/backend/node_modules/mysql2/lib/promise/inherit_events.js +27 -0
- package/backend/node_modules/mysql2/lib/promise/make_done_cb.js +16 -0
- package/backend/node_modules/mysql2/lib/promise/pool.js +118 -0
- package/backend/node_modules/mysql2/lib/promise/pool_cluster.js +59 -0
- package/backend/node_modules/mysql2/lib/promise/pool_connection.js +19 -0
- package/backend/node_modules/mysql2/lib/promise/prepared_statement_info.js +35 -0
- package/backend/node_modules/mysql2/lib/results_stream.js +38 -0
- package/backend/node_modules/mysql2/lib/server.js +37 -0
- package/backend/node_modules/mysql2/lib/tracing.js +81 -0
- package/backend/node_modules/mysql2/package.json +95 -0
- package/backend/node_modules/mysql2/promise.d.ts +141 -0
- package/backend/node_modules/mysql2/promise.js +209 -0
- package/backend/node_modules/mysql2/typings/mysql/LICENSE.txt +15 -0
- package/backend/node_modules/mysql2/typings/mysql/index.d.ts +93 -0
- package/backend/node_modules/mysql2/typings/mysql/info.txt +1 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/Auth.d.ts +30 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/Connection.d.ts +456 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/Pool.d.ts +78 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/PoolCluster.d.ts +92 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/PoolConnection.d.ts +11 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/Server.d.ts +11 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/Tracing.d.ts +71 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/constants/CharsetToEncoding.d.ts +8 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/constants/Charsets.d.ts +326 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/constants/Types.d.ts +70 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/constants/index.d.ts +5 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/parsers/ParserCache.d.ts +4 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/parsers/index.d.ts +18 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/parsers/typeCast.d.ts +54 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/packets/Field.d.ts +10 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/packets/FieldPacket.d.ts +27 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/packets/OkPacket.d.ts +23 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/packets/ProcedurePacket.d.ts +13 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/packets/ResultSetHeader.d.ts +18 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/packets/RowDataPacket.d.ts +9 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/packets/index.d.ts +28 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/packets/params/ErrorPacketParams.d.ts +6 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/packets/params/OkPacketParams.d.ts +9 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/sequences/ExecutableBase.d.ts +41 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/sequences/Prepare.d.ts +65 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/sequences/Query.d.ts +235 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/sequences/QueryableBase.d.ts +41 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/sequences/Sequence.d.ts +5 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/sequences/promise/ExecutableBase.d.ts +17 -0
- package/backend/node_modules/mysql2/typings/mysql/lib/protocol/sequences/promise/QueryableBase.d.ts +18 -0
- package/backend/node_modules/named-placeholders/LICENSE +21 -0
- package/backend/node_modules/named-placeholders/README.md +27 -0
- package/backend/node_modules/named-placeholders/index.js +179 -0
- package/backend/node_modules/named-placeholders/package.json +36 -0
- package/backend/node_modules/negotiator/HISTORY.md +114 -0
- package/backend/node_modules/negotiator/LICENSE +24 -0
- package/backend/node_modules/negotiator/README.md +212 -0
- package/backend/node_modules/negotiator/index.js +83 -0
- package/backend/node_modules/negotiator/lib/charset.js +169 -0
- package/backend/node_modules/negotiator/lib/encoding.js +205 -0
- package/backend/node_modules/negotiator/lib/language.js +179 -0
- package/backend/node_modules/negotiator/lib/mediaType.js +294 -0
- package/backend/node_modules/negotiator/package.json +43 -0
- package/backend/node_modules/node-addon-api/LICENSE.md +9 -0
- package/backend/node_modules/node-addon-api/README.md +95 -0
- package/backend/node_modules/node-addon-api/common.gypi +21 -0
- package/backend/node_modules/node-addon-api/except.gypi +25 -0
- package/backend/node_modules/node-addon-api/index.js +14 -0
- package/backend/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
- package/backend/node_modules/node-addon-api/napi-inl.h +7181 -0
- package/backend/node_modules/node-addon-api/napi.h +3380 -0
- package/backend/node_modules/node-addon-api/node_addon_api.gyp +42 -0
- package/backend/node_modules/node-addon-api/node_api.gyp +9 -0
- package/backend/node_modules/node-addon-api/noexcept.gypi +26 -0
- package/backend/node_modules/node-addon-api/nothing.c +0 -0
- package/backend/node_modules/node-addon-api/package-support.json +21 -0
- package/backend/node_modules/node-addon-api/package.json +480 -0
- package/backend/node_modules/node-addon-api/tools/README.md +73 -0
- package/backend/node_modules/node-addon-api/tools/check-napi.js +99 -0
- package/backend/node_modules/node-addon-api/tools/clang-format.js +71 -0
- package/backend/node_modules/node-addon-api/tools/conversion.js +301 -0
- package/backend/node_modules/node-gyp-build/LICENSE +21 -0
- package/backend/node_modules/node-gyp-build/README.md +58 -0
- package/backend/node_modules/node-gyp-build/SECURITY.md +5 -0
- package/backend/node_modules/node-gyp-build/bin.js +84 -0
- package/backend/node_modules/node-gyp-build/build-test.js +19 -0
- package/backend/node_modules/node-gyp-build/index.js +6 -0
- package/backend/node_modules/node-gyp-build/node-gyp-build.js +207 -0
- package/backend/node_modules/node-gyp-build/optional.js +7 -0
- package/backend/node_modules/node-gyp-build/package.json +43 -0
- package/backend/node_modules/object-assign/index.js +90 -0
- package/backend/node_modules/object-assign/license +21 -0
- package/backend/node_modules/object-assign/package.json +42 -0
- package/backend/node_modules/object-assign/readme.md +61 -0
- package/backend/node_modules/object-inspect/.eslintrc +53 -0
- package/backend/node_modules/object-inspect/.github/FUNDING.yml +12 -0
- package/backend/node_modules/object-inspect/.nycrc +13 -0
- package/backend/node_modules/object-inspect/CHANGELOG.md +424 -0
- package/backend/node_modules/object-inspect/LICENSE +21 -0
- package/backend/node_modules/object-inspect/example/all.js +23 -0
- package/backend/node_modules/object-inspect/example/circular.js +6 -0
- package/backend/node_modules/object-inspect/example/fn.js +5 -0
- package/backend/node_modules/object-inspect/example/inspect.js +10 -0
- package/backend/node_modules/object-inspect/index.js +544 -0
- package/backend/node_modules/object-inspect/package-support.json +20 -0
- package/backend/node_modules/object-inspect/package.json +105 -0
- package/backend/node_modules/object-inspect/readme.markdown +84 -0
- package/backend/node_modules/object-inspect/test/bigint.js +58 -0
- package/backend/node_modules/object-inspect/test/browser/dom.js +15 -0
- package/backend/node_modules/object-inspect/test/circular.js +16 -0
- package/backend/node_modules/object-inspect/test/deep.js +12 -0
- package/backend/node_modules/object-inspect/test/element.js +53 -0
- package/backend/node_modules/object-inspect/test/err.js +48 -0
- package/backend/node_modules/object-inspect/test/fakes.js +29 -0
- package/backend/node_modules/object-inspect/test/fn.js +76 -0
- package/backend/node_modules/object-inspect/test/global.js +17 -0
- package/backend/node_modules/object-inspect/test/has.js +15 -0
- package/backend/node_modules/object-inspect/test/holes.js +15 -0
- package/backend/node_modules/object-inspect/test/indent-option.js +271 -0
- package/backend/node_modules/object-inspect/test/inspect.js +139 -0
- package/backend/node_modules/object-inspect/test/lowbyte.js +12 -0
- package/backend/node_modules/object-inspect/test/number.js +58 -0
- package/backend/node_modules/object-inspect/test/quoteStyle.js +26 -0
- package/backend/node_modules/object-inspect/test/toStringTag.js +40 -0
- package/backend/node_modules/object-inspect/test/undef.js +12 -0
- package/backend/node_modules/object-inspect/test/values.js +261 -0
- package/backend/node_modules/object-inspect/test-core-js.js +26 -0
- package/backend/node_modules/object-inspect/util.inspect.js +1 -0
- package/backend/node_modules/on-finished/HISTORY.md +98 -0
- package/backend/node_modules/on-finished/LICENSE +23 -0
- package/backend/node_modules/on-finished/README.md +162 -0
- package/backend/node_modules/on-finished/index.js +234 -0
- package/backend/node_modules/on-finished/package.json +39 -0
- package/backend/node_modules/on-headers/HISTORY.md +26 -0
- package/backend/node_modules/on-headers/LICENSE +22 -0
- package/backend/node_modules/on-headers/README.md +81 -0
- package/backend/node_modules/on-headers/index.js +180 -0
- package/backend/node_modules/on-headers/package.json +44 -0
- package/backend/node_modules/once/LICENSE +15 -0
- package/backend/node_modules/once/README.md +79 -0
- package/backend/node_modules/once/once.js +42 -0
- package/backend/node_modules/once/package.json +33 -0
- package/backend/node_modules/parseurl/HISTORY.md +58 -0
- package/backend/node_modules/parseurl/LICENSE +24 -0
- package/backend/node_modules/parseurl/README.md +133 -0
- package/backend/node_modules/parseurl/index.js +158 -0
- package/backend/node_modules/parseurl/package.json +40 -0
- package/backend/node_modules/path-to-regexp/LICENSE +21 -0
- package/backend/node_modules/path-to-regexp/Readme.md +224 -0
- package/backend/node_modules/path-to-regexp/dist/index.d.ts +147 -0
- package/backend/node_modules/path-to-regexp/dist/index.js +431 -0
- package/backend/node_modules/path-to-regexp/dist/index.js.map +1 -0
- package/backend/node_modules/path-to-regexp/package.json +64 -0
- package/backend/node_modules/proxy-addr/HISTORY.md +161 -0
- package/backend/node_modules/proxy-addr/LICENSE +22 -0
- package/backend/node_modules/proxy-addr/README.md +139 -0
- package/backend/node_modules/proxy-addr/index.js +327 -0
- package/backend/node_modules/proxy-addr/package.json +47 -0
- package/backend/node_modules/qs/.editorconfig +46 -0
- package/backend/node_modules/qs/.github/FUNDING.yml +12 -0
- package/backend/node_modules/qs/.github/SECURITY.md +11 -0
- package/backend/node_modules/qs/.github/THREAT_MODEL.md +78 -0
- package/backend/node_modules/qs/.nycrc +13 -0
- package/backend/node_modules/qs/CHANGELOG.md +822 -0
- package/backend/node_modules/qs/LICENSE.md +29 -0
- package/backend/node_modules/qs/README.md +758 -0
- package/backend/node_modules/qs/dist/qs.js +141 -0
- package/backend/node_modules/qs/eslint.config.mjs +57 -0
- package/backend/node_modules/qs/lib/formats.js +23 -0
- package/backend/node_modules/qs/lib/index.js +11 -0
- package/backend/node_modules/qs/lib/parse.js +403 -0
- package/backend/node_modules/qs/lib/stringify.js +363 -0
- package/backend/node_modules/qs/lib/utils.js +342 -0
- package/backend/node_modules/qs/package.json +94 -0
- package/backend/node_modules/qs/test/empty-keys-cases.js +267 -0
- package/backend/node_modules/qs/test/parse.js +1703 -0
- package/backend/node_modules/qs/test/stringify.js +1448 -0
- package/backend/node_modules/qs/test/utils.js +432 -0
- package/backend/node_modules/random-bytes/HISTORY.md +4 -0
- package/backend/node_modules/random-bytes/LICENSE +21 -0
- package/backend/node_modules/random-bytes/README.md +77 -0
- package/backend/node_modules/random-bytes/index.js +101 -0
- package/backend/node_modules/random-bytes/package.json +36 -0
- package/backend/node_modules/range-parser/HISTORY.md +56 -0
- package/backend/node_modules/range-parser/LICENSE +23 -0
- package/backend/node_modules/range-parser/README.md +84 -0
- package/backend/node_modules/range-parser/index.js +162 -0
- package/backend/node_modules/range-parser/package.json +44 -0
- package/backend/node_modules/raw-body/LICENSE +22 -0
- package/backend/node_modules/raw-body/README.md +223 -0
- package/backend/node_modules/raw-body/index.d.ts +85 -0
- package/backend/node_modules/raw-body/index.js +336 -0
- package/backend/node_modules/raw-body/package.json +46 -0
- package/backend/node_modules/router/HISTORY.md +228 -0
- package/backend/node_modules/router/LICENSE +23 -0
- package/backend/node_modules/router/README.md +416 -0
- package/backend/node_modules/router/index.js +748 -0
- package/backend/node_modules/router/lib/layer.js +247 -0
- package/backend/node_modules/router/lib/route.js +242 -0
- package/backend/node_modules/router/package.json +44 -0
- package/backend/node_modules/safe-buffer/LICENSE +21 -0
- package/backend/node_modules/safe-buffer/README.md +584 -0
- package/backend/node_modules/safe-buffer/index.d.ts +187 -0
- package/backend/node_modules/safe-buffer/index.js +65 -0
- package/backend/node_modules/safe-buffer/package.json +51 -0
- package/backend/node_modules/safer-buffer/LICENSE +21 -0
- package/backend/node_modules/safer-buffer/Porting-Buffer.md +268 -0
- package/backend/node_modules/safer-buffer/Readme.md +156 -0
- package/backend/node_modules/safer-buffer/dangerous.js +58 -0
- package/backend/node_modules/safer-buffer/package.json +34 -0
- package/backend/node_modules/safer-buffer/safer.js +77 -0
- package/backend/node_modules/safer-buffer/tests.js +406 -0
- package/backend/node_modules/send/LICENSE +23 -0
- package/backend/node_modules/send/README.md +317 -0
- package/backend/node_modules/send/index.js +997 -0
- package/backend/node_modules/send/package.json +63 -0
- package/backend/node_modules/serve-static/LICENSE +25 -0
- package/backend/node_modules/serve-static/README.md +253 -0
- package/backend/node_modules/serve-static/index.js +208 -0
- package/backend/node_modules/serve-static/package.json +44 -0
- package/backend/node_modules/setprototypeof/LICENSE +13 -0
- package/backend/node_modules/setprototypeof/README.md +31 -0
- package/backend/node_modules/setprototypeof/index.d.ts +2 -0
- package/backend/node_modules/setprototypeof/index.js +17 -0
- package/backend/node_modules/setprototypeof/package.json +38 -0
- package/backend/node_modules/setprototypeof/test/index.js +24 -0
- package/backend/node_modules/side-channel/.editorconfig +9 -0
- package/backend/node_modules/side-channel/.eslintrc +12 -0
- package/backend/node_modules/side-channel/.github/FUNDING.yml +12 -0
- package/backend/node_modules/side-channel/.nycrc +13 -0
- package/backend/node_modules/side-channel/CHANGELOG.md +110 -0
- package/backend/node_modules/side-channel/LICENSE +21 -0
- package/backend/node_modules/side-channel/README.md +61 -0
- package/backend/node_modules/side-channel/index.d.ts +14 -0
- package/backend/node_modules/side-channel/index.js +43 -0
- package/backend/node_modules/side-channel/package.json +85 -0
- package/backend/node_modules/side-channel/test/index.js +104 -0
- package/backend/node_modules/side-channel/tsconfig.json +9 -0
- package/backend/node_modules/side-channel-list/.editorconfig +9 -0
- package/backend/node_modules/side-channel-list/.eslintrc +11 -0
- package/backend/node_modules/side-channel-list/.github/FUNDING.yml +12 -0
- package/backend/node_modules/side-channel-list/.nycrc +13 -0
- package/backend/node_modules/side-channel-list/CHANGELOG.md +36 -0
- package/backend/node_modules/side-channel-list/LICENSE +21 -0
- package/backend/node_modules/side-channel-list/README.md +62 -0
- package/backend/node_modules/side-channel-list/index.d.ts +13 -0
- package/backend/node_modules/side-channel-list/index.js +111 -0
- package/backend/node_modules/side-channel-list/list.d.ts +14 -0
- package/backend/node_modules/side-channel-list/package.json +77 -0
- package/backend/node_modules/side-channel-list/test/index.js +154 -0
- package/backend/node_modules/side-channel-list/tsconfig.json +9 -0
- package/backend/node_modules/side-channel-map/.editorconfig +9 -0
- package/backend/node_modules/side-channel-map/.eslintrc +11 -0
- package/backend/node_modules/side-channel-map/.github/FUNDING.yml +12 -0
- package/backend/node_modules/side-channel-map/.nycrc +13 -0
- package/backend/node_modules/side-channel-map/CHANGELOG.md +22 -0
- package/backend/node_modules/side-channel-map/LICENSE +21 -0
- package/backend/node_modules/side-channel-map/README.md +62 -0
- package/backend/node_modules/side-channel-map/index.d.ts +15 -0
- package/backend/node_modules/side-channel-map/index.js +68 -0
- package/backend/node_modules/side-channel-map/package.json +80 -0
- package/backend/node_modules/side-channel-map/test/index.js +114 -0
- package/backend/node_modules/side-channel-map/tsconfig.json +9 -0
- package/backend/node_modules/side-channel-weakmap/.editorconfig +9 -0
- package/backend/node_modules/side-channel-weakmap/.eslintrc +12 -0
- package/backend/node_modules/side-channel-weakmap/.github/FUNDING.yml +12 -0
- package/backend/node_modules/side-channel-weakmap/.nycrc +13 -0
- package/backend/node_modules/side-channel-weakmap/CHANGELOG.md +28 -0
- package/backend/node_modules/side-channel-weakmap/LICENSE +21 -0
- package/backend/node_modules/side-channel-weakmap/README.md +62 -0
- package/backend/node_modules/side-channel-weakmap/index.d.ts +15 -0
- package/backend/node_modules/side-channel-weakmap/index.js +84 -0
- package/backend/node_modules/side-channel-weakmap/package.json +87 -0
- package/backend/node_modules/side-channel-weakmap/test/index.js +114 -0
- package/backend/node_modules/side-channel-weakmap/tsconfig.json +9 -0
- package/backend/node_modules/sql-escaper/LICENSE +21 -0
- package/backend/node_modules/sql-escaper/README.md +424 -0
- package/backend/node_modules/sql-escaper/lib/index.d.ts +15 -0
- package/backend/node_modules/sql-escaper/lib/index.js +398 -0
- package/backend/node_modules/sql-escaper/lib/index.mjs +305 -0
- package/backend/node_modules/sql-escaper/lib/types.d.ts +5 -0
- package/backend/node_modules/sql-escaper/lib/types.js +2 -0
- package/backend/node_modules/sql-escaper/package.json +81 -0
- package/backend/node_modules/statuses/HISTORY.md +87 -0
- package/backend/node_modules/statuses/LICENSE +23 -0
- package/backend/node_modules/statuses/README.md +139 -0
- package/backend/node_modules/statuses/codes.json +65 -0
- package/backend/node_modules/statuses/index.js +146 -0
- package/backend/node_modules/statuses/package.json +49 -0
- package/backend/node_modules/toidentifier/HISTORY.md +9 -0
- package/backend/node_modules/toidentifier/LICENSE +21 -0
- package/backend/node_modules/toidentifier/README.md +61 -0
- package/backend/node_modules/toidentifier/index.js +32 -0
- package/backend/node_modules/toidentifier/package.json +38 -0
- package/backend/node_modules/type-is/HISTORY.md +292 -0
- package/backend/node_modules/type-is/LICENSE +23 -0
- package/backend/node_modules/type-is/README.md +198 -0
- package/backend/node_modules/type-is/index.js +240 -0
- package/backend/node_modules/type-is/node_modules/content-type/LICENSE +22 -0
- package/backend/node_modules/type-is/node_modules/content-type/README.md +69 -0
- package/backend/node_modules/type-is/node_modules/content-type/dist/index.d.ts +26 -0
- package/backend/node_modules/type-is/node_modules/content-type/dist/index.js +170 -0
- package/backend/node_modules/type-is/node_modules/content-type/dist/index.js.map +1 -0
- package/backend/node_modules/type-is/node_modules/content-type/package.json +52 -0
- package/backend/node_modules/type-is/package.json +51 -0
- package/backend/node_modules/uid-safe/HISTORY.md +61 -0
- package/backend/node_modules/uid-safe/LICENSE +22 -0
- package/backend/node_modules/uid-safe/README.md +77 -0
- package/backend/node_modules/uid-safe/index.js +107 -0
- package/backend/node_modules/uid-safe/package.json +46 -0
- package/backend/node_modules/undici-types/LICENSE +21 -0
- package/backend/node_modules/undici-types/README.md +6 -0
- package/backend/node_modules/undici-types/agent.d.ts +32 -0
- package/backend/node_modules/undici-types/api.d.ts +43 -0
- package/backend/node_modules/undici-types/balanced-pool.d.ts +30 -0
- package/backend/node_modules/undici-types/cache-interceptor.d.ts +179 -0
- package/backend/node_modules/undici-types/cache.d.ts +36 -0
- package/backend/node_modules/undici-types/client-stats.d.ts +15 -0
- package/backend/node_modules/undici-types/client.d.ts +123 -0
- package/backend/node_modules/undici-types/connector.d.ts +36 -0
- package/backend/node_modules/undici-types/content-type.d.ts +21 -0
- package/backend/node_modules/undici-types/cookies.d.ts +30 -0
- package/backend/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
- package/backend/node_modules/undici-types/dispatcher.d.ts +279 -0
- package/backend/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
- package/backend/node_modules/undici-types/errors.d.ts +177 -0
- package/backend/node_modules/undici-types/eventsource.d.ts +66 -0
- package/backend/node_modules/undici-types/fetch.d.ts +211 -0
- package/backend/node_modules/undici-types/formdata.d.ts +108 -0
- package/backend/node_modules/undici-types/global-dispatcher.d.ts +9 -0
- package/backend/node_modules/undici-types/global-origin.d.ts +7 -0
- package/backend/node_modules/undici-types/h2c-client.d.ts +73 -0
- package/backend/node_modules/undici-types/handlers.d.ts +15 -0
- package/backend/node_modules/undici-types/header.d.ts +160 -0
- package/backend/node_modules/undici-types/index.d.ts +91 -0
- package/backend/node_modules/undici-types/interceptors.d.ts +80 -0
- package/backend/node_modules/undici-types/mock-agent.d.ts +68 -0
- package/backend/node_modules/undici-types/mock-call-history.d.ts +111 -0
- package/backend/node_modules/undici-types/mock-client.d.ts +27 -0
- package/backend/node_modules/undici-types/mock-errors.d.ts +12 -0
- package/backend/node_modules/undici-types/mock-interceptor.d.ts +94 -0
- package/backend/node_modules/undici-types/mock-pool.d.ts +27 -0
- package/backend/node_modules/undici-types/package.json +55 -0
- package/backend/node_modules/undici-types/patch.d.ts +29 -0
- package/backend/node_modules/undici-types/pool-stats.d.ts +19 -0
- package/backend/node_modules/undici-types/pool.d.ts +41 -0
- package/backend/node_modules/undici-types/proxy-agent.d.ts +29 -0
- package/backend/node_modules/undici-types/readable.d.ts +68 -0
- package/backend/node_modules/undici-types/retry-agent.d.ts +8 -0
- package/backend/node_modules/undici-types/retry-handler.d.ts +125 -0
- package/backend/node_modules/undici-types/round-robin-pool.d.ts +41 -0
- package/backend/node_modules/undici-types/snapshot-agent.d.ts +109 -0
- package/backend/node_modules/undici-types/socks5-proxy-agent.d.ts +25 -0
- package/backend/node_modules/undici-types/util.d.ts +18 -0
- package/backend/node_modules/undici-types/utility.d.ts +7 -0
- package/backend/node_modules/undici-types/webidl.d.ts +347 -0
- package/backend/node_modules/undici-types/websocket.d.ts +188 -0
- package/backend/node_modules/unpipe/HISTORY.md +4 -0
- package/backend/node_modules/unpipe/LICENSE +22 -0
- package/backend/node_modules/unpipe/README.md +43 -0
- package/backend/node_modules/unpipe/index.js +69 -0
- package/backend/node_modules/unpipe/package.json +27 -0
- package/backend/node_modules/vary/HISTORY.md +39 -0
- package/backend/node_modules/vary/LICENSE +22 -0
- package/backend/node_modules/vary/README.md +101 -0
- package/backend/node_modules/vary/index.js +149 -0
- package/backend/node_modules/vary/package.json +43 -0
- package/backend/node_modules/wrappy/LICENSE +15 -0
- package/backend/node_modules/wrappy/README.md +36 -0
- package/backend/node_modules/wrappy/package.json +29 -0
- package/backend/node_modules/wrappy/wrappy.js +33 -0
- package/backend/package-lock.json +1121 -0
- package/backend/package.json +20 -0
- package/backend/server.js +309 -0
- package/frontend/README.md +16 -0
- package/frontend/eslint.config.js +21 -0
- package/frontend/index.html +13 -0
- package/frontend/package-lock.json +2737 -0
- package/frontend/package.json +31 -0
- package/frontend/public/favicon.svg +1 -0
- package/frontend/public/icons.svg +24 -0
- package/frontend/src/App.css +184 -0
- package/frontend/src/App.jsx +619 -0
- package/frontend/src/assets/hero.png +0 -0
- package/frontend/src/assets/react.svg +1 -0
- package/frontend/src/assets/vite.svg +1 -0
- package/frontend/src/index.css +1 -0
- package/frontend/src/main.jsx +10 -0
- package/frontend/vite.config.js +9 -0
- package/package.json +13 -0
|
@@ -0,0 +1,619 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
|
|
4
|
+
axios.defaults.withCredentials = true;
|
|
5
|
+
const API_URL = 'http://localhost:5000/api';
|
|
6
|
+
|
|
7
|
+
export default function App() {
|
|
8
|
+
// Session Hooks Matrix
|
|
9
|
+
const [user, setUser] = useState(null);
|
|
10
|
+
const [authForm, setAuthForm] = useState({ username: '', password: '' });
|
|
11
|
+
const [isRegistering, setIsRegistering] = useState(false);
|
|
12
|
+
const [registerForm, setRegisterForm] = useState({ username: '', password: '', role: 'Staff' });
|
|
13
|
+
|
|
14
|
+
const [activeTab, setActiveTab] = useState('dashboard');
|
|
15
|
+
const [searchQuery, setSearchQuery] = useState('');
|
|
16
|
+
const [loading, setLoading] = useState(true);
|
|
17
|
+
|
|
18
|
+
// Core States
|
|
19
|
+
const [customers, setCustomers] = useState([]);
|
|
20
|
+
const [vehicles, setVehicles] = useState([]);
|
|
21
|
+
const [rentals, setRentals] = useState([]);
|
|
22
|
+
const [reportData, setReportData] = useState([]);
|
|
23
|
+
|
|
24
|
+
// Dashboard Aggregates State
|
|
25
|
+
const [dashboardMetrics, setDashboardMetrics] = useState({
|
|
26
|
+
totalRevenue: 0, activeRentals: 0, totalCustomers: 0, fleetAvailabilityRate: 0, totalFleetCount: 0,
|
|
27
|
+
recentOperations: [], criticalAlerts: []
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// Controlled Forms
|
|
31
|
+
const [customerForm, setCustomerForm] = useState({ id: '', Full_Name: '', National_ID: '', Phone: '', Email: '', Address: '' });
|
|
32
|
+
const [vehicleForm, setVehicleForm] = useState({ id: '', Plate_Number: '', Brand: '', Model: '', Year: '', Vehicle_Type: '', Purchase_Price: '', Status: 'Available' });
|
|
33
|
+
const [rentalForm, setRentalForm] = useState({ id: '', Customer_Id: '', Vehicle_Id: '', Reservation_Date: '', Date_Start: '', Date_End: '', Days_Reservation: '', Status: 'Pending', Rental_Date_Return: '', Rental_Fee: '', Rental_Status: 'Reserved' });
|
|
34
|
+
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
checkSession();
|
|
37
|
+
}, []);
|
|
38
|
+
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
if (user) fetchData();
|
|
41
|
+
}, [user, activeTab]);
|
|
42
|
+
|
|
43
|
+
const checkSession = async () => {
|
|
44
|
+
try {
|
|
45
|
+
const res = await axios.get(`${API_URL}/auth/session`);
|
|
46
|
+
if (res.data.loggedIn) setUser(res.data.user);
|
|
47
|
+
} catch (err) {
|
|
48
|
+
console.error("No active session terminal found.");
|
|
49
|
+
} finally {
|
|
50
|
+
setLoading(false);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const handleLogin = async (e) => {
|
|
55
|
+
e.preventDefault();
|
|
56
|
+
try {
|
|
57
|
+
const res = await axios.post(`${API_URL}/auth/login`, authForm);
|
|
58
|
+
setUser(res.data.user);
|
|
59
|
+
} catch (err) { alert(err.response?.data?.error || 'Login Error'); }
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const handleRegister = async (e) => {
|
|
63
|
+
e.preventDefault();
|
|
64
|
+
try {
|
|
65
|
+
const res = await axios.post(`${API_URL}/auth/register`, registerForm);
|
|
66
|
+
alert(res.data.message);
|
|
67
|
+
setIsRegistering(false);
|
|
68
|
+
} catch (err) { alert(err.response?.data?.error || 'Registration failed'); }
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const handleLogout = async () => {
|
|
72
|
+
try {
|
|
73
|
+
await axios.post(`${API_URL}/auth/logout`);
|
|
74
|
+
setUser(null);
|
|
75
|
+
setActiveTab('dashboard');
|
|
76
|
+
} catch (err) { console.error(err); }
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const fetchData = async () => {
|
|
80
|
+
try {
|
|
81
|
+
const cRes = await axios.get(`${API_URL}/customers`); setCustomers(cRes.data);
|
|
82
|
+
const vRes = await axios.get(`${API_URL}/vehicles`); setVehicles(vRes.data);
|
|
83
|
+
const rRes = await axios.get(`${API_URL}/rentals`); setRentals(rRes.data);
|
|
84
|
+
const repRes = await axios.get(`${API_URL}/reports/comprehensive`); setReportData(repRes.data);
|
|
85
|
+
|
|
86
|
+
const dashRes = await axios.get(`${API_URL}/dashboard/metrics`);
|
|
87
|
+
setDashboardMetrics(dashRes.data);
|
|
88
|
+
} catch (err) { console.error(err); }
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const handleExportSystemState = () => {
|
|
92
|
+
const jsonString = `data:text/json;charset=utf-8,${encodeURIComponent(
|
|
93
|
+
JSON.stringify({ customers, vehicles, rentals, timestamp: new Date().toISOString() })
|
|
94
|
+
)}`;
|
|
95
|
+
const dlAnchor = document.createElement('a');
|
|
96
|
+
dlAnchor.setAttribute("href", jsonString);
|
|
97
|
+
dlAnchor.setAttribute("download", `VRS_State_Backup_${getTodayMaxLimit()}.json`);
|
|
98
|
+
document.body.appendChild(dlAnchor);
|
|
99
|
+
dlAnchor.click();
|
|
100
|
+
dlAnchor.remove();
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
const saveCustomer = async (e) => {
|
|
104
|
+
e.preventDefault();
|
|
105
|
+
try {
|
|
106
|
+
if (customerForm.id) {
|
|
107
|
+
await axios.put(`${API_URL}/customers/${customerForm.id}`, customerForm);
|
|
108
|
+
} else {
|
|
109
|
+
await axios.post(`${API_URL}/customers`, customerForm);
|
|
110
|
+
}
|
|
111
|
+
setCustomerForm({ id: '', Full_Name: '', National_ID: '', Phone: '', Email: '', Address: '' });
|
|
112
|
+
fetchData();
|
|
113
|
+
} catch (err) { alert(err.response?.data?.error || 'Validation error saving entry.'); }
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
const saveVehicle = async (e) => {
|
|
117
|
+
e.preventDefault();
|
|
118
|
+
try {
|
|
119
|
+
if (vehicleForm.id) {
|
|
120
|
+
await axios.put(`${API_URL}/vehicles/${vehicleForm.id}`, vehicleForm);
|
|
121
|
+
} else {
|
|
122
|
+
await axios.post(`${API_URL}/vehicles`, vehicleForm);
|
|
123
|
+
}
|
|
124
|
+
setVehicleForm({ id: '', Plate_Number: '', Brand: '', Model: '', Year: '', Vehicle_Type: '', Purchase_Price: '', Status: 'Available' });
|
|
125
|
+
fetchData();
|
|
126
|
+
} catch (err) { alert('Failed to save vehicle parameters.'); }
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const saveRental = async (e) => {
|
|
130
|
+
e.preventDefault();
|
|
131
|
+
try {
|
|
132
|
+
const payload = { ...rentalForm, User_Id: user.id };
|
|
133
|
+
if (rentalForm.id) {
|
|
134
|
+
await axios.put(`${API_URL}/rentals/${rentalForm.id}`, payload);
|
|
135
|
+
} else {
|
|
136
|
+
await axios.post(`${API_URL}/rentals`, payload);
|
|
137
|
+
}
|
|
138
|
+
setRentalForm({ id: '', Customer_Id: '', Vehicle_Id: '', Reservation_Date: '', Date_Start: '', Date_End: '', Days_Reservation: '', Status: 'Pending', Rental_Date_Return: '', Rental_Fee: '', Rental_Status: 'Reserved' });
|
|
139
|
+
fetchData();
|
|
140
|
+
} catch (err) { alert(err.response?.data?.error || 'Reservation process aborted.'); }
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
const getTodayMaxLimit = () => new Date().toISOString().split('T')[0];
|
|
144
|
+
|
|
145
|
+
if (loading) return <div className="min-h-screen flex items-center justify-center bg-slate-950 text-white font-mono">Verifying Core Structures...</div>;
|
|
146
|
+
|
|
147
|
+
if (!user) {
|
|
148
|
+
return (
|
|
149
|
+
<div className="min-h-screen flex items-center justify-center bg-slate-950 px-4">
|
|
150
|
+
{!isRegistering ? (
|
|
151
|
+
<form onSubmit={handleLogin} className="bg-slate-900 p-8 rounded-xl shadow-2xl max-w-md w-full border border-slate-800">
|
|
152
|
+
<h2 className="text-3xl font-black text-white text-center tracking-tight mb-2">SwiftWheels</h2>
|
|
153
|
+
<span className="text-[10px] bg-emerald-950 text-emerald-400 font-bold px-3 py-1 rounded-full border border-emerald-800 uppercase tracking-widest block mx-auto w-fit mb-6">VRS System Portal</span>
|
|
154
|
+
<div className="space-y-4">
|
|
155
|
+
<div>
|
|
156
|
+
<label className="block text-slate-400 text-xs font-bold uppercase mb-2">Username</label>
|
|
157
|
+
<input type="text" className="w-full p-3 rounded bg-slate-800 text-white border border-slate-700 focus:outline-none focus:border-emerald-500 font-mono" value={authForm.username} onChange={e => setAuthForm({...authForm, username: e.target.value})} required />
|
|
158
|
+
</div>
|
|
159
|
+
<div>
|
|
160
|
+
<label className="block text-slate-400 text-xs font-bold uppercase mb-2">Password</label>
|
|
161
|
+
<input type="password" className="w-full p-3 rounded bg-slate-800 text-white border border-slate-700 focus:outline-none focus:border-emerald-500 font-mono" value={authForm.password} onChange={e => setAuthForm({...authForm, password: e.target.value})} required />
|
|
162
|
+
</div>
|
|
163
|
+
<button type="submit" className="w-full bg-emerald-600 hover:bg-emerald-500 text-white font-bold py-3.5 rounded-lg shadow-lg transition">Log In Terminal</button>
|
|
164
|
+
<div className="text-center pt-2">
|
|
165
|
+
<button type="button" onClick={() => setIsRegistering(true)} className="text-xs text-slate-400 hover:text-emerald-400 underline">Register Terminal Connection</button>
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
</form>
|
|
169
|
+
) : (
|
|
170
|
+
<form onSubmit={handleRegister} className="bg-slate-900 p-8 rounded-xl shadow-2xl max-w-md w-full border border-slate-800">
|
|
171
|
+
<h2 className="text-3xl font-black text-white text-center tracking-tight mb-6">Register Operator</h2>
|
|
172
|
+
<div className="space-y-4">
|
|
173
|
+
<div>
|
|
174
|
+
<label className="block text-slate-400 text-xs font-bold uppercase mb-2">Desired Username</label>
|
|
175
|
+
<input type="text" className="w-full p-3 rounded bg-slate-800 text-white border border-slate-700 focus:outline-none focus:border-blue-500 font-mono" value={registerForm.username} onChange={e => setRegisterForm({...registerForm, username: e.target.value})} required />
|
|
176
|
+
</div>
|
|
177
|
+
<div>
|
|
178
|
+
<label className="block text-slate-400 text-xs font-bold uppercase mb-2">Password</label>
|
|
179
|
+
<input type="password" className="w-full p-3 rounded bg-slate-800 text-white border border-slate-700 focus:outline-none focus:border-blue-500 font-mono" value={registerForm.password} onChange={e => setRegisterForm({...registerForm, password: e.target.value})} required />
|
|
180
|
+
</div>
|
|
181
|
+
<div>
|
|
182
|
+
<label className="block text-slate-400 text-xs font-bold uppercase mb-2">Role Authority</label>
|
|
183
|
+
<select className="w-full p-3 rounded bg-slate-800 text-white border border-slate-700 font-sans font-semibold" value={registerForm.role} onChange={e => setRegisterForm({...registerForm, role: e.target.value})}>
|
|
184
|
+
<option value="Staff">Standard Staff Operator</option>
|
|
185
|
+
<option value="Manager">Operations Manager</option>
|
|
186
|
+
<option value="Admin">System Administrator</option>
|
|
187
|
+
</select>
|
|
188
|
+
</div>
|
|
189
|
+
<button type="submit" className="w-full bg-blue-600 hover:bg-blue-500 text-white font-bold py-3.5 rounded-lg transition">Create Account</button>
|
|
190
|
+
<div className="text-center pt-2">
|
|
191
|
+
<button type="button" onClick={() => setIsRegistering(false)} className="text-xs text-slate-400 hover:text-blue-400 underline">Return to Login</button>
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
</form>
|
|
195
|
+
)}
|
|
196
|
+
</div>
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return (
|
|
201
|
+
<div className="min-h-screen bg-slate-50 flex flex-col font-sans print:bg-white text-slate-900">
|
|
202
|
+
<header className="bg-slate-900 text-white shadow-md px-6 py-4 flex flex-wrap justify-between items-center gap-4 print:hidden">
|
|
203
|
+
<div>
|
|
204
|
+
<h1 className="text-2xl font-black tracking-tight">SwiftWheels Enterprise</h1>
|
|
205
|
+
<p className="text-xs text-slate-400">Rubavu City Fleet & Reservation Management Subsystem (VRS)</p>
|
|
206
|
+
</div>
|
|
207
|
+
<div className="flex items-center gap-4">
|
|
208
|
+
<div className="text-right">
|
|
209
|
+
<span className="block text-xs text-slate-400">Operator Instance</span>
|
|
210
|
+
<span className="text-sm font-bold text-emerald-400 font-mono">{user.username} ({user.role})</span>
|
|
211
|
+
</div>
|
|
212
|
+
<button onClick={handleLogout} className="bg-rose-600 hover:bg-rose-500 px-4 py-2 rounded-lg text-xs font-bold uppercase tracking-wide transition shadow-md">Disconnect</button>
|
|
213
|
+
</div>
|
|
214
|
+
</header>
|
|
215
|
+
|
|
216
|
+
<div className="bg-white border-b border-slate-200 px-6 py-2.5 flex flex-wrap gap-2 justify-between items-center print:hidden shadow-sm">
|
|
217
|
+
<div className="flex flex-wrap gap-2">
|
|
218
|
+
{['dashboard', 'customers', 'vehicles', 'transactions', 'reports'].map((tab) => (
|
|
219
|
+
<button key={tab} onClick={() => { setActiveTab(tab); setSearchQuery(''); }} className={`px-4 py-2 capitalize font-bold text-xs tracking-wider rounded-lg border transition duration-150 ${activeTab === tab ? 'bg-slate-900 text-white border-slate-950 shadow-sm' : 'text-slate-600 bg-slate-50 hover:bg-slate-100 border-slate-200'}`}>
|
|
220
|
+
{tab === 'transactions' ? 'Reservations & Rental Logs' : tab === 'dashboard' ? 'Analytics Dashboard' : tab}
|
|
221
|
+
</button>
|
|
222
|
+
))}
|
|
223
|
+
</div>
|
|
224
|
+
<button onClick={handleExportSystemState} className="bg-blue-50 border border-blue-200 hover:bg-blue-100 text-blue-700 font-extrabold px-3 py-1.5 rounded-lg text-xs uppercase tracking-wider transition">
|
|
225
|
+
Export System State
|
|
226
|
+
</button>
|
|
227
|
+
</div>
|
|
228
|
+
|
|
229
|
+
<main className="flex-1 p-6 max-w-7xl w-full mx-auto print:p-0">
|
|
230
|
+
{activeTab !== 'reports' && activeTab !== 'dashboard' && (
|
|
231
|
+
<div className="mb-6 print:hidden">
|
|
232
|
+
<input type="text" placeholder={`Global scan across active ${activeTab}...`} className="max-w-md w-full p-3 border border-slate-300 bg-white text-slate-900 rounded-xl shadow-sm text-sm focus:outline-none focus:ring-2 focus:ring-slate-900" value={searchQuery} onChange={e => setSearchQuery(e.target.value)} />
|
|
233
|
+
</div>
|
|
234
|
+
)}
|
|
235
|
+
|
|
236
|
+
{/* --- TAB 0: ADVANCED OPERATIONS ANALYTICS DASHBOARD --- */}
|
|
237
|
+
{activeTab === 'dashboard' && (
|
|
238
|
+
<div className="space-y-6">
|
|
239
|
+
<div className="border-b pb-2">
|
|
240
|
+
<h2 className="text-xl font-black text-slate-900 uppercase">System Analytics Control Desk</h2>
|
|
241
|
+
<p className="text-xs text-slate-500 font-mono">Real-time aggregate tracking metrics derived from the live server backend matrix</p>
|
|
242
|
+
</div>
|
|
243
|
+
|
|
244
|
+
{/* Metrics Dashboard Layout */}
|
|
245
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
|
|
246
|
+
<div className="bg-white border border-slate-200 rounded-xl p-5 shadow-sm">
|
|
247
|
+
<span className="text-[10px] uppercase text-slate-400 font-black tracking-wider block">Gross System Revenue</span>
|
|
248
|
+
<span className="text-2xl font-black text-slate-900 block mt-1 font-mono">{Number(dashboardMetrics.totalRevenue).toLocaleString()} RWF</span>
|
|
249
|
+
<span className="text-xs text-emerald-600 font-bold block mt-2">↑ Active Billings Accumulated</span>
|
|
250
|
+
</div>
|
|
251
|
+
<div className="bg-white border border-slate-200 rounded-xl p-5 shadow-sm">
|
|
252
|
+
<span className="text-[10px] uppercase text-slate-400 font-black tracking-wider block">Active Fleet Deployments</span>
|
|
253
|
+
<span className="text-2xl font-black text-slate-900 block mt-1 font-mono">{dashboardMetrics.activeRentals} / {dashboardMetrics.totalFleetCount}</span>
|
|
254
|
+
<span className="text-xs text-slate-500 block mt-2">Units currently in transit</span>
|
|
255
|
+
</div>
|
|
256
|
+
<div className="bg-white border border-slate-200 rounded-xl p-5 shadow-sm">
|
|
257
|
+
<span className="text-[10px] uppercase text-slate-400 font-black tracking-wider block">Fleet Availability Ratio</span>
|
|
258
|
+
<span className="text-2xl font-black text-slate-900 block mt-1 font-mono">{dashboardMetrics.fleetAvailabilityRate}%</span>
|
|
259
|
+
<div className="w-full bg-slate-100 h-1.5 rounded-full mt-3 overflow-hidden">
|
|
260
|
+
<div className="bg-emerald-500 h-full" style={{ width: `${dashboardMetrics.fleetAvailabilityRate}%` }}></div>
|
|
261
|
+
</div>
|
|
262
|
+
</div>
|
|
263
|
+
<div className="bg-white border border-slate-200 rounded-xl p-5 shadow-sm">
|
|
264
|
+
<span className="text-[10px] uppercase text-slate-400 font-black tracking-wider block">Client Master Profiles</span>
|
|
265
|
+
<span className="text-2xl font-black text-slate-900 block mt-1 font-mono">{dashboardMetrics.totalCustomers} Files</span>
|
|
266
|
+
<span className="text-xs text-indigo-600 font-bold block mt-2">Verified Registrations</span>
|
|
267
|
+
</div>
|
|
268
|
+
</div>
|
|
269
|
+
|
|
270
|
+
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
|
|
271
|
+
{/* Previous System Operations Audit Stream */}
|
|
272
|
+
<div className="bg-white border border-slate-200 rounded-xl p-5 shadow-sm lg:col-span-2">
|
|
273
|
+
<h3 className="text-xs uppercase text-slate-400 font-black tracking-wider mb-4">Chronological Stream of Previous Operations</h3>
|
|
274
|
+
<div className="divide-y divide-slate-100 font-sans">
|
|
275
|
+
{dashboardMetrics.recentOperations.length === 0 ? (
|
|
276
|
+
<p className="text-xs text-slate-400 py-4 italic">No recent system mutations registered.</p>
|
|
277
|
+
) : (
|
|
278
|
+
dashboardMetrics.recentOperations.map((log) => (
|
|
279
|
+
<div key={log.id} className="py-3 flex justify-between items-center gap-2">
|
|
280
|
+
<div>
|
|
281
|
+
<span className="text-sm font-bold text-slate-900 block">{log.Full_Name}</span>
|
|
282
|
+
<span className="text-xs text-slate-500 font-mono">Vehicle Plate Assigned: <span className="font-bold text-slate-700">{log.Plate_Number}</span></span>
|
|
283
|
+
</div>
|
|
284
|
+
<div className="text-right">
|
|
285
|
+
<span className="font-mono text-xs font-bold block text-slate-900">{Number(log.Rental_Fee).toLocaleString()} RWF</span>
|
|
286
|
+
<span className={`inline-block text-[9px] font-black uppercase px-2 py-0.5 rounded ${log.Rental_Status === 'Active' ? 'bg-amber-100 text-amber-800' : 'bg-emerald-100 text-emerald-800'}`}>{log.Rental_Status}</span>
|
|
287
|
+
</div>
|
|
288
|
+
</div>
|
|
289
|
+
))
|
|
290
|
+
)}
|
|
291
|
+
</div>
|
|
292
|
+
</div>
|
|
293
|
+
|
|
294
|
+
{/* Critical Structural Timeline Alerts */}
|
|
295
|
+
<div className="bg-white border border-slate-200 rounded-xl p-5 shadow-sm">
|
|
296
|
+
<h3 className="text-xs uppercase text-rose-500 font-black tracking-wider mb-4">Critical System Overdue Alerts</h3>
|
|
297
|
+
<div className="space-y-3">
|
|
298
|
+
{dashboardMetrics.criticalAlerts.length === 0 ? (
|
|
299
|
+
<div className="p-4 bg-slate-50 border border-slate-100 rounded-lg text-center">
|
|
300
|
+
<span className="text-xs font-semibold text-slate-500 block">✓ Zero Overdue Deadlocks</span>
|
|
301
|
+
<p className="text-[10px] text-slate-400 mt-0.5">All tracked assets conform to contract timeline sheets.</p>
|
|
302
|
+
</div>
|
|
303
|
+
) : (
|
|
304
|
+
dashboardMetrics.criticalAlerts.map((alertItem) => (
|
|
305
|
+
<div key={alertItem.id} className="p-3 bg-rose-50 border border-rose-100 rounded-lg text-xs font-medium">
|
|
306
|
+
<span className="text-rose-900 font-bold block uppercase tracking-tight">Lease Duration Violation</span>
|
|
307
|
+
<p className="text-rose-700 mt-1">Client <span className="font-bold">{alertItem.Full_Name}</span> holds asset <span className="font-mono font-bold bg-white px-1 border border-rose-200">{alertItem.Plate_Number}</span> past contract bounds.</p>
|
|
308
|
+
<span className="text-[10px] text-rose-400 font-mono block mt-1.5">Expected: {new Date(alertItem.Date_End).toLocaleDateString('en-GB')}</span>
|
|
309
|
+
</div>
|
|
310
|
+
))
|
|
311
|
+
)}
|
|
312
|
+
</div>
|
|
313
|
+
</div>
|
|
314
|
+
</div>
|
|
315
|
+
</div>
|
|
316
|
+
)}
|
|
317
|
+
|
|
318
|
+
{/* --- TAB 1: CUSTOMERS ENGINE WORKSPACE --- */}
|
|
319
|
+
{activeTab === 'customers' && (
|
|
320
|
+
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
|
|
321
|
+
<form onSubmit={saveCustomer} className="bg-white p-6 rounded-xl shadow-sm border border-slate-200 h-fit space-y-4">
|
|
322
|
+
<div className="border-b pb-2">
|
|
323
|
+
<h3 className="text-md font-extrabold text-slate-900 tracking-tight">{customerForm.id ? 'Modify Data Profile' : 'Register Customer Profile'}</h3>
|
|
324
|
+
<p className="text-xs text-slate-400">Strict Rwandan criteria constraints applied natively</p>
|
|
325
|
+
</div>
|
|
326
|
+
<div className="space-y-3 text-sm">
|
|
327
|
+
<input type="text" placeholder="Full Name" className="w-full p-2.5 border border-slate-200 rounded-lg focus:ring-1 focus:ring-slate-900" value={customerForm.Full_Name} onChange={e => setCustomerForm({...customerForm, Full_Name: e.target.value})} required />
|
|
328
|
+
|
|
329
|
+
{/* 16-Digit Validation Pattern Rule */}
|
|
330
|
+
<input
|
|
331
|
+
type="text"
|
|
332
|
+
placeholder="National ID (16 Digits)"
|
|
333
|
+
className="w-full p-2.5 border border-slate-200 rounded-lg font-mono focus:ring-1 focus:ring-slate-900"
|
|
334
|
+
maxLength="16"
|
|
335
|
+
pattern="1\d{15}"
|
|
336
|
+
title="Rwandan National ID must be exactly 16 digits starting with 1"
|
|
337
|
+
value={customerForm.National_ID}
|
|
338
|
+
onChange={e => setCustomerForm({...customerForm, National_ID: e.target.value.replace(/\D/g, '')})}
|
|
339
|
+
required
|
|
340
|
+
/>
|
|
341
|
+
|
|
342
|
+
{/* 10-Digit Phone Validation Rule */}
|
|
343
|
+
<input
|
|
344
|
+
type="text"
|
|
345
|
+
placeholder="Primary Phone (e.g., 0788000000)"
|
|
346
|
+
className="w-full p-2.5 border border-slate-200 rounded-lg font-mono focus:ring-1 focus:ring-slate-900"
|
|
347
|
+
maxLength="10"
|
|
348
|
+
pattern="07[2389]\d{7}"
|
|
349
|
+
title="Phone must be a valid 10-digit Rwandan format starting with 072, 073, 078, or 079"
|
|
350
|
+
value={customerForm.Phone}
|
|
351
|
+
onChange={e => setCustomerForm({...customerForm, Phone: e.target.value.replace(/\D/g, '')})}
|
|
352
|
+
required
|
|
353
|
+
/>
|
|
354
|
+
|
|
355
|
+
<input type="email" placeholder="Email Address (Optional)" className="w-full p-2.5 border border-slate-200 rounded-lg focus:ring-1 focus:ring-slate-900" value={customerForm.Email} onChange={e => setCustomerForm({...customerForm, Email: e.target.value})} />
|
|
356
|
+
<textarea placeholder="Physical Address Logistics" className="w-full p-2.5 border border-slate-200 rounded-lg text-xs focus:ring-1 focus:ring-slate-900" rows="2" value={customerForm.Address} onChange={e => setCustomerForm({...customerForm, Address: e.target.value})}></textarea>
|
|
357
|
+
<div className="flex gap-2 pt-2">
|
|
358
|
+
<button type="submit" className="flex-1 bg-emerald-600 text-white py-2.5 rounded-lg font-bold hover:bg-emerald-500 shadow-sm transition">Commit Record</button>
|
|
359
|
+
{customerForm.id && <button type="button" className="bg-slate-200 text-slate-700 px-3 rounded-lg text-xs font-semibold" onClick={() => setCustomerForm({id:'',Full_Name:'',National_ID:'',Phone:'',Email:'',Address:''})}>Reset</button>}
|
|
360
|
+
</div>
|
|
361
|
+
</div>
|
|
362
|
+
</form>
|
|
363
|
+
<div className="lg:col-span-2 bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden">
|
|
364
|
+
<table className="w-full text-left border-collapse">
|
|
365
|
+
<thead>
|
|
366
|
+
<tr className="bg-slate-900 text-white text-xs font-bold uppercase tracking-wider">
|
|
367
|
+
<th className="p-4">Customer Profiling</th><th className="p-4">National ID Code</th><th className="p-4">Phone Identity</th><th className="p-4 text-center">Actions</th>
|
|
368
|
+
</tr>
|
|
369
|
+
</thead>
|
|
370
|
+
<tbody className="divide-y divide-slate-100 text-sm text-slate-600">
|
|
371
|
+
{customers.filter(c => c.Full_Name.toLowerCase().includes(searchQuery.toLowerCase()) || c.National_ID.includes(searchQuery)).map(c => (
|
|
372
|
+
<tr key={c.id} className="hover:bg-slate-50 transition">
|
|
373
|
+
<td className="p-4 font-bold text-slate-900">{c.Full_Name}</td><td className="p-4 font-mono text-xs">{c.National_ID}</td><td className="p-4 font-mono text-xs">{c.Phone}</td>
|
|
374
|
+
<td className="p-4 space-x-3 text-center text-xs font-bold">
|
|
375
|
+
<button className="text-indigo-600 hover:text-indigo-900 uppercase" onClick={() => setCustomerForm(c)}>Edit</button>
|
|
376
|
+
<button className="text-rose-600 hover:text-rose-900 uppercase" onClick={async () => { if(confirm('Purge client row?')) { await axios.delete(`${API_URL}/customers/${c.id}`); fetchData(); } }}>Delete</button>
|
|
377
|
+
</td>
|
|
378
|
+
</tr>
|
|
379
|
+
))}
|
|
380
|
+
</tbody>
|
|
381
|
+
</table>
|
|
382
|
+
</div>
|
|
383
|
+
</div>
|
|
384
|
+
)}
|
|
385
|
+
|
|
386
|
+
{/* --- TAB 2: VEHICLE FLEET MANAGEMENT STAGE --- */}
|
|
387
|
+
{activeTab === 'vehicles' && (
|
|
388
|
+
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
|
|
389
|
+
<form onSubmit={saveVehicle} className="bg-white p-6 rounded-xl shadow-sm border border-slate-200 h-fit space-y-4">
|
|
390
|
+
<div className="border-b pb-2">
|
|
391
|
+
<h3 className="text-md font-extrabold text-slate-900 tracking-tight">{vehicleForm.id ? 'Modify Fleet Inventory Row' : 'Introduce Fleet Asset Line'}</h3>
|
|
392
|
+
</div>
|
|
393
|
+
<div className="space-y-3 text-sm">
|
|
394
|
+
<input type="text" placeholder="Registration Plate Number" className="w-full p-2.5 border border-slate-200 rounded-lg focus:ring-1 focus:ring-slate-900 font-mono uppercase" value={vehicleForm.Plate_Number} onChange={e => setVehicleForm({...vehicleForm, Plate_Number: e.target.value})} required />
|
|
395
|
+
<input type="text" placeholder="Brand Manufacturer" className="w-full p-2.5 border border-slate-200 rounded-lg focus:ring-1 focus:ring-slate-900" value={vehicleForm.Brand} onChange={e => setVehicleForm({...vehicleForm, Brand: e.target.value})} required />
|
|
396
|
+
<input type="text" placeholder="Model Designation Variant" className="w-full p-2.5 border border-slate-200 rounded-lg focus:ring-1 focus:ring-slate-900" value={vehicleForm.Model} onChange={e => setVehicleForm({...vehicleForm, Model: e.target.value})} required />
|
|
397
|
+
<input type="number" placeholder="Production/Release Year" className="w-full p-2.5 border border-slate-200 rounded-lg focus:ring-1 focus:ring-slate-900 font-mono" value={vehicleForm.Year} onChange={e => setVehicleForm({...vehicleForm, Year: e.target.value})} required />
|
|
398
|
+
<input type="text" placeholder="Vehicle Classification" className="w-full p-2.5 border border-slate-200 rounded-lg focus:ring-1 focus:ring-slate-900" value={vehicleForm.Vehicle_Type} onChange={e => setVehicleForm({...vehicleForm, Vehicle_Type: e.target.value})} required />
|
|
399
|
+
<input type="number" placeholder="Purchase Cost (RWF)" className="w-full p-2.5 border border-slate-200 rounded-lg focus:ring-1 focus:ring-slate-900 font-mono" value={vehicleForm.Purchase_Price} onChange={e => setVehicleForm({...vehicleForm, Purchase_Price: e.target.value})} required />
|
|
400
|
+
<select className="w-full p-2.5 border border-slate-200 rounded-lg bg-white font-semibold" value={vehicleForm.Status} onChange={e => setVehicleForm({...vehicleForm, Status: e.target.value})}>
|
|
401
|
+
<option value="Available">Available for Lease</option><option value="Reserved">Status Blocked: Reserved</option><option value="Rented">Active Lease: Rented Out</option><option value="Maintenance">Maintenance Block</option>
|
|
402
|
+
</select>
|
|
403
|
+
<div className="flex gap-2 pt-2">
|
|
404
|
+
<button type="submit" className="flex-1 bg-emerald-600 text-white py-2.5 rounded-lg font-bold hover:bg-emerald-500 transition">Commit Fleet Asset</button>
|
|
405
|
+
{vehicleForm.id && <button type="button" className="bg-slate-200 text-slate-700 px-3 rounded-lg text-xs font-semibold" onClick={() => setVehicleForm({id:'',Plate_Number:'',Brand:'',Model:'',Year:'',Vehicle_Type:'',Purchase_Price:'',Status:'Available'})}>Cancel</button>}
|
|
406
|
+
</div>
|
|
407
|
+
</div>
|
|
408
|
+
</form>
|
|
409
|
+
<div className="lg:col-span-2 bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden">
|
|
410
|
+
<table className="w-full text-left border-collapse">
|
|
411
|
+
<thead>
|
|
412
|
+
<tr className="bg-slate-900 text-white text-xs font-bold uppercase tracking-wider">
|
|
413
|
+
<th className="p-4">Plate Code</th><th className="p-4">Car Details Matrix</th><th className="p-4">Status</th><th className="p-4 text-center">Action Framework</th>
|
|
414
|
+
</tr>
|
|
415
|
+
</thead>
|
|
416
|
+
<tbody className="divide-y divide-slate-100 text-sm text-slate-600">
|
|
417
|
+
{vehicles.filter(v => v.Plate_Number.toLowerCase().includes(searchQuery.toLowerCase()) || v.Brand.toLowerCase().includes(searchQuery.toLowerCase())).map(v => (
|
|
418
|
+
<tr key={v.id} className="hover:bg-slate-50 transition">
|
|
419
|
+
<td className="p-4 font-mono font-black text-slate-900 tracking-wider bg-slate-50">{v.Plate_Number}</td><td className="p-4 font-medium text-slate-800">{v.Brand} {v.Model} ({v.Year}) <span className="text-xs text-slate-400 block italic">{v.Vehicle_Type} - Valued: {Number(v.Purchase_Price).toLocaleString()} RWF</span></td>
|
|
420
|
+
<td className="p-4"><span className={`px-2.5 py-1 rounded-md text-xs font-bold uppercase ${v.Status === 'Available' ? 'bg-emerald-100 text-emerald-800' : 'bg-amber-100 text-amber-800'}`}>{v.Status}</span></td>
|
|
421
|
+
<td className="p-4 space-x-3 text-center text-xs font-bold">
|
|
422
|
+
<button className="text-indigo-600 hover:text-indigo-900 uppercase" onClick={() => setVehicleForm(v)}>Edit</button>
|
|
423
|
+
<button className="text-rose-600 hover:text-rose-900 uppercase" onClick={async () => { if(confirm('Scrub vehicle?')) { await axios.delete(`${API_URL}/vehicles/${v.id}`); fetchData(); } }}>Delete</button>
|
|
424
|
+
</td>
|
|
425
|
+
</tr>
|
|
426
|
+
))}
|
|
427
|
+
</tbody>
|
|
428
|
+
</table>
|
|
429
|
+
</div>
|
|
430
|
+
</div>
|
|
431
|
+
)}
|
|
432
|
+
|
|
433
|
+
{/* --- TAB 3: RESERVATIONS AND TRANSACTION BOUNDS --- */}
|
|
434
|
+
{activeTab === 'transactions' && (
|
|
435
|
+
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
|
|
436
|
+
<form onSubmit={saveRental} className="bg-white p-6 rounded-xl shadow-sm border border-slate-200 h-fit space-y-4">
|
|
437
|
+
<div className="border-b pb-2">
|
|
438
|
+
<h3 className="text-md font-extrabold text-slate-900 tracking-tight">{rentalForm.id ? 'Adjust Transaction Parameters' : 'Authorize Booking Ticket'}</h3>
|
|
439
|
+
<p className="text-xs text-slate-400">Future calendar configurations are blocked dynamically</p>
|
|
440
|
+
</div>
|
|
441
|
+
<div className="space-y-3 text-sm">
|
|
442
|
+
<div>
|
|
443
|
+
<label className="text-[10px] uppercase font-extrabold text-slate-400 block mb-1">Target Customer Profile</label>
|
|
444
|
+
<select className="w-full p-2.5 border border-slate-200 rounded-lg bg-white" value={rentalForm.Customer_Id} onChange={e => setRentalForm({...rentalForm, Customer_Id: e.target.value})} required>
|
|
445
|
+
<option value="">Select Target Client Profile</option>
|
|
446
|
+
{customers.map(c => <option key={c.id} value={c.id}>{c.Full_Name} ({c.National_ID})</option>)}
|
|
447
|
+
</select>
|
|
448
|
+
</div>
|
|
449
|
+
<div>
|
|
450
|
+
<label className="text-[10px] uppercase font-extrabold text-slate-400 block mb-1">Lease Vehicle Allocation</label>
|
|
451
|
+
<select className="w-full p-2.5 border border-slate-200 rounded-lg bg-white" value={rentalForm.Vehicle_Id} onChange={e => setRentalForm({...rentalForm, Vehicle_Id: e.target.value})} required>
|
|
452
|
+
<option value="">Assign Vehicle Fleet Asset</option>
|
|
453
|
+
{vehicles.map(v => <option key={v.id} value={v.id}>{v.Plate_Number} - {v.Brand} {v.Model}</option>)}
|
|
454
|
+
</select>
|
|
455
|
+
</div>
|
|
456
|
+
|
|
457
|
+
{/* Dynamically Clamped Inputs via max={} Property */}
|
|
458
|
+
<div className="grid grid-cols-1 gap-2">
|
|
459
|
+
<div>
|
|
460
|
+
<label className="text-[10px] font-bold text-slate-500 uppercase">Reservation Logging Date</label>
|
|
461
|
+
<input
|
|
462
|
+
type="date"
|
|
463
|
+
className="w-full p-2 border border-slate-200 rounded-lg font-mono text-xs shadow-sm"
|
|
464
|
+
max={getTodayMaxLimit()}
|
|
465
|
+
value={rentalForm.Reservation_Date}
|
|
466
|
+
onChange={e => setRentalForm({...rentalForm, Reservation_Date: e.target.value})}
|
|
467
|
+
required
|
|
468
|
+
/>
|
|
469
|
+
</div>
|
|
470
|
+
<div>
|
|
471
|
+
<label className="text-[10px] font-bold text-slate-500 uppercase">Lease Start Date</label>
|
|
472
|
+
<input
|
|
473
|
+
type="date"
|
|
474
|
+
className="w-full p-2 border border-slate-200 rounded-lg font-mono text-xs shadow-sm"
|
|
475
|
+
max={getTodayMaxLimit()}
|
|
476
|
+
value={rentalForm.Date_Start}
|
|
477
|
+
onChange={e => setRentalForm({...rentalForm, Date_Start: e.target.value})}
|
|
478
|
+
required
|
|
479
|
+
/>
|
|
480
|
+
</div>
|
|
481
|
+
<div>
|
|
482
|
+
<label className="text-[10px] font-bold text-slate-500 uppercase">Lease Scheduled End Date</label>
|
|
483
|
+
<input type="date" className="w-full p-2 border border-slate-200 rounded-lg font-mono text-xs shadow-sm" value={rentalForm.Date_End} onChange={e => setRentalForm({...rentalForm, Date_End: e.target.value})} required />
|
|
484
|
+
</div>
|
|
485
|
+
</div>
|
|
486
|
+
|
|
487
|
+
<div className="grid grid-cols-2 gap-2">
|
|
488
|
+
<div>
|
|
489
|
+
<label className="text-[10px] font-bold text-slate-500 uppercase">Days Count</label>
|
|
490
|
+
<input type="number" className="w-full p-2 border border-slate-200 rounded-lg font-mono" value={rentalForm.Days_Reservation} onChange={e => setRentalForm({...rentalForm, Days_Reservation: e.target.value})} required />
|
|
491
|
+
</div>
|
|
492
|
+
<div>
|
|
493
|
+
<label className="text-[10px] font-bold text-slate-500 uppercase">Invoice Fee (RWF)</label>
|
|
494
|
+
<input type="number" className="w-full p-2 border border-slate-200 rounded-lg font-mono" value={rentalForm.Rental_Fee} onChange={e => setRentalForm({...rentalForm, Rental_Fee: e.target.value})} required />
|
|
495
|
+
</div>
|
|
496
|
+
</div>
|
|
497
|
+
<div className="grid grid-cols-2 gap-2">
|
|
498
|
+
<div>
|
|
499
|
+
<label className="text-[10px] font-bold text-slate-500 uppercase">Booking Base Status</label>
|
|
500
|
+
<select className="w-full p-2 text-xs border border-slate-200 bg-white font-semibold rounded-lg" value={rentalForm.Status} onChange={e => setRentalForm({...rentalForm, Status: e.target.value})}>
|
|
501
|
+
<option value="Pending">Pending</option><option value="Confirmed">Confirmed</option><option value="Cancelled">Cancelled</option>
|
|
502
|
+
</select>
|
|
503
|
+
</div>
|
|
504
|
+
<div>
|
|
505
|
+
<label className="text-[10px] font-bold text-slate-500 uppercase">Lease Status</label>
|
|
506
|
+
<select className="w-full p-2 text-xs border border-slate-200 bg-white font-semibold rounded-lg" value={rentalForm.Rental_Status} onChange={e => setRentalForm({...rentalForm, Rental_Status: e.target.value})}>
|
|
507
|
+
<option value="Reserved">Reserved</option><option value="Active">Active (Checked-Out)</option><option value="Returned">Returned</option><option value="Overdue">Overdue</option>
|
|
508
|
+
</select>
|
|
509
|
+
</div>
|
|
510
|
+
</div>
|
|
511
|
+
<div>
|
|
512
|
+
<label className="text-[10px] font-bold text-slate-500 uppercase block mb-1">Actual Physical Return Date</label>
|
|
513
|
+
<input type="date" className="w-full p-2 border border-slate-200 rounded-lg font-mono text-xs" value={rentalForm.Rental_Date_Return} onChange={e => setRentalForm({...rentalForm, Rental_Date_Return: e.target.value})} />
|
|
514
|
+
</div>
|
|
515
|
+
<div className="flex gap-2 pt-2">
|
|
516
|
+
<button type="submit" className="flex-1 bg-emerald-600 text-white py-2.5 rounded-lg font-bold hover:bg-emerald-500 transition">Post Transaction Logs</button>
|
|
517
|
+
{rentalForm.id && <button type="button" className="bg-slate-200 text-slate-700 px-3 rounded-lg text-xs font-semibold" onClick={() => setRentalForm({id:'',Customer_Id:'',Vehicle_Id:'',Reservation_Date:'',Date_Start:'',Date_End:'',Days_Reservation:'',Status:'Pending',Rental_Date_Return:'',Rental_Fee:'',Rental_Status:'Reserved'})}>Clear</button>}
|
|
518
|
+
</div>
|
|
519
|
+
</div>
|
|
520
|
+
</form>
|
|
521
|
+
<div className="lg:col-span-2 bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden">
|
|
522
|
+
<table className="w-full text-left border-collapse">
|
|
523
|
+
<thead>
|
|
524
|
+
<tr className="bg-slate-900 text-white text-xs font-bold uppercase tracking-wider">
|
|
525
|
+
<th className="p-4">Customer</th><th className="p-4">Vehicle Assigned</th><th className="p-4">Lease Fee</th><th className="p-4 text-center">Actions</th>
|
|
526
|
+
</tr>
|
|
527
|
+
</thead>
|
|
528
|
+
<tbody className="divide-y divide-slate-100 text-sm text-slate-600">
|
|
529
|
+
{rentals.map(r => (
|
|
530
|
+
<tr key={r.id} className="hover:bg-slate-50 transition">
|
|
531
|
+
<td className="p-4 font-bold text-slate-900">{r.Customer_Name}</td>
|
|
532
|
+
<td className="p-4 font-mono font-bold text-xs text-slate-700 bg-slate-50">{r.Plate_Number} <span className="text-[10px] font-sans font-medium text-slate-400 block">{r.Brand} {r.Model}</span></td>
|
|
533
|
+
<td className="p-4 font-bold text-slate-900 font-mono text-xs">{Number(r.Rental_Fee).toLocaleString()} RWF</td>
|
|
534
|
+
<td className="p-4 space-x-3 text-center text-xs font-bold">
|
|
535
|
+
<button className="text-indigo-600 hover:text-indigo-900 uppercase" onClick={() => {
|
|
536
|
+
const formatStr = (d) => d ? d.split('T')[0] : '';
|
|
537
|
+
setRentalForm({
|
|
538
|
+
...r,
|
|
539
|
+
Reservation_Date: formatStr(r.Reservation_Date),
|
|
540
|
+
Date_Start: formatStr(r.Date_Start),
|
|
541
|
+
Date_End: formatStr(r.Date_End),
|
|
542
|
+
Rental_Date_Return: formatStr(r.Rental_Date_Return)
|
|
543
|
+
});
|
|
544
|
+
}}>Modify</button>
|
|
545
|
+
<button className="text-rose-600 hover:text-rose-900 uppercase" onClick={async () => { if(confirm('Scrub log item?')) { await axios.delete(`${API_URL}/rentals/${r.id}`); fetchData(); } }}>Delete</button>
|
|
546
|
+
</td>
|
|
547
|
+
</tr>
|
|
548
|
+
))}
|
|
549
|
+
</tbody>
|
|
550
|
+
</table>
|
|
551
|
+
</div>
|
|
552
|
+
</div>
|
|
553
|
+
)}
|
|
554
|
+
|
|
555
|
+
{/* --- TAB 4: COMPREHENSIVE REVERSIBLE AUDITING SHEET --- */}
|
|
556
|
+
{activeTab === 'reports' && (
|
|
557
|
+
<div className="bg-white p-6 rounded-xl shadow-md border border-slate-200">
|
|
558
|
+
<div className="flex flex-wrap justify-between items-center mb-6 gap-4 border-b pb-4 print:mb-2 print:pb-2">
|
|
559
|
+
<div>
|
|
560
|
+
<h2 className="text-xl font-black text-slate-900 uppercase tracking-tight">Customer Vehicle Reservation-Rental Report</h2>
|
|
561
|
+
<p className="text-xs text-slate-500 font-mono">SwiftWheels Enterprise Cross-Join Mapping Audit File</p>
|
|
562
|
+
</div>
|
|
563
|
+
<button onClick={() => window.print()} className="bg-slate-900 text-white font-extrabold py-2.5 px-5 rounded-lg shadow-sm text-xs uppercase tracking-wider print:hidden">Print System Report Document</button>
|
|
564
|
+
</div>
|
|
565
|
+
<div className="overflow-x-auto">
|
|
566
|
+
<table className="w-full text-left border-collapse text-xs print:text-[9px]">
|
|
567
|
+
<thead>
|
|
568
|
+
<tr className="bg-slate-900 text-white font-bold uppercase text-[10px] print:text-[8px]">
|
|
569
|
+
<th className="p-2 border border-slate-700">Customer Details</th>
|
|
570
|
+
<th className="p-2 border border-slate-700">Vehicle Metadata</th>
|
|
571
|
+
<th className="p-2 border border-slate-700">Booking Specs</th>
|
|
572
|
+
<th className="p-2 border border-slate-700">Financial Logistics</th>
|
|
573
|
+
</tr>
|
|
574
|
+
</thead>
|
|
575
|
+
<tbody className="divide-y divide-slate-300 bg-white">
|
|
576
|
+
{reportData.map((row, idx) => (
|
|
577
|
+
<tr key={idx} className="font-medium border">
|
|
578
|
+
<td className="p-2 border border-slate-200">
|
|
579
|
+
<div className="font-extrabold text-slate-900 text-sm">{row.Full_Name}</div>
|
|
580
|
+
<div className="font-mono text-slate-500">ID: {row.National_ID}</div>
|
|
581
|
+
<div className="font-mono text-slate-500">Tel: {row.Phone}</div>
|
|
582
|
+
</td>
|
|
583
|
+
<td className="p-2 border border-slate-200 bg-slate-50">
|
|
584
|
+
<div className="font-mono font-black text-slate-900 tracking-wider">{row.Plate_Number}</div>
|
|
585
|
+
<div className="font-bold text-slate-700">{row.Brand} — {row.Model}</div>
|
|
586
|
+
</td>
|
|
587
|
+
<td className="p-2 border border-slate-200">
|
|
588
|
+
<div className="font-mono">Logged: {new Date(row.Reservation_Date).toLocaleDateString('en-GB')}</div>
|
|
589
|
+
</td>
|
|
590
|
+
<td className="p-2 border border-slate-200">
|
|
591
|
+
<div className="font-medium text-slate-700">Timeline: <span className="font-mono font-bold text-slate-900">{new Date(row.Date_Start).toLocaleDateString('en-GB')}</span> to <span className="font-mono font-bold text-slate-900">{new Date(row.Date_End).toLocaleDateString('en-GB')}</span></div>
|
|
592
|
+
<div className="mt-1 flex items-center justify-between">
|
|
593
|
+
<span>Status: <span className="font-black text-slate-900 uppercase">{row.Rental_Status}</span></span>
|
|
594
|
+
<span className="font-mono font-black text-emerald-700 text-sm">{Number(row.Rental_Fee).toLocaleString()} RWF</span>
|
|
595
|
+
</div>
|
|
596
|
+
</td>
|
|
597
|
+
</tr>
|
|
598
|
+
))}
|
|
599
|
+
</tbody>
|
|
600
|
+
</table>
|
|
601
|
+
</div>
|
|
602
|
+
|
|
603
|
+
{/* National Exam Documentation Identity Stamp Section */}
|
|
604
|
+
<div className="hidden print:flex flex-wrap justify-between items-center mt-12 pt-6 border-t border-dashed border-slate-400 text-[10px] font-mono text-slate-500">
|
|
605
|
+
<div>
|
|
606
|
+
<p>System Analyst Signature Stamp: _______________________</p>
|
|
607
|
+
<p className="mt-1">SwiftWheels Enterprise Authorized Operations Ledger (Rubavu City)</p>
|
|
608
|
+
</div>
|
|
609
|
+
<div className="text-right">
|
|
610
|
+
<p>Document ID Code: VRS-COMP-REPORT-2026</p>
|
|
611
|
+
<p className="mt-1 font-bold text-slate-900">Developer Candidate Name Signoff: NIYONKURU SENGA AMANI</p>
|
|
612
|
+
</div>
|
|
613
|
+
</div>
|
|
614
|
+
</div>
|
|
615
|
+
)}
|
|
616
|
+
</main>
|
|
617
|
+
</div>
|
|
618
|
+
);
|
|
619
|
+
}
|
|
Binary file
|