From 1f0ce7dd3e38339c7b90877a3bc8151e7e0305b6 Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Mon, 23 Sep 2024 14:21:38 -0300 Subject: [PATCH 01/22] feat: bumping npm and jar mockingbird into moclojer-app deps.edn has a local reference for the .jar file for mockingbird, so you'll need to build the jar and reference your own local path. --- deps.edn | 2 + package-lock.json | 4231 +++++++++++++++++++--------- package.json | 3 +- src/front/app/dashboard/views.cljs | 11 +- 4 files changed, 2948 insertions(+), 1299 deletions(-) diff --git a/deps.edn b/deps.edn index 1882ff1e..e21e8c28 100644 --- a/deps.edn +++ b/deps.edn @@ -8,6 +8,8 @@ metosin/reitit-frontend {:mvn/version "0.5.18"} lambdaisland/fetch {:mvn/version "1.1.60"} + moclojer/mockingbird {:local/root "../mockingbird/target/mockingbird-0.0.1.jar"} + ;; back com.moclojer/components {:mvn/version "0.1.0"} com.cognitect.aws/api {:mvn/version "0.8.561"} diff --git a/package-lock.json b/package-lock.json index cd721b80..5c8c4069 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,8 +25,9 @@ "flowbite-react": "^0.4.7", "js-cookie": "^3.0.5", "js-yaml": "^4.1.0", + "mockingbird-lib": "^0.0.8", "postcss-focus-visible": "^8.0.2", - "puppeteer": "^20.7.2", + "puppeteer": "^23.4.0", "react": "^18.2.0", "react-dom": "18.2.0", "react-refresh": "^0.14.0", @@ -981,6 +982,15 @@ "postcss-selector-parser": "^6.0.10" } }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@floating-ui/core": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.3.0.tgz", @@ -1020,14 +1030,111 @@ "react-dom": ">=16.8.0" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -1042,22 +1149,22 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", - "dev": true, - "peer": true, + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -1066,12 +1173,13 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@lezer/common": { @@ -1159,6 +1267,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -1169,37 +1287,32 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.1.tgz", - "integrity": "sha512-H43VosMzywHCcYcgv0GXXopvwnV21Ud9g2aXbPlQUJj1Xcz9V0wBwHeFz6saFhx/3VKisZfI1GEKEOhQCau7Vw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.4.0.tgz", + "integrity": "sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g==", + "license": "Apache-2.0", "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.2.1", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.1" + "debug": "^4.3.6", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.4.0", + "semver": "^7.6.3", + "tar-fs": "^3.0.6", + "unbzip2-stream": "^1.4.3", + "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" }, "engines": { - "node": ">=16.3.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=18" } }, "node_modules/@puppeteer/browsers/node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -1210,9 +1323,10 @@ } }, "node_modules/@puppeteer/browsers/node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -1230,6 +1344,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", "engines": { "node": ">=12" } @@ -1629,6 +1744,12 @@ "react-dom": "^18.0.0" } }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "license": "MIT" + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -1650,10 +1771,11 @@ "license": "MIT" }, "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1666,34 +1788,11 @@ "@types/ms": "*" } }, - "node_modules/@types/eslint": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.0.tgz", - "integrity": "sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==", - "dev": true, - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true, - "peer": true + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" }, "node_modules/@types/js-levenshtein": { "version": "1.1.1", @@ -1701,11 +1800,10 @@ "license": "MIT" }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true, - "peer": true + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" }, "node_modules/@types/ms": { "version": "0.7.31", @@ -1766,9 +1864,10 @@ } }, "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" @@ -1855,11 +1954,10 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "peer": true, + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "license": "MIT", "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -1869,29 +1967,25 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true, - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true, - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true, - "peer": true + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", @@ -1902,28 +1996,25 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true, - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "peer": true, + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -1932,8 +2023,7 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } @@ -1942,34 +2032,31 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true, - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "peer": true, + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "peer": true, + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -1977,26 +2064,24 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "peer": true, + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "peer": true, + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -2005,16 +2090,59 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "peer": true, + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "license": "MIT", + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "license": "MIT", + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "license": "MIT", + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, "node_modules/@xmldom/xmldom": { "version": "0.8.6", "dev": true, @@ -2027,15 +2155,13 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "peer": true + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "peer": true + "license": "Apache-2.0" }, "node_modules/@zxing/text-encoding": { "version": "0.9.0", @@ -2048,6 +2174,7 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -2067,28 +2194,20 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peer": true, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "license": "MIT", "peerDependencies": { "acorn": "^8" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -2115,8 +2234,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peer": true, + "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } @@ -2212,18 +2330,21 @@ } }, "node_modules/asn1.js": { - "version": "5.4.1", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "minimalistic-assert": "^1.0.0" } }, "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true, "license": "MIT" }, @@ -2253,6 +2374,7 @@ "version": "0.13.4", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -2304,10 +2426,63 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/b4a": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", + "license": "Apache-2.0" + }, "node_modules/balanced-match": { "version": "1.0.2", "license": "MIT" }, + "node_modules/bare-events": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", + "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/bare-fs": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", + "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.0.0", + "bare-path": "^2.0.0", + "bare-stream": "^2.0.0" + } + }, + "node_modules/bare-os": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", + "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/bare-path": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^2.1.0" + } + }, + "node_modules/bare-stream": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.3.0.tgz", + "integrity": "sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "b4a": "^1.6.6", + "streamx": "^2.20.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "funding": [ @@ -2331,14 +2506,16 @@ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true, + "license": "MIT", "engines": { "node": "^4.5.0 || >= 5.9" } }, "node_modules/basic-ftp": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", - "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -2352,6 +2529,7 @@ }, "node_modules/bl": { "version": "4.1.0", + "dev": true, "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -2361,6 +2539,7 @@ }, "node_modules/bl/node_modules/buffer": { "version": "5.7.1", + "dev": true, "funding": [ { "type": "github", @@ -2383,6 +2562,7 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.0", + "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -2399,20 +2579,22 @@ "license": "MIT" }, "node_modules/body-parser": { - "version": "1.20.1", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", + "qs": "6.13.0", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -2449,10 +2631,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -2507,32 +2691,39 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.1", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dev": true, "license": "ISC", "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", + "elliptic": "^6.5.5", + "hash-base": "~3.0", "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" } }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", + "node_modules/browserify-sign/node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, "node_modules/browserify-zlib": { @@ -2544,10 +2735,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "funding": [ { "type": "opencollective", @@ -2556,13 +2746,18 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -2585,6 +2780,7 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", "engines": { "node": "*" } @@ -2593,8 +2789,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "peer": true + "license": "MIT" }, "node_modules/buffer-xor": { "version": "1.0.3", @@ -2620,6 +2815,8 @@ }, "node_modules/bytes": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "license": "MIT", "engines": { @@ -2627,12 +2824,20 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2667,10 +2872,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001478", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz", - "integrity": "sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==", - "dev": true, + "version": "1.0.30001660", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", + "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", "funding": [ { "type": "opencollective", @@ -2684,7 +2888,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", @@ -2741,27 +2946,23 @@ "node": ">= 6" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "peer": true, "engines": { "node": ">=6.0" } }, "node_modules/chromium-bidi": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.12.tgz", - "integrity": "sha512-yl0ngMHtYUGJa2G0lkcbPvbnUZ9WMQyMNSfYmlrGD1nHRNyI9KOGw3dOaofFugXHHToneUaSmF9iUdgCBamCjA==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.5.tgz", + "integrity": "sha512-RuLrmzYrxSb0s9SgpB+QN5jJucPduZQ/9SIe76MDxYJuecPW5mxMdacJ1f4EtgiV+R0p3sCkznTMvH0MPGFqjA==", + "license": "Apache-2.0", "dependencies": { - "mitt": "3.0.0" + "mitt": "3.0.1", + "urlpattern-polyfill": "10.0.0", + "zod": "3.23.8" }, "peerDependencies": { "devtools-protocol": "*" @@ -2829,6 +3030,20 @@ "node": ">=0.8" } }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/codemirror": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", @@ -2863,12 +3078,17 @@ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "peer": true + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", @@ -2911,7 +3131,9 @@ "license": "MIT" }, "node_modules/content-type": { - "version": "1.0.4", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "license": "MIT", "engines": { @@ -2936,6 +3158,7 @@ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -2948,6 +3171,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, "dependencies": { "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -2965,6 +3189,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -3344,9 +3569,10 @@ } }, "node_modules/data-uri-to-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz", - "integrity": "sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "license": "MIT", "engines": { "node": ">= 14" } @@ -3365,10 +3591,12 @@ "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" }, "node_modules/debug": { - "version": "4.3.4", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3413,11 +3641,6 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, "node_modules/defaults": { "version": "1.0.4", "dev": true, @@ -3429,6 +3652,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-properties": { "version": "1.1.4", "dev": true, @@ -3445,14 +3686,14 @@ } }, "node_modules/degenerator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-4.0.2.tgz", - "integrity": "sha512-HKwIFvZROUMfH3qI3gBpD61BYh7q3c3GXD5UGZzoVNJwVSYgZKvYl1fRMXc9ozoTxl/VZxKJ5v/bA+19tywFiw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "license": "MIT", "dependencies": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0", - "vm2": "^3.9.17" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" }, "engines": { "node": ">= 14" @@ -3460,6 +3701,8 @@ }, "node_modules/depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "license": "MIT", "engines": { @@ -3494,9 +3737,10 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1135028", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1135028.tgz", - "integrity": "sha512-jEcNGrh6lOXNRJvZb9RjeevtZGrgugPKSMJZxfyxWQnhlKawMPhMtk/dfC+Z/6xNXExlzTKlY5LzIAK/fRpQIw==" + "version": "0.0.1342118", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1342118.tgz", + "integrity": "sha512-75fMas7PkYNDTmDyb6PRJCH7ILmHLp+BhrZGeMsa4bCh40DTxgCz2NRy5UDzII4C5KuD0oBMZ9vXKhEl6UD/3w==", + "license": "BSD-3-Clause" }, "node_modules/di": { "version": "0.0.1", @@ -3619,6 +3863,12 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, "node_modules/easy-bem": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/easy-bem/-/easy-bem-1.1.1.tgz", @@ -3630,13 +3880,15 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "dev": true + "version": "1.5.25", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.25.tgz", + "integrity": "sha512-kMb204zvK3PsSlgvvwzI3wBIcAw15tRkYk+NQdsjdDtcQWTp2RABbMQ9rUBy8KNEOM+/E6ep+XC3AykiWZld4g==", + "license": "ISC" }, "node_modules/elliptic": { - "version": "6.5.4", + "version": "6.5.7", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", + "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3654,6 +3906,12 @@ "dev": true, "license": "MIT" }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, "node_modules/encodeurl": { "version": "1.0.2", "dev": true, @@ -3666,15 +3924,17 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/engine.io": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", - "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", "dev": true, + "license": "MIT", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -3684,33 +3944,35 @@ "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/engine.io-parser": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.7.tgz", - "integrity": "sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/engine.io/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -3722,11 +3984,10 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.14.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz", - "integrity": "sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==", - "dev": true, - "peer": true, + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -3752,6 +4013,27 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/error-ex": { "version": "1.3.2", "license": "MIT", @@ -3796,6 +4078,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-get-iterator": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", @@ -3825,9 +4130,7 @@ "node_modules/es-module-lexer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", - "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", - "dev": true, - "peer": true + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==" }, "node_modules/es-to-primitive": { "version": "1.2.1", @@ -3846,13 +4149,15 @@ } }, "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "hasInstallScript": true, + "license": "ISC", "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", "next-tick": "^1.1.0" }, "engines": { @@ -3879,7 +4184,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { "node": ">=6" @@ -3891,30 +4198,40 @@ "license": "MIT" }, "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" + "estraverse": "^5.2.0", + "esutils": "^2.0.2" }, "bin": { "escodegen": "bin/escodegen.js", "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=4.0" + "node": ">=6.0" }, "optionalDependencies": { "source-map": "~0.6.1" } }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -3924,8 +4241,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -3934,10 +4249,32 @@ "node": ">=8.0.0" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esniff/node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -3950,8 +4287,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "peer": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -3963,8 +4298,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true, "engines": { "node": ">=4.0" } @@ -3981,10 +4314,21 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/eventemitter3": { "version": "4.0.7", "dev": true, @@ -3992,7 +4336,6 @@ }, "node_modules/events": { "version": "3.3.0", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.x" @@ -4053,6 +4396,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -4073,6 +4417,12 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT" + }, "node_modules/fast-glob": { "version": "3.2.12", "license": "MIT", @@ -4102,10 +4452,14 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } }, "node_modules/fastq": { "version": "1.13.0", @@ -4118,6 +4472,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", "dependencies": { "pend": "~1.2.0" } @@ -4145,7 +4500,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -4195,6 +4552,28 @@ "node": ">= 0.8" } }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, "node_modules/flatted": { "version": "3.2.7", "dev": true, @@ -4227,7 +4606,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.2", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "dev": true, "funding": [ { @@ -4253,6 +4634,34 @@ "is-callable": "^1.1.3" } }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", @@ -4266,13 +4675,9 @@ "url": "https://www.patreon.com/infusion" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, "node_modules/fs-extra": { "version": "8.1.0", + "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -4287,9 +4692,28 @@ "version": "1.0.0", "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { "version": "1.1.5", @@ -4324,14 +4748,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4353,6 +4783,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -4379,19 +4810,55 @@ } }, "node_modules/get-uri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.1.tgz", - "integrity": "sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^5.0.1", + "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4", - "fs-extra": "^8.1.0" + "fs-extra": "^11.2.0" }, "engines": { "node": ">= 14" } }, + "node_modules/get-uri/node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/get-uri/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/get-uri/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -4426,8 +4893,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "peer": true + "license": "BSD-2-Clause" }, "node_modules/gopd": { "version": "1.0.1", @@ -4441,11 +4907,15 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, "node_modules/graphql": { - "version": "16.6.0", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz", + "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==", "dev": true, "license": "MIT", "engines": { @@ -4472,18 +4942,32 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4549,6 +5033,19 @@ "minimalistic-assert": "^1.0.1" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/headers-polyfill": { "version": "3.1.2", "dev": true, @@ -4584,6 +5081,8 @@ }, "node_modules/http-errors": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4599,6 +5098,8 @@ }, "node_modules/http-errors/node_modules/statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, "license": "MIT", "engines": { @@ -4619,9 +5120,10 @@ } }, "node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -4636,9 +5138,10 @@ "license": "MIT" }, "node_modules/https-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz", - "integrity": "sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -4700,6 +5203,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/inflight": { "version": "1.0.6", "license": "ISC", @@ -4751,10 +5273,27 @@ "node": ">= 0.4" } }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } }, "node_modules/is-arguments": { "version": "1.1.1", @@ -4934,6 +5473,8 @@ }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "license": "MIT", "engines": { "node": ">=0.12.0" @@ -4953,6 +5494,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-regex": { "version": "1.1.4", "dev": true, @@ -5103,12 +5656,38 @@ "version": "2.0.0", "license": "ISC" }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jackspeak": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", + "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -5122,8 +5701,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5173,6 +5751,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "license": "MIT" + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "dev": true, @@ -5190,6 +5774,7 @@ }, "node_modules/jsonfile": { "version": "4.0.0", + "dev": true, "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" @@ -5266,16 +5851,13 @@ "node": ">=0.10.0" } }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.0" } }, "node_modules/lilconfig": { @@ -5317,12 +5899,22 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "peer": true, "engines": { "node": ">=6.11.5" } }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/lodash": { "version": "4.17.21", "dev": true, @@ -5381,15 +5973,12 @@ } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/lz-string": { @@ -5436,8 +6025,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "peer": true + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", @@ -5447,10 +6035,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -5487,7 +6077,6 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -5495,7 +6084,6 @@ }, "node_modules/mime-types": { "version": "2.1.35", - "dev": true, "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -5547,10 +6135,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mitt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" }, "node_modules/mkdirp": { "version": "0.5.6", @@ -5563,13 +6161,115 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "node_modules/mockingbird-lib": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mockingbird-lib/-/mockingbird-lib-0.0.8.tgz", + "integrity": "sha512-7YO8tfxZuNh8Akwo+BSLC/Fkv0G7Y2tDVMSJwgLvVJSjdEAIftPTuyU61FjE2uSUnXwlBbRa0/fJN2e/WQSjJg==", + "dependencies": { + "@codemirror/language": "^6.6.0", + "@codemirror/legacy-modes": "^6.3.1", + "@codemirror/lint": "^6.4.2", + "@codemirror/state": "^6.3.3", + "@codemirror/view": "^6.22.3", + "@isaacs/cliui": "^8.0.2", + "@sentry/cli": "^2.31.0", + "@sentry/react": "^7.109.0", + "@supabase/supabase-js": "^2.25.0", + "@tailwindcss/forms": "^0.5.3", + "@uiw/codemirror-theme-github": "^4.21.7", + "@uiw/react-codemirror": "^4.21.7", + "ajv": "^6.12.6", + "cross-env": "^7.0.3", + "flowbite": "^1.6.6", + "flowbite-react": "^0.4.7", + "glob": "^11.0.0", + "js-cookie": "^3.0.5", + "js-yaml": "^4.1.0", + "postcss-focus-visible": "^8.0.2", + "puppeteer": "^23.3.0", + "react": "^18.2.0", + "react-dom": "18.2.0", + "react-refresh": "^0.14.0", + "react-router-dom": "^6.13.0", + "rimraf": "^6.0.1", + "slugify": "^1.6.6", + "svgmap": "^2.10.1", + "tls-test": "https://tls-test.npmjs.com/tls-test-1.0.0.tgz", + "use-sync-external-store": "1.2.0", + "webpack": "^5.94.0", + "webpack-cli": "^5.1.4" + } + }, + "node_modules/mockingbird-lib/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mockingbird-lib/node_modules/glob": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mockingbird-lib/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mockingbird-lib/node_modules/rimraf": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "license": "ISC", + "dependencies": { + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/ms": { - "version": "2.1.2", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/msw": { @@ -5708,15 +6408,16 @@ } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -5729,6 +6430,7 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5736,14 +6438,13 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "peer": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/netmask": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -5759,9 +6460,10 @@ "license": "MIT" }, "node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -5818,10 +6520,10 @@ } }, "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "license": "MIT" }, "node_modules/normalize-package-data": { "version": "2.5.0", @@ -5835,7 +6537,9 @@ } }, "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -5959,7 +6663,9 @@ } }, "node_modules/npm-run-all/node_modules/semver": { - "version": "5.7.1", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -6034,9 +6740,14 @@ } }, "node_modules/object-inspect": { - "version": "1.12.2", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6114,22 +6825,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/ora": { "version": "5.4.1", "dev": true, @@ -6171,36 +6866,80 @@ "integrity": "sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==", "dev": true }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/pac-proxy-agent": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-6.0.3.tgz", - "integrity": "sha512-5Hr1KgPDoc21Vn3rsXBirwwDnF/iac1jN/zkpsOYruyT+ZgsUhUOgVwq3v9+ukjZd/yGm/0nzO1fDfl7rkGoHQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", + "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", + "license": "MIT", "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.0.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "pac-resolver": "^6.0.1", - "socks-proxy-agent": "^8.0.1" + "https-proxy-agent": "^7.0.5", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.4" }, "engines": { "node": ">= 14" } }, "node_modules/pac-resolver": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-6.0.1.tgz", - "integrity": "sha512-dg497MhVT7jZegPRuOScQ/z0aV/5WR0gTdRu1md+Irs9J9o+ls5jIuxjo1WfaTG+eQQkxyn5HMGvWK+w7EIBkQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "license": "MIT", "dependencies": { - "degenerator": "^4.0.1", - "ip": "^1.1.5", + "degenerator": "^5.0.0", "netmask": "^2.0.2" }, "engines": { "node": ">= 14" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "license": "BlueOak-1.0.0" + }, "node_modules/pako": { "version": "1.0.11", "dev": true, @@ -6218,15 +6957,35 @@ } }, "node_modules/parse-asn1": { - "version": "5.1.6", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, "license": "ISC", "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-asn1/node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" } }, "node_modules/parse-json": { @@ -6254,6 +7013,15 @@ "dev": true, "license": "MIT" }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "license": "MIT", @@ -6273,8 +7041,35 @@ "version": "1.0.7", "license": "MIT" }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", + "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/path-to-regexp": { - "version": "6.2.1", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", "dev": true, "license": "MIT" }, @@ -6282,6 +7077,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, "engines": { "node": ">=8" } @@ -6304,10 +7100,13 @@ "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", "license": "ISC" }, "node_modules/picomatch": { @@ -6346,10 +7145,22 @@ "node": ">= 6" } }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "funding": [ { "type": "opencollective", @@ -6364,10 +7175,11 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -7660,14 +8472,6 @@ "version": "4.2.0", "license": "MIT" }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -7725,31 +8529,24 @@ } }, "node_modules/proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.2.1.tgz", - "integrity": "sha512-OIbBKlRAT+ycCm6wAYIzMwPejzRtjy8F3QiDX0eKOA3e4pe3U9F/IvzcHP42bmgQxVv97juG+J8/gx+JIeCX/Q==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^6.0.3", + "pac-proxy-agent": "^7.0.1", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.1" + "socks-proxy-agent": "^8.0.2" }, "engines": { "node": ">= 14" } }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "engines": { - "node": ">=12" - } - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -7774,9 +8571,10 @@ "license": "MIT" }, "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -7788,47 +8586,48 @@ "license": "MIT" }, "node_modules/puppeteer": { - "version": "20.7.2", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-20.7.2.tgz", - "integrity": "sha512-SKg9TgUY3TJvnOy0VrkhduSvDQIjBsi+s/Ne6S+qD53MM6emau+oh+kNqySNrT7c4qkg27UrJ9aEnltKDAQTzQ==", + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.4.0.tgz", + "integrity": "sha512-FxgFFJI7NAsX8uebiEDSjS86vufz9TaqERQHShQT0lCbSRI3jUPEcz/0HdwLiYvfYNsc1zGjqY3NsGZya4PvUA==", "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "1.4.1", - "cosmiconfig": "8.2.0", - "puppeteer-core": "20.7.2" + "@puppeteer/browsers": "2.4.0", + "chromium-bidi": "0.6.5", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1342118", + "puppeteer-core": "23.4.0", + "typed-query-selector": "^2.12.0" + }, + "bin": { + "puppeteer": "lib/cjs/puppeteer/node/cli.js" }, "engines": { - "node": ">=16.3.0" + "node": ">=18" } }, "node_modules/puppeteer-core": { - "version": "20.7.2", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.7.2.tgz", - "integrity": "sha512-4Sd+v2YLlYMYFP/9SI/spT1joGTePwhmKP89pchUqz7VcWwv/Yh0Atmsybz+7wWT0VPDnw0UhBM6iNEfXEoUvg==", + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.4.0.tgz", + "integrity": "sha512-fqkIP5FOcb38jfBj/OcBz1wFaI9nk40uQKSORvnXws6wCbep2dg8yxZ3ddJxBIfQsxoiEOvnrykFinUScrB/ew==", + "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "1.4.1", - "chromium-bidi": "0.4.12", - "cross-fetch": "3.1.6", - "debug": "4.3.4", - "devtools-protocol": "0.0.1135028", - "ws": "8.13.0" + "@puppeteer/browsers": "2.4.0", + "chromium-bidi": "0.6.5", + "debug": "^4.3.7", + "devtools-protocol": "0.0.1342118", + "typed-query-selector": "^2.12.0", + "ws": "^8.18.0" }, "engines": { - "node": ">=16.3.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=18" } }, "node_modules/puppeteer-core/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -7845,6 +8644,65 @@ } } }, + "node_modules/puppeteer/node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/puppeteer/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/puppeteer/node_modules/typescript": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/qjobs": { "version": "1.2.0", "dev": true, @@ -7854,11 +8712,13 @@ } }, "node_modules/qs": { - "version": "6.11.0", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -7899,9 +8759,14 @@ ], "license": "MIT" }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "license": "MIT" + }, "node_modules/randombytes": { "version": "2.1.0", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" @@ -7925,7 +8790,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "license": "MIT", "dependencies": { @@ -8068,7 +8935,9 @@ } }, "node_modules/readable-stream": { - "version": "2.3.7", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -8112,6 +8981,18 @@ "node": ">= 0.8.0" } }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "license": "MIT", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -8161,6 +9042,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -8298,11 +9200,10 @@ } }, "node_modules/schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", - "dev": true, - "peer": true, + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -8317,13 +9218,10 @@ } }, "node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -8332,11 +9230,10 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "peer": true, + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -8346,6 +9243,24 @@ "dev": true, "license": "MIT" }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "dev": true, @@ -8353,6 +9268,8 @@ }, "node_modules/setprototypeof": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true, "license": "ISC" }, @@ -8405,6 +9322,18 @@ "which": "bin/which" } }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -8433,13 +9362,19 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8462,48 +9397,54 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" } }, "node_modules/socket.io": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.2.tgz", - "integrity": "sha512-Vp+lSks5k0dewYTfwgPT9UeGGd+ht7sCpB7p0e83VgO4X/AHYWhXITMrNk/pg8syY2bpx23ptClCQuHhqi2BgQ==", + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", + "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.4.2", + "engine.io": "~6.5.2", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/socket.io-adapter": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", - "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", "dev": true, + "license": "MIT", "dependencies": { - "ws": "~8.11.0" + "debug": "~4.3.4", + "ws": "~8.17.1" } }, "node_modules/socket.io-adapter/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -8528,36 +9469,33 @@ } }, "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "license": "MIT", "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks-proxy-agent": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz", - "integrity": "sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "license": "MIT", "dependencies": { - "agent-base": "^7.0.1", + "agent-base": "^7.1.1", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" }, "engines": { "node": ">= 14" } }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" - }, "node_modules/source-map": { "version": "0.5.7", "dev": true, @@ -8567,7 +9505,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -8609,6 +9549,12 @@ "dev": true, "license": "CC0-1.0" }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause" + }, "node_modules/statuses": { "version": "1.5.0", "dev": true, @@ -8663,6 +9609,20 @@ "node": ">=8.0" } }, + "node_modules/streamx": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", + "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", + "license": "MIT", + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, "node_modules/strict-event-emitter": { "version": "0.2.8", "dev": true, @@ -8673,6 +9633,7 @@ }, "node_modules/string_decoder": { "version": "1.3.0", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -8690,9 +9651,20 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } }, "node_modules/string.prototype.padend": { "version": "3.1.3", @@ -8746,6 +9718,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "dev": true, @@ -8936,57 +9921,41 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", + "license": "MIT", "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "tar-stream": "^3.1.5" }, - "engines": { - "node": ">=6" + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" } }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } }, "node_modules/terser": { - "version": "5.17.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", - "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", - "dev": true, - "peer": true, + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.33.0.tgz", + "integrity": "sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==", + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -9001,17 +9970,16 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "peer": true, + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "terser": "^5.26.0" }, "engines": { "node": ">= 10.13.0" @@ -9039,8 +10007,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "peer": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -9049,13 +10016,21 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, + "node_modules/text-decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.0.tgz", + "integrity": "sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/thenby": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", @@ -9096,6 +10071,13 @@ "node": ">=0.6.0" } }, + "node_modules/tls-test": { + "version": "1.0.0", + "resolved": "https://tls-test.npmjs.com/tls-test-1.0.0.tgz", + "integrity": "sha512-Mi+xVXBzew7ky/UvA+MAAK2gRwZQE2j4PRoc2QEpJj8hK43X8+eV0Gsy9TiceIkYRYFZ1964oSAgxYf2Ygs5bQ==", + "hasInstallScript": true, + "license": "MIT" + }, "node_modules/tmp": { "version": "0.2.1", "dev": true, @@ -9114,6 +10096,8 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -9124,6 +10108,8 @@ }, "node_modules/toidentifier": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, "license": "MIT", "engines": { @@ -9153,17 +10139,6 @@ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/type-is": { "version": "1.6.18", "dev": true, @@ -9176,6 +10151,12 @@ "node": ">= 0.6" } }, + "node_modules/typed-query-selector": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", + "license": "MIT" + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -9186,6 +10167,7 @@ }, "node_modules/typescript": { "version": "4.8.4", + "dev": true, "license": "Apache-2.0", "optional": true, "peer": true, @@ -9234,6 +10216,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "license": "MIT", "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -9257,6 +10240,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -9264,6 +10248,7 @@ }, "node_modules/universalify": { "version": "0.1.2", + "dev": true, "license": "MIT", "engines": { "node": ">= 4.0.0" @@ -9278,10 +10263,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "funding": [ { "type": "opencollective", @@ -9290,14 +10274,19 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -9333,6 +10322,12 @@ "dev": true, "license": "MIT" }, + "node_modules/urlpattern-polyfill": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", + "license": "MIT" + }, "node_modules/use-sync-external-store": { "version": "1.2.0", "license": "MIT", @@ -9391,6 +10386,7 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -9400,21 +10396,6 @@ "dev": true, "license": "MIT" }, - "node_modules/vm2": { - "version": "3.9.19", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.19.tgz", - "integrity": "sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==", - "dependencies": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0" - }, - "bin": { - "vm2": "bin/vm2" - }, - "engines": { - "node": ">=6.0" - } - }, "node_modules/void-elements": { "version": "2.0.1", "dev": true, @@ -9429,11 +10410,10 @@ "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==" }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "peer": true, + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -9478,35 +10458,33 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.85.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.85.1.tgz", - "integrity": "sha512-xTb7MRf4LY8Z5rzn7aIx4TDrwYJrjcHnIfU1TqtyZOoObyuGSpAUwIvVuqq5wPnv7WEgQr8UvO1q/dgoGG4HjA==", - "dev": true, - "peer": true, + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.14.1", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -9525,12 +10503,78 @@ } } }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "peer": true, "engines": { "node": ">=10.13.0" } @@ -9635,16 +10679,32 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi": { + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -9663,7 +10723,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "7.5.9", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, "license": "MIT", "engines": { @@ -9705,12 +10767,6 @@ "node": ">=0.10.32" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/yargs": { "version": "16.2.0", "dev": true, @@ -9740,10 +10796,20 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } }, "dependencies": { @@ -10199,6 +11265,11 @@ "dev": true, "requires": {} }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==" + }, "@floating-ui/core": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.3.0.tgz", @@ -10230,14 +11301,72 @@ "@floating-ui/dom": "^1.3.0" } }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "requires": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" } }, "@jridgewell/resolve-uri": { @@ -10246,19 +11375,17 @@ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" }, "@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", - "dev": true, - "peer": true, + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "@jridgewell/sourcemap-codec": { @@ -10267,12 +11394,12 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@lezer/common": { @@ -10339,23 +11466,30 @@ "version": "1.0.3", "dev": true }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true + }, "@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" }, "@puppeteer/browsers": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.1.tgz", - "integrity": "sha512-H43VosMzywHCcYcgv0GXXopvwnV21Ud9g2aXbPlQUJj1Xcz9V0wBwHeFz6saFhx/3VKisZfI1GEKEOhQCau7Vw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.4.0.tgz", + "integrity": "sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g==", "requires": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.2.1", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.1" + "debug": "^4.3.6", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.4.0", + "semver": "^7.6.3", + "tar-fs": "^3.0.6", + "unbzip2-stream": "^1.4.3", + "yargs": "^17.7.2" }, "dependencies": { "cliui": { @@ -10369,9 +11503,9 @@ } }, "yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -10658,6 +11792,11 @@ "@types/react-dom": "^18.0.0" } }, + "@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" + }, "@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -10675,9 +11814,9 @@ "dev": true }, "@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "dev": true, "requires": { "@types/node": "*" @@ -10690,45 +11829,19 @@ "@types/ms": "*" } }, - "@types/eslint": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.0.tgz", - "integrity": "sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==", - "dev": true, - "peer": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "peer": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true, - "peer": true + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" }, "@types/js-levenshtein": { "version": "1.1.1", "dev": true }, "@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true, - "peer": true + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "@types/ms": { "version": "0.7.31", @@ -10782,9 +11895,9 @@ } }, "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "optional": true, "requires": { "@types/node": "*" @@ -10836,11 +11949,9 @@ } }, "@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "peer": true, + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "requires": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -10849,30 +11960,22 @@ "@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true, - "peer": true + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" }, "@webassemblyjs/helper-api-error": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true, - "peer": true + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" }, "@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true, - "peer": true + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" }, "@webassemblyjs/helper-numbers": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "peer": true, "requires": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", @@ -10882,29 +11985,23 @@ "@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true, - "peer": true + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "peer": true, + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "@webassemblyjs/ieee754": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "peer": true, "requires": { "@xtuc/ieee754": "^1.2.0" } @@ -10913,8 +12010,6 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "peer": true, "requires": { "@xtuc/long": "4.2.2" } @@ -10922,35 +12017,29 @@ "@webassemblyjs/utf8": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true, - "peer": true + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" }, "@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "peer": true, + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "peer": true, + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -10958,26 +12047,22 @@ } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "peer": true, + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "peer": true, + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -10986,16 +12071,32 @@ } }, "@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "peer": true, + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, + "@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "requires": {} + }, + "@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "requires": {} + }, + "@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "requires": {} + }, "@xmldom/xmldom": { "version": "0.8.6", "dev": true @@ -11003,16 +12104,12 @@ "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "peer": true + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "peer": true + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "@zxing/text-encoding": { "version": "0.9.0", @@ -11034,23 +12131,16 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" }, - "acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peer": true, + "acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "requires": {} }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "requires": { "debug": "^4.3.4" } @@ -11070,8 +12160,6 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peer": true, "requires": {} }, "ansi-escapes": { @@ -11134,17 +12222,20 @@ } }, "asn1.js": { - "version": "5.4.1", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "minimalistic-assert": "^1.0.0" }, "dependencies": { "bn.js": { "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -11196,8 +12287,55 @@ "version": "1.0.5", "dev": true }, - "balanced-match": { - "version": "1.0.2" + "b4a": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" + }, + "balanced-match": { + "version": "1.0.2" + }, + "bare-events": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", + "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "optional": true + }, + "bare-fs": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", + "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", + "optional": true, + "requires": { + "bare-events": "^2.0.0", + "bare-path": "^2.0.0", + "bare-stream": "^2.0.0" + } + }, + "bare-os": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", + "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", + "optional": true + }, + "bare-path": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "optional": true, + "requires": { + "bare-os": "^2.1.0" + } + }, + "bare-stream": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.3.0.tgz", + "integrity": "sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA==", + "optional": true, + "requires": { + "b4a": "^1.6.6", + "streamx": "^2.20.0" + } }, "base64-js": { "version": "1.5.1" @@ -11209,15 +12347,16 @@ "dev": true }, "basic-ftp": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", - "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==" + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==" }, "binary-extensions": { "version": "2.2.0" }, "bl": { "version": "4.1.0", + "dev": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -11226,6 +12365,7 @@ "dependencies": { "buffer": { "version": "5.7.1", + "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -11233,6 +12373,7 @@ }, "readable-stream": { "version": "3.6.0", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11246,19 +12387,21 @@ "dev": true }, "body-parser": { - "version": "1.20.1", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "requires": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", + "qs": "6.13.0", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -11290,9 +12433,11 @@ } }, "braces": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "brorand": { @@ -11339,27 +12484,31 @@ } }, "browserify-sign": { - "version": "4.2.1", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dev": true, "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", + "elliptic": "^6.5.5", + "hash-base": "~3.0", "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" }, "dependencies": { - "readable-stream": { - "version": "3.6.0", + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } } } @@ -11372,15 +12521,14 @@ } }, "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" } }, "buffer": { @@ -11400,9 +12548,7 @@ "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "peer": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "buffer-xor": { "version": "1.0.3", @@ -11422,14 +12568,21 @@ }, "bytes": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, "call-bind": { - "version": "1.0.2", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" } }, "callsites": { @@ -11455,10 +12608,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001478", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz", - "integrity": "sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==", - "dev": true + "version": "1.0.30001660", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", + "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==" }, "chalk": { "version": "4.1.2", @@ -11493,24 +12645,19 @@ } } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "peer": true + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" }, "chromium-bidi": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.12.tgz", - "integrity": "sha512-yl0ngMHtYUGJa2G0lkcbPvbnUZ9WMQyMNSfYmlrGD1nHRNyI9KOGw3dOaofFugXHHToneUaSmF9iUdgCBamCjA==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.5.tgz", + "integrity": "sha512-RuLrmzYrxSb0s9SgpB+QN5jJucPduZQ/9SIe76MDxYJuecPW5mxMdacJ1f4EtgiV+R0p3sCkznTMvH0MPGFqjA==", "requires": { - "mitt": "3.0.0" + "mitt": "3.0.1", + "urlpattern-polyfill": "10.0.0", + "zod": "3.23.8" } }, "cipher-base": { @@ -11554,6 +12701,16 @@ "version": "1.0.4", "dev": true }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, "codemirror": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", @@ -11583,12 +12740,15 @@ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "peer": true + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "concat-map": { "version": "0.0.1" @@ -11625,7 +12785,9 @@ "dev": true }, "content-type": { - "version": "1.0.4", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true }, "cookie": { @@ -11650,6 +12812,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, "requires": { "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -11661,6 +12824,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -11926,9 +13090,9 @@ } }, "data-uri-to-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz", - "integrity": "sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==" + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==" }, "date-format": { "version": "4.0.14", @@ -11940,9 +13104,11 @@ "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" }, "debug": { - "version": "4.3.4", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "deep-equal": { @@ -11978,11 +13144,6 @@ } } }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, "defaults": { "version": "1.0.4", "dev": true, @@ -11990,6 +13151,17 @@ "clone": "^1.0.2" } }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, "define-properties": { "version": "1.1.4", "dev": true, @@ -11999,18 +13171,19 @@ } }, "degenerator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-4.0.2.tgz", - "integrity": "sha512-HKwIFvZROUMfH3qI3gBpD61BYh7q3c3GXD5UGZzoVNJwVSYgZKvYl1fRMXc9ozoTxl/VZxKJ5v/bA+19tywFiw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "requires": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0", - "vm2": "^3.9.17" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" } }, "depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, "dependency-graph": { @@ -12032,9 +13205,9 @@ "dev": true }, "devtools-protocol": { - "version": "0.0.1135028", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1135028.tgz", - "integrity": "sha512-jEcNGrh6lOXNRJvZb9RjeevtZGrgugPKSMJZxfyxWQnhlKawMPhMtk/dfC+Z/6xNXExlzTKlY5LzIAK/fRpQIw==" + "version": "0.0.1342118", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1342118.tgz", + "integrity": "sha512-75fMas7PkYNDTmDyb6PRJCH7ILmHLp+BhrZGeMsa4bCh40DTxgCz2NRy5UDzII4C5KuD0oBMZ9vXKhEl6UD/3w==" }, "di": { "version": "0.0.1", @@ -12127,6 +13300,11 @@ "domhandler": "^5.0.3" } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "easy-bem": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/easy-bem/-/easy-bem-1.1.1.tgz", @@ -12137,13 +13315,14 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "dev": true + "version": "1.5.25", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.25.tgz", + "integrity": "sha512-kMb204zvK3PsSlgvvwzI3wBIcAw15tRkYk+NQdsjdDtcQWTp2RABbMQ9rUBy8KNEOM+/E6ep+XC3AykiWZld4g==" }, "elliptic": { - "version": "6.5.4", + "version": "6.5.7", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", + "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", "dev": true, "requires": { "bn.js": "^4.11.9", @@ -12161,6 +13340,11 @@ } } }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "encodeurl": { "version": "1.0.2", "dev": true @@ -12174,9 +13358,9 @@ } }, "engine.io": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", - "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", "dev": true, "requires": { "@types/cookie": "^0.4.1", @@ -12187,31 +13371,29 @@ "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" }, "dependencies": { "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "requires": {} } } }, "engine.io-parser": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.7.tgz", - "integrity": "sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "dev": true }, "enhanced-resolve": { - "version": "5.14.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz", - "integrity": "sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==", - "dev": true, - "peer": true, + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -12227,6 +13409,16 @@ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + }, + "envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==" + }, "error-ex": { "version": "1.3.2", "requires": { @@ -12263,6 +13455,21 @@ "unbox-primitive": "^1.0.2" } }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, "es-get-iterator": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", @@ -12291,9 +13498,7 @@ "es-module-lexer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", - "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", - "dev": true, - "peer": true + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==" }, "es-to-primitive": { "version": "1.2.1", @@ -12305,12 +13510,13 @@ } }, "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "requires": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", "next-tick": "^1.1.0" } }, @@ -12334,24 +13540,30 @@ } }, "escalade": { - "version": "3.1.1" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" }, "escape-html": { "version": "1.0.3", "dev": true }, "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "requires": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", + "estraverse": "^5.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1", "source-map": "~0.6.1" }, "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -12364,13 +13576,29 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "peer": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, + "esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==" + } + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -12380,8 +13608,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "peer": true, "requires": { "estraverse": "^5.2.0" }, @@ -12389,9 +13615,7 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" } } }, @@ -12405,13 +13629,21 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "eventemitter3": { "version": "4.0.7", "dev": true }, "events": { - "version": "3.3.0", - "dev": true + "version": "3.3.0" }, "evp_bytestokey": { "version": "1.0.3", @@ -12474,6 +13706,11 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + }, "fast-glob": { "version": "3.2.12", "requires": { @@ -12497,10 +13734,10 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==" }, "fastq": { "version": "1.13.0", @@ -12530,7 +13767,9 @@ } }, "fill-range": { - "version": "7.0.1", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "requires": { "to-regex-range": "^5.0.1" } @@ -12568,6 +13807,20 @@ } } }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + }, "flatted": { "version": "3.2.7", "dev": true @@ -12594,7 +13847,9 @@ } }, "follow-redirects": { - "version": "1.15.2", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "dev": true }, "for-each": { @@ -12604,19 +13859,31 @@ "is-callable": "^1.1.3" } }, + "foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + } + } + }, "fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", "dev": true }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, "fs-extra": { "version": "8.1.0", + "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -12626,8 +13893,16 @@ "fs.realpath": { "version": "1.0.0" }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, "function-bind": { - "version": "1.1.1" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "function.prototype.name": { "version": "1.1.5", @@ -12647,14 +13922,16 @@ "version": "2.0.5" }, "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "get-stdin": { @@ -12680,14 +13957,40 @@ } }, "get-uri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.1.tgz", - "integrity": "sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", "requires": { "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^5.0.1", + "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4", - "fs-extra": "^8.1.0" + "fs-extra": "^11.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" + } } }, "glob": { @@ -12713,9 +14016,7 @@ "glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "peer": true + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "gopd": { "version": "1.0.1", @@ -12725,10 +14026,14 @@ } }, "graceful-fs": { - "version": "4.2.10" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "graphql": { - "version": "16.6.0", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz", + "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==", "dev": true }, "has": { @@ -12742,16 +14047,23 @@ "dev": true }, "has-flag": { - "version": "4.0.0", - "dev": true + "version": "4.0.0" }, "has-property-descriptors": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "requires": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" } }, + "has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true + }, "has-symbols": { "version": "1.0.3", "dev": true @@ -12791,6 +14103,15 @@ "minimalistic-assert": "^1.0.1" } }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "headers-polyfill": { "version": "3.1.2", "dev": true @@ -12825,6 +14146,8 @@ }, "http-errors": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "requires": { "depd": "2.0.0", @@ -12836,6 +14159,8 @@ "dependencies": { "statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true } } @@ -12850,9 +14175,9 @@ } }, "http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "requires": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -12863,9 +14188,9 @@ "dev": true }, "https-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz", - "integrity": "sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "requires": { "agent-base": "^7.0.2", "debug": "4" @@ -12896,6 +14221,15 @@ "resolve-from": "^4.0.0" } }, + "import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, "inflight": { "version": "1.0.6", "requires": { @@ -12938,10 +14272,19 @@ "side-channel": "^1.0.4" } }, - "ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" + "interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==" + }, + "ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "requires": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + } }, "is-arguments": { "version": "1.1.1", @@ -13043,7 +14386,9 @@ "dev": true }, "is-number": { - "version": "7.0.0" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { "version": "1.0.7", @@ -13052,6 +14397,14 @@ "has-tostringtag": "^1.0.0" } }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, "is-regex": { "version": "1.1.4", "dev": true, @@ -13141,12 +14494,24 @@ "isexe": { "version": "2.0.0" }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + }, + "jackspeak": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", + "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "peer": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -13157,8 +14522,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -13190,6 +14553,11 @@ "argparse": "^2.0.1" } }, + "jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, "json-parse-better-errors": { "version": "1.0.2", "dev": true @@ -13206,6 +14574,7 @@ }, "jsonfile": { "version": "4.0.0", + "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -13270,14 +14639,10 @@ "version": "0.1.0", "dev": true }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "lilconfig": { "version": "2.1.0", @@ -13308,9 +14673,15 @@ "loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "peer": true + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } }, "lodash": { "version": "4.17.21", @@ -13354,13 +14725,9 @@ } }, "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" }, "lz-string": { "version": "1.5.0", @@ -13394,17 +14761,17 @@ "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "peer": true + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "merge2": { "version": "1.4.1" }, "micromatch": { - "version": "4.0.5", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -13427,12 +14794,10 @@ "dev": true }, "mime-db": { - "version": "1.52.0", - "dev": true + "version": "1.52.0" }, "mime-types": { "version": "2.1.35", - "dev": true, "requires": { "mime-db": "1.52.0" } @@ -13462,10 +14827,15 @@ "version": "1.2.7", "dev": true }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + }, "mitt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" }, "mkdirp": { "version": "0.5.6", @@ -13474,13 +14844,89 @@ "minimist": "^1.2.6" } }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, + "mockingbird-lib": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mockingbird-lib/-/mockingbird-lib-0.0.8.tgz", + "integrity": "sha512-7YO8tfxZuNh8Akwo+BSLC/Fkv0G7Y2tDVMSJwgLvVJSjdEAIftPTuyU61FjE2uSUnXwlBbRa0/fJN2e/WQSjJg==", + "requires": { + "@codemirror/language": "^6.6.0", + "@codemirror/legacy-modes": "^6.3.1", + "@codemirror/lint": "^6.4.2", + "@codemirror/state": "^6.3.3", + "@codemirror/view": "^6.22.3", + "@isaacs/cliui": "^8.0.2", + "@sentry/cli": "^2.31.0", + "@sentry/react": "^7.109.0", + "@supabase/supabase-js": "^2.25.0", + "@tailwindcss/forms": "^0.5.3", + "@uiw/codemirror-theme-github": "^4.21.7", + "@uiw/react-codemirror": "^4.21.7", + "ajv": "^6.12.6", + "cross-env": "^7.0.3", + "flowbite": "^1.6.6", + "flowbite-react": "^0.4.7", + "glob": "^11.0.0", + "js-cookie": "^3.0.5", + "js-yaml": "^4.1.0", + "postcss-focus-visible": "^8.0.2", + "puppeteer": "^23.3.0", + "react": "^18.2.0", + "react-dom": "18.2.0", + "react-refresh": "^0.14.0", + "react-router-dom": "^6.13.0", + "rimraf": "^6.0.1", + "slugify": "^1.6.6", + "svgmap": "^2.10.1", + "tls-test": "https://tls-test.npmjs.com/tls-test-1.0.0.tgz", + "use-sync-external-store": "1.2.0", + "webpack": "^5.94.0", + "webpack-cli": "^5.1.4" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + } + }, + "minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "rimraf": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "requires": { + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" + } + } + } + }, "ms": { - "version": "2.1.2" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "msw": { "version": "0.47.4", @@ -13571,9 +15017,9 @@ } }, "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, "negotiator": { "version": "0.6.3", @@ -13584,9 +15030,7 @@ "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "peer": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "netmask": { "version": "2.0.2", @@ -13603,9 +15047,9 @@ "dev": true }, "node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "requires": { "whatwg-url": "^5.0.0" } @@ -13645,10 +15089,9 @@ } }, "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" }, "normalize-package-data": { "version": "2.5.0", @@ -13661,7 +15104,9 @@ }, "dependencies": { "semver": { - "version": "5.7.1", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true } } @@ -13741,7 +15186,9 @@ "dev": true }, "semver": { - "version": "5.7.1", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true }, "shebang-command": { @@ -13787,7 +15234,9 @@ "version": "3.0.0" }, "object-inspect": { - "version": "1.12.2", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true }, "object-is": { @@ -13834,19 +15283,6 @@ "mimic-fn": "^2.1.0" } }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, "ora": { "version": "5.4.1", "dev": true, @@ -13876,30 +15312,56 @@ "integrity": "sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==", "dev": true }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, "pac-proxy-agent": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-6.0.3.tgz", - "integrity": "sha512-5Hr1KgPDoc21Vn3rsXBirwwDnF/iac1jN/zkpsOYruyT+ZgsUhUOgVwq3v9+ukjZd/yGm/0nzO1fDfl7rkGoHQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", + "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", "requires": { + "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.0.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "pac-resolver": "^6.0.1", - "socks-proxy-agent": "^8.0.1" + "https-proxy-agent": "^7.0.5", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.4" } }, "pac-resolver": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-6.0.1.tgz", - "integrity": "sha512-dg497MhVT7jZegPRuOScQ/z0aV/5WR0gTdRu1md+Irs9J9o+ls5jIuxjo1WfaTG+eQQkxyn5HMGvWK+w7EIBkQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "requires": { - "degenerator": "^4.0.1", - "ip": "^1.1.5", + "degenerator": "^5.0.0", "netmask": "^2.0.2" } }, + "package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" + }, "pako": { "version": "1.0.11", "dev": true @@ -13913,14 +15375,29 @@ } }, "parse-asn1": { - "version": "5.1.6", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + } } }, "parse-json": { @@ -13939,6 +15416,11 @@ "version": "0.0.1", "dev": true }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, "path-is-absolute": { "version": "1.0.1" }, @@ -13950,14 +15432,33 @@ "path-parse": { "version": "1.0.7" }, + "path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "requires": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "dependencies": { + "lru-cache": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", + "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==" + } + } + }, "path-to-regexp": { - "version": "6.2.1", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", "dev": true }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, "pbkdf2": { "version": "3.1.2", @@ -13976,7 +15477,9 @@ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "picocolors": { - "version": "1.0.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "picomatch": { "version": "2.3.1" @@ -13993,14 +15496,22 @@ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + }, "postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" } }, "postcss-attribute-case-insensitive": { @@ -14736,11 +16247,6 @@ "postcss-value-parser": { "version": "4.2.0" }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" - }, "pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -14780,25 +16286,18 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.2.1.tgz", - "integrity": "sha512-OIbBKlRAT+ycCm6wAYIzMwPejzRtjy8F3QiDX0eKOA3e4pe3U9F/IvzcHP42bmgQxVv97juG+J8/gx+JIeCX/Q==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", "requires": { "agent-base": "^7.0.2", "debug": "^4.3.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^6.0.3", + "pac-proxy-agent": "^7.0.1", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" - } + "socks-proxy-agent": "^8.0.2" } }, "proxy-from-env": { @@ -14825,9 +16324,9 @@ } }, "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -14838,32 +16337,66 @@ "dev": true }, "puppeteer": { - "version": "20.7.2", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-20.7.2.tgz", - "integrity": "sha512-SKg9TgUY3TJvnOy0VrkhduSvDQIjBsi+s/Ne6S+qD53MM6emau+oh+kNqySNrT7c4qkg27UrJ9aEnltKDAQTzQ==", - "requires": { - "@puppeteer/browsers": "1.4.1", - "cosmiconfig": "8.2.0", - "puppeteer-core": "20.7.2" + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.4.0.tgz", + "integrity": "sha512-FxgFFJI7NAsX8uebiEDSjS86vufz9TaqERQHShQT0lCbSRI3jUPEcz/0HdwLiYvfYNsc1zGjqY3NsGZya4PvUA==", + "requires": { + "@puppeteer/browsers": "2.4.0", + "chromium-bidi": "0.6.5", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1342118", + "puppeteer-core": "23.4.0", + "typed-query-selector": "^2.12.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "requires": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "typescript": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "optional": true, + "peer": true + } } }, "puppeteer-core": { - "version": "20.7.2", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.7.2.tgz", - "integrity": "sha512-4Sd+v2YLlYMYFP/9SI/spT1joGTePwhmKP89pchUqz7VcWwv/Yh0Atmsybz+7wWT0VPDnw0UhBM6iNEfXEoUvg==", + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.4.0.tgz", + "integrity": "sha512-fqkIP5FOcb38jfBj/OcBz1wFaI9nk40uQKSORvnXws6wCbep2dg8yxZ3ddJxBIfQsxoiEOvnrykFinUScrB/ew==", "requires": { - "@puppeteer/browsers": "1.4.1", - "chromium-bidi": "0.4.12", - "cross-fetch": "3.1.6", - "debug": "4.3.4", - "devtools-protocol": "0.0.1135028", - "ws": "8.13.0" + "@puppeteer/browsers": "2.4.0", + "chromium-bidi": "0.6.5", + "debug": "^4.3.7", + "devtools-protocol": "0.0.1342118", + "typed-query-selector": "^2.12.0", + "ws": "^8.18.0" }, "dependencies": { "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "requires": {} } } @@ -14873,10 +16406,12 @@ "dev": true }, "qs": { - "version": "6.11.0", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" } }, "querystring": { @@ -14890,9 +16425,13 @@ "queue-microtask": { "version": "1.2.3" }, + "queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + }, "randombytes": { "version": "2.1.0", - "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -14910,7 +16449,9 @@ "dev": true }, "raw-body": { - "version": "2.5.1", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "requires": { "bytes": "3.1.2", @@ -15003,7 +16544,9 @@ } }, "readable-stream": { - "version": "2.3.7", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -15038,6 +16581,14 @@ "version": "1.4.10", "dev": true }, + "rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "requires": { + "resolve": "^1.20.0" + } + }, "regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -15069,6 +16620,21 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + } + } + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -15144,11 +16710,9 @@ } }, "schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", - "dev": true, - "peer": true, + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -15156,20 +16720,14 @@ } }, "semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" }, "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "peer": true, + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "requires": { "randombytes": "^2.1.0" } @@ -15178,12 +16736,28 @@ "version": "2.5.1", "dev": true }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, "setimmediate": { "version": "1.0.5", "dev": true }, "setprototypeof": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "sha.js": { @@ -15223,6 +16797,14 @@ "integrity": "sha512-cZB2pzVXBnhpJ6PQdsjO+j/MksR28mv4QD/hP/2y1fsIa9Z9RutYgh3N34FZ8Ktl4puAXaIGlct+gMCJ5BmwmA==", "dev": true }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "requires": { + "kind-of": "^6.0.2" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -15241,12 +16823,15 @@ "dev": true }, "side-channel": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" } }, "signal-exit": { @@ -15264,32 +16849,34 @@ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, "socket.io": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.2.tgz", - "integrity": "sha512-Vp+lSks5k0dewYTfwgPT9UeGGd+ht7sCpB7p0e83VgO4X/AHYWhXITMrNk/pg8syY2bpx23ptClCQuHhqi2BgQ==", + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", "dev": true, "requires": { "accepts": "~1.3.4", "base64id": "~2.0.0", + "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.4.2", + "engine.io": "~6.5.2", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" } }, "socket.io-adapter": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", - "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", "dev": true, "requires": { - "ws": "~8.11.0" + "debug": "~4.3.4", + "ws": "~8.17.1" }, "dependencies": { "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "requires": {} } @@ -15306,29 +16893,22 @@ } }, "socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "requires": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" - }, - "dependencies": { - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" - } } }, "socks-proxy-agent": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz", - "integrity": "sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", "requires": { - "agent-base": "^7.0.1", + "agent-base": "^7.1.1", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" } }, "source-map": { @@ -15336,7 +16916,9 @@ "dev": true }, "source-map-js": { - "version": "1.0.2" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" }, "source-map-support": { "version": "0.4.18", @@ -15369,6 +16951,11 @@ "version": "3.0.12", "dev": true }, + "sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + }, "statuses": { "version": "1.5.0", "dev": true @@ -15410,6 +16997,17 @@ "fs-extra": "^8.1.0" } }, + "streamx": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", + "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", + "requires": { + "bare-events": "^2.2.0", + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + } + }, "strict-event-emitter": { "version": "0.2.8", "dev": true, @@ -15419,6 +17017,7 @@ }, "string_decoder": { "version": "1.3.0", + "dev": true, "requires": { "safe-buffer": "~5.2.0" } @@ -15429,11 +17028,16 @@ "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0" - } + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "string.prototype.padend": { @@ -15469,6 +17073,14 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, "strip-bom": { "version": "3.0.0", "dev": true @@ -15605,51 +17217,33 @@ "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "peer": true + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" }, "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0", "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "tar-stream": "^3.1.5" } }, "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } }, "terser": { - "version": "5.17.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", - "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", - "dev": true, - "peer": true, + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.33.0.tgz", + "integrity": "sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==", "requires": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -15660,16 +17254,12 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "peer": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "peer": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -15678,17 +17268,23 @@ } }, "terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "peer": true, + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "requires": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "terser": "^5.26.0" + } + }, + "text-decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.0.tgz", + "integrity": "sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==", + "requires": { + "b4a": "^1.6.4" } }, "thenby": { @@ -15723,6 +17319,10 @@ "setimmediate": "^1.0.4" } }, + "tls-test": { + "version": "https://tls-test.npmjs.com/tls-test-1.0.0.tgz", + "integrity": "sha512-Mi+xVXBzew7ky/UvA+MAAK2gRwZQE2j4PRoc2QEpJj8hK43X8+eV0Gsy9TiceIkYRYFZ1964oSAgxYf2Ygs5bQ==" + }, "tmp": { "version": "0.2.1", "dev": true, @@ -15736,12 +17336,16 @@ }, "to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { "is-number": "^7.0.0" } }, "toidentifier": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, "tr46": { @@ -15764,14 +17368,6 @@ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "requires": { - "prelude-ls": "~1.1.2" - } - }, "type-is": { "version": "1.6.18", "dev": true, @@ -15780,6 +17376,11 @@ "mime-types": "~2.1.24" } }, + "typed-query-selector": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==" + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -15790,6 +17391,7 @@ }, "typescript": { "version": "4.8.4", + "dev": true, "optional": true, "peer": true }, @@ -15830,20 +17432,20 @@ } }, "universalify": { - "version": "0.1.2" + "version": "0.1.2", + "dev": true }, "unpipe": { "version": "1.0.0", "dev": true }, "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" } }, "uri-js": { @@ -15875,6 +17477,11 @@ } } }, + "urlpattern-polyfill": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" + }, "use-sync-external-store": { "version": "1.2.0", "requires": {} @@ -15925,15 +17532,6 @@ "version": "1.1.2", "dev": true }, - "vm2": { - "version": "3.9.19", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.19.tgz", - "integrity": "sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==", - "requires": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0" - } - }, "void-elements": { "version": "2.0.1", "dev": true @@ -15944,11 +17542,9 @@ "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==" }, "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "peer": true, + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -15986,44 +17582,76 @@ "version": "3.0.1" }, "webpack": { - "version": "5.85.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.85.1.tgz", - "integrity": "sha512-xTb7MRf4LY8Z5rzn7aIx4TDrwYJrjcHnIfU1TqtyZOoObyuGSpAUwIvVuqq5wPnv7WEgQr8UvO1q/dgoGG4HjA==", - "dev": true, - "peer": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "requires": { + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.14.1", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" } }, + "webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" + } + } + }, + "webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "requires": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + } + }, "webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "peer": true + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" }, "websocket": { "version": "1.0.34", @@ -16103,10 +17731,10 @@ "is-typed-array": "^1.1.10" } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" }, "wrap-ansi": { "version": "7.0.0", @@ -16116,11 +17744,23 @@ "strip-ansi": "^6.0.0" } }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2" }, "ws": { - "version": "7.5.9", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, "requires": {} }, @@ -16136,12 +17776,6 @@ "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "yargs": { "version": "16.2.0", "dev": true, @@ -16167,6 +17801,11 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==" } } } diff --git a/package.json b/package.json index 4cfcb59d..ed045ce4 100644 --- a/package.json +++ b/package.json @@ -57,8 +57,9 @@ "flowbite-react": "^0.4.7", "js-cookie": "^3.0.5", "js-yaml": "^4.1.0", + "mockingbird-lib": "^0.0.8", "postcss-focus-visible": "^8.0.2", - "puppeteer": "^20.7.2", + "puppeteer": "^23.4.0", "react": "^18.2.0", "react-dom": "18.2.0", "react-refresh": "^0.14.0", diff --git a/src/front/app/dashboard/views.cljs b/src/front/app/dashboard/views.cljs index c24b9e80..140cd7a0 100644 --- a/src/front/app/dashboard/views.cljs +++ b/src/front/app/dashboard/views.cljs @@ -1,12 +1,15 @@ (ns front.app.dashboard.views (:require + [mockingbird.components.button :refer [Button]] + ["mockingbird-lib" :as mock] [front.app.dashboard.base :as base] [front.app.components.messages :refer [default-message blogpost-message]] - [front.app.lib :refer [defnc]] + [front.app.lib :refer-macros [defnc]] [helix.core :refer [$]] [helix.dom :as d])) (defnc welcome [] + (d/div ($ base/index (d/main ($ default-message @@ -15,7 +18,11 @@ :author "Avelino" :image "/images/users/avatar.png" :image-style "rounded" - :message ["I'm happy to have you here, we are launching the SaaS version of moclojer, seeking to make it simple for you to put a mock API in the air to develop your projects." "I look forward to your feedback (this is the only way we can improve the product)."]})))) + :message ["I'm happy to have you here, we are launching the SaaS version of moclojer, seeking to make it simple for you to put a mock API in the air to develop your projects." "I look forward to your feedback (this is the only way we can improve the product)."]}) + + #_($ mock/button) ;; npm + (Button) ;; JAR + )))) (comment ($ blogpost-message {:author "Avelino" From ce797f404994fae89587123bb8d5efdee3a76ba8 Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Mon, 23 Sep 2024 16:15:05 -0300 Subject: [PATCH 02/22] feat: testing distribution of mockingbird --- deps.edn | 2 +- package-lock.json | 14 +++++++------- package.json | 2 +- src/front/app/auth/views.cljs | 3 +++ src/front/app/dashboard/views.cljs | 4 ---- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/deps.edn b/deps.edn index e21e8c28..03b384e2 100644 --- a/deps.edn +++ b/deps.edn @@ -8,7 +8,7 @@ metosin/reitit-frontend {:mvn/version "0.5.18"} lambdaisland/fetch {:mvn/version "1.1.60"} - moclojer/mockingbird {:local/root "../mockingbird/target/mockingbird-0.0.1.jar"} + #_#_moclojer/mockingbird {:local/root "../mockingbird/target/mockingbird-0.0.1.jar"} ;; back com.moclojer/components {:mvn/version "0.1.0"} diff --git a/package-lock.json b/package-lock.json index 5c8c4069..fda8de3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "flowbite-react": "^0.4.7", "js-cookie": "^3.0.5", "js-yaml": "^4.1.0", - "mockingbird-lib": "^0.0.8", + "mockingbird-lib": "^0.0.11", "postcss-focus-visible": "^8.0.2", "puppeteer": "^23.4.0", "react": "^18.2.0", @@ -6162,9 +6162,9 @@ } }, "node_modules/mockingbird-lib": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mockingbird-lib/-/mockingbird-lib-0.0.8.tgz", - "integrity": "sha512-7YO8tfxZuNh8Akwo+BSLC/Fkv0G7Y2tDVMSJwgLvVJSjdEAIftPTuyU61FjE2uSUnXwlBbRa0/fJN2e/WQSjJg==", + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/mockingbird-lib/-/mockingbird-lib-0.0.11.tgz", + "integrity": "sha512-50AwnZ8JWOTu3YhhFmubfZ6tY0dym0RWnzDMfeMqYEpC77RZVGdmiCT1QovUvhGbFe30HlNTSBYYzQYgoOm7nQ==", "dependencies": { "@codemirror/language": "^6.6.0", "@codemirror/legacy-modes": "^6.3.1", @@ -14845,9 +14845,9 @@ } }, "mockingbird-lib": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mockingbird-lib/-/mockingbird-lib-0.0.8.tgz", - "integrity": "sha512-7YO8tfxZuNh8Akwo+BSLC/Fkv0G7Y2tDVMSJwgLvVJSjdEAIftPTuyU61FjE2uSUnXwlBbRa0/fJN2e/WQSjJg==", + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/mockingbird-lib/-/mockingbird-lib-0.0.11.tgz", + "integrity": "sha512-50AwnZ8JWOTu3YhhFmubfZ6tY0dym0RWnzDMfeMqYEpC77RZVGdmiCT1QovUvhGbFe30HlNTSBYYzQYgoOm7nQ==", "requires": { "@codemirror/language": "^6.6.0", "@codemirror/legacy-modes": "^6.3.1", diff --git a/package.json b/package.json index ed045ce4..5866d0e6 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "flowbite-react": "^0.4.7", "js-cookie": "^3.0.5", "js-yaml": "^4.1.0", - "mockingbird-lib": "^0.0.8", + "mockingbird-lib": "^0.0.11", "postcss-focus-visible": "^8.0.2", "puppeteer": "^23.4.0", "react": "^18.2.0", diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index 5b70f5c1..409aa61a 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -1,5 +1,6 @@ (ns front.app.auth.views (:require + ["mockingbird-lib" :as mock] [front.app.components.alerts :as alerts] [front.app.components.button :refer [login-button]] [front.app.components.container :refer [container]] @@ -17,10 +18,12 @@ (defnc not-found-view [] (d/div "404")) + (defnc login [{:keys [sent? loading? state set-state error error-res]}] ($ container {} + ($ Button) (d/div {:class-name (str "flex justify-center items-center w-full bg-white rounded-lg shadow lg:flex " "md:mt-0 lg:max-w-screen-lg 2xl:max:max-w-screen-lg xl:p-0 dark:bg-gray-800")} (d/div {:class-name "hidden w-2/3 lg:flex"} diff --git a/src/front/app/dashboard/views.cljs b/src/front/app/dashboard/views.cljs index 140cd7a0..7d0b8d74 100644 --- a/src/front/app/dashboard/views.cljs +++ b/src/front/app/dashboard/views.cljs @@ -1,7 +1,5 @@ (ns front.app.dashboard.views (:require - [mockingbird.components.button :refer [Button]] - ["mockingbird-lib" :as mock] [front.app.dashboard.base :as base] [front.app.components.messages :refer [default-message blogpost-message]] [front.app.lib :refer-macros [defnc]] @@ -20,8 +18,6 @@ :image-style "rounded" :message ["I'm happy to have you here, we are launching the SaaS version of moclojer, seeking to make it simple for you to put a mock API in the air to develop your projects." "I look forward to your feedback (this is the only way we can improve the product)."]}) - #_($ mock/button) ;; npm - (Button) ;; JAR )))) (comment ($ blogpost-message From dab623cb15897c8b9303cb9359cba7bb63c7dd33 Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Tue, 24 Sep 2024 18:41:41 -0300 Subject: [PATCH 03/22] feat: login pages with new mockingbird button --- deps.edn | 2 +- src/front/app/auth/views.cljs | 40 +++++++++++++++++------------------ tailwind.config.js | 11 ++++++---- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/deps.edn b/deps.edn index 03b384e2..e21e8c28 100644 --- a/deps.edn +++ b/deps.edn @@ -8,7 +8,7 @@ metosin/reitit-frontend {:mvn/version "0.5.18"} lambdaisland/fetch {:mvn/version "1.1.60"} - #_#_moclojer/mockingbird {:local/root "../mockingbird/target/mockingbird-0.0.1.jar"} + moclojer/mockingbird {:local/root "../mockingbird/target/mockingbird-0.0.1.jar"} ;; back com.moclojer/components {:mvn/version "0.1.0"} diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index 409aa61a..18375f70 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -1,8 +1,8 @@ (ns front.app.auth.views (:require - ["mockingbird-lib" :as mock] - [front.app.components.alerts :as alerts] + [mockingbird.components.button :refer [button]] [front.app.components.button :refer [login-button]] + [front.app.components.alerts :as alerts] [front.app.components.container :refer [container]] [front.app.components.section :refer [section]] [front.app.components.loading :refer [loading-spinner]] @@ -23,7 +23,6 @@ state set-state error error-res]}] ($ container {} - ($ Button) (d/div {:class-name (str "flex justify-center items-center w-full bg-white rounded-lg shadow lg:flex " "md:mt-0 lg:max-w-screen-lg 2xl:max:max-w-screen-lg xl:p-0 dark:bg-gray-800")} (d/div {:class-name "hidden w-2/3 lg:flex"} @@ -71,16 +70,18 @@ :on-change #(set-state assoc :email (.. % -target -value))}) (d/div {:class-name "flex items-start"} (d/div {:class-name "flex items-center h-5"})) - ($ login-button - {:type "submit" - :disabled loading? - :base "solid-blue" - :variant "pink"} + + ($ button {:class (str "login-button " (when loading? "login-button-block")) + :type :submit + :theme :mockingbird + :size :full + :label "login to your account"} (if loading? (d/span {:class-name "inline-flex"} ($ loading-spinner {}) "loading...") (d/span "login to your account"))) + (d/div {:class-name "text-sm font-medium text-gray-500 dark:text-gray-400"} (if error ($ alerts/error @@ -132,20 +133,17 @@ (d/b {:class-name "text-gray-900"} "*..") (d/span {:class-name "text-gray-500"} "moclojer.com")) - ($ login-button - {:class-name (when available? " cursor-not-allowed") - :type "submit" - :disabled (or loading? (not available?)) - :base "solid-blue" - :variant (if available? - "pink" - "grey")} - (if loading? - (d/span {:class-name "inline-flex"} - ($ loading-spinner {}) - "loading...") - (d/span "Save")))))))))))) + ($ button {:class (str "bg-gray-700" + (when loading? "login-button-block") + (when available? " login-button cursor-not-allowed")) + :type :submit + :theme :mockingbird + :size :full + :disabled (or loading? (not available?)) } + (if loading? (d/span {:class-name "inline-flex"} + ($ loading-spinner {}) "loading...") + (d/span "Save")))))))))))) (defnc first-login-view [] diff --git a/tailwind.config.js b/tailwind.config.js index 3d287a9e..473055d3 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -39,10 +39,13 @@ module.exports = { '9xl': ['8rem', { lineHeight: '1' }], }, extend: { - colors: { - primary: { "50": "#eff6ff", "100": "#dbeafe", "200": "#bfdbfe", "300": "#93c5fd", "400": "#60a5fa", "500": "#3b82f6", "600": "#2563eb", "700": "#1d4ed8", "800": "#1e40af", "900": "#1e3a8a" }, - red: {"50": "#fde8e8", "700": "#c81e1e"}, - green: {"50": "#def7ec", "700": "#046c4e"}, + colors: { + mockingbird: {"main": "#FF009E", "100": "#AA397F", "400":"#A9397E", "500": "#D42490", "600": "#e90562", "700": "#66003F", "text":"#55394A"}, + nightjar: {"main": "#E0D94A", "bg": "#36362C"}, + kiwi: {"main": "#7FE04A", "bg": "#2F362C"}, + warning: {"50": "#fde8e8", "900": "#F05252"}, + success: {"50": "#def7ec", "700": "#046c4e"}, + gray: {"50": "#fde8e8", "700": "#808080", "800": "#5e5e5e" }, }, fontFamily: { 'sans': ['Inter', 'ui-sans-serif', 'system-ui', '-apple-system', 'system-ui', 'Segoe UI', 'Roboto', 'Helvetica Neue', 'Arial', 'Noto Sans', 'sans-serif', 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'], From 1fdd607c7db63b2d0a20d16e6043598cb9220346 Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Tue, 24 Sep 2024 20:27:53 -0300 Subject: [PATCH 04/22] feat: loading prop and fixes on example page --- src/front/app/auth/views.cljs | 4 ++- src/front/app/dashboard/mocks.cljs | 24 +++++++++------- src/front/app/dashboard/views.cljs | 45 +++++++++++++++--------------- 3 files changed, 39 insertions(+), 34 deletions(-) diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index 18375f70..bc5886cf 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -140,7 +140,9 @@ :type :submit :theme :mockingbird :size :full - :disabled (or loading? (not available?)) } + :disabled (if (or loading? (not available?)) + true + false)} (if loading? (d/span {:class-name "inline-flex"} ($ loading-spinner {}) "loading...") (d/span "Save")))))))))))) diff --git a/src/front/app/dashboard/mocks.cljs b/src/front/app/dashboard/mocks.cljs index ac7190e8..3cd27138 100644 --- a/src/front/app/dashboard/mocks.cljs +++ b/src/front/app/dashboard/mocks.cljs @@ -1,13 +1,15 @@ (ns front.app.dashboard.mocks - (:require [front.app.components.status :refer [publication-status]] - [front.app.components.svg :as svg] - [front.app.dashboard.base :as base] - [front.app.lib :refer [defnc]] - [helix.core :refer [$ <>]] - [helix.dom :as d] - [helix.hooks :as hooks] - [refx.alpha :as refx] - [reitit.frontend.easy :as rfe])) + (:require + [mockingbird.components.button :refer[button]] + [front.app.components.status :refer [publication-status]] + [front.app.components.svg :as svg] + [front.app.dashboard.base :as base] + [front.app.lib :refer [defnc]] + [helix.core :refer [$ <>]] + [helix.dom :as d] + [helix.hooks :as hooks] + [refx.alpha :as refx] + [reitit.frontend.easy :as rfe])) (defnc api-mock [{:keys [enabled url id]}] (d/div {:class (str "w-full py-4 bg-white border-b border-gray-200 flex flex-col items-left cursor-pointer " @@ -63,6 +65,7 @@ :else svg/org-mock)) (defnc apis-mocks [{:keys [subdomain mock-type apis]}] + (d/div {:id "custom-mock" :class (str "w-full px-6 py-4 bg-white rounded-lg shadow flex-col justify-center items-start inline-flex " "lg:p-8") @@ -74,7 +77,8 @@ (<> {:key id} ($ api-mock {:enabled enabled :url url :id id}))) (d/div {:class "self-stretch pt-6 justify-start items-start inline-flex text-white text-xs font-bold leading-[18px]"} - (d/button {:class "px-3 py-2 bg-pink-600 rounded-lg justify-end items-center gap-2 flex btn-add" + + (d/button {:class "px-3 py-2 bg-mockingbird-main rounded-lg justify-end items-center gap-2 flex btn-add" :on-click (fn [_] (refx/dispatch [:app.dashboard/toggle-mock-modal]))} (d/svg {:width "16" :height "17" diff --git a/src/front/app/dashboard/views.cljs b/src/front/app/dashboard/views.cljs index 7d0b8d74..892ef652 100644 --- a/src/front/app/dashboard/views.cljs +++ b/src/front/app/dashboard/views.cljs @@ -1,28 +1,27 @@ (ns front.app.dashboard.views - (:require - [front.app.dashboard.base :as base] - [front.app.components.messages :refer [default-message blogpost-message]] - [front.app.lib :refer-macros [defnc]] - [helix.core :refer [$]] - [helix.dom :as d])) + (:require + [front.app.dashboard.base :as base] + [front.app.components.messages :refer [default-message blogpost-message]] + [front.app.lib :refer-macros [defnc]] + [helix.core :refer [$]] + [helix.dom :as d])) (defnc welcome [] - (d/div + (d/div ($ base/index - (d/main - ($ default-message - {:title "Welcome to moclojer beta" - :email "avelino@moclojer.com" - :author "Avelino" - :image "/images/users/avatar.png" - :image-style "rounded" - :message ["I'm happy to have you here, we are launching the SaaS version of moclojer, seeking to make it simple for you to put a mock API in the air to develop your projects." "I look forward to your feedback (this is the only way we can improve the product)."]}) - - )))) + (d/main + ($ default-message + {:title "Welcome to moclojer beta" + :email "avelino@moclojer.com" + :author "Avelino" + :image "/images/users/avatar.png" + :image-style "rounded" + :message ["I'm happy to have you here, we are launching the SaaS version of moclojer, seeking to make it simple for you to put a mock API in the air to develop your projects." "I look forward to your feedback (this is the only way we can improve the product)."]}))))) -(comment ($ blogpost-message - {:author "Avelino" - :email "avelino@moclojer.com" - :link "https://www.github.com" - :image "/images/users/avatar.png" - :image-style "default"})) +(comment + ($ blogpost-message + {:author "Avelino" + :email "avelino@moclojer.com" + :link "https://www.github.com" + :image "/images/users/avatar.png" + :image-style "default"})) From 9453c1e9d52cd6d31a6723afc7bfe1bc4996a223 Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Mon, 30 Sep 2024 11:27:55 -0300 Subject: [PATCH 05/22] fix: formatting and wip mockingbird css target --- deps.edn | 4 +- shadow-cljs.edn | 11 +- src/back/api/ports/http_out.clj | 2 +- src/back/api/utils.clj | 2 +- src/dev/api/dev.clj | 13 +- src/dev/core.cljs | 2 +- src/front/app/auth/views.cljs | 257 ++++++++-------- src/front/app/components/aside.cljs | 190 ++++++------ src/front/app/components/button.cljs | 111 ++++--- src/front/app/components/container.cljs | 15 +- src/front/app/components/footer.cljs | 13 +- src/front/app/components/labelinput.cljs | 38 +-- src/front/app/components/loading.cljs | 2 +- src/front/app/components/messages.cljs | 82 ++--- src/front/app/components/navbar.cljs | 22 +- src/front/app/components/navlink.cljs | 2 +- src/front/app/components/profile.cljs | 101 ++++--- src/front/app/components/section.cljs | 4 +- src/front/app/components/status.cljs | 25 +- src/front/app/components/svg.cljs | 226 +++++++------- src/front/app/dashboard/base.cljs | 284 +++++++++--------- src/front/app/dashboard/editor.cljs | 55 ++-- src/front/app/dashboard/events.cljs | 3 +- src/front/app/dashboard/linter.cljs | 11 +- src/front/app/dashboard/mocks.cljs | 20 +- src/front/app/dashboard/subs.cljs | 3 +- src/front/app/dashboard/views.cljs | 44 +-- src/front/app/routes/bookmarks.cljs | 9 +- src/front/app/routes/subs.cljs | 3 +- src/front/css/tailwind.css | 4 +- .../integration/api/add_org_user_test.clj | 54 ++-- .../api/create_conflicting_mock_test.clj | 52 ++-- .../back/integration/api/create_mock_test.clj | 80 ++--- .../back/integration/api/create_org_test.clj | 48 +-- .../back/integration/api/customer_test.clj | 62 ++-- .../integration/api/db/customers_test.clj | 76 ++--- .../integration/api/db/get_username_test.clj | 34 +-- .../back/integration/api/db/mocks_test.clj | 178 +++++------ .../back/integration/api/delete_mock_test.clj | 80 ++--- .../back/integration/api/healthcheck_test.clj | 10 +- test/back/back/integration/api/helpers.clj | 20 +- .../back/integration/api/update_mock_test.clj | 122 ++++---- .../api/username_is_available_test.clj | 46 +-- .../cloud_ops/create_domain_test.clj | 32 +- .../cloud_ops/fail_create_domain_test.clj | 20 +- .../cloud_ops/fail_retrieve_data_test.clj | 20 +- .../yaml_generator/mock_validation_test.clj | 132 ++++---- .../unified_validation_test.clj | 64 ++-- .../yaml_generator/yaml_generation_test.clj | 74 ++--- .../yaml_generator/yaml_unified_mock_test.clj | 94 +++--- .../app/integration/login_auth_view_test.cljs | 62 ++-- .../app/integration/login_view_test.cljs | 52 ++-- .../app/unit/components/button_test.cljs | 6 +- 53 files changed, 1488 insertions(+), 1488 deletions(-) diff --git a/deps.edn b/deps.edn index e21e8c28..fc846143 100644 --- a/deps.edn +++ b/deps.edn @@ -8,6 +8,8 @@ metosin/reitit-frontend {:mvn/version "0.5.18"} lambdaisland/fetch {:mvn/version "1.1.60"} + + org.clojure/tools.deps {:mvn/version "0.21.1449"} moclojer/mockingbird {:local/root "../mockingbird/target/mockingbird-0.0.1.jar"} ;; back @@ -32,7 +34,7 @@ metosin/muuntaja {:mvn/version "0.6.8"} org.bouncycastle/bcprov-jdk15on {:mvn/version "1.70"} selmer/selmer {:mvn/version "1.12.55"} - io.forward/yaml {:mvn/version "1.0.11"} + io.forward/yaml {:mvn/version "1.0.11"} io.github.cljazz/supabase {:git/sha "a850ed47eb0daa8303f206ea60bd4b3bf59e1e0a" :git/url "https://github.com/cljazz/supabase-clj"} babashka/process {:mvn/version "0.5.22"}} diff --git a/shadow-cljs.edn b/shadow-cljs.edn index 54675c94..11ce4e14 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -12,11 +12,13 @@ :http-port 8200 :http-root "resources/front/public/"} :build-hooks [(dev.shadow.hooks/hash-files - ["./resources/front/public/assets/css/output.css" - "./resources/front/public/assets/js/core.js"]) + ["./resources/front/public/assets/css/output.css" + "./resources/front/public/assets/js/core.js"]) (dev.shadow.hooks/replace-hashed-files - "./resources/front/index.src.html" - "./resources/front/public/index.html")] + "./resources/front/index.src.html" + "./resources/front/public/index.html") + (mockingbird.dev.shadow.hooks/get-target-css + {:path "resources/front/public/assets/css/target.css"})] :dev {:modules {:core {:init-fn dev.core/init}} :compiler-options {:warning-as-errors true} :build-hooks [(dev.shadow.hooks/build-css @@ -41,7 +43,6 @@ :ns-regexp "-test$" :devtools {:http-port 8100 :http-root "resources/front/test"}} - :ci-tests {:target :karma :output-to "resources/front/test/ci.js" :ns-regexp "-test$" diff --git a/src/back/api/ports/http_out.clj b/src/back/api/ports/http_out.clj index d1d87ad8..4e41e1ee 100644 --- a/src/back/api/ports/http_out.clj +++ b/src/back/api/ports/http_out.clj @@ -5,7 +5,7 @@ (defn supabase-get-user! [token config] (-> (s.core/get-user - {:base-url (-> config :config :supabase-url) + {:base-url (-> config :config :supabase-url) :token token :api-key (-> config :config :supabase-api-key)}) (select-keys [:email :id]))) diff --git a/src/back/api/utils.clj b/src/back/api/utils.clj index 6fe5e264..c4e82d0e 100644 --- a/src/back/api/utils.clj +++ b/src/back/api/utils.clj @@ -1,6 +1,6 @@ (ns back.api.utils) -(defn assoc-if +(defn assoc-if "This function returns a map with a respective associated key and value if it is given as argument." [m k v] diff --git a/src/dev/api/dev.clj b/src/dev/api/dev.clj index 7b2eeb57..ac5de27d 100644 --- a/src/dev/api/dev.clj +++ b/src/dev/api/dev.clj @@ -1,10 +1,11 @@ (ns dev.api.dev - (:require [back.api.ports.workers :as p.workers] - [back.api.routes :as routes] - [com.moclojer.components.core :as components] - [com.moclojer.components.mq :as mq] - [com.stuartsierra.component :as component] - [dev.utils :as utils]) + (:require + [back.api.ports.workers :as p.workers] + [back.api.routes :as routes] + [com.moclojer.components.core :as components] + [com.moclojer.components.mq :as mq] + [com.stuartsierra.component :as component] + [dev.utils :as utils]) (:gen-class)) ;; This namespace is used for development purposes only; diff --git a/src/dev/core.cljs b/src/dev/core.cljs index 605c8faa..ca9886e0 100644 --- a/src/dev/core.cljs +++ b/src/dev/core.cljs @@ -12,7 +12,7 @@ (defn ^:export init [] (p/do #_(mock/init!) - (dev-setup) + (dev-setup) (app/init))) (comment diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index bc5886cf..d316b9dd 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -1,7 +1,6 @@ (ns front.app.auth.views (:require [mockingbird.components.button :refer [button]] - [front.app.components.button :refer [login-button]] [front.app.components.alerts :as alerts] [front.app.components.container :refer [container]] [front.app.components.section :refer [section]] @@ -18,77 +17,76 @@ (defnc not-found-view [] (d/div "404")) - (defnc login [{:keys [sent? loading? state set-state error error-res]}] - ($ container {} - (d/div {:class-name (str "flex justify-center items-center w-full bg-white rounded-lg shadow lg:flex " - "md:mt-0 lg:max-w-screen-lg 2xl:max:max-w-screen-lg xl:p-0 dark:bg-gray-800")} - (d/div {:class-name "hidden w-2/3 lg:flex"} - (d/img {:src "/images/authentication/login.svg" :class-name "rounded-l-lg"})) - (if sent? - (d/div {:id "login-email-sent" - :class-name "p-6 space-y-8 w-full sm:p-8 lg:p-16 lg:py-0"} - (d/h2 - {:class-name "font-semibold text-gray-900"} - "Sign in to moclojer") - (d/div - {:class-name "font-semibold text-gray-900"} - "Check your email") - (d/div - (d/div - {:class-name "ml-3 "} - "If you have an account with us, we’ve sent an email to " - (:email state) - " with a link that you can use to sign in.") - (d/div - {:class-name "ml-3 "} - "You can also " - ($ nav-link - {:children "try again." - :on-click (fn [e] - (.preventDefault e) - (refx/dispatch [:app.auth/send-email-again])) - :href "#"})))) - ($ section {:class-name "p-6 space-y-8 w-full sm:p-8 lg:p-16 lg:py-0"} - (d/h2 {:class-name "text-2xl font-bold text-gray-900 lg:text-3xl dark:text-white"} - "sign in to moclojer") - (d/form {:disabled loading? - :on-submit (fn [e] - (.preventDefault e) - (when (:email state) - (refx/dispatch [:app.auth/send-email state]))) - :class-name "mt-8 space-y-6"} - ($ labeled-input - {:for "email" - :name "email" - :label "your email" - :placeholder "name@company.com" - :input-template "login" - :label-template "default" - :on-change #(set-state assoc :email (.. % -target -value))}) - (d/div {:class-name "flex items-start"} - (d/div {:class-name "flex items-center h-5"})) + ($ container {} + (d/div {:class-name (str "flex justify-center items-center w-full bg-white rounded-lg shadow lg:flex " + "md:mt-0 lg:max-w-screen-lg 2xl:max:max-w-screen-lg xl:p-0 dark:bg-gray-800")} + (d/div {:class-name "hidden w-2/3 lg:flex"} + (d/img {:src "/images/authentication/login.svg" :class-name "rounded-l-lg"})) + (if sent? + (d/div {:id "login-email-sent" + :class-name "p-6 space-y-8 w-full sm:p-8 lg:p-16 lg:py-0"} + (d/h2 + {:class-name "font-semibold text-gray-900"} + "Sign in to moclojer") + (d/div + {:class-name "font-semibold text-gray-900"} + "Check your email") + (d/div + (d/div + {:class-name "ml-3 "} + "If you have an account with us, we’ve sent an email to " + (:email state) + " with a link that you can use to sign in.") + (d/div + {:class-name "ml-3 "} + "You can also " + ($ nav-link + {:children "try again." + :on-click (fn [e] + (.preventDefault e) + (refx/dispatch [:app.auth/send-email-again])) + :href "#"})))) + ($ section {:class-name "p-6 space-y-8 w-full sm:p-8 lg:p-16 lg:py-0"} + (d/h2 {:class-name "text-2xl font-bold text-gray-900 lg:text-3xl dark:text-white"} + "sign in to moclojer") + (d/form {:disabled loading? + :on-submit (fn [e] + (.preventDefault e) + (when (:email state) + (refx/dispatch [:app.auth/send-email state]))) + :class-name "mt-8 space-y-6"} + ($ labeled-input + {:for "email" + :name "email" + :label "your email" + :placeholder "name@company.com" + :input-template "login" + :label-template "default" + :on-change #(set-state assoc :email (.. % -target -value))}) + (d/div {:class-name "flex items-start"} + (d/div {:class-name "flex items-center h-5"})) - ($ button {:class (str "login-button " (when loading? "login-button-block")) - :type :submit - :theme :mockingbird - :size :full - :label "login to your account"} - (if loading? - (d/span {:class-name "inline-flex"} - ($ loading-spinner {}) - "loading...") - (d/span "login to your account"))) + ($ button {:class (str (when loading? "bg-gray-700")) + :type :submit + :theme :mockingbird + :size :full + :label "login to your account"} + (if loading? + (d/span {:class-name "inline-flex"} + ($ loading-spinner {}) + "loading...") + (d/span "login to your account"))) - (d/div {:class-name "text-sm font-medium text-gray-500 dark:text-gray-400"} - (if error - ($ alerts/error - {:id "login-error" - :error "Error... try it again." - :description (:message error-res)}) - "if you don't have an account, it is created automatically")))))))) + (d/div {:class-name "text-sm font-medium text-gray-500 dark:text-gray-400"} + (if error + ($ alerts/error + {:id "login-error" + :error "Error... try it again." + :description (:message error-res)}) + "if you don't have an account, it is created automatically")))))))) (defnc first-login [{:keys [sent? loading?]}] (let [username (refx/use-sub [:app.auth/username-to-save]) @@ -107,72 +105,69 @@ (d/div ($ loading-spinner) "loading ...") (d/div - (d/h2 {:class-name "text-2xl font-bold text-gray-900 lg:text-3xl dark:text-white"} - "welcome, enter your username.") - (d/form {:disabled loading? - :on-submit (fn [e] - (.preventDefault e) - (when (and (not-empty username) available?) - (refx/dispatch [:app.auth/save-username username]))) - :class-name "mt-8 space-y-6"} - (d/div - ($ labeled-input - {:for "username" - :name "username" - :label "your username" - :placeholder "username" - :input-template "login" - :label-template "default" - :on-change (fn [e] - (.preventDefault e) - (refx/dispatch-sync [:app.auth/username-available? - (.. e -target -value)])) - })) - - (d/div {:class-name "text-sm font-medium text-gray-500 dark:text-gray-400"} - (d/b {:class-name "text-gray-900"} "*..") - (d/span {:class-name "text-gray-500"} "moclojer.com")) - + (d/h2 {:class-name "text-2xl font-bold text-gray-900 lg:text-3xl dark:text-white"} + "welcome, enter your username.") + (d/form {:disabled loading? + :on-submit (fn [e] + (.preventDefault e) + (when (and (not-empty username) available?) + (refx/dispatch [:app.auth/save-username username]))) + :class-name "mt-8 space-y-6"} + (d/div + ($ labeled-input + {:for "username" + :name "username" + :label "your username" + :placeholder "username" + :input-template "login" + :label-template "default" + :on-change (fn [e] + (.preventDefault e) + (refx/dispatch-sync [:app.auth/username-available? + (.. e -target -value)]))})) - ($ button {:class (str "bg-gray-700" - (when loading? "login-button-block") - (when available? " login-button cursor-not-allowed")) - :type :submit - :theme :mockingbird - :size :full - :disabled (if (or loading? (not available?)) - true - false)} - (if loading? (d/span {:class-name "inline-flex"} - ($ loading-spinner {}) "loading...") - (d/span "Save")))))))))))) + (d/div {:class-name "text-sm font-medium text-gray-500 dark:text-gray-400"} + (d/b {:class-name "text-gray-900"} "*..") + (d/span {:class-name "text-gray-500"} "moclojer.com")) + ($ button {:class (str "bg-gray-700" + (when loading? "login-button-block") + (when available? " login-button cursor-not-allowed")) + :type :submit + :theme :mockingbird + :size :full + :disabled (if (or loading? (not available?)) + true + false)} + (if loading? (d/span {:class-name "inline-flex"} + ($ loading-spinner {}) "loading...") + (d/span "Save")))))))))))) - (defnc first-login-view [] - (let [loading? (refx/use-sub [:app.auth/login-loading]) - sent? (refx/use-sub [:app.auth/username-sent]) - [error error-res] (refx/use-sub [:app.auth/login-error])] - (hooks/use-effect - [sent?] - (when sent? - (rfe/push-state :app.core/dashboard))) +(defnc first-login-view [] + (let [loading? (refx/use-sub [:app.auth/login-loading]) + sent? (refx/use-sub [:app.auth/username-sent]) + [error error-res] (refx/use-sub [:app.auth/login-error])] + (hooks/use-effect + [sent?] + (when sent? + (rfe/push-state :app.core/dashboard))) - (d/div - ($ section - ($ first-login {:sent? sent? - :loading? loading? - :error error - :error-res error-res}))))) + (d/div + ($ section + ($ first-login {:sent? sent? + :loading? loading? + :error error + :error-res error-res}))))) - (defnc login-view [] - (let [loading? (refx/use-sub [:app.auth/login-loading]) - [error error-res] (refx/use-sub [:app.auth/login-error]) - email-sent? (refx/use-sub [:app.auth/email-sent]) - [state set-state] (hooks/use-state {:email ""})] - ($ section - ($ login {:sent? email-sent? - :loading? loading? - :error error - :error-res error-res - :state state - :set-state set-state})))) +(defnc login-view [] + (let [loading? (refx/use-sub [:app.auth/login-loading]) + [error error-res] (refx/use-sub [:app.auth/login-error]) + email-sent? (refx/use-sub [:app.auth/email-sent]) + [state set-state] (hooks/use-state {:email ""})] + ($ section + ($ login {:sent? email-sent? + :loading? loading? + :error error + :error-res error-res + :state state + :set-state set-state})))) diff --git a/src/front/app/components/aside.cljs b/src/front/app/components/aside.cljs index f44173a8..c16cdc0f 100644 --- a/src/front/app/components/aside.cljs +++ b/src/front/app/components/aside.cljs @@ -1,5 +1,5 @@ (ns front.app.components.aside - (:require + (:require [front.app.auth.supabase :as supabase] [front.app.components.button :refer [new-mock-btn toggle-aside-btn home-btn]] [front.app.components.svg :as svg] @@ -18,105 +18,105 @@ mocks-raw (refx/use-sub [:app.dashboard/mocks-raw])] (hooks/use-effect - [mocks-raw] - (when (nil? mocks-raw) - (refx/dispatch-sync [:app.dashboard/get-mocks current-user]))) + [mocks-raw] + (when (nil? mocks-raw) + (refx/dispatch-sync [:app.dashboard/get-mocks current-user]))) (d/li - (d/div - {:class "flex flex-row"} - (d/button - {:on-click #(rfe/push-state :app.core/mocks) - :class-name (str "flex items-center p-2 w-full text-base font-normal text-gray-900 rounded-lg " - "transition duration-75 group hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700 ") - :aria-controls "dropdown-mocks" - :aria-expanded aside-open? - :data-collapse-toggle "dropdown-mocks"} - ($ svg/mock-list-box) - (d/span {:class-name (str "flex ml-3 text-left whitespace-nowrap " - (when-not aside-open? - "lg:absolute lg:hidden"))} "Mocks")) - (d/button - {:class (str "px-2 rounded-lg fill-gray-200 bg-transparent hover:bg-gray-200 hover:fill-gray-400 " - (if aside-open? "block " "hidden ")) - :on-click #(refx/dispatch-sync [:app.dashboard/toggle-menu])} - ($ svg/arrow {:direction (if menu-open? :up :down)}))) - (d/ul - {:id "dropdown-mocks" - :class-name (str "py-2 space-y-2" - (when (or (not menu-open?) (not aside-open?)) " hidden"))} - (if (empty? mocks-raw) - (d/div {:class "w-full pl-11 space-y-2"} - (d/p {:class "text-gray-700 text-sm"} "You currently don't have any mocks. Create one!") - ($ new-mock-btn)) - (for [{:keys [mock-type wildcard id] - :or {mock-type :personal}} mocks-raw] - (d/li - {:key wildcard} - (d/button {:on-click #(rfe/push-state :app.core/mocks-view {:mock-id id}) - :class-name (str "pl-11 w-full flex items-center overflow-hidden ellipsis p-2 " - "text-base font-normal text-gray-900 rounded-lg transition " - "duration-75 group hover:bg-gray-100 dark:text-gray-200 " - "dark:hover:bg-gray-700")} - (if (= mock-type :personal) - ($ svg/personal-mock) - ($ svg/org-mock)) - (d/span {:class-name "flex-1 ml-3 text-left truncate"} wildcard))))))))) + (d/div + {:class "flex flex-row"} + (d/button + {:on-click #(rfe/push-state :app.core/mocks) + :class-name (str "flex items-center p-2 w-full text-base font-normal text-gray-900 rounded-lg " + "transition duration-75 group hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700 ") + :aria-controls "dropdown-mocks" + :aria-expanded aside-open? + :data-collapse-toggle "dropdown-mocks"} + ($ svg/mock-list-box) + (d/span {:class-name (str "flex ml-3 text-left whitespace-nowrap " + (when-not aside-open? + "lg:absolute lg:hidden"))} "Mocks")) + (d/button + {:class (str "px-2 rounded-lg fill-gray-200 bg-transparent hover:bg-gray-200 hover:fill-gray-400 " + (if aside-open? "block " "hidden ")) + :on-click #(refx/dispatch-sync [:app.dashboard/toggle-menu])} + ($ svg/arrow {:direction (if menu-open? :up :down)}))) + (d/ul + {:id "dropdown-mocks" + :class-name (str "py-2 space-y-2" + (when (or (not menu-open?) (not aside-open?)) " hidden"))} + (if (empty? mocks-raw) + (d/div {:class "w-full pl-11 space-y-2"} + (d/p {:class "text-gray-700 text-sm"} "You currently don't have any mocks. Create one!") + ($ new-mock-btn)) + (for [{:keys [mock-type wildcard id] + :or {mock-type :personal}} mocks-raw] + (d/li + {:key wildcard} + (d/button {:on-click #(rfe/push-state :app.core/mocks-view {:mock-id id}) + :class-name (str "pl-11 w-full flex items-center overflow-hidden ellipsis p-2 " + "text-base font-normal text-gray-900 rounded-lg transition " + "duration-75 group hover:bg-gray-100 dark:text-gray-200 " + "dark:hover:bg-gray-700")} + (if (= mock-type :personal) + ($ svg/personal-mock) + ($ svg/org-mock)) + (d/span {:class-name "flex-1 ml-3 text-left truncate"} wildcard))))))))) (defnc aside [] (let [aside (refx/use-sub [:app.dashboard/aside]) aside-open? (:open? aside)] - (d/div - {:class-name "overflow-hidden bg-gray-50 dark:bg-gray-900 pt-16"} - (d/aside - {:id "sidebar" - :class (str "fixed flex-col top-0 left-0 z-20 flex-shrink-0 w-full h-full duration-75 transition-width " - (if aside-open? "flex lg:w-64" "hidden lg:flex lg:w-16")) - :aria-label "Sidebar"} + (d/div + {:class-name "overflow-hidden bg-gray-50 dark:bg-gray-900 pt-16"} + (d/aside + {:id "sidebar" + :class (str "fixed flex-col top-0 left-0 z-20 flex-shrink-0 w-full h-full duration-75 transition-width " + (if aside-open? "flex lg:w-64" "hidden lg:flex lg:w-16")) + :aria-label "Sidebar"} - (d/div - {:class-name (str "flex relative flex-col flex-1 pt-8 min-h-0 bg-white border-r " - "border-gray-200 dark:bg-gray-800 dark:border-gray-700")} - (d/div {:class-name "flex overflow-y-auto flex-col flex-1 pt-5 pb-4"} - (d/div {:class-name "flex-1 px-3 space-y-1 bg-white divide-y divide-gray-200 dark:bg-gray-800 dark:divide-gray-700"} - (d/ul {:class-name "pb-2 space-y-2 pt-4"} - (d/li - ($ toggle-aside-btn {:aside-open? aside-open?})) - (d/li - ($ home-btn {:aside-open? aside-open?})) - ($ mock aside)) - (d/div {:class-name "pt-2 space-y-2"} - (d/a {:href "https://docs.moclojer.com/" - :target "_blank" - :class-name (str "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg transition" - " duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700")} - ($ svg/docs) - (d/span {:class-name - (str "ml-3 " - (when-not aside-open? - "lg:hidden lg:absolute"))} - "Docs")) - (d/a {:href "https://discord.gg/pbhBzKjhTb" - :target "_blank" - :class-name "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg transition duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700"} - ($ svg/help) - (d/span {:class-name - (str "ml-3 " - (when-not aside-open? - "lg:hidden lg:absolute"))} - "Help"))))) - (d/div {:class-name (str "absolute bottom-0 left-0 justify-center p-4 space-x-4 w-full lg:flex" - (when aside-open? - " flex-col space-y-4 p-4"))} - (d/button - {:on-click (fn [e] - (.preventDefault e) - (supabase/sign-out - #(refx/dispatch-sync [:app.auth/logout %]))) - :class-name (str "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg transition" - " duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700")} - ($ svg/help) - (when aside-open? - (d/span {:class-name "ml-3"} - "Logout"))))))))) + (d/div + {:class-name (str "flex relative flex-col flex-1 pt-8 min-h-0 bg-white border-r " + "border-gray-200 dark:bg-gray-800 dark:border-gray-700")} + (d/div {:class-name "flex overflow-y-auto flex-col flex-1 pt-5 pb-4"} + (d/div {:class-name "flex-1 px-3 space-y-1 bg-white divide-y divide-gray-200 dark:bg-gray-800 dark:divide-gray-700"} + (d/ul {:class-name "pb-2 space-y-2 pt-4"} + (d/li + ($ toggle-aside-btn {:aside-open? aside-open?})) + (d/li + ($ home-btn {:aside-open? aside-open?})) + ($ mock aside)) + (d/div {:class-name "pt-2 space-y-2"} + (d/a {:href "https://docs.moclojer.com/" + :target "_blank" + :class-name (str "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg transition" + " duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700")} + ($ svg/docs) + (d/span {:class-name + (str "ml-3 " + (when-not aside-open? + "lg:hidden lg:absolute"))} + "Docs")) + (d/a {:href "https://discord.gg/pbhBzKjhTb" + :target "_blank" + :class-name "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg transition duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700"} + ($ svg/help) + (d/span {:class-name + (str "ml-3 " + (when-not aside-open? + "lg:hidden lg:absolute"))} + "Help"))))) + (d/div {:class-name (str "absolute bottom-0 left-0 justify-center p-4 space-x-4 w-full lg:flex" + (when aside-open? + " flex-col space-y-4 p-4"))} + (d/button + {:on-click (fn [e] + (.preventDefault e) + (supabase/sign-out + #(refx/dispatch-sync [:app.auth/logout %]))) + :class-name (str "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg transition" + " duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700")} + ($ svg/help) + (when aside-open? + (d/span {:class-name "ml-3"} + "Logout"))))))))) diff --git a/src/front/app/components/button.cljs b/src/front/app/components/button.cljs index e6a2dd4e..c2cc1dcb 100644 --- a/src/front/app/components/button.cljs +++ b/src/front/app/components/button.cljs @@ -1,5 +1,5 @@ (ns front.app.components.button - (:require + (:require [front.app.lib :refer [defnc]] [helix.dom :as d] [helix.core :refer [$]] @@ -31,77 +31,74 @@ ;; TODO (def aside-styles {}) - (defnc button - [{:keys [children class-name on-click type disabled template] + [{:keys [children class-name on-click type disabled template] :or {class-name "" on-click "" base "solid" variant "blue" template "default" type "button"}}] - (d/button - {:class-name class-name - :on-click on-click - :type type - :disabled disabled} - children)) + (d/button + {:class-name class-name + :on-click on-click + :type type + :disabled disabled} + children)) (defn get-login-style [class-name base variant] - (let [base-style (keyword base) - variant-style (keyword variant)] - (str - (get base-styles base-style) - (get-in variant-styles [base-style variant-style]) - class-name))) - -(defnc login-button + (let [base-style (keyword base) + variant-style (keyword variant)] + (str + (get base-styles base-style) + (get-in variant-styles [base-style variant-style]) + class-name))) + +(defnc login-button [{:keys [children base variant class-name type disabled] :or {children "" base "solid" variant "blue" type "submit" disabled false}}] - (let [class-name (get-login-style class-name base variant)] - ($ button - {:class-name class-name - :type type - :disabled disabled} - children))) - + (let [class-name (get-login-style class-name base variant)] + ($ button + {:class-name class-name + :type type + :disabled disabled} + children))) (defnc new-mock-btn [] ($ button {:class-name "px-3 py-2 bg-pink-600 rounded-lg flex flex-row space-x-2 items-center btn-add" :on-click #(refx/dispatch [:app.dashboard/toggle-mock-modal])} - ($ svg/plus-sign) - (d/p {:class-name "text-white text-xs font-bold"} - "new mock") - ($ svg/box))) + ($ svg/plus-sign) + (d/p {:class-name "text-white text-xs font-bold"} + "new mock") + ($ svg/box))) - -(defnc toggle-aside-btn +(defnc toggle-aside-btn [{:keys [aside-open?] - :or {aside-open? false}}] + :or {aside-open? false}}] (d/button - {:id "aside-toggle" - :class (str (if aside-open? - "lg:absolute -right-4 " - "block w-full ") - "p-1 mt-2 flex flex-row justify-center z-50 bg-gray-300 rounded-lg " - "opacity-30 hover:opacity-100 transition-all lg:flex hidden") - :on-click #(refx/dispatch [:app.dashboard/toggle-aside! (not aside-open?)])} - ($ svg/arrow - {:direction (if aside-open? - :left - :right) - :class "w-3 h-3"}))) - -(defnc home-btn + {:id "aside-toggle" + :class (str (if aside-open? + "lg:absolute -right-4 " + "block w-full ") + "p-1 mt-2 flex flex-row justify-center z-50 bg-gray-300 rounded-lg " + "opacity-30 hover:opacity-100 transition-all lg:flex hidden") + :on-click #(refx/dispatch [:app.dashboard/toggle-aside! (not aside-open?)])} + ($ svg/arrow + {:direction (if aside-open? + :left + :right) + :class "w-3 h-3"}))) + +(defnc home-btn [{:keys [aside-open?] - :or {aside-open? false}}] - (d/button - {:class-name (str "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg " - "transtion duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700 " - (if aside-open? - "w-[calc(100%-8px)]" - "w-full" )) - :on-click #(rfe/push-state :app.core/dashboard)} - ($ svg/house) - (d/span {:class-name (str "ml-3 " - (when-not aside-open? - "lg:hidden lg:absolute"))} "Home"))) + :or {aside-open? false}}] + (d/button + {:class-name (str "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg " + "transtion duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700 " + (if aside-open? + "w-[calc(100%-8px)]" + "w-full")) + :on-click #(rfe/push-state :app.core/dashboard)} + ($ svg/house) + (d/span {:class-name (str "ml-3 " + (when-not aside-open? + "lg:hidden lg:absolute"))} "Home"))) diff --git a/src/front/app/components/container.cljs b/src/front/app/components/container.cljs index 8dc52fea..531269fc 100644 --- a/src/front/app/components/container.cljs +++ b/src/front/app/components/container.cljs @@ -5,14 +5,12 @@ [helix.dom :as d] [refx.alpha :as refx])) -(def login-styles - {:default "flex flex-col justify-center items-center px-6 pt-8 mx-auto md:h-screen pt:mt-0 dark:bg-gray-900" - :none ""}) - - +(def login-styles + {:default "flex flex-col justify-center items-center px-6 pt-8 mx-auto md:h-screen pt:mt-0 dark:bg-gray-900" + :none ""}) (defnc aside-container [{:keys [children] - :or {is-sidebar-toogle? false}}] + :or {is-sidebar-toogle? false}}] (let [aside (refx/use-sub [:app.dashboard/aside]) aside-open? (:open? aside)] (d/div @@ -24,13 +22,12 @@ :id "main-content"} children))) - (defn get-login-style [{:keys [template children] - :or {template :default}}] + :or {template :default}}] (let [template (keyword template)] (str (-> template login-styles) children))) (defnc container [{:keys [children class-name]}] (d/div {:class-name (or class-name (get login-styles :default))} - children)) + children)) diff --git a/src/front/app/components/footer.cljs b/src/front/app/components/footer.cljs index f8520ac7..087def3b 100644 --- a/src/front/app/components/footer.cljs +++ b/src/front/app/components/footer.cljs @@ -1,10 +1,11 @@ (ns front.app.components.footer - (:require [cljs.pprint :as pprint] - [front.app.components.container :refer [aside-container]] - [front.app.lib :refer [defnc]] - [helix.core :refer [$]] - [helix.dom :as d] - [refx.alpha :as refx])) + (:require + [cljs.pprint :as pprint] + [front.app.components.container :refer [aside-container]] + [front.app.lib :refer [defnc]] + [helix.core :refer [$]] + [helix.dom :as d] + [refx.alpha :as refx])) (defnc footer [] (let [db (refx/use-sub [:app.database/db])] diff --git a/src/front/app/components/labelinput.cljs b/src/front/app/components/labelinput.cljs index 854ff993..c36cf3e0 100644 --- a/src/front/app/components/labelinput.cljs +++ b/src/front/app/components/labelinput.cljs @@ -1,31 +1,31 @@ (ns front.app.components.labelinput - (:require + (:require [helix.dom :as d] [helix.core :refer [defnc]])) -(def input-styles +(def input-styles {:login (str "bg-gray-50 border border-gray-300 text-gray-900 sm:text-sm rounded-lg focus:ring-primary-500 focus:border-primary-500 " - "block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white " - "dark:focus:ring-primary-500 dark:focus:border-primary-500")}) + "block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white " + "dark:focus:ring-primary-500 dark:focus:border-primary-500")}) -(def label-styles - {:login +(def label-styles + {:login {:default "block mb-2 text-sm font-medium text-gray-900 dark:text-white"}}) (defnc labeled-input [{:keys [input-template label-template label for placeholder name state on-change children]}] (let [input-classes (get input-styles (keyword (or input-template :login)) "") label-classes (get-in label-styles [(keyword (or input-template :login)) (keyword (or label-template :default))])] (d/div - (d/label - {:class label-classes - :for for} - label) - (d/input - {:class input-classes - :for for - :placeholder placeholder - :name name - :value (:email state) - :required true - :on-change on-change}) - children))) + (d/label + {:class label-classes + :for for} + label) + (d/input + {:class input-classes + :for for + :placeholder placeholder + :name name + :value (:email state) + :required true + :on-change on-change}) + children))) diff --git a/src/front/app/components/loading.cljs b/src/front/app/components/loading.cljs index a4a5b989..5fbcacb7 100644 --- a/src/front/app/components/loading.cljs +++ b/src/front/app/components/loading.cljs @@ -1,4 +1,4 @@ -(ns front.app.components.loading +(ns front.app.components.loading (:require [front.app.lib :refer [defnc]] [helix.dom :as d])) diff --git a/src/front/app/components/messages.cljs b/src/front/app/components/messages.cljs index 9a1fd9a6..8a35e754 100644 --- a/src/front/app/components/messages.cljs +++ b/src/front/app/components/messages.cljs @@ -1,11 +1,11 @@ (ns front.app.components.messages (:require - [cljs.pprint :as pprint] - [clojure.string :as str] - [front.app.lib :refer [defnc]] - [front.app.components.profile :refer [pfp-img]] - [helix.dom :as d] - [helix.core :refer [$]])) + [cljs.pprint :as pprint] + [clojure.string :as str] + [front.app.lib :refer [defnc]] + [front.app.components.profile :refer [pfp-img]] + [helix.dom :as d] + [helix.core :refer [$]])) (defn gen-today-date [] (let [date (js/Date.) @@ -19,51 +19,51 @@ [{:keys [message index]}] (let [msg-seq (seq message)] (d/div - (d/p {:class-name "text-base font-normal text-gray-500 dark:text-gray-400"} - (nth msg-seq index)) - (when (< index (dec (count message))) - (do - (d/br) - ($ text {:message message :index (inc index)})))))) + (d/p {:class-name "text-base font-normal text-gray-500 dark:text-gray-400"} + (nth msg-seq index)) + (when (< index (dec (count message))) + (do + (d/br) + ($ text {:message message :index (inc index)})))))) -(defnc default-message +(defnc default-message [{:keys [children] :as props}] (d/section - (d/div {:class-name (str "p-4 bg-white block sm:flex items-center justify-between border-b" - "border-gray-200 lg:mt-1.5 dark:bg-gray-800 dark:border-gray-700")} - (d/div {:class-name "flex items-center divide-x divide-gray-100 dark:divide-gray-700"} - (d/div {:class-name "pl-3 text-sm font-medium text-gray-500"} - (gen-today-date)))) + (d/div {:class-name (str "p-4 bg-white block sm:flex items-center justify-between border-b" + "border-gray-200 lg:mt-1.5 dark:bg-gray-800 dark:border-gray-700")} + (d/div {:class-name "flex items-center divide-x divide-gray-100 dark:divide-gray-700"} + (d/div {:class-name "pl-3 text-sm font-medium text-gray-500"} + (gen-today-date)))) - (d/div {:class-name "p-5"} - (d/div {:class-name "flex items-center mb-4"} - (d/div {:class-name "flex-shrink-0"} - ($ pfp-img - {:image-style (props :image-style) - :pfp-url (props :image) - :pfp-loading? false})) - (d/div {:class-name "ml-4"} - (d/p (props :author)) - (d/div {:class-name "mltext-sm text-gray-500 text-normal dark:text-gray-400"} - (d/i (props :email))))) - (d/h1 {:class-name "mb-4 text-2xl font-bold text-gray-900 dark:text-white"} - (props :title)) - (d/div {:class-name "space-y-1"} - ($ text {:message (seq (props :message)) :index 0}) - (d/p {:class-name "p-2 text-base font-normal text-gray-500 dark:text-gray-400"} - "Best Regards," - (d/br) - (d/i "Avelino Founder Team")))))) + (d/div {:class-name "p-5"} + (d/div {:class-name "flex items-center mb-4"} + (d/div {:class-name "flex-shrink-0"} + ($ pfp-img + {:image-style (props :image-style) + :pfp-url (props :image) + :pfp-loading? false})) + (d/div {:class-name "ml-4"} + (d/p (props :author)) + (d/div {:class-name "mltext-sm text-gray-500 text-normal dark:text-gray-400"} + (d/i (props :email))))) + (d/h1 {:class-name "mb-4 text-2xl font-bold text-gray-900 dark:text-white"} + (props :title)) + (d/div {:class-name "space-y-1"} + ($ text {:message (seq (props :message)) :index 0}) + (d/p {:class-name "p-2 text-base font-normal text-gray-500 dark:text-gray-400"} + "Best Regards," + (d/br) + (d/i "Avelino Founder Team")))))) -(defnc blogpost-message +(defnc blogpost-message [{:keys [children] :as props}] - (d/div {:class-name (str "p-4 bg-gray-200 block sm:flex items-center justify-left border-b mr-8 py-8" + (d/div {:class-name (str "p-4 bg-gray-200 block sm:flex items-center justify-left border-b mr-8 py-8" "border-gray-200 lg:mt-1.5 dark:bg-gray-800 dark:border-gray-700")} (d/div {:class-name "flex items-center mb-4"} (d/div {:class-name "flex-shrink-0"} - ($ pfp-img + ($ pfp-img {:image-style (props :image-style) - :pfp-loading? false + :pfp-loading? false :pfp-url (props :image)})) (d/div {:class-name "ml-4"} (d/div {:class-name "mltext-sm text-gray-500 text-normal dark:text-gray-400"} diff --git a/src/front/app/components/navbar.cljs b/src/front/app/components/navbar.cljs index 91a9206c..6bae82a3 100644 --- a/src/front/app/components/navbar.cljs +++ b/src/front/app/components/navbar.cljs @@ -1,13 +1,13 @@ (ns front.app.components.navbar - (:require [front.app.components.button :refer [new-mock-btn]] - [front.app.components.profile :refer [user-profile]] - [front.app.components.svg :as svg] - [front.app.lib :refer [defnc]] - [reitit.frontend.easy :as rfe] - [helix.core :refer [$]] - [helix.dom :as d] - [refx.alpha :as refx])) - + (:require + [front.app.components.button :refer [new-mock-btn]] + [front.app.components.profile :refer [user-profile]] + [front.app.components.svg :as svg] + [front.app.lib :refer [defnc]] + [reitit.frontend.easy :as rfe] + [helix.core :refer [$]] + [helix.dom :as d] + [refx.alpha :as refx])) (defnc nav-bar [{:keys [user-data]}] (let [aside (refx/use-sub [:app.dashboard/aside]) @@ -24,8 +24,8 @@ :aria-controls "sidebar" :on-click #(refx/dispatch [:app.dashboard/toggle-aside! (not aside-open?)]) :class-name (str "p-2 mr-3 text-gray-600 rounded cursor-pointer " - "hover:text-gray-900 hover:bg-gray-100 dark:text-gray-400 " - "dark:hover:text-white dark:hover:bg-gray-700 lg:hidden")} + "hover:text-gray-900 hover:bg-gray-100 dark:text-gray-400 " + "dark:hover:text-white dark:hover:bg-gray-700 lg:hidden")} (if aside-open? ($ svg/hamburger-menu-close) ($ svg/hamburger-menu))) diff --git a/src/front/app/components/navlink.cljs b/src/front/app/components/navlink.cljs index ce94d912..f11b3c3f 100644 --- a/src/front/app/components/navlink.cljs +++ b/src/front/app/components/navlink.cljs @@ -1,4 +1,4 @@ -(ns front.app.components.navlink +(ns front.app.components.navlink (:require [front.app.lib :refer [defnc]] [helix.dom :as d])) diff --git a/src/front/app/components/profile.cljs b/src/front/app/components/profile.cljs index e6e97178..98013106 100644 --- a/src/front/app/components/profile.cljs +++ b/src/front/app/components/profile.cljs @@ -1,17 +1,18 @@ (ns front.app.components.profile - (:require [clojure.string :as str] - [front.app.auth.supabase :as supabase] - [front.app.lib :refer [defnc]] - [helix.core :refer [$]] - [helix.dom :as d] - [helix.hooks :as hooks] - [promesa.core :as p] - [refx.alpha :as refx])) + (:require + [clojure.string :as str] + [front.app.auth.supabase :as supabase] + [front.app.lib :refer [defnc]] + [helix.core :refer [$]] + [helix.dom :as d] + [helix.hooks :as hooks] + [promesa.core :as p] + [refx.alpha :as refx])) (def gravatar-base-url "https://gravatar.com/avatar/") (def auth0-cdn-base-url "https://cdn.auth0.com/avatars/") -(def pfp-styles +(def pfp-styles {:default "w-8 h-8 rounded-none opacity-100" :rounded "w-8 h-8 rounded-full opacity-100" :loading "w-8 h-8 rounded-full opacity-30 animate-pulse"}) @@ -26,21 +27,21 @@ (str/join "") str/lower-case)] (str auth0-cdn-base-url initials ".png"))) - + (defn get-image-style [{:keys [children image-style]}] (let [image-style (keyword image-style)] - (str (get pfp-styles image-style ) + (str (get pfp-styles image-style) children))) -(defnc pfp-img - [{:keys [image-style +(defnc pfp-img + [{:keys [image-style pfp-loading? pfp-url] :as props}] (let [classes (get-image-style props)] (d/img {:class-name classes & (dissoc props :image-style) :src (if (= true pfp-loading?) - "/images/default-pfp.png" - pfp-url)}))) + "/images/default-pfp.png" + pfp-url)}))) (defnc user-profile [{:keys [user-data]}] (let [[pfp-url set-pfp-url!] (hooks/use-state nil) @@ -54,28 +55,28 @@ ;; https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest ;; https://cdn.auth0.com/avatars/jt.png (hooks/use-effect - [pfp-url] - (when (and pfp-loading? (nil? pfp-url)) - (if-let [email (some->> (:email user-data) - str/trim - str/lower-case - (.encode (js/TextEncoder. "utf-8")))] - (-> (.digest (.-subtle js/crypto) "SHA-256" email) - (p/then - (fn [hash-buf] - (-> (.from js/Array (js/Uint8Array. hash-buf)) - (.map #(-> (.toString % 16) - (.padStart 2 "0"))) - (.join "")))) - (p/then - (fn [hex] - (set-pfp-url! (str gravatar-base-url hex - "?default=" default-pfp-url)))) - (p/catch - (fn [err] - (.log js/console "failed to digest email hash:" err) - (set-pfp-url! default-pfp-url)))) - (set-pfp-url! default-pfp-url)))) + [pfp-url] + (when (and pfp-loading? (nil? pfp-url)) + (if-let [email (some->> (:email user-data) + str/trim + str/lower-case + (.encode (js/TextEncoder. "utf-8")))] + (-> (.digest (.-subtle js/crypto) "SHA-256" email) + (p/then + (fn [hash-buf] + (-> (.from js/Array (js/Uint8Array. hash-buf)) + (.map #(-> (.toString % 16) + (.padStart 2 "0"))) + (.join "")))) + (p/then + (fn [hex] + (set-pfp-url! (str gravatar-base-url hex + "?default=" default-pfp-url)))) + (p/catch + (fn [err] + (.log js/console "failed to digest email hash:" err) + (set-pfp-url! default-pfp-url)))) + (set-pfp-url! default-pfp-url)))) (d/div {:class-name "hidden lg:block"} (d/button {:type "button" @@ -94,21 +95,21 @@ (:email user-data))) (d/ul {:class-name "py-1" :role "none"} (d/li - (d/a {:href "" + (d/a {:href "" ;; TODO settings - :class-name "block py-2 px-4 text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600 dark:hover:text-white" - :role "menuitem"} - "Settings")) + :class-name "block py-2 px-4 text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600 dark:hover:text-white" + :role "menuitem"} + "Settings")) (d/li - (d/button - {:class-name (str "w-full block py-2 px-4 text-sm text-left text-gray-700 hover:bg-gray-100" - "dark:text-gray-300 dark:hover:bg-gray-600 dark:hover:text-white") - :on-click (fn [e] - (.preventDefault e) - (supabase/sign-out - #(refx/dispatch-sync [:app.auth/logout %]))) - :role "menuitem"} - "Logout"))))))) + (d/button + {:class-name (str "w-full block py-2 px-4 text-sm text-left text-gray-700 hover:bg-gray-100" + "dark:text-gray-300 dark:hover:bg-gray-600 dark:hover:text-white") + :on-click (fn [e] + (.preventDefault e) + (supabase/sign-out + #(refx/dispatch-sync [:app.auth/logout %]))) + :role "menuitem"} + "Logout"))))))) diff --git a/src/front/app/components/section.cljs b/src/front/app/components/section.cljs index b28ab92a..a8b2d8ef 100644 --- a/src/front/app/components/section.cljs +++ b/src/front/app/components/section.cljs @@ -3,9 +3,9 @@ [helix.dom :as d] [helix.core :refer [defnc]])) -(def section-styles +(def section-styles {:default "bg-gray-50 dark:bg-gray-800"}) (defnc section [{:keys [children class-name]}] (d/section {:class-name (or class-name (get section-styles :default))} - children)) + children)) diff --git a/src/front/app/components/status.cljs b/src/front/app/components/status.cljs index b6378641..09fbefc7 100644 --- a/src/front/app/components/status.cljs +++ b/src/front/app/components/status.cljs @@ -1,10 +1,11 @@ (ns front.app.components.status - (:require [front.app.components.svg :as svg] - [front.app.lib :refer [defnc]] - [helix.core :refer [$]] - [helix.hooks :as hooks] - [helix.dom :as d] - [refx.alpha :as refx])) + (:require + [front.app.components.svg :as svg] + [front.app.lib :refer [defnc]] + [helix.core :refer [$]] + [helix.hooks :as hooks] + [helix.dom :as d] + [refx.alpha :as refx])) (defnc status-card [{:keys [status loading? title]}] (d/div {:class (str "px-3 mr-2 flex flex-row space-x-2 items-center rounded-md dns-" @@ -48,12 +49,12 @@ ["publishing" "offline"]))] (hooks/use-effect - [status attempt] - (when loading? - (js/setTimeout #(refx/dispatch - [:app.dashboard/get-mock-pub-stts - {:mock-id id}]) - 5000))) + [status attempt] + (when loading? + (js/setTimeout #(refx/dispatch + [:app.dashboard/get-mock-pub-stts + {:mock-id id}]) + 5000))) ($ status-card {:status (if enabled diff --git a/src/front/app/components/svg.cljs b/src/front/app/components/svg.cljs index a79e91b4..794c5457 100644 --- a/src/front/app/components/svg.cljs +++ b/src/front/app/components/svg.cljs @@ -1,5 +1,5 @@ (ns front.app.components.svg - (:require + (:require [front.app.lib :refer [defnc]] [helix.dom :as d])) @@ -36,8 +36,8 @@ :viewBox "0 0 17 17" :fill "none"} (d/path - {:d "M7.07983 9.12424C7.01155 9.05355 6.92988 8.99716 6.83957 8.95837C6.74927 8.91958 6.65215 8.89916 6.55387 8.89831C6.45559 8.89745 6.35813 8.91618 6.26716 8.9534C6.1762 8.99061 6.09356 9.04557 6.02406 9.11507C5.95457 9.18456 5.89961 9.2672 5.86239 9.35817C5.82517 9.44913 5.80645 9.5466 5.8073 9.64487C5.80816 9.74315 5.82857 9.84028 5.86736 9.93058C5.90616 10.0209 5.96254 10.1026 6.03324 10.1708L8.25373 12.3913C8.39253 12.5301 8.58076 12.608 8.77702 12.608C8.97329 12.608 9.16152 12.5301 9.30032 12.3913L11.5208 10.1708C11.6556 10.0312 11.7302 9.84427 11.7286 9.6502C11.7269 9.45613 11.649 9.27049 11.5118 9.13326C11.3746 8.99603 11.1889 8.91818 10.9949 8.9165C10.8008 8.91481 10.6138 8.98942 10.4742 9.12424L9.51719 10.0813V5.94672H13.218C13.6106 5.94672 13.9871 6.10268 14.2648 6.3803C14.5424 6.65791 14.6983 7.03444 14.6983 7.42705V12.6082C14.6983 13.0008 14.5424 13.3773 14.2648 13.6549C13.9871 13.9326 13.6106 14.0885 13.218 14.0885H4.33604C3.94343 14.0885 3.56691 13.9326 3.28929 13.6549C3.01168 13.3773 2.85571 13.0008 2.85571 12.6082V7.42705C2.85571 7.03444 3.01168 6.65791 3.28929 6.3803C3.56691 6.10268 3.94343 5.94672 4.33604 5.94672H8.03686V10.0813L7.07983 9.12424V9.12424ZM8.03686 4.46639C8.03686 4.27009 8.11484 4.08182 8.25365 3.94302C8.39246 3.80421 8.58072 3.72623 8.77702 3.72623C8.97333 3.72623 9.16159 3.80421 9.3004 3.94302C9.43921 4.08182 9.51719 4.27009 9.51719 4.46639V5.94672H8.03686V4.46639Z" - :fill "white"}))) + {:d "M7.07983 9.12424C7.01155 9.05355 6.92988 8.99716 6.83957 8.95837C6.74927 8.91958 6.65215 8.89916 6.55387 8.89831C6.45559 8.89745 6.35813 8.91618 6.26716 8.9534C6.1762 8.99061 6.09356 9.04557 6.02406 9.11507C5.95457 9.18456 5.89961 9.2672 5.86239 9.35817C5.82517 9.44913 5.80645 9.5466 5.8073 9.64487C5.80816 9.74315 5.82857 9.84028 5.86736 9.93058C5.90616 10.0209 5.96254 10.1026 6.03324 10.1708L8.25373 12.3913C8.39253 12.5301 8.58076 12.608 8.77702 12.608C8.97329 12.608 9.16152 12.5301 9.30032 12.3913L11.5208 10.1708C11.6556 10.0312 11.7302 9.84427 11.7286 9.6502C11.7269 9.45613 11.649 9.27049 11.5118 9.13326C11.3746 8.99603 11.1889 8.91818 10.9949 8.9165C10.8008 8.91481 10.6138 8.98942 10.4742 9.12424L9.51719 10.0813V5.94672H13.218C13.6106 5.94672 13.9871 6.10268 14.2648 6.3803C14.5424 6.65791 14.6983 7.03444 14.6983 7.42705V12.6082C14.6983 13.0008 14.5424 13.3773 14.2648 13.6549C13.9871 13.9326 13.6106 14.0885 13.218 14.0885H4.33604C3.94343 14.0885 3.56691 13.9326 3.28929 13.6549C3.01168 13.3773 2.85571 13.0008 2.85571 12.6082V7.42705C2.85571 7.03444 3.01168 6.65791 3.28929 6.3803C3.56691 6.10268 3.94343 5.94672 4.33604 5.94672H8.03686V10.0813L7.07983 9.12424V9.12424ZM8.03686 4.46639C8.03686 4.27009 8.11484 4.08182 8.25365 3.94302C8.39246 3.80421 8.58072 3.72623 8.77702 3.72623C8.97333 3.72623 9.16159 3.80421 9.3004 3.94302C9.43921 4.08182 9.51719 4.27009 9.51719 4.46639V5.94672H8.03686V4.46639Z" + :fill "white"}))) (defnc box [{:keys [color] :or {color "white"}}] @@ -60,11 +60,11 @@ :fill color})) (d/defs (d/clipPath - {:id "clip0_236_1090"} - (d/rect {:width "12" - :height "12" - :fill "white" - :transform "translate(0 0.5)"}))))) + {:id "clip0_236_1090"} + (d/rect {:width "12" + :height "12" + :fill "white" + :transform "translate(0 0.5)"}))))) (defnc personal-mock [] (d/svg {:class-name "" @@ -150,7 +150,6 @@ :clip-rule "evenodd" :fill-rule "evenodd"}))) - (defnc mock-list-box [] (d/svg {:class-name "flex-shrink-0 w-6 h-6 text-gray-500 transition duration-75 group-hover:text-gray-900 dark:text-gray-400 dark:group-hover:text-white" :fill "currentColor" @@ -180,125 +179,125 @@ (defnc upload [{:keys [class-name]}] (d/svg - {:class class-name - :aria-hidden "true" - :fill "none" - :viewBox "0 0 20 16"} - (d/path {:stroke "currentColor" - :stroke-linecap "round" - :stroke-linejoin "round" - :stroke-width "2" - :d "M13 13h3a3 3 0 0 0 0-6h-.025A5.56 5.56 0 0 0 16 6.5 5.5 5.5 0 0 0 5.207 5.021C5.137 5.017 5.071 5 5 5a4 4 0 0 0 0 8h2.167M10 15V6m0 0L8 8m2-2 2 2"}))) + {:class class-name + :aria-hidden "true" + :fill "none" + :viewBox "0 0 20 16"} + (d/path {:stroke "currentColor" + :stroke-linecap "round" + :stroke-linejoin "round" + :stroke-width "2" + :d "M13 13h3a3 3 0 0 0 0-6h-.025A5.56 5.56 0 0 0 16 6.5 5.5 5.5 0 0 0 5.207 5.021C5.137 5.017 5.071 5 5 5a4 4 0 0 0 0 8h2.167M10 15V6m0 0L8 8m2-2 2 2"}))) (defnc info [] (d/svg - {:class "w-4 h-4" - :fill "#046c4e" - :viewBox "0 0 15 15"} - (d/path - {:fill-rule "evenodd" - :clip-rule "evenodd" - :d (str "M7.2 14.7C9.10956 14.7 10.9409 13.9414 12.2912 " - "12.5912C13.6414 11.2409 14.4 9.40956 14.4 7.5C14.4 5.59044 " - "13.6414 3.7591 12.2912 2.40883C10.9409 1.05857 9.10956 " - "0.300003 7.2 0.300003C5.29044 0.300003 3.45909 1.05857 " - "2.10883 2.40883C0.758569 3.7591 0 5.59044 0 7.5C0 9.40956 " - "0.758569 11.2409 2.10883 12.5912C3.45909 13.9414 5.29044 " - "14.7 7.2 14.7ZM10.5363 6.3363C10.7002 6.16656 10.791 5.93922 " - "10.7889 5.70324C10.7869 5.46727 10.6922 5.24153 10.5253 " - "5.07467C10.3585 4.9078 10.1327 4.81315 9.89676 4.8111C9.66078 " - "4.80905 9.43344 4.89976 9.2637 5.0637L6.3 8.0274L5.1363 " - "6.8637C4.96656 6.69976 4.73922 6.60905 4.50324 6.6111C4.26726 " - "6.61315 4.04153 6.7078 3.87466 6.87467C3.7078 7.04153 3.61314 " - "7.26727 3.61109 7.50324C3.60904 7.73922 3.69976 7.96656 " - "3.8637 8.1363L5.6637 9.9363C5.83248 10.105 6.06135 10.1998 " - "6.3 10.1998C6.53865 10.1998 6.76753 10.105 6.9363 " - "9.9363L10.5363 6.3363Z")}))) + {:class "w-4 h-4" + :fill "#046c4e" + :viewBox "0 0 15 15"} + (d/path + {:fill-rule "evenodd" + :clip-rule "evenodd" + :d (str "M7.2 14.7C9.10956 14.7 10.9409 13.9414 12.2912 " + "12.5912C13.6414 11.2409 14.4 9.40956 14.4 7.5C14.4 5.59044 " + "13.6414 3.7591 12.2912 2.40883C10.9409 1.05857 9.10956 " + "0.300003 7.2 0.300003C5.29044 0.300003 3.45909 1.05857 " + "2.10883 2.40883C0.758569 3.7591 0 5.59044 0 7.5C0 9.40956 " + "0.758569 11.2409 2.10883 12.5912C3.45909 13.9414 5.29044 " + "14.7 7.2 14.7ZM10.5363 6.3363C10.7002 6.16656 10.791 5.93922 " + "10.7889 5.70324C10.7869 5.46727 10.6922 5.24153 10.5253 " + "5.07467C10.3585 4.9078 10.1327 4.81315 9.89676 4.8111C9.66078 " + "4.80905 9.43344 4.89976 9.2637 5.0637L6.3 8.0274L5.1363 " + "6.8637C4.96656 6.69976 4.73922 6.60905 4.50324 6.6111C4.26726 " + "6.61315 4.04153 6.7078 3.87466 6.87467C3.7078 7.04153 3.61314 " + "7.26727 3.61109 7.50324C3.60904 7.73922 3.69976 7.96656 " + "3.8637 8.1363L5.6637 9.9363C5.83248 10.105 6.06135 10.1998 " + "6.3 10.1998C6.53865 10.1998 6.76753 10.105 6.9363 " + "9.9363L10.5363 6.3363Z")}))) (defnc error [] (d/svg - {:class "w-4 h-4" - :fill "#c81e1e" - :viewBox "0 0 15 15"} - (d/path - {:fill-rule "evenodd" - :clip-rule "evenodd" - :d (str "M7.2 14.7C9.10956 14.7 10.9409 13.9414 12.2912 " - "12.5912C13.6414 11.2409 14.4 9.40956 14.4 7.5C14.4 5.59044 " - "13.6414 3.7591 12.2912 2.40883C10.9409 1.05857 9.10956 " - "0.300003 7.2 0.300003C5.29044 0.300003 3.45909 1.05857 " - "2.10883 2.40883C0.758569 3.7591 0 5.59044 0 7.5C0 9.40956 " - "0.758569 11.2409 2.10883 12.5912C3.45909 13.9414 5.29044 14.7 " - "7.2 14.7ZM6.0363 5.0637C5.86656 4.89976 5.63922 4.80905 " - "5.40324 4.8111C5.16726 4.81315 4.94153 4.9078 4.77466 " - "5.07467C4.6078 5.24153 4.51314 5.46727 4.51109 " - "5.70324C4.50904 5.93922 4.59976 6.16656 4.7637 6.3363L5.9274 " - "7.5L4.7637 8.6637C4.67774 8.74673 4.60918 8.84604 4.56201 " - "8.95584C4.51484 9.06564 4.49001 9.18374 4.48897 " - "9.30324C4.48794 9.42274 4.51071 9.54125 4.55596 " - "9.65186C4.60121 9.76247 4.66804 9.86296 4.75254 " - "9.94746C4.83705 10.032 4.93753 10.0988 5.04814 " - "10.144C5.15875 10.1893 5.27726 10.2121 5.39676 " - "10.211C5.51626 10.21 5.63436 10.1852 5.74416 10.138C5.85397 " - "10.0908 5.95328 10.0223 6.0363 9.9363L7.2 8.7726L8.3637 " - "9.9363C8.53344 10.1002 8.76078 10.191 8.99676 10.1889C9.23274 " - "10.1869 9.45847 10.0922 9.62534 9.92534C9.7922 9.75847 " - "9.88686 9.53274 9.88891 9.29676C9.89096 9.06079 9.80024 " - "8.83345 9.6363 8.6637L8.4726 7.5L9.6363 6.3363C9.80024 " - "6.16656 9.89096 5.93922 9.88891 5.70324C9.88686 5.46727 " - "9.7922 5.24153 9.62534 5.07467C9.45847 4.9078 9.23274 " - "4.81315 8.99676 4.8111C8.76078 4.80905 8.53344 4.89976 " - "8.3637 5.0637L7.2 6.2274L6.0363 5.0637Z")}))) + {:class "w-4 h-4" + :fill "#c81e1e" + :viewBox "0 0 15 15"} + (d/path + {:fill-rule "evenodd" + :clip-rule "evenodd" + :d (str "M7.2 14.7C9.10956 14.7 10.9409 13.9414 12.2912 " + "12.5912C13.6414 11.2409 14.4 9.40956 14.4 7.5C14.4 5.59044 " + "13.6414 3.7591 12.2912 2.40883C10.9409 1.05857 9.10956 " + "0.300003 7.2 0.300003C5.29044 0.300003 3.45909 1.05857 " + "2.10883 2.40883C0.758569 3.7591 0 5.59044 0 7.5C0 9.40956 " + "0.758569 11.2409 2.10883 12.5912C3.45909 13.9414 5.29044 14.7 " + "7.2 14.7ZM6.0363 5.0637C5.86656 4.89976 5.63922 4.80905 " + "5.40324 4.8111C5.16726 4.81315 4.94153 4.9078 4.77466 " + "5.07467C4.6078 5.24153 4.51314 5.46727 4.51109 " + "5.70324C4.50904 5.93922 4.59976 6.16656 4.7637 6.3363L5.9274 " + "7.5L4.7637 8.6637C4.67774 8.74673 4.60918 8.84604 4.56201 " + "8.95584C4.51484 9.06564 4.49001 9.18374 4.48897 " + "9.30324C4.48794 9.42274 4.51071 9.54125 4.55596 " + "9.65186C4.60121 9.76247 4.66804 9.86296 4.75254 " + "9.94746C4.83705 10.032 4.93753 10.0988 5.04814 " + "10.144C5.15875 10.1893 5.27726 10.2121 5.39676 " + "10.211C5.51626 10.21 5.63436 10.1852 5.74416 10.138C5.85397 " + "10.0908 5.95328 10.0223 6.0363 9.9363L7.2 8.7726L8.3637 " + "9.9363C8.53344 10.1002 8.76078 10.191 8.99676 10.1889C9.23274 " + "10.1869 9.45847 10.0922 9.62534 9.92534C9.7922 9.75847 " + "9.88686 9.53274 9.88891 9.29676C9.89096 9.06079 9.80024 " + "8.83345 9.6363 8.6637L8.4726 7.5L9.6363 6.3363C9.80024 " + "6.16656 9.89096 5.93922 9.88891 5.70324C9.88686 5.46727 " + "9.7922 5.24153 9.62534 5.07467C9.45847 4.9078 9.23274 " + "4.81315 8.99676 4.8111C8.76078 4.80905 8.53344 4.89976 " + "8.3637 5.0637L7.2 6.2274L6.0363 5.0637Z")}))) (defnc close [] (d/svg - {:class-name "w-5 h-5" - :fill "currentColor" - :viewBox " 0 0 20 20"} - (d/path - {:fill-rule "evenodd" - :d "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" - :clip-rule "evenodd"}))) + {:class-name "w-5 h-5" + :fill "currentColor" + :viewBox " 0 0 20 20"} + (d/path + {:fill-rule "evenodd" + :d "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" + :clip-rule "evenodd"}))) (defnc arrow-link [] (d/svg - {:class "w-4 h-4" - :width "16" - :height "16" - :viewBox "0 0 16 16"} - (d/path - {:fill-rule "evenodd" - :d (str "M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 " - "1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 " - "0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 " - ".5-.5h6.636a.5.5 0 0 0 .5-.5")}) - (d/path - {:fill-rule "evenodd" - :d (str "M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 " - "9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0z")}))) + {:class "w-4 h-4" + :width "16" + :height "16" + :viewBox "0 0 16 16"} + (d/path + {:fill-rule "evenodd" + :d (str "M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 " + "1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 " + "0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 " + ".5-.5h6.636a.5.5 0 0 0 .5-.5")}) + (d/path + {:fill-rule "evenodd" + :d (str "M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 " + "9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0z")}))) (defnc warning [] (d/svg - {:class "w-8 h-8" - :viewBox "0 0 36 35" - :fill "none"} - (d/path - {:stroke "#9ca3af" - :stroke-width "3" - :stroke-linecap "round" - :stroke-linejoin "round" - :d (str "M18 10.75V17.75M18 24.75H18.0175M33.75 17.75C33.75 19.8183 " - "33.3426 21.8664 32.5511 23.7773C31.7596 25.6881 30.5995 " - "27.4244 29.1369 28.8869C27.6744 30.3495 25.9381 31.5096 " - "24.0273 32.3011C22.1164 33.0926 20.0683 33.5 18 33.5C15.9317 " - "33.5 13.8836 33.0926 11.9727 32.3011C10.0619 31.5096 8.32559 " - "30.3495 6.86307 28.8869C5.40055 27.4244 4.24041 25.6881 3.4489 " - "23.7773C2.65739 21.8664 2.25 19.8183 2.25 17.75C2.25 13.5728 " - "3.90937 9.56677 6.86307 6.61307C9.81677 3.65937 13.8228 2 18 " - "2C22.1772 2 26.1832 3.65937 29.1369 6.61307C32.0906 9.56677 " - "33.75 13.5728 33.75 17.75Z")}))) + {:class "w-8 h-8" + :viewBox "0 0 36 35" + :fill "none"} + (d/path + {:stroke "#9ca3af" + :stroke-width "3" + :stroke-linecap "round" + :stroke-linejoin "round" + :d (str "M18 10.75V17.75M18 24.75H18.0175M33.75 17.75C33.75 19.8183 " + "33.3426 21.8664 32.5511 23.7773C31.7596 25.6881 30.5995 " + "27.4244 29.1369 28.8869C27.6744 30.3495 25.9381 31.5096 " + "24.0273 32.3011C22.1164 33.0926 20.0683 33.5 18 33.5C15.9317 " + "33.5 13.8836 33.0926 11.9727 32.3011C10.0619 31.5096 8.32559 " + "30.3495 6.86307 28.8869C5.40055 27.4244 4.24041 25.6881 3.4489 " + "23.7773C2.65739 21.8664 2.25 19.8183 2.25 17.75C2.25 13.5728 " + "3.90937 9.56677 6.86307 6.61307C9.81677 3.65937 13.8228 2 18 " + "2C22.1772 2 26.1832 3.65937 29.1369 6.61307C32.0906 9.56677 " + "33.75 13.5728 33.75 17.75Z")}))) -(defnc plus-sign [] +(defnc plus-sign [] (d/svg {:width "16" :height "17" :viewBox "0 0 16 17" @@ -308,7 +307,6 @@ :d "M8 4.5C8.21217 4.5 8.41566 4.58429 8.56569 4.73431C8.71571 4.88434 8.8 5.08783 8.8 5.3V7.7H11.2C11.4122 7.7 11.6157 7.78429 11.7657 7.93431C11.9157 8.08434 12 8.28783 12 8.5C12 8.71217 11.9157 8.91566 11.7657 9.06569C11.6157 9.21571 11.4122 9.3 11.2 9.3H8.8V11.7C8.8 11.9122 8.71571 12.1157 8.56569 12.2657C8.41566 12.4157 8.21217 12.5 8 12.5C7.78783 12.5 7.58434 12.4157 7.43431 12.2657C7.28429 12.1157 7.2 11.9122 7.2 11.7V9.3H4.8C4.58783 9.3 4.38434 9.21571 4.23431 9.06569C4.08429 8.91566 4 8.71217 4 8.5C4 8.28783 4.08429 8.08434 4.23431 7.93431C4.38434 7.78429 4.58783 7.7 4.8 7.7H7.2V5.3C7.2 5.08783 7.28429 4.88434 7.43431 4.73431C7.58434 4.58429 7.78783 4.5 8 4.5V4.5Z" :fill "white"}))) - (defnc help [] (d/svg {:class-name "flex-shrink-0 w-6 h-6 text-gray-500 transition duration-75 group-hover:text-gray-900 dark:text-gray-400 dark:group-hover:text-white" :fill "currentColor" @@ -316,7 +314,7 @@ (d/path {:fill-rule "evenodd" :d "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-2 0c0 .993-.241 1.929-.668 2.754l-1.524-1.525a3.997 3.997 0 00.078-2.183l1.562-1.562C15.802 8.249 16 9.1 16 10zm-5.165 3.913l1.58 1.58A5.98 5.98 0 0110 16a5.976 5.976 0 01-2.516-.552l1.562-1.562a4.006 4.006 0 001.789.027zm-4.677-2.796a4.002 4.002 0 01-.041-2.08l-.08.08-1.53-1.533A5.98 5.98 0 004 10c0 .954.223 1.856.619 2.657l1.54-1.54zm1.088-6.45A5.974 5.974 0 0110 4c.954 0 1.856.223 2.657.619l-1.54 1.54a4.002 4.002 0 00-2.346.033L7.246 4.668zM12 10a2 2 0 11-4 0 2 2 0 014 0z"}))) -(defnc docs [] +(defnc docs [] (d/svg {:class-name "flex-shrink-0 w-6 h-6 text-gray-500 transition duration-75 group-hover:text-gray-900 dark:text-gray-400 dark:group-hover:text-white" :fill "currentColor" :viewBox "0 0 20 20"} diff --git a/src/front/app/dashboard/base.cljs b/src/front/app/dashboard/base.cljs index 7b6ce62b..7d042e17 100644 --- a/src/front/app/dashboard/base.cljs +++ b/src/front/app/dashboard/base.cljs @@ -28,27 +28,27 @@ default-subdomain (first user-orgs)] (hooks/use-effect - [mocks-raw] - (->> mocks-raw - count - inc - (str "my-mock-") - set-default-wildcard!)) + [mocks-raw] + (->> mocks-raw + count + inc + (str "my-mock-") + set-default-wildcard!)) (hooks/use-effect - [new-mock] + [new-mock] - (let [wildcard (:wildcard new-mock) - subdomain (:subdomain new-mock)] + (let [wildcard (:wildcard new-mock) + subdomain (:subdomain new-mock)] - (when-not wildcard - (set-mock assoc :wildcard default-wildcard)) - (when-not wildcard - (set-mock assoc :subdomain default-subdomain)) + (when-not wildcard + (set-mock assoc :wildcard default-wildcard)) + (when-not wildcard + (set-mock assoc :subdomain default-subdomain)) - (when (and wildcard subdomain) - (refx/dispatch-sync [:app.dashboard/wildcard-available? - (select-keys new-mock [:subdomain :wildcard])])))) + (when (and wildcard subdomain) + (refx/dispatch-sync [:app.dashboard/wildcard-available? + (select-keys new-mock [:subdomain :wildcard])])))) ($ modal {:title "New mock" @@ -59,125 +59,125 @@ (refx/dispatch-sync [:app.dashboard/toggle-mock-modal])) :children (d/div - {:class "w-screen md:w-[600px] p-6 space-y-4"} + {:class "w-screen md:w-[600px] p-6 space-y-4"} + (d/div (d/div - (d/div - {:class "grid grid-cols-6 gap-4"} - (d/div - {:class "col-span-6 lm:col-span-3"} - (d/label - {:for "product-name" - :class (str "block mb-2 text-sm font-medium text-gray-900 " - "dark:text-white")} - "mock name") - (d/input - {:class (str "shadow-sm bg-gray-50 focus:ring-pink-500 " - "focus:border-pink-500 block w-full sm:text-sm " - "border-gray-300 rounded-md") - :placeholder default-wildcard - :on-load #(set-mock assoc :wildcard default-wildcard) - :type "text" - :on-change #(set-mock - assoc :wildcard - (slugify/default (or (.. % -target -value) - default-wildcard) - #js {:replacement "-" - :lower true - :trim true})) - :name "product-name" - :id "product-name"}))) - (d/div - {:class "mb-4"} - (d/label - {:for "settings-language" - :class-name (str "block mb-2 text-sm font-medium text-gray-900 " - "dark:text-white")} - "Org name") - (d/select - {:id "settings-language" - :name "subdomain" - :value (or (:subdomain new-mock) default-subdomain) - :on-change #(set-mock assoc :subdomain - (or (.. % -target -value) - default-subdomain)) - :class (str "bg-gray-50 border-gray-300 text-gray-900 " - "sm:text-sm rounded-lg focus:ring-primary-500 " - "focus:border-primary-500 block w-full p-2.5 " - "dark:bg-gray-700 dark:border-gray-600 " - "dark:placeholder-gray-400 dark:text-white " - "dark:focus:ring-primary-500 " - "dark:focus:border-primary-500")} - (d/option {:value ""} "Select an org-name") - (mapv #(d/option {:key % :value %} %) - user-orgs)) - (d/div - {:class "mt-2 text-sm text-gray-500 dark:text-gray-400"} - (d/span - {:class "text-gray-900 text-base font-semibold "} - (or (:wildcard new-mock) "")) - (d/span - {:class "text-gray-900 "} - (str "-" (or (:subdomain new-mock) "") - ".moclojer.com")))) + {:class "grid grid-cols-6 gap-4"} + (d/div + {:class "col-span-6 lm:col-span-3"} + (d/label + {:for "product-name" + :class (str "block mb-2 text-sm font-medium text-gray-900 " + "dark:text-white")} + "mock name") + (d/input + {:class (str "shadow-sm bg-gray-50 focus:ring-pink-500 " + "focus:border-pink-500 block w-full sm:text-sm " + "border-gray-300 rounded-md") + :placeholder default-wildcard + :on-load #(set-mock assoc :wildcard default-wildcard) + :type "text" + :on-change #(set-mock + assoc :wildcard + (slugify/default (or (.. % -target -value) + default-wildcard) + #js {:replacement "-" + :lower true + :trim true})) + :name "product-name" + :id "product-name"}))) + (d/div + {:class "mb-4"} + (d/label + {:for "settings-language" + :class-name (str "block mb-2 text-sm font-medium text-gray-900 " + "dark:text-white")} + "Org name") + (d/select + {:id "settings-language" + :name "subdomain" + :value (or (:subdomain new-mock) default-subdomain) + :on-change #(set-mock assoc :subdomain + (or (.. % -target -value) + default-subdomain)) + :class (str "bg-gray-50 border-gray-300 text-gray-900 " + "sm:text-sm rounded-lg focus:ring-primary-500 " + "focus:border-primary-500 block w-full p-2.5 " + "dark:bg-gray-700 dark:border-gray-600 " + "dark:placeholder-gray-400 dark:text-white " + "dark:focus:ring-primary-500 " + "dark:focus:border-primary-500")} + (d/option {:value ""} "Select an org-name") + (mapv #(d/option {:key % :value %} %) + user-orgs)) + (d/div + {:class "mt-2 text-sm text-gray-500 dark:text-gray-400"} + (d/span + {:class "text-gray-900 text-base font-semibold "} + (or (:wildcard new-mock) "")) + (d/span + {:class "text-gray-900 "} + (str "-" (or (:subdomain new-mock) "") + ".moclojer.com")))) + (d/div + {:class "divide-y divide-gray-200 dark:divide-gray-700 hidden"} + (d/div + {:class "flex justify-between items-center py-4"} (d/div - {:class "divide-y divide-gray-200 dark:divide-gray-700 hidden"} - (d/div - {:class "flex justify-between items-center py-4"} - (d/div - {:class "flex flex-col flex-grow"} - (d/div - {:class "text-lg font-semibold text-gray-900 dark:text-white"} - "public?") - (d/div - {:class "text-base font-normal text-gray-500 dark:text-gray-400"} - "is this api ready to be published?")) - (d/label - {:for "rating-reminders" - :class "flex relative items-center cursor-pointer"} - (d/input - {:type "checkbox" - :id "rating-reminders" - :class-name "sr-only peer cursor-not-allowed" - :on-change (fn [e] - (set-mock assoc :enabled (= (.. e -target -value) "on")))}) - (d/span - {:class (str "w-11 h-6 bg-gray-200 rounded-full peer " - "dark:bg-gray-700 peer-focus:ring-4 " - "peer-focus:ring-pink-300 dark:peer-focus:ring-pink-800 " - "peer-checked:after:translate-x-full " - "peer-checked:after:border-white after:content-[''] " - "after:absolute after:top-0.5 after:left-[2px] " - "after:bg-white after:border-gray-300 after:border " - "after:rounded-full after:h-5 after:w-5 " - "after:transition-all dark:border-gray-600 " - "peer-checked:bg-pink-500")})))) + {:class "flex flex-col flex-grow"} + (d/div + {:class "text-lg font-semibold text-gray-900 dark:text-white"} + "public?") + (d/div + {:class "text-base font-normal text-gray-500 dark:text-gray-400"} + "is this api ready to be published?")) + (d/label + {:for "rating-reminders" + :class "flex relative items-center cursor-pointer"} + (d/input + {:type "checkbox" + :id "rating-reminders" + :class-name "sr-only peer cursor-not-allowed" + :on-change (fn [e] + (set-mock assoc :enabled (= (.. e -target -value) "on")))}) + (d/span + {:class (str "w-11 h-6 bg-gray-200 rounded-full peer " + "dark:bg-gray-700 peer-focus:ring-4 " + "peer-focus:ring-pink-300 dark:peer-focus:ring-pink-800 " + "peer-checked:after:translate-x-full " + "peer-checked:after:border-white after:content-[''] " + "after:absolute after:top-0.5 after:left-[2px] " + "after:bg-white after:border-gray-300 after:border " + "after:rounded-full after:h-5 after:w-5 " + "after:transition-all dark:border-gray-600 " + "peer-checked:bg-pink-500")})))) - (d/div - {:class "flex justify-between items-end py-4"} - ($ button - {:class-name - (str "px-3 py-2 rounded-lg justify-end items-center gap-2 flex btn-add " - (if allow-save? "bg-pink-600" "btn-add__disabled bg-gray-600 cursor-not-allowed")) - :on-click #(when allow-save? - (refx/dispatch [:app.dashboard/create-mock new-mock]))} - (d/div - {:class "text-white text-xs font-bold leading-[18px]"} - " save") - ($ svg/save)))))}))) + (d/div + {:class "flex justify-between items-end py-4"} + ($ button + {:class-name + (str "px-3 py-2 rounded-lg justify-end items-center gap-2 flex btn-add " + (if allow-save? "bg-pink-600" "btn-add__disabled bg-gray-600 cursor-not-allowed")) + :on-click #(when allow-save? + (refx/dispatch [:app.dashboard/create-mock new-mock]))} + (d/div + {:class "text-white text-xs font-bold leading-[18px]"} + " save") + ($ svg/save)))))}))) (defn mock-deletion-modal [] (let [[open? set-open!] (hooks/use-state false) close-modal! #(do (set-open! false) (refx/dispatch-sync - [:app.dashboard/set-mock-to-delete nil])) + [:app.dashboard/set-mock-to-delete nil])) mock (refx/use-sub [:app.dashboard/mock-to-delete])] (hooks/use-effect - [mock] - (if (nil? mock) - (close-modal!) - (set-open! true))) + [mock] + (if (nil? mock) + (close-modal!) + (set-open! true))) ($ modal {:title nil @@ -186,25 +186,25 @@ :on-close close-modal! :children (d/div - {:class "px-4 py-4 flex flex-col space-y-4 items-center align-center"} - ($ svg/warning) - (d/p "Do you want to delete this mock?") - (d/div - {:class "flex flex-row space-x-2"} - ($ button - {:class-name "px-4 py-2 bg-red-500 rounded-lg hover:opacity-80" - :on-click #(do - (close-modal!) - (refx/dispatch-sync [:app.dashboard/delete-mock mock]))} - (d/p - {:class "text-white"} - "Yes, I want to delete it")) - ($ button - {:class-name "px-4 py-2 border-2 border-gray-400 rounded-lg hover:bg-gray-200"} - (d/p - {:class-name "text-gray-800 text-sm font-medium" - :on-click #(close-modal!)} - "No, cancel"))))}))) + {:class "px-4 py-4 flex flex-col space-y-4 items-center align-center"} + ($ svg/warning) + (d/p "Do you want to delete this mock?") + (d/div + {:class "flex flex-row space-x-2"} + ($ button + {:class-name "px-4 py-2 bg-red-500 rounded-lg hover:opacity-80" + :on-click #(do + (close-modal!) + (refx/dispatch-sync [:app.dashboard/delete-mock mock]))} + (d/p + {:class "text-white"} + "Yes, I want to delete it")) + ($ button + {:class-name "px-4 py-2 border-2 border-gray-400 rounded-lg hover:bg-gray-200"} + (d/p + {:class-name "text-gray-800 text-sm font-medium" + :on-click #(close-modal!)} + "No, cancel"))))}))) (defnc index [{:keys [children]}] (let [user (-> (refx/use-sub [:app.auth/current-user]) :user)] diff --git a/src/front/app/dashboard/editor.cljs b/src/front/app/dashboard/editor.cljs index 86bb6ba6..4f698268 100644 --- a/src/front/app/dashboard/editor.cljs +++ b/src/front/app/dashboard/editor.cljs @@ -1,30 +1,31 @@ (ns front.app.dashboard.editor - (:require ["@codemirror/language" :as language] - ["@codemirror/legacy-modes/mode/yaml" :as yaml] - ["@codemirror/lint" :as clint] - ["@uiw/codemirror-theme-github" :as theme] - ["@uiw/react-codemirror" :as c] - [front.app.components.status :refer [publication-status]] - [front.app.components.svg :as svg] - [front.app.dashboard.base :as base] - [front.app.dashboard.linter :as linter] - [front.app.lib :refer [defnc]] - [helix.core :refer [$]] - [helix.dom :as d] - [helix.hooks :as hooks] - [refx.alpha :as refx] - [reitit.frontend.easy :as rfe])) + (:require + ["@codemirror/language" :as language] + ["@codemirror/legacy-modes/mode/yaml" :as yaml] + ["@codemirror/lint" :as clint] + ["@uiw/codemirror-theme-github" :as theme] + ["@uiw/react-codemirror" :as c] + [front.app.components.status :refer [publication-status]] + [front.app.components.svg :as svg] + [front.app.dashboard.base :as base] + [front.app.dashboard.linter :as linter] + [front.app.lib :refer [defnc]] + [helix.core :refer [$]] + [helix.dom :as d] + [helix.hooks :as hooks] + [refx.alpha :as refx] + [reitit.frontend.easy :as rfe])) (defnc editor [props] (let [{:keys [data set-dragging-over!]} props {:keys [content id] :or {content ""}} data ref-fn (hooks/use-callback - [content] - (fn [content] - (refx/dispatch-sync - [:app.dashboard/edit-mock {:mock-id id - :content content}])))] + [content] + (fn [content] + (refx/dispatch-sync + [:app.dashboard/edit-mock {:mock-id id + :content content}])))] ($ c/default {:height "calc(100vh - 171px)" @@ -113,13 +114,13 @@ ;; outside of this component's state, this logic lets us know ;; when the popup `really delete this mock?` is confirmed (if so). (hooks/use-effect - [mock-to-delete] - (if (and deleting? (nil? mock-to-delete)) - (do - (set-deleting! false) - (rfe/push-state :app.core/mocks)) - (when (= (:id mock-to-delete) mock-id) - (set-deleting! true)))) + [mock-to-delete] + (if (and deleting? (nil? mock-to-delete)) + (do + (set-deleting! false) + (rfe/push-state :app.core/mocks)) + (when (= (:id mock-to-delete) mock-id) + (set-deleting! true)))) ($ base/index (d/div diff --git a/src/front/app/dashboard/events.cljs b/src/front/app/dashboard/events.cljs index ecf0b9f5..83155ec4 100644 --- a/src/front/app/dashboard/events.cljs +++ b/src/front/app/dashboard/events.cljs @@ -1,5 +1,6 @@ (ns front.app.dashboard.events - (:require [refx.alpha :as refx])) + (:require + [refx.alpha :as refx])) (refx/reg-event-db :app.dashboard/toggle-aside! diff --git a/src/front/app/dashboard/linter.cljs b/src/front/app/dashboard/linter.cljs index f9926df4..e628ef9a 100644 --- a/src/front/app/dashboard/linter.cljs +++ b/src/front/app/dashboard/linter.cljs @@ -1,9 +1,10 @@ (ns front.app.dashboard.linter - (:require ["@codemirror/lint" :as clint] - ["js-yaml" :as js-yaml] - [clojure.string :as str] - [malli.core :as m] - [refx.alpha :as refx])) + (:require + ["@codemirror/lint" :as clint] + ["js-yaml" :as js-yaml] + [clojure.string :as str] + [malli.core :as m] + [refx.alpha :as refx])) (def MethodSchema [:enum diff --git a/src/front/app/dashboard/mocks.cljs b/src/front/app/dashboard/mocks.cljs index 3cd27138..561b99a1 100644 --- a/src/front/app/dashboard/mocks.cljs +++ b/src/front/app/dashboard/mocks.cljs @@ -1,6 +1,6 @@ (ns front.app.dashboard.mocks - (:require - [mockingbird.components.button :refer[button]] + (:require + [mockingbird.components.button :refer [button]] [front.app.components.status :refer [publication-status]] [front.app.components.svg :as svg] [front.app.dashboard.base :as base] @@ -98,16 +98,16 @@ loading-mocks? (refx/use-sub [:app.dashboard/loading-mocks?])] (hooks/use-effect - [mocks] - (when (nil? mocks) - (refx/dispatch-sync [:app.dashboard/get-mocks current-user]))) + [mocks] + (when (nil? mocks) + (refx/dispatch-sync [:app.dashboard/get-mocks current-user]))) (hooks/use-effect - [mocks loading-mocks?] - (when (and (or (nil? mocks) - (empty? mocks)) - (not loading-mocks?)) - (refx/dispatch-sync [:app.dashboard/toggle-mock-modal]))) + [mocks loading-mocks?] + (when (and (or (nil? mocks) + (empty? mocks)) + (not loading-mocks?)) + (refx/dispatch-sync [:app.dashboard/toggle-mock-modal]))) ($ base/index (d/div {:class "flex flex-col lg:p-8"} diff --git a/src/front/app/dashboard/subs.cljs b/src/front/app/dashboard/subs.cljs index c94a45d3..f5fa3901 100644 --- a/src/front/app/dashboard/subs.cljs +++ b/src/front/app/dashboard/subs.cljs @@ -1,5 +1,6 @@ (ns front.app.dashboard.subs - (:require [refx.alpha :as refx])) + (:require + [refx.alpha :as refx])) (defn conj-if [xs & ys] (reduce (fn [xs y] diff --git a/src/front/app/dashboard/views.cljs b/src/front/app/dashboard/views.cljs index 892ef652..d0db358f 100644 --- a/src/front/app/dashboard/views.cljs +++ b/src/front/app/dashboard/views.cljs @@ -1,27 +1,27 @@ (ns front.app.dashboard.views - (:require - [front.app.dashboard.base :as base] - [front.app.components.messages :refer [default-message blogpost-message]] - [front.app.lib :refer-macros [defnc]] - [helix.core :refer [$]] - [helix.dom :as d])) + (:require + [front.app.dashboard.base :as base] + [front.app.components.messages :refer [default-message blogpost-message]] + [front.app.lib :refer-macros [defnc]] + [helix.core :refer [$]] + [helix.dom :as d])) (defnc welcome [] - (d/div - ($ base/index - (d/main - ($ default-message - {:title "Welcome to moclojer beta" - :email "avelino@moclojer.com" - :author "Avelino" - :image "/images/users/avatar.png" - :image-style "rounded" - :message ["I'm happy to have you here, we are launching the SaaS version of moclojer, seeking to make it simple for you to put a mock API in the air to develop your projects." "I look forward to your feedback (this is the only way we can improve the product)."]}))))) + (d/div + ($ base/index + (d/main + ($ default-message + {:title "Welcome to moclojer beta" + :email "avelino@moclojer.com" + :author "Avelino" + :image "/images/users/avatar.png" + :image-style "rounded" + :message ["I'm happy to have you here, we are launching the SaaS version of moclojer, seeking to make it simple for you to put a mock API in the air to develop your projects." "I look forward to your feedback (this is the only way we can improve the product)."]}))))) (comment - ($ blogpost-message - {:author "Avelino" - :email "avelino@moclojer.com" - :link "https://www.github.com" - :image "/images/users/avatar.png" - :image-style "default"})) + ($ blogpost-message + {:author "Avelino" + :email "avelino@moclojer.com" + :link "https://www.github.com" + :image "/images/users/avatar.png" + :image-style "default"})) diff --git a/src/front/app/routes/bookmarks.cljs b/src/front/app/routes/bookmarks.cljs index 0c7b09ec..8e632bb2 100644 --- a/src/front/app/routes/bookmarks.cljs +++ b/src/front/app/routes/bookmarks.cljs @@ -1,8 +1,9 @@ (ns front.app.routes.bookmarks - (:require [front.app.auth.views :as auth] - [front.app.dashboard.editor :as editor] - [front.app.dashboard.mocks :as mocks] - [front.app.dashboard.views :as d.views])) + (:require + [front.app.auth.views :as auth] + [front.app.dashboard.editor :as editor] + [front.app.dashboard.mocks :as mocks] + [front.app.dashboard.views :as d.views])) (def routes ["" diff --git a/src/front/app/routes/subs.cljs b/src/front/app/routes/subs.cljs index bd101272..70435240 100644 --- a/src/front/app/routes/subs.cljs +++ b/src/front/app/routes/subs.cljs @@ -1,5 +1,6 @@ (ns front.app.routes.subs - (:require [refx.alpha :as refx])) + (:require + [refx.alpha :as refx])) (refx/reg-sub :app.route/current-route diff --git a/src/front/css/tailwind.css b/src/front/css/tailwind.css index 45b44164..1f7d861b 100644 --- a/src/front/css/tailwind.css +++ b/src/front/css/tailwind.css @@ -159,7 +159,7 @@ } .fc .fc-today-button { - @apply rounded-lg border border-gray-200 bg-white text-sm font-medium px-4 py-2 text-gray-900 hover:bg-gray-100 hover:text-primary-700 focus:z-10 focus:ring-2 focus:ring-primary-700 focus:text-primary-700 !important; + @apply rounded-lg border border-gray-200 bg-white text-sm font-medium px-4 py-2 text-gray-900 hover:bg-gray-100 hover:text-gray-700 focus:z-10 focus:ring-2 focus:ring-gray-700 focus:text-gray-700 !important; } .fc-direction-ltr .fc-toolbar > * > :not(:first-child) { @@ -196,7 +196,7 @@ } .fc .fc-event .fc-event-main { - @apply p-2 bg-primary-700 hover:bg-primary-800 !important; + @apply p-2 bg-gray-700 hover:bg-gray-800 !important; } .fc .fc-h-event .fc-event-main-frame { diff --git a/test/back/back/integration/api/add_org_user_test.clj b/test/back/back/integration/api/add_org_user_test.clj index b6d6a09e..af382e1a 100644 --- a/test/back/back/integration/api/add_org_user_test.clj +++ b/test/back/back/integration/api/add_org_user_test.clj @@ -26,21 +26,21 @@ (defn fcreate-org-user [org user] (flow - "should add an user to an organization" - [:let [req {:headers {"authorization" - (str "Bearer " - "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkY2ZmNGMwNi0" - "xYzllLTRhYmItYTQ5Yi00MzhlMTg2OWVjNWIifQ.Gd42M" - "G5EQCVvQwsvlhRQWHuEr-BBo4GB7Pd9di8w_No")} - :uri (str "/orgs/" (:org/id org) "/users") - :method :post - :body {:user-id (:customer/uuid user)}} - resp (helpers/request! req)]] - (match? - (matchers/embeds - {:status 200 - :body {:users [{:uuid (str (:customer/uuid user))}]}}) - resp))) + "should add an user to an organization" + [:let [req {:headers {"authorization" + (str "Bearer " + "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkY2ZmNGMwNi0" + "xYzllLTRhYmItYTQ5Yi00MzhlMTg2OWVjNWIifQ.Gd42M" + "G5EQCVvQwsvlhRQWHuEr-BBo4GB7Pd9di8w_No")} + :uri (str "/orgs/" (:org/id org) "/users") + :method :post + :body {:user-id (:customer/uuid user)}} + resp (helpers/request! req)]] + (match? + (matchers/embeds + {:status 200 + :body {:users [{:uuid (str (:customer/uuid user))}]}}) + resp))) (defflow flow-add-org-user @@ -48,16 +48,16 @@ :cleanup utils/stop-system! :fail-fast? true} (flow - "" - [:let [user #:customer{:uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :email "test@gmail.com" - :username "foobar123" - :external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} - org #:org{:id #uuid "d50f35a1-cba2-4d62-88aa-0c3df71c410c" - :slug "my-org-d50f35a1" - :orgname "my-org"}] - {:keys [database]} (state-flow.api/get-state)] - (state/invoke #(db.customers/insert! user database)) - (state/invoke #(db.orgs/insert! org database)) + "" + [:let [user #:customer{:uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :email "test@gmail.com" + :username "foobar123" + :external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} + org #:org{:id #uuid "d50f35a1-cba2-4d62-88aa-0c3df71c410c" + :slug "my-org-d50f35a1" + :orgname "my-org"}] + {:keys [database]} (state-flow.api/get-state)] + (state/invoke #(db.customers/insert! user database)) + (state/invoke #(db.orgs/insert! org database)) - (fcreate-org-user org user))) + (fcreate-org-user org user))) diff --git a/test/back/back/integration/api/create_conflicting_mock_test.clj b/test/back/back/integration/api/create_conflicting_mock_test.clj index 10f4f0d4..14e505ce 100644 --- a/test/back/back/integration/api/create_conflicting_mock_test.clj +++ b/test/back/back/integration/api/create_conflicting_mock_test.clj @@ -40,28 +40,28 @@ (defn fcreate-conflicting-mocks [] (flow - "should block creation of conflicting mocks" - [:let [req (merge (:base-req flow-consts) - {:method :post - :body (:mock flow-consts)}) - fst-exp-body {:mock (merge (:mock flow-consts) - {:id string? - :user-id string?})} - snd-exp-body {:error {:message string? - :cause "invalid-wildcard" - :value (:mock fst-exp-body)}}] - fst-resp (helpers/request! req) - snd-resp (helpers/request! req)] - (match? - (matchers/embeds {:status 201 :body (update-in fst-exp-body - [:mock] - merge - {:dns-status "offline" - :unification-status "offline"})}) - fst-resp) - (match? - (matchers/embeds {:status 412 :body snd-exp-body}) - snd-resp))) + "should block creation of conflicting mocks" + [:let [req (merge (:base-req flow-consts) + {:method :post + :body (:mock flow-consts)}) + fst-exp-body {:mock (merge (:mock flow-consts) + {:id string? + :user-id string?})} + snd-exp-body {:error {:message string? + :cause "invalid-wildcard" + :value (:mock fst-exp-body)}}] + fst-resp (helpers/request! req) + snd-resp (helpers/request! req)] + (match? + (matchers/embeds {:status 201 :body (update-in fst-exp-body + [:mock] + merge + {:dns-status "offline" + :unification-status "offline"})}) + fst-resp) + (match? + (matchers/embeds {:status 412 :body snd-exp-body}) + snd-resp))) (defflow flow-create-conflicting-mock @@ -69,7 +69,7 @@ :cleanup utils/stop-system! :fail-fast? true} (flow - "will try to create two conflicting mocks" - [db (state-flow.api/get-state :database)] - (state/invoke #(db.customers/insert! (:user flow-consts) db)) - (fcreate-conflicting-mocks))) + "will try to create two conflicting mocks" + [db (state-flow.api/get-state :database)] + (state/invoke #(db.customers/insert! (:user flow-consts) db)) + (fcreate-conflicting-mocks))) diff --git a/test/back/back/integration/api/create_mock_test.clj b/test/back/back/integration/api/create_mock_test.clj index 97cd89a5..66835d1c 100644 --- a/test/back/back/integration/api/create_mock_test.clj +++ b/test/back/back/integration/api/create_mock_test.clj @@ -33,45 +33,45 @@ :fail-fast? true} (flow "" - [database (state-flow.api/get-state :database)] + [database (state-flow.api/get-state :database)] - (state/invoke - #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :customer/email "test@gmail.com" - :customer/username "chico" - :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} - database)) + (state/invoke + #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :customer/email "test@gmail.com" + :customer/username "chico" + :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} + database)) - (flow "it will send a mock" - [resp (helpers/request! {:method :post - :headers {"authorization" token} - :uri "/mocks" - :body {:subdomain "chico" - :wildcard "test" - :enabled true}})] - (match? - (matchers/embeds {:status 201 - :body {:mock {:subdomain "chico" - :id string? - :wildcard "test" - :user-id "cd989358-af38-4a2f-a1a1-88096aa425a7" - :enabled true - :dns-status "offline" - :unification-status "offline"}}}) - resp) - (flow "retrieve the mock" - [resp-get (helpers/request! {:method :get - :headers {"authorization" token} - :uri "/mocks" - :body {}})] - (match? - (matchers/embeds {:mocks [{:subdomain "chico" - :mock-type "personal" - :apis [{:id #(uuid? (java.util.UUID/fromString %)) - :url "test-chico.moclojer.com" - :subdomain "chico" - :wildcard "test" - :enabled true - :dns-status "offline" - :unification-status "offline"}]}]}) - (-> resp-get :body)))))) + (flow "it will send a mock" + [resp (helpers/request! {:method :post + :headers {"authorization" token} + :uri "/mocks" + :body {:subdomain "chico" + :wildcard "test" + :enabled true}})] + (match? + (matchers/embeds {:status 201 + :body {:mock {:subdomain "chico" + :id string? + :wildcard "test" + :user-id "cd989358-af38-4a2f-a1a1-88096aa425a7" + :enabled true + :dns-status "offline" + :unification-status "offline"}}}) + resp) + (flow "retrieve the mock" + [resp-get (helpers/request! {:method :get + :headers {"authorization" token} + :uri "/mocks" + :body {}})] + (match? + (matchers/embeds {:mocks [{:subdomain "chico" + :mock-type "personal" + :apis [{:id #(uuid? (java.util.UUID/fromString %)) + :url "test-chico.moclojer.com" + :subdomain "chico" + :wildcard "test" + :enabled true + :dns-status "offline" + :unification-status "offline"}]}]}) + (-> resp-get :body)))))) diff --git a/test/back/back/integration/api/create_org_test.clj b/test/back/back/integration/api/create_org_test.clj index 527b367c..20ba900f 100644 --- a/test/back/back/integration/api/create_org_test.clj +++ b/test/back/back/integration/api/create_org_test.clj @@ -25,22 +25,22 @@ (defn fcreate-org [user] (flow - "should create an organization" - [:let [org {:orgname "test-123"} - req {:headers {"authorization" - (str "Bearer " - "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkY2ZmNGMwNi0" - "xYzllLTRhYmItYTQ5Yi00MzhlMTg2OWVjNWIifQ.Gd42M" - "G5EQCVvQwsvlhRQWHuEr-BBo4GB7Pd9di8w_No")} - :uri "/orgs" - :method :post - :body {:org org}} - resp (helpers/request! req)]] - (match? - (matchers/embeds - {:status 201 - :body {:org (assoc org :users [{:uuid (str (:customer/uuid user))}])}}) - resp))) + "should create an organization" + [:let [org {:orgname "test-123"} + req {:headers {"authorization" + (str "Bearer " + "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkY2ZmNGMwNi0" + "xYzllLTRhYmItYTQ5Yi00MzhlMTg2OWVjNWIifQ.Gd42M" + "G5EQCVvQwsvlhRQWHuEr-BBo4GB7Pd9di8w_No")} + :uri "/orgs" + :method :post + :body {:org org}} + resp (helpers/request! req)]] + (match? + (matchers/embeds + {:status 201 + :body {:org (assoc org :users [{:uuid (str (:customer/uuid user))}])}}) + resp))) (defflow flow-create-org @@ -48,11 +48,11 @@ :cleanup utils/stop-system! :fail-fast? true} (flow - "" - [:let [user #:customer{:uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :email "test@gmail.com" - :username "foobar123" - :external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"}] - {:keys [database]} (state-flow.api/get-state)] - (state/invoke #(db.customers/insert! user database)) - (fcreate-org user))) + "" + [:let [user #:customer{:uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :email "test@gmail.com" + :username "foobar123" + :external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"}] + {:keys [database]} (state-flow.api/get-state)] + (state/invoke #(db.customers/insert! user database)) + (fcreate-org user))) diff --git a/test/back/back/integration/api/customer_test.clj b/test/back/back/integration/api/customer_test.clj index dd2fdf76..c871e3ba 100644 --- a/test/back/back/integration/api/customer_test.clj +++ b/test/back/back/integration/api/customer_test.clj @@ -31,38 +31,38 @@ :fail-fast? true} (flow "setup a customer" - [database (state-flow.api/get-state :database)] + [database (state-flow.api/get-state :database)] - (state/invoke - #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :customer/email "test@gmail.com" - :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} - database)) + (state/invoke + #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :customer/email "test@gmail.com" + :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} + database)) - (flow "send the username to be added" - [resp (helpers/request! {:method :post - :headers {"authorization" token} - :uri "/user/cd989358-af38-4a2f-a1a1-88096aa425a7" - :body {:username "chico"}})] - (match? - (matchers/embeds {:status 200 - :body {:user {:username "chico" - :email "test@gmail.com" - :uuid "cd989358-af38-4a2f-a1a1-88096aa425a7"}}}) - resp)) + (flow "send the username to be added" + [resp (helpers/request! {:method :post + :headers {"authorization" token} + :uri "/user/cd989358-af38-4a2f-a1a1-88096aa425a7" + :body {:username "chico"}})] + (match? + (matchers/embeds {:status 200 + :body {:user {:username "chico" + :email "test@gmail.com" + :uuid "cd989358-af38-4a2f-a1a1-88096aa425a7"}}}) + resp)) - (flow "setup new customer" - (state/invoke - #(db.customers/insert! {:customer/uuid #uuid "cd989351-af31-4a2f-a1a1-88096aa425a7" - :customer/email "test@gmail.com" - :customer/external-uuid #uuid "dcf34306-1c9e-4abb-a49b-438e1869ec5b"} - database))) + (flow "setup new customer" + (state/invoke + #(db.customers/insert! {:customer/uuid #uuid "cd989351-af31-4a2f-a1a1-88096aa425a7" + :customer/email "test@gmail.com" + :customer/external-uuid #uuid "dcf34306-1c9e-4abb-a49b-438e1869ec5b"} + database))) - (flow "retrieve user by external id" - [resp (helpers/request! {:method :get - :headers {"authorization" token} - :uri "/user-external"})] - (match? - (matchers/embeds {:status 200 - :body {:user {:email "test@gmail.com"}}}) - resp)))) + (flow "retrieve user by external id" + [resp (helpers/request! {:method :get + :headers {"authorization" token} + :uri "/user-external"})] + (match? + (matchers/embeds {:status 200 + :body {:user {:email "test@gmail.com"}}}) + resp)))) diff --git a/test/back/back/integration/api/db/customers_test.clj b/test/back/back/integration/api/db/customers_test.clj index aab1df6c..7cf57805 100644 --- a/test/back/back/integration/api/db/customers_test.clj +++ b/test/back/back/integration/api/db/customers_test.clj @@ -20,29 +20,29 @@ :fail-fast? true} (flow "create a user in the database" - [database (state-flow.api/get-state :database)] + [database (state-flow.api/get-state :database)] - (state/invoke - #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :customer/email "test@gmail.com" - :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} - database)) + (state/invoke + #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :customer/email "test@gmail.com" + :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} + database)) - (flow "then get by external id" - (match? {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :customer/email "test@gmail.com" - :customer/external_uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} - (db.customers/get-by-external-id #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b" database))) + (flow "then get by external id" + (match? {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :customer/email "test@gmail.com" + :customer/external_uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} + (db.customers/get-by-external-id #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b" database))) - (flow "then get the user from db" - (match? [{:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :customer/email "test@gmail.com" - :customer/external_uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"}] - (db.customers/get-customers database))) + (flow "then get the user from db" + (match? [{:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :customer/email "test@gmail.com" + :customer/external_uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"}] + (db.customers/get-customers database))) - (flow "get a invalid id from db return nil" - (match? nil - (db.customers/get-by-external-id (java.util.UUID/randomUUID) database))))) + (flow "get a invalid id from db return nil" + (match? nil + (db.customers/get-by-external-id (java.util.UUID/randomUUID) database))))) (defflow flow-db-update-username-test {:init (utils/start-system! create-and-start-components) @@ -50,25 +50,25 @@ :fail-fast? true} (flow "create a user in the database" - [database (state-flow.api/get-state :database)] + [database (state-flow.api/get-state :database)] - (state/invoke - #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :customer/email "test@gmail.com" - :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} - database)) + (state/invoke + #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :customer/email "test@gmail.com" + :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} + database)) - (flow "then update the username" - (state/invoke - #(db.customers/update! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :customer/email "test@gmail.com" - :customer/username "chico" - :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} - database)) + (flow "then update the username" + (state/invoke + #(db.customers/update! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :customer/email "test@gmail.com" + :customer/username "chico" + :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} + database)) - (flow "get user by id" - (match? {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :customer/email "test@gmail.com" - :customer/username "chico" - :customer/external_uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} - (db.customers/get-by-external-id #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b" database)))))) + (flow "get user by id" + (match? {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :customer/email "test@gmail.com" + :customer/username "chico" + :customer/external_uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} + (db.customers/get-by-external-id #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b" database)))))) diff --git a/test/back/back/integration/api/db/get_username_test.clj b/test/back/back/integration/api/db/get_username_test.clj index 70eacd90..403125e8 100644 --- a/test/back/back/integration/api/db/get_username_test.clj +++ b/test/back/back/integration/api/db/get_username_test.clj @@ -21,23 +21,23 @@ (flow "get username" - [database (state-flow.api/get-state :database)] + [database (state-flow.api/get-state :database)] - (state/invoke - #(db.customers/insert! - {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :customer/email "test@gmail.com" - :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b" - :customer/username "chico"} - database)) + (state/invoke + #(db.customers/insert! + {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :customer/email "test@gmail.com" + :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b" + :customer/username "chico"} + database)) - (flow "get by username" - (match? {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :customer/email "test@gmail.com" - :customer/username "chico" - :customer/external_uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} - (db.customers/get-by-username "chico" database))) + (flow "get by username" + (match? {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :customer/email "test@gmail.com" + :customer/username "chico" + :customer/external_uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} + (db.customers/get-by-username "chico" database))) - (flow "get by username" - (match? nil - (db.customers/get-by-username "chicoo" database))))) + (flow "get by username" + (match? nil + (db.customers/get-by-username "chicoo" database))))) diff --git a/test/back/back/integration/api/db/mocks_test.clj b/test/back/back/integration/api/db/mocks_test.clj index 5262fd30..086c77eb 100644 --- a/test/back/back/integration/api/db/mocks_test.clj +++ b/test/back/back/integration/api/db/mocks_test.clj @@ -21,34 +21,34 @@ :fail-fast? true} (flow "save a mock in the database" - [database (state-flow.api/get-state :database)] - - (state/invoke - #(db.customers/insert! {:customer/uuid #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" - :customer/external_uuid #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" - :customer/username "chico" - :customer/email "chico@gmail.com"} + [database (state-flow.api/get-state :database)] + + (state/invoke + #(db.customers/insert! {:customer/uuid #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" + :customer/external_uuid #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" + :customer/username "chico" + :customer/email "chico@gmail.com"} + database)) + + (state/invoke + #(db.mocks/insert! {:mock/id #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" + :mock/user_id #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" + :mock/wildcard "test" + :mock/subdomain "chico" + :mock/enabled true + :mock/dns_status "offline" + :mock/unification_status "offline"} database)) - (state/invoke - #(db.mocks/insert! {:mock/id #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" - :mock/user_id #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" - :mock/wildcard "test" - :mock/subdomain "chico" - :mock/enabled true - :mock/dns_status "offline" - :mock/unification_status "offline"} - database)) - - (flow "then get by uuid" - (match? [{:mock/id #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" - :mock/user_id #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" - :mock/subdomain "chico" - :mock/wildcard "test" - :mock/enabled true - :mock/dns_status "offline" - :mock/unification_status "offline"}] - (db.mocks/get-mocks #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" database))))) + (flow "then get by uuid" + (match? [{:mock/id #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" + :mock/user_id #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" + :mock/subdomain "chico" + :mock/wildcard "test" + :mock/enabled true + :mock/dns_status "offline" + :mock/unification_status "offline"}] + (db.mocks/get-mocks #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" database))))) (defflow flow-db-get-mock-by-id {:init (utils/start-system! create-and-start-components) @@ -56,36 +56,36 @@ :fail-fast? true} (flow "save a mock in the database" - [database (state-flow.api/get-state :database)] - - (state/invoke - #(db.customers/insert! {:customer/uuid #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" - :customer/external_uuid #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" - :customer/username "chico" - :customer/email "chico@gmail.com"} + [database (state-flow.api/get-state :database)] + + (state/invoke + #(db.customers/insert! {:customer/uuid #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" + :customer/external_uuid #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" + :customer/username "chico" + :customer/email "chico@gmail.com"} + database)) + + (state/invoke + #(db.mocks/insert! {:mock/id #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" + :mock/user_id #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" + :mock/wildcard "test" + :mock/subdomain "chico" + :mock/enabled true + :mock/dns_status "offline" + :mock/unification_status "offline"} database)) - (state/invoke - #(db.mocks/insert! {:mock/id #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" - :mock/user_id #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" - :mock/wildcard "test" - :mock/subdomain "chico" - :mock/enabled true - :mock/dns_status "offline" - :mock/unification_status "offline"} - database)) - - (flow "then get by uuid" - (match? {:mock/id #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" - :mock/user_id #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" - :mock/subdomain "chico" - :mock/wildcard "test" - :mock/enabled true - :mock/dns_status "offline" - :mock/unification_status "offline"} - (db.mocks/get-mock-by-id - #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" - database))))) + (flow "then get by uuid" + (match? {:mock/id #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" + :mock/user_id #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" + :mock/subdomain "chico" + :mock/wildcard "test" + :mock/enabled true + :mock/dns_status "offline" + :mock/unification_status "offline"} + (db.mocks/get-mock-by-id + #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" + database))))) (defflow flow-db-update-mock-by-id {:init (utils/start-system! create-and-start-components) @@ -93,40 +93,40 @@ :fail-fast? true} (flow "save a mock in the database" - [database (state-flow.api/get-state :database)] - - (state/invoke - #(db.customers/insert! {:customer/uuid #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" - :customer/external_uuid #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" - :customer/username "chico" - :customer/email "chico@gmail.com"} + [database (state-flow.api/get-state :database)] + + (state/invoke + #(db.customers/insert! {:customer/uuid #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" + :customer/external_uuid #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" + :customer/username "chico" + :customer/email "chico@gmail.com"} + database)) + + (state/invoke + #(db.mocks/insert! {:mock/id #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" + :mock/user_id #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" + :mock/wildcard "test" + :mock/subdomain "chico" + :mock/enabled true + :mock/dns_status "offline" + :mock/unification_status "offline"} database)) - (state/invoke - #(db.mocks/insert! {:mock/id #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" - :mock/user_id #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" - :mock/wildcard "test" - :mock/subdomain "chico" - :mock/enabled true - :mock/dns_status "offline" - :mock/unification_status "offline"} - database)) - - (flow "then get by uuid" - (match? {:mock/id #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" - :mock/user_id #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" - :mock/subdomain "chico" - :mock/wildcard "test" - :mock/content "chico string content" - :mock/enabled true - :mock/dns_status "offline" - :mock/unification_status "offline"} - (db.mocks/update! {:mock/id #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" - :mock/user_id #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" - :mock/wildcard "test" - :mock/content "chico string content" - :mock/subdomain "chico" - :mock/enabled true - :mock/dns_status "offline" - :mock/unification_status "offline"} - database))))) + (flow "then get by uuid" + (match? {:mock/id #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" + :mock/user_id #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" + :mock/subdomain "chico" + :mock/wildcard "test" + :mock/content "chico string content" + :mock/enabled true + :mock/dns_status "offline" + :mock/unification_status "offline"} + (db.mocks/update! {:mock/id #uuid "41571d31-d9c2-4216-b6f6-d3c7bcc27570" + :mock/user_id #uuid "916d0b8b-af1b-4178-8aa1-0531c582dcd1" + :mock/wildcard "test" + :mock/content "chico string content" + :mock/subdomain "chico" + :mock/enabled true + :mock/dns_status "offline" + :mock/unification_status "offline"} + database))))) diff --git a/test/back/back/integration/api/delete_mock_test.clj b/test/back/back/integration/api/delete_mock_test.clj index 4639f185..5f9b1813 100644 --- a/test/back/back/integration/api/delete_mock_test.clj +++ b/test/back/back/integration/api/delete_mock_test.clj @@ -43,51 +43,51 @@ (defn fcheck-mock-deletion-mq [{:keys [id user-id]}] (flow - "should have published a :mock.deleted event" - [deleted-evt (state/invoke - #(second (get @mq/mock-channels "mock.deleted")))] - (match? - (matchers/embeds {:event {:yml.single.delete {:mock-id (parse-uuid id) - :owner-id user-id}}}) - (update-in deleted-evt [:yml.single.delete] dissoc :ctx)))) + "should have published a :mock.deleted event" + [deleted-evt (state/invoke + #(second (get @mq/mock-channels "mock.deleted")))] + (match? + (matchers/embeds {:event {:yml.single.delete {:mock-id (parse-uuid id) + :owner-id user-id}}}) + (update-in deleted-evt [:yml.single.delete] dissoc :ctx)))) (defn fcheck-mock-deletion-storage [{:keys [id user-id]}] (flow - "should have deleted mock from storage" - [:let [file-path (str user-id "/" id "/mock.yml")] - strg (state-flow.api/get-state :storage) - mock-file (state/invoke #(storage/get-file strg "moclojer" file-path))] - (match? nil mock-file))) + "should have deleted mock from storage" + [:let [file-path (str user-id "/" id "/mock.yml")] + strg (state-flow.api/get-state :storage) + mock-file (state/invoke #(storage/get-file strg "moclojer" file-path))] + (match? nil mock-file))) (defn fdelete-mock [id] (flow - "should delete given mock" - [:let [req (merge (:base-req flow-consts) - {:method :delete - :body {:id id}})] - resp (helpers/request! req)] - (match? - (matchers/embeds {:status 200 :body empty?}) - resp) - [:let [mock {:id id - :user-id (get-in flow-consts [:user :customer/uuid])}]] - (fcheck-mock-deletion-mq mock) - (fcheck-mock-deletion-storage mock))) + "should delete given mock" + [:let [req (merge (:base-req flow-consts) + {:method :delete + :body {:id id}})] + resp (helpers/request! req)] + (match? + (matchers/embeds {:status 200 :body empty?}) + resp) + [:let [mock {:id id + :user-id (get-in flow-consts [:user :customer/uuid])}]] + (fcheck-mock-deletion-mq mock) + (fcheck-mock-deletion-storage mock))) (defn fcreate-mock [] (flow - "should create a mock" - [:let [req (merge (:base-req flow-consts) - {:method :post - :body (:mock flow-consts)}) - exp-body {:mock (merge (:mock flow-consts) - {:id string? - :user-id string?})}] - resp (helpers/request! req)] - (match? - (matchers/embeds {:status 201 :body exp-body}) - resp) - (fdelete-mock (get-in resp [:body :mock :id])))) + "should create a mock" + [:let [req (merge (:base-req flow-consts) + {:method :post + :body (:mock flow-consts)}) + exp-body {:mock (merge (:mock flow-consts) + {:id string? + :user-id string?})}] + resp (helpers/request! req)] + (match? + (matchers/embeds {:status 201 :body exp-body}) + resp) + (fdelete-mock (get-in resp [:body :mock :id])))) (defflow flow-delete-mock @@ -95,7 +95,7 @@ :cleanup utils/stop-system! :fail-fast? true} (flow - "should create and delete mock" - [db (state-flow.api/get-state :database)] - (state/invoke #(db.customers/insert! (:user flow-consts) db)) - (fcreate-mock))) + "should create and delete mock" + [db (state-flow.api/get-state :database)] + (state/invoke #(db.customers/insert! (:user flow-consts) db)) + (fcreate-mock))) diff --git a/test/back/back/integration/api/healthcheck_test.clj b/test/back/back/integration/api/healthcheck_test.clj index c2a3e4e3..bb839cd9 100644 --- a/test/back/back/integration/api/healthcheck_test.clj +++ b/test/back/back/integration/api/healthcheck_test.clj @@ -27,8 +27,8 @@ :fail-fast? true} (flow "makes a healthcheck request" - (match? (matchers/embeds {:status 200 - :body {:data {:content "Live api"}}}) - (helpers/request! {:method :get - :uri "/healthcheck" - :body {}})))) + (match? (matchers/embeds {:status 200 + :body {:data {:content "Live api"}}}) + (helpers/request! {:method :get + :uri "/healthcheck" + :body {}})))) diff --git a/test/back/back/integration/api/helpers.clj b/test/back/back/integration/api/helpers.clj index 35af76b7..9a82e090 100644 --- a/test/back/back/integration/api/helpers.clj +++ b/test/back/back/integration/api/helpers.clj @@ -19,17 +19,17 @@ (defn request! [{:keys [method uri body headers]}] (flow "makes http request" - [service-fn (state-flow.api/get-state (comp :io.pedestal.http/service-fn :webserver :webserver))] - (-> service-fn - (do-request method uri body headers) - parsed-response - state-flow.api/return))) + [service-fn (state-flow.api/get-state (comp :io.pedestal.http/service-fn :webserver :webserver))] + (-> service-fn + (do-request method uri body headers) + parsed-response + state-flow.api/return))) (defn request-moclojer! [{:keys [method uri body headers]}] (flow "makes http request" - [service-fn (state-flow.api/get-state (comp :io.pedestal.http/service-fn :server :moclojer :moclojer))] - (-> service-fn - (do-request method uri body headers) - parsed-response - state-flow.api/return))) + [service-fn (state-flow.api/get-state (comp :io.pedestal.http/service-fn :server :moclojer :moclojer))] + (-> service-fn + (do-request method uri body headers) + parsed-response + state-flow.api/return))) diff --git a/test/back/back/integration/api/update_mock_test.clj b/test/back/back/integration/api/update_mock_test.clj index 813f40fc..5cb013c3 100644 --- a/test/back/back/integration/api/update_mock_test.clj +++ b/test/back/back/integration/api/update_mock_test.clj @@ -49,73 +49,73 @@ :cleanup utils/stop-system! :fail-fast? true} (flow "" - [database (state-flow.api/get-state :database)] + [database (state-flow.api/get-state :database)] - (state/invoke - #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :customer/email "test@gmail.com" - :customer/username "chico" - :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} - database)) + (state/invoke + #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :customer/email "test@gmail.com" + :customer/username "chico" + :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} + database)) - (flow "it will send a mock and save it" - [resp (helpers/request! {:method :post - :headers {"authorization" token} - :uri "/mocks" - :body {:subdomain "chico" - :wildcard "test" - :enabled true}})] - (match? - (matchers/embeds {:status 201 - :body {:mock {:subdomain "chico" - :id string? - :wildcard "test" - :user-id "cd989358-af38-4a2f-a1a1-88096aa425a7" - :enabled true - :dns-status "offline" - :unification-status "offline"}}}) - resp) - (flow "then will update the content" - [resp-get (helpers/request! {:method :put - :headers {"authorization" token} - :uri "/mocks" - :body {:id (-> resp :body :mock :id str) - :content yml}})] - - (match? - (matchers/embeds {:mock {:id #(uuid? (java.util.UUID/fromString %)) - :subdomain "chico" - :wildcard "test" - :content yml - :user-id "cd989358-af38-4a2f-a1a1-88096aa425a7" - :enabled true - :dns-status "offline" - :unification-status "offline"}}) - (-> resp-get :body)) - - (flow "then retreive all mocks" - [resp-get (helpers/request! {:method :get + (flow "it will send a mock and save it" + [resp (helpers/request! {:method :post :headers {"authorization" token} :uri "/mocks" - :body {}})] - (match? - (matchers/embeds {:mocks [{:subdomain "chico" - :mock-type "personal" - :apis [{:id #(uuid? (java.util.UUID/fromString %)) + :body {:subdomain "chico" + :wildcard "test" + :enabled true}})] + (match? + (matchers/embeds {:status 201 + :body {:mock {:subdomain "chico" + :id string? + :wildcard "test" + :user-id "cd989358-af38-4a2f-a1a1-88096aa425a7" + :enabled true + :dns-status "offline" + :unification-status "offline"}}}) + resp) + (flow "then will update the content" + [resp-get (helpers/request! {:method :put + :headers {"authorization" token} + :uri "/mocks" + :body {:id (-> resp :body :mock :id str) + :content yml}})] + + (match? + (matchers/embeds {:mock {:id #(uuid? (java.util.UUID/fromString %)) :subdomain "chico" - :url "test-chico.moclojer.com" - :content yml :wildcard "test" + :content yml + :user-id "cd989358-af38-4a2f-a1a1-88096aa425a7" :enabled true :dns-status "offline" - :unification-status "offline"}]}]}) - (-> resp-get :body))) + :unification-status "offline"}}) + (-> resp-get :body)) + + (flow "then retreive all mocks" + [resp-get (helpers/request! {:method :get + :headers {"authorization" token} + :uri "/mocks" + :body {}})] + (match? + (matchers/embeds {:mocks [{:subdomain "chico" + :mock-type "personal" + :apis [{:id #(uuid? (java.util.UUID/fromString %)) + :subdomain "chico" + :url "test-chico.moclojer.com" + :content yml + :wildcard "test" + :enabled true + :dns-status "offline" + :unification-status "offline"}]}]}) + (-> resp-get :body))) - (flow "should have publish a mock calling mq" - (match? - (matchers/embeds - {:event - {:yml.single.generate - {:mock-id (-> resp-get :body :mock :id parse-uuid)}}}) - (update-in (second (get @mq/mock-channels "mock.updated")) - [:event :yml.single.generate] dissoc :ctx))))))) + (flow "should have publish a mock calling mq" + (match? + (matchers/embeds + {:event + {:yml.single.generate + {:mock-id (-> resp-get :body :mock :id parse-uuid)}}}) + (update-in (second (get @mq/mock-channels "mock.updated")) + [:event :yml.single.generate] dissoc :ctx))))))) diff --git a/test/back/back/integration/api/username_is_available_test.clj b/test/back/back/integration/api/username_is_available_test.clj index 64006174..8ff14046 100644 --- a/test/back/back/integration/api/username_is_available_test.clj +++ b/test/back/back/integration/api/username_is_available_test.clj @@ -31,29 +31,29 @@ :fail-fast? true} (flow "setup a customer" - [database (state-flow.api/get-state :database)] + [database (state-flow.api/get-state :database)] - (state/invoke - #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :customer/email "test@gmail.com" - :customer/username "chico" - :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} - database)) + (state/invoke + #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :customer/email "test@gmail.com" + :customer/username "chico" + :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} + database)) - (flow "check if username is available" - [resp (helpers/request! {:method :get - :headers {"authorization" token} - :uri "/user/username/chico"})] - (match? - (matchers/embeds {:status 200 - :body {:available false}}) - resp)) + (flow "check if username is available" + [resp (helpers/request! {:method :get + :headers {"authorization" token} + :uri "/user/username/chico"})] + (match? + (matchers/embeds {:status 200 + :body {:available false}}) + resp)) - (flow "username is available" - [resp (helpers/request! {:method :get - :headers {"authorization" token} - :uri "/user/username/test"})] - (match? - (matchers/embeds {:status 200 - :body {:available true}}) - resp)))) + (flow "username is available" + [resp (helpers/request! {:method :get + :headers {"authorization" token} + :uri "/user/username/test"})] + (match? + (matchers/embeds {:status 200 + :body {:available true}}) + resp)))) diff --git a/test/back/back/integration/cloud_ops/create_domain_test.clj b/test/back/back/integration/cloud_ops/create_domain_test.clj index ac74ffb4..8d257f48 100644 --- a/test/back/back/integration/cloud_ops/create_domain_test.clj +++ b/test/back/back/integration/cloud_ops/create_domain_test.clj @@ -60,24 +60,24 @@ (defn fcreate-domain [domain] (flow - "should create domain" - [components (state-flow.api/get-state)] - (state/invoke - #(workers/create-domain-handler {:event {:domain.create {:domain domain}}} - components)) + "should create domain" + [components (state-flow.api/get-state)] + (state/invoke + #(workers/create-domain-handler {:event {:domain.create {:domain domain}}} + components)) - (match? - (matchers/embeds {:event {:domain domain - :new-status "publishing"}}) - (update-in (first (get @mq/mock-channels "domain.updated")) - [:event] dissoc :ctx)) + (match? + (matchers/embeds {:event {:domain domain + :new-status "publishing"}}) + (update-in (first (get @mq/mock-channels "domain.updated")) + [:event] dissoc :ctx)) - (match? - (matchers/embeds {:event {:domain domain - :retrying? true - :skip-data? false}}) - (update-in (first (get @mq/mock-channels "domain.verification.dispatched")) - [:event] dissoc :ctx)))) + (match? + (matchers/embeds {:event {:domain domain + :retrying? true + :skip-data? false}}) + (update-in (first (get @mq/mock-channels "domain.verification.dispatched")) + [:event] dissoc :ctx)))) (defflow flow-create-domain diff --git a/test/back/back/integration/cloud_ops/fail_create_domain_test.clj b/test/back/back/integration/cloud_ops/fail_create_domain_test.clj index c371b25c..67311c82 100644 --- a/test/back/back/integration/cloud_ops/fail_create_domain_test.clj +++ b/test/back/back/integration/cloud_ops/fail_create_domain_test.clj @@ -39,13 +39,13 @@ :cleanup utils/stop-system! :fail-fast? true} (sf/flow - "should fail to create cloudflare record" - [components (sf/get-state) - err-url (sf/invoke #(try - (workers/create-domain-handler - {:event {:domain.create {:domain "test-j0suetm"}}} - components) - (catch Throwable e - (-> e ex-data :req :url))))] - (sf/match? "https://api.cloudflare.com/client/v4/zones/c6f10cf4dd7ace4b979d60c22066be23/dns_records" - err-url))) + "should fail to create cloudflare record" + [components (sf/get-state) + err-url (sf/invoke #(try + (workers/create-domain-handler + {:event {:domain.create {:domain "test-j0suetm"}}} + components) + (catch Throwable e + (-> e ex-data :req :url))))] + (sf/match? "https://api.cloudflare.com/client/v4/zones/c6f10cf4dd7ace4b979d60c22066be23/dns_records" + err-url))) diff --git a/test/back/back/integration/cloud_ops/fail_retrieve_data_test.clj b/test/back/back/integration/cloud_ops/fail_retrieve_data_test.clj index cd187ba0..dc6d48b7 100644 --- a/test/back/back/integration/cloud_ops/fail_retrieve_data_test.clj +++ b/test/back/back/integration/cloud_ops/fail_retrieve_data_test.clj @@ -23,13 +23,13 @@ :cleanup utils/stop-system! :fail-fast? true} (sf/flow - "should fail to retrieve current cloudflare records" - [components (sf/get-state) - err-url (sf/invoke #(try - (workers/create-domain-handler - {:event {:domain.create {:domain "test-j0suetm"}}} - components) - (catch Throwable e - (-> e ex-data :req :url))))] - (sf/match? "https://api.cloudflare.com/client/v4/zones/c6f10cf4dd7ace4b979d60c22066be23/dns_records" - err-url))) + "should fail to retrieve current cloudflare records" + [components (sf/get-state) + err-url (sf/invoke #(try + (workers/create-domain-handler + {:event {:domain.create {:domain "test-j0suetm"}}} + components) + (catch Throwable e + (-> e ex-data :req :url))))] + (sf/match? "https://api.cloudflare.com/client/v4/zones/c6f10cf4dd7ace4b979d60c22066be23/dns_records" + err-url))) diff --git a/test/back/back/integration/yaml_generator/mock_validation_test.clj b/test/back/back/integration/yaml_generator/mock_validation_test.clj index 8908680b..fb6904df 100644 --- a/test/back/back/integration/yaml_generator/mock_validation_test.clj +++ b/test/back/back/integration/yaml_generator/mock_validation_test.clj @@ -39,40 +39,40 @@ (defn fblock-invalid-yaml [] (flow "" - [:let [mock-id (random-uuid)] - database (state-flow.api/get-state :database)] - (state/invoke - #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :customer/email "test@gmail.com" - :customer/username "chico" - :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} - database)) + [:let [mock-id (random-uuid)] + database (state-flow.api/get-state :database)] + (state/invoke + #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :customer/email "test@gmail.com" + :customer/username "chico" + :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} + database)) - (state/invoke #(db.mocks/insert! - {:mock/subdomain "chico" - :mock/id mock-id - :mock/content invalid-mock-yaml - :mock/wildcard "test" - :mock/user_id #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :mock/enabled true - :mock/dns_status "offline" - :mock/unification_status "offline"} - database)) - (flow - "should block invalid yaml" - [components (state-flow.api/get-state)] - (state/invoke - #(workers/generate-single-yml-handler - {:event - {:yml.single.generate {:mock-id mock-id}}} - components)) - (match? - (matchers/embeds {:event - {:mock.unification-status - {:mock-id mock-id - :new-status "offline-invalid"}}}) - (update-in (first (get @mq/mock-channels "yml.unified.generated")) - [:event :mock.unification-status] dissoc :ctx))))) + (state/invoke #(db.mocks/insert! + {:mock/subdomain "chico" + :mock/id mock-id + :mock/content invalid-mock-yaml + :mock/wildcard "test" + :mock/user_id #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :mock/enabled true + :mock/dns_status "offline" + :mock/unification_status "offline"} + database)) + (flow + "should block invalid yaml" + [components (state-flow.api/get-state)] + (state/invoke + #(workers/generate-single-yml-handler + {:event + {:yml.single.generate {:mock-id mock-id}}} + components)) + (match? + (matchers/embeds {:event + {:mock.unification-status + {:mock-id mock-id + :new-status "offline-invalid"}}}) + (update-in (first (get @mq/mock-channels "yml.unified.generated")) + [:event :mock.unification-status] dissoc :ctx))))) (def valid-mock-yaml "- endpoint: @@ -93,40 +93,40 @@ (defn fallow-valid-yaml [] (flow "" - [:let [mock-id (random-uuid)] - database (state-flow.api/get-state :database)] - (state/invoke - #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :customer/email "test@gmail.com" - :customer/username "chico" - :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} - database)) + [:let [mock-id (random-uuid)] + database (state-flow.api/get-state :database)] + (state/invoke + #(db.customers/insert! {:customer/uuid #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :customer/email "test@gmail.com" + :customer/username "chico" + :customer/external-uuid #uuid "dcff4c06-1c9e-4abb-a49b-438e1869ec5b"} + database)) - (state/invoke #(db.mocks/insert! - {:mock/subdomain "chico" - :mock/id mock-id - :mock/content valid-mock-yaml - :mock/wildcard "test" - :mock/user_id #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" - :mock/enabled true - :mock/dns_status "offline" - :mock/unification_status "offline"} - database)) - (flow - "should allow valid yaml" - [components (state-flow.api/get-state)] - (state/invoke - #(workers/generate-single-yml-handler - {:event - {:yml.single.generate - {:mock-id mock-id}}} - components)) - (match? - (matchers/embeds {:event - {:gen-yml-path (str "cd989358-af38-4a2f-a1a1-88096aa425a7/" mock-id "/mock.yml") - :append? true}}) - (update-in (first (get @mq/mock-channels "yml.single.generated")) - [:event] dissoc :ctx))))) + (state/invoke #(db.mocks/insert! + {:mock/subdomain "chico" + :mock/id mock-id + :mock/content valid-mock-yaml + :mock/wildcard "test" + :mock/user_id #uuid "cd989358-af38-4a2f-a1a1-88096aa425a7" + :mock/enabled true + :mock/dns_status "offline" + :mock/unification_status "offline"} + database)) + (flow + "should allow valid yaml" + [components (state-flow.api/get-state)] + (state/invoke + #(workers/generate-single-yml-handler + {:event + {:yml.single.generate + {:mock-id mock-id}}} + components)) + (match? + (matchers/embeds {:event + {:gen-yml-path (str "cd989358-af38-4a2f-a1a1-88096aa425a7/" mock-id "/mock.yml") + :append? true}}) + (update-in (first (get @mq/mock-channels "yml.single.generated")) + [:event] dissoc :ctx))))) (defflow flow-block-valid-yaml diff --git a/test/back/back/integration/yaml_generator/unified_validation_test.clj b/test/back/back/integration/yaml_generator/unified_validation_test.clj index 225ebf6a..c67de5ac 100644 --- a/test/back/back/integration/yaml_generator/unified_validation_test.clj +++ b/test/back/back/integration/yaml_generator/unified_validation_test.clj @@ -82,29 +82,29 @@ (defn fvalidate-and-recreate-unified [] (flow - "should correct and validate unified yaml" - [{:keys [mq storage]} (state-flow.api/get-state)] + "should correct and validate unified yaml" + [{:keys [mq storage]} (state-flow.api/get-state)] - (state-flow.api/invoke - #(mq/try-op! mq :publish! ["yml.unified.verification.fired" {}] {})) + (state-flow.api/invoke + #(mq/try-op! mq :publish! ["yml.unified.verification.fired" {}] {})) - (match? - (matchers/embeds (logic.yml/parse-yaml-&-body - (:with-host yml-consts))) - (state-flow.api/return - (let [timeout 10000 ;; 10 seconds - deadline (+ (System/currentTimeMillis) timeout)] - (loop [] - (Thread/sleep 500) - (if (< (System/currentTimeMillis) deadline) - (if-let [content (some-> (storage/get-file storage "moclojer" "moclojer.yml") - io/reader slurp - logic.yml/parse-yaml-&-body)] - (if-not (= content []) - content - (recur)) - (recur)) - (throw (Exception. "Timeout reached while waiting for file content"))))))))) + (match? + (matchers/embeds (logic.yml/parse-yaml-&-body + (:with-host yml-consts))) + (state-flow.api/return + (let [timeout 10000 ;; 10 seconds + deadline (+ (System/currentTimeMillis) timeout)] + (loop [] + (Thread/sleep 500) + (if (< (System/currentTimeMillis) deadline) + (if-let [content (some-> (storage/get-file storage "moclojer" "moclojer.yml") + io/reader slurp + logic.yml/parse-yaml-&-body)] + (if-not (= content []) + content + (recur)) + (recur)) + (throw (Exception. "Timeout reached while waiting for file content"))))))))) (defflow flow-unified-validation-test @@ -112,14 +112,14 @@ :cleanup utils/stop-system! :fail-fast? true} (flow - "will validate the unified yaml" - [{:keys [database storage]} (state-flow.api/get-state)] - (state/invoke #(db.customers/insert! (:user flow-consts) database)) - (state/invoke #(db.mocks/insert! (:mock flow-consts) database)) - (state/invoke #(storage/upload! storage "moclojer" - (logic.yml/gen-path - (get-in flow-consts [:user :customer/uuid]) - (get-in flow-consts [:mock :mock/id])) - (:with-host yml-consts) {})) - (state/invoke #(storage/upload! storage "moclojer" "moclojer.yml" "[]\n" {})) - (fvalidate-and-recreate-unified))) + "will validate the unified yaml" + [{:keys [database storage]} (state-flow.api/get-state)] + (state/invoke #(db.customers/insert! (:user flow-consts) database)) + (state/invoke #(db.mocks/insert! (:mock flow-consts) database)) + (state/invoke #(storage/upload! storage "moclojer" + (logic.yml/gen-path + (get-in flow-consts [:user :customer/uuid]) + (get-in flow-consts [:mock :mock/id])) + (:with-host yml-consts) {})) + (state/invoke #(storage/upload! storage "moclojer" "moclojer.yml" "[]\n" {})) + (fvalidate-and-recreate-unified))) diff --git a/test/back/back/integration/yaml_generator/yaml_generation_test.clj b/test/back/back/integration/yaml_generator/yaml_generation_test.clj index 25311255..fb23482d 100644 --- a/test/back/back/integration/yaml_generator/yaml_generation_test.clj +++ b/test/back/back/integration/yaml_generator/yaml_generation_test.clj @@ -75,39 +75,39 @@ (defn fgenerate-and-save-mock [] (flow - "should save generated yml to storage" - [mq (state-flow.api/get-state :mq) - storage (state-flow.api/get-state :storage)] - (state-flow.api/invoke - #(do - (mq/try-op! mq :publish! - ["mock.updated" - {:event - {:yml.single.generate - {:mock-id (get-in flow-consts [:mock :mock/id])}}}] - {}) - (Thread/sleep 5000))) + "should save generated yml to storage" + [mq (state-flow.api/get-state :mq) + storage (state-flow.api/get-state :storage)] + (state-flow.api/invoke + #(do + (mq/try-op! mq :publish! + ["mock.updated" + {:event + {:yml.single.generate + {:mock-id (get-in flow-consts [:mock :mock/id])}}}] + {}) + (Thread/sleep 5000))) - (match? - (matchers/embeds (logic.yml/parse-yaml-&-body (:sample yml-consts))) - (state-flow.api/return - (let [timeout 10000 ;; 10 seconds - deadline (+ (System/currentTimeMillis) timeout)] - (loop [] - (Thread/sleep 500) - (if (< (System/currentTimeMillis) deadline) - (if-let [content (some-> (storage/get-file - storage "moclojer" - (logic.yml/gen-path - (get-in flow-consts [:user :customer/uuid]) - (get-in flow-consts [:mock :mock/id]))) - io/reader slurp - logic.yml/parse-yaml-&-body)] - (if-not (= content []) - content - (recur)) - (recur)) - (throw (Exception. "Timeout reached while waiting for file content"))))))))) + (match? + (matchers/embeds (logic.yml/parse-yaml-&-body (:sample yml-consts))) + (state-flow.api/return + (let [timeout 10000 ;; 10 seconds + deadline (+ (System/currentTimeMillis) timeout)] + (loop [] + (Thread/sleep 500) + (if (< (System/currentTimeMillis) deadline) + (if-let [content (some-> (storage/get-file + storage "moclojer" + (logic.yml/gen-path + (get-in flow-consts [:user :customer/uuid]) + (get-in flow-consts [:mock :mock/id]))) + io/reader slurp + logic.yml/parse-yaml-&-body)] + (if-not (= content []) + content + (recur)) + (recur)) + (throw (Exception. "Timeout reached while waiting for file content"))))))))) (defflow flow-yaml-generation-test @@ -115,8 +115,8 @@ :cleanup utils/stop-system! :fail-fast? true} (flow - "will try to generate a yaml and save it to storage" - [db (state-flow.api/get-state :database)] - (state/invoke #(db.customers/insert! (:user flow-consts) db)) - (state/invoke #(db.mocks/insert! (:mock flow-consts) db)) - (fgenerate-and-save-mock))) + "will try to generate a yaml and save it to storage" + [db (state-flow.api/get-state :database)] + (state/invoke #(db.customers/insert! (:user flow-consts) db)) + (state/invoke #(db.mocks/insert! (:mock flow-consts) db)) + (fgenerate-and-save-mock))) diff --git a/test/back/back/integration/yaml_generator/yaml_unified_mock_test.clj b/test/back/back/integration/yaml_generator/yaml_unified_mock_test.clj index 2f016dff..d6f95da2 100644 --- a/test/back/back/integration/yaml_generator/yaml_unified_mock_test.clj +++ b/test/back/back/integration/yaml_generator/yaml_unified_mock_test.clj @@ -16,61 +16,61 @@ (defn publish-message [msg queue-name] (flow "publish a message" - [mq (state-flow.api/get-state :mq)] + [mq (state-flow.api/get-state :mq)] - (-> (mq/try-op! mq :publish! [queue-name msg] {}) - state-flow.api/return))) + (-> (mq/try-op! mq :publish! [queue-name msg] {}) + state-flow.api/return))) (defn create-bucket-on-localstack [n] (flow "create a bucket on localstack" - [storage (state-flow.api/get-state :storage)] + [storage (state-flow.api/get-state :storage)] - (-> storage - (storage/create-bucket! n) - state-flow.api/return))) + (-> storage + (storage/create-bucket! n) + state-flow.api/return))) (defn delete-bucket-on-localstack [n] (flow "delte bucket on localstack" - [storage (state-flow.api/get-state :storage)] + [storage (state-flow.api/get-state :storage)] - (-> storage - (storage/delete-bucket! n) - state-flow.api/return))) + (-> storage + (storage/delete-bucket! n) + state-flow.api/return))) (defn cleaning-up-localstack-all-files [n] (flow "cleaning up localstack" - [storage (state-flow.api/get-state :storage)] + [storage (state-flow.api/get-state :storage)] - (->> (storage/list-files storage n) - (map :Key) - (map #(storage/delete-file! storage n %)) - state-flow.api/return))) + (->> (storage/list-files storage n) + (map :Key) + (map #(storage/delete-file! storage n %)) + state-flow.api/return))) (defn setup-file-on-localstack [bucket k v] (flow "setup a file on localstack" - [storage (state-flow.api/get-state :storage)] + [storage (state-flow.api/get-state :storage)] - (-> storage - (storage/upload! bucket k v {}) - state-flow.api/return))) + (-> storage + (storage/upload! bucket k v {}) + state-flow.api/return))) (defn get-file-on-localstack [n k] (flow "get a file on localstack" - [storage (state-flow.api/get-state :storage)] - (state-flow.api/return - (let [timeout 5000 ;; 5 seconds - deadline (+ (System/currentTimeMillis) timeout)] - (loop [] - (Thread/sleep 500) - (if (< (System/currentTimeMillis) deadline) - (if-let [content (some-> (storage/get-file storage n k) - io/reader slurp - logic.yml/parse-yaml-&-body)] - (if-not (= content []) - content - (recur)) - (recur)) - (throw (Exception. "Failed to retrieve file content within the 5-second timeout")))))))) + [storage (state-flow.api/get-state :storage)] + (state-flow.api/return + (let [timeout 5000 ;; 5 seconds + deadline (+ (System/currentTimeMillis) timeout)] + (loop [] + (Thread/sleep 500) + (if (< (System/currentTimeMillis) deadline) + (if-let [content (some-> (storage/get-file storage n k) + io/reader slurp + logic.yml/parse-yaml-&-body)] + (if-not (= content []) + content + (recur)) + (recur)) + (throw (Exception. "Failed to retrieve file content within the 5-second timeout")))))))) (defn- create-and-start-components [] (component/start-system @@ -125,19 +125,19 @@ :fail-fast? true} (flow "create a bucket" - [create (create-bucket-on-localstack "moclojer")] + [create (create-bucket-on-localstack "moclojer")] - (match? create {:Location "/moclojer"}) + (match? create {:Location "/moclojer"}) - (flow "setup mock on bucket for path" + (flow "setup mock on bucket for path" - [_ (setup-file-on-localstack "moclojer" - (str "cd989358-af38-4a2f-a1a1-88096aa425a7/" mock-id "/mock.yml") - yml) - _ (publish-message {:event - {:path (str "cd989358-af38-4a2f-a1a1-88096aa425a7/" mock-id "/mock.yml")}} "mock-unified")] - (flow "check retrieved unified yml" + [_ (setup-file-on-localstack "moclojer" + (str "cd989358-af38-4a2f-a1a1-88096aa425a7/" mock-id "/mock.yml") + yml) + _ (publish-message {:event + {:path (str "cd989358-af38-4a2f-a1a1-88096aa425a7/" mock-id "/mock.yml")}} "mock-unified")] + (flow "check retrieved unified yml" - (match? - (matchers/embeds (logic.yml/parse-yaml-&-body expected-yml-with-host)) - (get-file-on-localstack "moclojer" (str "cd989358-af38-4a2f-a1a1-88096aa425a7/" mock-id "/mock.yml"))))))) + (match? + (matchers/embeds (logic.yml/parse-yaml-&-body expected-yml-with-host)) + (get-file-on-localstack "moclojer" (str "cd989358-af38-4a2f-a1a1-88096aa425a7/" mock-id "/mock.yml"))))))) diff --git a/test/front/front/app/integration/login_auth_view_test.cljs b/test/front/front/app/integration/login_auth_view_test.cljs index 795daffb..a05dc9a6 100644 --- a/test/front/front/app/integration/login_auth_view_test.cljs +++ b/test/front/front/app/integration/login_auth_view_test.cljs @@ -49,38 +49,38 @@ :body (clj->js login-return)}}}) #_(deftest login-auth-view-test-fail-workos-test - (testing "auth login code redirect view should show error from WORKOS" - (async done - (p/let [_route (refx/dispatch [:app.routes/navigated-fake - {:query-params - {:error_description "some err message."}}]) - _msw (mock/start! login-auth-fail-msw) - _render (aux/wait-for #(-> auth.views/login-auth-view aux/render .-container)) - error-msg (p/delay 250 (subs/sub [:app.auth/login-error]))] - (is (= "some err message." (last (subs/-value error-msg)))) - (aux/cleanup) - (done))))) + (testing "auth login code redirect view should show error from WORKOS" + (async done + (p/let [_route (refx/dispatch [:app.routes/navigated-fake + {:query-params + {:error_description "some err message."}}]) + _msw (mock/start! login-auth-fail-msw) + _render (aux/wait-for #(-> auth.views/login-auth-view aux/render .-container)) + error-msg (p/delay 250 (subs/sub [:app.auth/login-error]))] + (is (= "some err message." (last (subs/-value error-msg)))) + (aux/cleanup) + (done))))) #_(deftest login-auth-view-test-fail-api-test - (testing "auth login code redirect view should show error from internal API" - (async done - (p/let [_route (refx/dispatch [:app.routes/navigated-fake - {:query-params {:code "1234"}}]) - _msw (mock/start! login-auth-fail-msw) - _render (aux/wait-for #(-> auth.views/login-auth-view aux/render .-container)) - error-msg (p/delay 250 (subs/sub [:app.auth/login-error]))] - (is (= "Invalid credentials" (:message (last (subs/-value error-msg))))) - (aux/cleanup) - (done))))) + (testing "auth login code redirect view should show error from internal API" + (async done + (p/let [_route (refx/dispatch [:app.routes/navigated-fake + {:query-params {:code "1234"}}]) + _msw (mock/start! login-auth-fail-msw) + _render (aux/wait-for #(-> auth.views/login-auth-view aux/render .-container)) + error-msg (p/delay 250 (subs/sub [:app.auth/login-error]))] + (is (= "Invalid credentials" (:message (last (subs/-value error-msg))))) + (aux/cleanup) + (done))))) #_(deftest login-auth-view-test-success-api-test - (testing "auth login code redirect view should show error from internal API" - (async done - (p/let [_route (refx/dispatch [:app.routes/navigated-fake - {:query-params {:code "1234"}}]) - _msw (mock/start! login-auth-sucess-msw) - _render (aux/wait-for #(-> auth.views/login-auth-view aux/render .-container)) - current-user (p/delay 250 (subs/sub [:app.auth/current-user]))] - (is (= login-return (subs/-value current-user))) - (aux/cleanup) - (done))))) + (testing "auth login code redirect view should show error from internal API" + (async done + (p/let [_route (refx/dispatch [:app.routes/navigated-fake + {:query-params {:code "1234"}}]) + _msw (mock/start! login-auth-sucess-msw) + _render (aux/wait-for #(-> auth.views/login-auth-view aux/render .-container)) + current-user (p/delay 250 (subs/sub [:app.auth/current-user]))] + (is (= login-return (subs/-value current-user))) + (aux/cleanup) + (done))))) diff --git a/test/front/front/app/integration/login_view_test.cljs b/test/front/front/app/integration/login_view_test.cljs index 2e70e714..b827243e 100644 --- a/test/front/front/app/integration/login_view_test.cljs +++ b/test/front/front/app/integration/login_view_test.cljs @@ -29,31 +29,31 @@ :body #js {:ok true}}}}) #_(deftest auth-view-email-send-error-test - (testing "auth email send view should error" - (async done - (p/let [_ (mock/start! login-error-msw) - render (aux/wait-for #(-> auth.views/login-view aux/render)) - container (aux/wait-for #(.-container render)) - button (-> container (aux/tag "button") first) - input (-> container (aux/query "#login-email")) - _change (aux/wait-for #(-> input (aux/change "err@ee.cc"))) - _click (aux/wait-for #(-> button aux/click)) - error-msg (aux/wait-for #(-> container (aux/query "#login-error") aux/text))] - (is (= "Error... try it again.Not found" error-msg)) - (aux/cleanup) - (done))))) + (testing "auth email send view should error" + (async done + (p/let [_ (mock/start! login-error-msw) + render (aux/wait-for #(-> auth.views/login-view aux/render)) + container (aux/wait-for #(.-container render)) + button (-> container (aux/tag "button") first) + input (-> container (aux/query "#login-email")) + _change (aux/wait-for #(-> input (aux/change "err@ee.cc"))) + _click (aux/wait-for #(-> button aux/click)) + error-msg (aux/wait-for #(-> container (aux/query "#login-error") aux/text))] + (is (= "Error... try it again.Not found" error-msg)) + (aux/cleanup) + (done))))) #_(deftest auth-view-email-send-success-test - (testing "auth email send view should work and show next panel" - (async done - (p/let [_ (mock/start! login-sucess-msw) - render (aux/wait-for #(-> auth.views/login-view aux/render)) - container (aux/wait-for #(.-container render)) - button (-> container (aux/tag "button") first) - input (-> container (aux/query "#login-email")) - _change (aux/wait-for #(-> input (aux/change "nice@email.cc"))) - _click (aux/wait-for #(-> button aux/click)) - success-msg (aux/wait-for #(-> container (aux/query "#login-email-sent") aux/text))] - (is (= "Check your email, and click on the link.Didn't received it? Try again." success-msg)) - (aux/cleanup) - (done))))) + (testing "auth email send view should work and show next panel" + (async done + (p/let [_ (mock/start! login-sucess-msw) + render (aux/wait-for #(-> auth.views/login-view aux/render)) + container (aux/wait-for #(.-container render)) + button (-> container (aux/tag "button") first) + input (-> container (aux/query "#login-email")) + _change (aux/wait-for #(-> input (aux/change "nice@email.cc"))) + _click (aux/wait-for #(-> button aux/click)) + success-msg (aux/wait-for #(-> container (aux/query "#login-email-sent") aux/text))] + (is (= "Check your email, and click on the link.Didn't received it? Try again." success-msg)) + (aux/cleanup) + (done))))) diff --git a/test/front/front/app/unit/components/button_test.cljs b/test/front/front/app/unit/components/button_test.cljs index b81589cb..cef577c1 100644 --- a/test/front/front/app/unit/components/button_test.cljs +++ b/test/front/front/app/unit/components/button_test.cljs @@ -10,8 +10,8 @@ (components.button/get-login-style {:base "slate"}))) (is (= "group inline-flex ring-1 items-center justify-center rounded-full py-2 px-4 text-sm focus:outline-none ring-slate-200 text-slate-700 hover:text-slate-900 hover:ring-slate-300 active:bg-slate-100 active:text-slate-600 focus-visible:outline-blue-600 focus-visible:ring-slate-300 " (components.button/get-login-style {:variant "slate" - :base "outline"}))) + :base "outline"}))) (is (= "group inline-flex ring-1 items-center justify-center rounded-full py-2 px-4 text-sm focus:outline-none ring-slate-200 text-slate-700 hover:text-slate-900 hover:ring-slate-300 active:bg-slate-100 active:text-slate-600 focus-visible:outline-blue-600 focus-visible:ring-slate-300 extra" (components.button/get-login-style {:variant "slate" - :base "outline" - :class-name "extra"}))))) + :base "outline" + :class-name "extra"}))))) From ec7a5b0b7687514a6ee7b1ce4a8afa05dbbb94a9 Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Tue, 1 Oct 2024 18:36:47 -0300 Subject: [PATCH 06/22] feat: button and input on auth.views --- src/front/app/auth/views.cljs | 18 +++++++++--------- tailwind.config.js | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index d316b9dd..469def51 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -1,6 +1,7 @@ (ns front.app.auth.views (:require [mockingbird.components.button :refer [button]] + [mockingbird.components.input :refer [input]] [front.app.components.alerts :as alerts] [front.app.components.container :refer [container]] [front.app.components.section :refer [section]] @@ -58,21 +59,20 @@ (when (:email state) (refx/dispatch [:app.auth/send-email state]))) :class-name "mt-8 space-y-6"} - ($ labeled-input + + ($ input {:for "email" - :name "email" :label "your email" :placeholder "name@company.com" - :input-template "login" - :label-template "default" - :on-change #(set-state assoc :email (.. % -target -value))}) - (d/div {:class-name "flex items-start"} + :on-change #(set-state assoc :email (.. % -target -value))}) + + (d/div {:class-name "flex items-start "} (d/div {:class-name "flex items-center h-5"})) - ($ button {:class (str (when loading? "bg-gray-700")) + ($ button {:class (when loading? "bg-gray-700 ") :type :submit :theme :mockingbird - :size :full + :size :full :label "login to your account"} (if loading? (d/span {:class-name "inline-flex"} @@ -132,7 +132,7 @@ ($ button {:class (str "bg-gray-700" (when loading? "login-button-block") - (when available? " login-button cursor-not-allowed")) + (when available? " cursor-not-allowed")) :type :submit :theme :mockingbird :size :full diff --git a/tailwind.config.js b/tailwind.config.js index 473055d3..39b1aa4f 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -45,7 +45,7 @@ module.exports = { kiwi: {"main": "#7FE04A", "bg": "#2F362C"}, warning: {"50": "#fde8e8", "900": "#F05252"}, success: {"50": "#def7ec", "700": "#046c4e"}, - gray: {"50": "#fde8e8", "700": "#808080", "800": "#5e5e5e" }, + gray: { "700": "#808080", "800": "#5e5e5e" }, }, fontFamily: { 'sans': ['Inter', 'ui-sans-serif', 'system-ui', '-apple-system', 'system-ui', 'Segoe UI', 'Roboto', 'Helvetica Neue', 'Arial', 'Noto Sans', 'sans-serif', 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'], From cbcec717e8101e29e49be72d67bff5de2512e7ea Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Wed, 2 Oct 2024 16:23:37 -0300 Subject: [PATCH 07/22] feat: adds buttons, images, pfps and messages from mockingbird --- docker/docker-compose.yml | 2 - src/front/app/auth/views.cljs | 71 +++++++++++++----------- src/front/app/components/alerts.cljs | 6 +- src/front/app/components/aside.cljs | 36 ++++++------ src/front/app/components/button.cljs | 29 ++++------ src/front/app/components/container.cljs | 6 +- src/front/app/components/footer.cljs | 2 +- src/front/app/components/labelinput.cljs | 31 ----------- src/front/app/components/loading.cljs | 6 +- src/front/app/components/messages.cljs | 38 ++++++------- src/front/app/components/navbar.cljs | 5 +- src/front/app/components/navlink.cljs | 2 +- src/front/app/components/profile.cljs | 20 +++---- src/front/app/components/section.cljs | 4 +- src/front/app/components/svg.cljs | 26 ++++----- src/front/app/dashboard/base.cljs | 10 ++-- src/front/app/dashboard/editor.cljs | 2 +- src/front/app/dashboard/mocks.cljs | 3 +- src/front/app/dashboard/views.cljs | 14 +---- 19 files changed, 136 insertions(+), 177 deletions(-) delete mode 100644 src/front/app/components/labelinput.cljs diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 82d441e3..647b6cfb 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.7" - services: db: image: postgres:14 diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index 469def51..1ea06d5d 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -1,12 +1,12 @@ (ns front.app.auth.views (:require [mockingbird.components.button :refer [button]] + [mockingbird.components.image :refer [image]] [mockingbird.components.input :refer [input]] [front.app.components.alerts :as alerts] [front.app.components.container :refer [container]] [front.app.components.section :refer [section]] [front.app.components.loading :refer [loading-spinner]] - [front.app.components.labelinput :refer [labeled-input]] [front.app.components.navlink :refer [nav-link]] [front.app.lib :refer [defnc]] [helix.core :refer [$]] @@ -22,27 +22,28 @@ state set-state error error-res]}] ($ container {} - (d/div {:class-name (str "flex justify-center items-center w-full bg-white rounded-lg shadow lg:flex " + (d/div {:class (str "flex justify-center items-center w-full bg-white rounded-lg shadow lg:flex " "md:mt-0 lg:max-w-screen-lg 2xl:max:max-w-screen-lg xl:p-0 dark:bg-gray-800")} - (d/div {:class-name "hidden w-2/3 lg:flex"} - (d/img {:src "/images/authentication/login.svg" :class-name "rounded-l-lg"})) + (d/div {:class "hidden w-2/3 lg:flex"} + ($ image {:src "/images/authentication/login.svg" + :class "rounded-l-lg"})) (if sent? (d/div {:id "login-email-sent" - :class-name "p-6 space-y-8 w-full sm:p-8 lg:p-16 lg:py-0"} + :class "p-6 space-y-8 w-full sm:p-8 lg:p-16 lg:py-0"} (d/h2 - {:class-name "font-semibold text-gray-900"} + {:class "font-semibold text-gray-900"} "Sign in to moclojer") (d/div - {:class-name "font-semibold text-gray-900"} + {:class "font-semibold text-gray-900"} "Check your email") (d/div (d/div - {:class-name "ml-3 "} + {:class "ml-3 "} "If you have an account with us, we’ve sent an email to " (:email state) " with a link that you can use to sign in.") (d/div - {:class-name "ml-3 "} + {:class "ml-3 "} "You can also " ($ nav-link {:children "try again." @@ -50,15 +51,15 @@ (.preventDefault e) (refx/dispatch [:app.auth/send-email-again])) :href "#"})))) - ($ section {:class-name "p-6 space-y-8 w-full sm:p-8 lg:p-16 lg:py-0"} - (d/h2 {:class-name "text-2xl font-bold text-gray-900 lg:text-3xl dark:text-white"} + ($ section {:class "p-6 space-y-8 w-full sm:p-8 lg:p-16 lg:py-0"} + (d/h2 {:class "text-2xl font-bold text-gray-900 lg:text-3xl dark:text-white"} "sign in to moclojer") (d/form {:disabled loading? :on-submit (fn [e] (.preventDefault e) (when (:email state) (refx/dispatch [:app.auth/send-email state]))) - :class-name "mt-8 space-y-6"} + :class "mt-8 space-y-6"} ($ input {:for "email" @@ -66,21 +67,24 @@ :placeholder "name@company.com" :on-change #(set-state assoc :email (.. % -target -value))}) - (d/div {:class-name "flex items-start "} - (d/div {:class-name "flex items-center h-5"})) + (d/div {:class "flex items-start "} + (d/div {:class "flex items-center h-5"})) - ($ button {:class (when loading? "bg-gray-700 ") + ($ button {:class (str (if loading? + "bg-gray-700 " + "bg-mockingbird-main ") + "hover:bg-mockingbird-400 ") :type :submit :theme :mockingbird :size :full :label "login to your account"} (if loading? - (d/span {:class-name "inline-flex"} + (d/span {:class "inline-flex"} ($ loading-spinner {}) "loading...") (d/span "login to your account"))) - (d/div {:class-name "text-sm font-medium text-gray-500 dark:text-gray-400"} + (d/div {:class "text-sm font-medium text-gray-500 dark:text-gray-400"} (if error ($ alerts/error {:id "login-error" @@ -91,30 +95,31 @@ (defnc first-login [{:keys [sent? loading?]}] (let [username (refx/use-sub [:app.auth/username-to-save]) available? (refx/use-sub [:app.auth/is-username-available?])] - (d/div {:class-name "flex flex-col justify-center items-center px-6 pt-8 mx-auto md:h-screen pt:mt-0 dark:bg-gray-900"} - (d/div {:class-name (str "flex justify-center items-center w-full bg-white rounded-lg shadow lg:flex " + (d/div {:class "flex flex-col justify-center items-center px-6 pt-8 mx-auto md:h-screen pt:mt-0 dark:bg-gray-900"} + (d/div {:class (str "flex justify-center items-center w-full bg-white rounded-lg shadow lg:flex " "md:mt-0 lg:max-w-screen-lg 2xl:max:max-w-screen-lg xl:p-0 dark:bg-gray-800")} - (d/div {:class-name "hidden w-2/3 lg:flex"} - (d/img {:src "/images/authentication/login.svg" :class-name "rounded-l-lg"})) + (d/div {:class "hidden w-2/3 lg:flex"} + ($ image {:src "/images/authentication/login.svg" + :class "rounded-l-lg"})) (if sent? (d/div ($ loading-spinner) "loading ...") - (d/div {:class-name "p-6 space-y-8 w-full sm:p-8 lg:p-16 lg:py-0"} + (d/div {:class "p-6 space-y-8 w-full sm:p-8 lg:p-16 lg:py-0"} (if (and loading? (nil? username)) (d/div ($ loading-spinner) "loading ...") (d/div - (d/h2 {:class-name "text-2xl font-bold text-gray-900 lg:text-3xl dark:text-white"} + (d/h2 {:class "text-2xl font-bold text-gray-900 lg:text-3xl dark:text-white"} "welcome, enter your username.") (d/form {:disabled loading? :on-submit (fn [e] (.preventDefault e) (when (and (not-empty username) available?) (refx/dispatch [:app.auth/save-username username]))) - :class-name "mt-8 space-y-6"} + :class "mt-8 space-y-6"} (d/div - ($ labeled-input + ($ input {:for "username" :name "username" :label "your username" @@ -126,20 +131,22 @@ (refx/dispatch-sync [:app.auth/username-available? (.. e -target -value)]))})) - (d/div {:class-name "text-sm font-medium text-gray-500 dark:text-gray-400"} - (d/b {:class-name "text-gray-900"} "*..") - (d/span {:class-name "text-gray-500"} "moclojer.com")) + (d/div {:class "text-sm font-medium text-gray-500 dark:text-gray-400"} + (d/b {:class "text-gray-900"} "*..") + (d/span {:class "text-gray-500"} "moclojer.com")) - ($ button {:class (str "bg-gray-700" - (when loading? "login-button-block") - (when available? " cursor-not-allowed")) + ($ button {:class(str (if loading? + "bg-gray-700 " + "bg-mockingbird-main ") + "hover:bg-mockingbird-400 " + (when (not available?) " cursor-not-allowed ")) :type :submit :theme :mockingbird :size :full :disabled (if (or loading? (not available?)) true false)} - (if loading? (d/span {:class-name "inline-flex"} + (if loading? (d/span {:class "inline-flex"} ($ loading-spinner {}) "loading...") (d/span "Save")))))))))))) diff --git a/src/front/app/components/alerts.cljs b/src/front/app/components/alerts.cljs index e7c741cc..6b64c7e4 100644 --- a/src/front/app/components/alerts.cljs +++ b/src/front/app/components/alerts.cljs @@ -13,11 +13,11 @@ (let [{:keys [card tittle desc]} error-styles] (d/div {:id id - :class-name card} + :class card} (d/strong - {:class-name tittle} + {:class tittle} error) (when description (d/p - {:class-name desc} + {:class desc} (str description)))))) diff --git a/src/front/app/components/aside.cljs b/src/front/app/components/aside.cljs index c16cdc0f..66c537cb 100644 --- a/src/front/app/components/aside.cljs +++ b/src/front/app/components/aside.cljs @@ -27,13 +27,13 @@ {:class "flex flex-row"} (d/button {:on-click #(rfe/push-state :app.core/mocks) - :class-name (str "flex items-center p-2 w-full text-base font-normal text-gray-900 rounded-lg " + :class (str "flex items-center p-2 w-full text-base font-normal text-gray-900 rounded-lg " "transition duration-75 group hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700 ") :aria-controls "dropdown-mocks" :aria-expanded aside-open? :data-collapse-toggle "dropdown-mocks"} ($ svg/mock-list-box) - (d/span {:class-name (str "flex ml-3 text-left whitespace-nowrap " + (d/span {:class (str "flex ml-3 text-left whitespace-nowrap " (when-not aside-open? "lg:absolute lg:hidden"))} "Mocks")) (d/button @@ -43,7 +43,7 @@ ($ svg/arrow {:direction (if menu-open? :up :down)}))) (d/ul {:id "dropdown-mocks" - :class-name (str "py-2 space-y-2" + :class (str "py-2 space-y-2" (when (or (not menu-open?) (not aside-open?)) " hidden"))} (if (empty? mocks-raw) (d/div {:class "w-full pl-11 space-y-2"} @@ -54,21 +54,21 @@ (d/li {:key wildcard} (d/button {:on-click #(rfe/push-state :app.core/mocks-view {:mock-id id}) - :class-name (str "pl-11 w-full flex items-center overflow-hidden ellipsis p-2 " + :class (str "pl-11 w-full flex items-center overflow-hidden ellipsis p-2 " "text-base font-normal text-gray-900 rounded-lg transition " "duration-75 group hover:bg-gray-100 dark:text-gray-200 " "dark:hover:bg-gray-700")} (if (= mock-type :personal) ($ svg/personal-mock) ($ svg/org-mock)) - (d/span {:class-name "flex-1 ml-3 text-left truncate"} wildcard))))))))) + (d/span {:class "flex-1 ml-3 text-left truncate"} wildcard))))))))) (defnc aside [] (let [aside (refx/use-sub [:app.dashboard/aside]) aside-open? (:open? aside)] (d/div - {:class-name "overflow-hidden bg-gray-50 dark:bg-gray-900 pt-16"} + {:class "overflow-hidden bg-gray-50 dark:bg-gray-900 pt-16"} (d/aside {:id "sidebar" :class (str "fixed flex-col top-0 left-0 z-20 flex-shrink-0 w-full h-full duration-75 transition-width " @@ -76,37 +76,37 @@ :aria-label "Sidebar"} (d/div - {:class-name (str "flex relative flex-col flex-1 pt-8 min-h-0 bg-white border-r " + {:class (str "flex relative flex-col flex-1 pt-8 min-h-0 bg-white border-r " "border-gray-200 dark:bg-gray-800 dark:border-gray-700")} - (d/div {:class-name "flex overflow-y-auto flex-col flex-1 pt-5 pb-4"} - (d/div {:class-name "flex-1 px-3 space-y-1 bg-white divide-y divide-gray-200 dark:bg-gray-800 dark:divide-gray-700"} - (d/ul {:class-name "pb-2 space-y-2 pt-4"} + (d/div {:class "flex overflow-y-auto flex-col flex-1 pt-5 pb-4"} + (d/div {:class "flex-1 px-3 space-y-1 bg-white divide-y divide-gray-200 dark:bg-gray-800 dark:divide-gray-700"} + (d/ul {:class "pb-2 space-y-2 pt-4"} (d/li ($ toggle-aside-btn {:aside-open? aside-open?})) (d/li ($ home-btn {:aside-open? aside-open?})) ($ mock aside)) - (d/div {:class-name "pt-2 space-y-2"} + (d/div {:class "pt-2 space-y-2"} (d/a {:href "https://docs.moclojer.com/" :target "_blank" - :class-name (str "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg transition" + :class (str "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg transition" " duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700")} ($ svg/docs) - (d/span {:class-name + (d/span {:class (str "ml-3 " (when-not aside-open? "lg:hidden lg:absolute"))} "Docs")) (d/a {:href "https://discord.gg/pbhBzKjhTb" :target "_blank" - :class-name "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg transition duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700"} + :class "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg transition duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700"} ($ svg/help) - (d/span {:class-name + (d/span {:class (str "ml-3 " (when-not aside-open? "lg:hidden lg:absolute"))} "Help"))))) - (d/div {:class-name (str "absolute bottom-0 left-0 justify-center p-4 space-x-4 w-full lg:flex" + (d/div {:class (str "absolute bottom-0 left-0 justify-center p-4 space-x-4 w-full lg:flex" (when aside-open? " flex-col space-y-4 p-4"))} (d/button @@ -114,9 +114,9 @@ (.preventDefault e) (supabase/sign-out #(refx/dispatch-sync [:app.auth/logout %]))) - :class-name (str "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg transition" + :class (str "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg transition" " duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700")} ($ svg/help) (when aside-open? - (d/span {:class-name "ml-3"} + (d/span {:class "ml-3"} "Logout"))))))))) diff --git a/src/front/app/components/button.cljs b/src/front/app/components/button.cljs index c2cc1dcb..cd319795 100644 --- a/src/front/app/components/button.cljs +++ b/src/front/app/components/button.cljs @@ -1,5 +1,6 @@ (ns front.app.components.button (:require + [mockingbird.components.button :refer [button]] [front.app.lib :refer [defnc]] [helix.dom :as d] [helix.core :refer [$]] @@ -31,40 +32,30 @@ ;; TODO (def aside-styles {}) -(defnc button - [{:keys [children class-name on-click type disabled template] - :or {class-name "" on-click "" base "solid" variant "blue" template "default" type "button"}}] - (d/button - {:class-name class-name - :on-click on-click - :type type - :disabled disabled} - children)) - (defn get-login-style - [class-name base variant] + [class base variant] (let [base-style (keyword base) variant-style (keyword variant)] (str (get base-styles base-style) (get-in variant-styles [base-style variant-style]) - class-name))) + class))) (defnc login-button - [{:keys [children base variant class-name type disabled] + [{:keys [children base variant class type disabled] :or {children "" base "solid" variant "blue" type "submit" disabled false}}] - (let [class-name (get-login-style class-name base variant)] + (let [class (get-login-style class base variant)] ($ button - {:class-name class-name + {:class class :type type :disabled disabled} children))) (defnc new-mock-btn [] - ($ button {:class-name "px-3 py-2 bg-pink-600 rounded-lg flex flex-row space-x-2 items-center btn-add" + ($ button {:class "px-3 py-2 bg-pink-600 rounded-lg flex flex-row space-x-2 items-center btn-add" :on-click #(refx/dispatch [:app.dashboard/toggle-mock-modal])} ($ svg/plus-sign) - (d/p {:class-name "text-white text-xs font-bold"} + (d/p {:class "text-white text-xs font-bold"} "new mock") ($ svg/box))) @@ -89,14 +80,14 @@ [{:keys [aside-open?] :or {aside-open? false}}] (d/button - {:class-name (str "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg " + {:class (str "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg " "transtion duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700 " (if aside-open? "w-[calc(100%-8px)]" "w-full")) :on-click #(rfe/push-state :app.core/dashboard)} ($ svg/house) - (d/span {:class-name (str "ml-3 " + (d/span {:class (str "ml-3 " (when-not aside-open? "lg:hidden lg:absolute"))} "Home"))) diff --git a/src/front/app/components/container.cljs b/src/front/app/components/container.cljs index 531269fc..eb29c0ec 100644 --- a/src/front/app/components/container.cljs +++ b/src/front/app/components/container.cljs @@ -14,7 +14,7 @@ (let [aside (refx/use-sub [:app.dashboard/aside]) aside-open? (:open? aside)] (d/div - {:class-name (str "overflow-y-auto relative h-full bg-gray-50 " + {:class (str "overflow-y-auto relative h-full bg-gray-50 " (if aside-open? "lg:ml-64" "lg:ml-16") @@ -28,6 +28,6 @@ (str (-> template login-styles) children))) -(defnc container [{:keys [children class-name]}] - (d/div {:class-name (or class-name (get login-styles :default))} +(defnc container [{:keys [children class]}] + (d/div {:class (or class (get login-styles :default))} children)) diff --git a/src/front/app/components/footer.cljs b/src/front/app/components/footer.cljs index 087def3b..c7d8a89f 100644 --- a/src/front/app/components/footer.cljs +++ b/src/front/app/components/footer.cljs @@ -9,7 +9,7 @@ (defnc footer [] (let [db (refx/use-sub [:app.database/db])] - (d/footer {:class-name "bg-slate-50"} + (d/footer {:class "bg-slate-50"} ($ aside-container (d/pre (with-out-str (pprint/pprint db))))))) diff --git a/src/front/app/components/labelinput.cljs b/src/front/app/components/labelinput.cljs deleted file mode 100644 index c36cf3e0..00000000 --- a/src/front/app/components/labelinput.cljs +++ /dev/null @@ -1,31 +0,0 @@ -(ns front.app.components.labelinput - (:require - [helix.dom :as d] - [helix.core :refer [defnc]])) - -(def input-styles - {:login (str "bg-gray-50 border border-gray-300 text-gray-900 sm:text-sm rounded-lg focus:ring-primary-500 focus:border-primary-500 " - "block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white " - "dark:focus:ring-primary-500 dark:focus:border-primary-500")}) - -(def label-styles - {:login - {:default "block mb-2 text-sm font-medium text-gray-900 dark:text-white"}}) - -(defnc labeled-input [{:keys [input-template label-template label for placeholder name state on-change children]}] - (let [input-classes (get input-styles (keyword (or input-template :login)) "") - label-classes (get-in label-styles [(keyword (or input-template :login)) (keyword (or label-template :default))])] - (d/div - (d/label - {:class label-classes - :for for} - label) - (d/input - {:class input-classes - :for for - :placeholder placeholder - :name name - :value (:email state) - :required true - :on-change on-change}) - children))) diff --git a/src/front/app/components/loading.cljs b/src/front/app/components/loading.cljs index 5fbcacb7..f4079fb5 100644 --- a/src/front/app/components/loading.cljs +++ b/src/front/app/components/loading.cljs @@ -5,11 +5,11 @@ (defnc loading-spinner [] (d/svg - {:className "animate-spin -ml-1 mr-3 h-5 w-5 text-white" + {:class "animate-spin -ml-1 mr-3 h-5 w-5 text-white" :xmlns "http://www.w3.org/2000/svg" :fill "none" :viewBox "0 0 24 24"} (d/circle - {:className "opacity-25" + {:class "opacity-25" :cx "12" :cy "12" :r "10" :stroke "currentColor" :stroke-width "4"}) (d/path - {:className "opacity-75" + {:class "opacity-75" :fill "currentColor" :d "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"}))) diff --git a/src/front/app/components/messages.cljs b/src/front/app/components/messages.cljs index 8a35e754..2b44f7ee 100644 --- a/src/front/app/components/messages.cljs +++ b/src/front/app/components/messages.cljs @@ -19,7 +19,7 @@ [{:keys [message index]}] (let [msg-seq (seq message)] (d/div - (d/p {:class-name "text-base font-normal text-gray-500 dark:text-gray-400"} + (d/p {:class "text-base font-normal text-gray-500 dark:text-gray-400"} (nth msg-seq index)) (when (< index (dec (count message))) (do @@ -29,47 +29,47 @@ (defnc default-message [{:keys [children] :as props}] (d/section - (d/div {:class-name (str "p-4 bg-white block sm:flex items-center justify-between border-b" + (d/div {:class (str "p-4 bg-white block sm:flex items-center justify-between border-b" "border-gray-200 lg:mt-1.5 dark:bg-gray-800 dark:border-gray-700")} - (d/div {:class-name "flex items-center divide-x divide-gray-100 dark:divide-gray-700"} - (d/div {:class-name "pl-3 text-sm font-medium text-gray-500"} + (d/div {:class "flex items-center divide-x divide-gray-100 dark:divide-gray-700"} + (d/div {:class "pl-3 text-sm font-medium text-gray-500"} (gen-today-date)))) - (d/div {:class-name "p-5"} - (d/div {:class-name "flex items-center mb-4"} - (d/div {:class-name "flex-shrink-0"} + (d/div {:class "p-5"} + (d/div {:class "flex items-center mb-4"} + (d/div {:class "flex-shrink-0"} ($ pfp-img {:image-style (props :image-style) :pfp-url (props :image) :pfp-loading? false})) - (d/div {:class-name "ml-4"} + (d/div {:class "ml-4"} (d/p (props :author)) - (d/div {:class-name "mltext-sm text-gray-500 text-normal dark:text-gray-400"} + (d/div {:class "mltext-sm text-gray-500 text-normal dark:text-gray-400"} (d/i (props :email))))) - (d/h1 {:class-name "mb-4 text-2xl font-bold text-gray-900 dark:text-white"} + (d/h1 {:class "mb-4 text-2xl font-bold text-gray-900 dark:text-white"} (props :title)) - (d/div {:class-name "space-y-1"} + (d/div {:class "space-y-1"} ($ text {:message (seq (props :message)) :index 0}) - (d/p {:class-name "p-2 text-base font-normal text-gray-500 dark:text-gray-400"} + (d/p {:class "p-2 text-base font-normal text-gray-500 dark:text-gray-400"} "Best Regards," (d/br) (d/i "Avelino Founder Team")))))) (defnc blogpost-message [{:keys [children] :as props}] - (d/div {:class-name (str "p-4 bg-gray-200 block sm:flex items-center justify-left border-b mr-8 py-8" + (d/div {:class (str "p-4 bg-gray-200 block sm:flex items-center justify-left border-b mr-8 py-8" "border-gray-200 lg:mt-1.5 dark:bg-gray-800 dark:border-gray-700")} - (d/div {:class-name "flex items-center mb-4"} - (d/div {:class-name "flex-shrink-0"} + (d/div {:class "flex items-center mb-4"} + (d/div {:class "flex-shrink-0"} ($ pfp-img {:image-style (props :image-style) :pfp-loading? false :pfp-url (props :image)})) - (d/div {:class-name "ml-4"} - (d/div {:class-name "mltext-sm text-gray-500 text-normal dark:text-gray-400"} + (d/div {:class "ml-4"} + (d/div {:class "mltext-sm text-gray-500 text-normal dark:text-gray-400"} (d/p (props :author)) (d/i (props :email))))) - (d/div {:class-name "ml-4"} - (d/a {:class-name "text-blue-500 " :href (props :link) :target "_blank"} (props :link))))) + (d/div {:class "ml-4"} + (d/a {:class "text-blue-500 " :href (props :link) :target "_blank"} (props :link))))) diff --git a/src/front/app/components/navbar.cljs b/src/front/app/components/navbar.cljs index 6bae82a3..4b8afebb 100644 --- a/src/front/app/components/navbar.cljs +++ b/src/front/app/components/navbar.cljs @@ -1,5 +1,6 @@ (ns front.app.components.navbar (:require + [mockingbird.components.image :refer [image]] [front.app.components.button :refer [new-mock-btn]] [front.app.components.profile :refer [user-profile]] [front.app.components.svg :as svg] @@ -31,8 +32,8 @@ ($ svg/hamburger-menu))) (d/button {:class-name "flex" :on-click #(rfe/push-state :app.core/dashboard)} - (d/img {:src "/images/logo.svg" - :class-name "mr-3 h-9"}))) + ($ image {:src "/images/logo.svg" + :class "w-[calc(64%)] mr-3 h-9"}))) (d/div {:class-name "flex items-center lg:gap-3"} ($ new-mock-btn) ($ user-profile {:user-data user-data}))))))) diff --git a/src/front/app/components/navlink.cljs b/src/front/app/components/navlink.cljs index f11b3c3f..30f53b5f 100644 --- a/src/front/app/components/navlink.cljs +++ b/src/front/app/components/navlink.cljs @@ -7,5 +7,5 @@ (d/a {:href href :on-click on-click - :className " inline-block rounded-lg py-1 px-2 text-sm text-slate-700 hover:bg-slate-100 hover:text-slate-900"} + :class " inline-block rounded-lg py-1 px-2 text-sm text-slate-700 hover:bg-slate-100 hover:text-slate-900"} children)) diff --git a/src/front/app/components/profile.cljs b/src/front/app/components/profile.cljs index 98013106..5e2e9291 100644 --- a/src/front/app/components/profile.cljs +++ b/src/front/app/components/profile.cljs @@ -38,7 +38,7 @@ [{:keys [image-style pfp-loading? pfp-url] :as props}] (let [classes (get-image-style props)] - (d/img {:class-name classes & (dissoc props :image-style) + (d/img {:class classes & (dissoc props :image-style) :src (if (= true pfp-loading?) "/images/default-pfp.png" pfp-url)}))) @@ -78,32 +78,32 @@ (set-pfp-url! default-pfp-url)))) (set-pfp-url! default-pfp-url)))) - (d/div {:class-name "hidden lg:block"} + (d/div {:class "hidden lg:block"} (d/button {:type "button" - :class-name (str "flex text-sm bg-gray-800 aspect-square rounded-full " + :class (str "flex text-sm bg-gray-800 aspect-square rounded-full " (when dropdown-open? "focus:ring-4 focus:ring-gray-300 dark:focus:ring-gray-600")) :on-click #(toggle-dropdown! not)} - (d/span {:class-name "sr-only"} "Open user menu") + (d/span {:class "sr-only"} "Open user menu") ($ pfp-img {:image-style "rounded" :pfp-loading? pfp-loading? :pfp-url pfp-url})) - (d/div {:class-name (str "absolute z-50 my-4 right-0 text-base list-none bg-white rounded divide-y" + (d/div {:class (str "absolute z-50 my-4 right-0 text-base list-none bg-white rounded divide-y" "divide-gray-100 shadow dark:bg-gray-700 dark:divide-gray-600 " (when-not dropdown-open? "hidden"))} - (d/div {:class-name "py-3 px-4" :role "none"} - (d/p {:class-name "text-sm font-medium text-gray-900 truncate dark:text-gray-300" :role "none"} + (d/div {:class "py-3 px-4" :role "none"} + (d/p {:class "text-sm font-medium text-gray-900 truncate dark:text-gray-300" :role "none"} (:email user-data))) - (d/ul {:class-name "py-1" :role "none"} + (d/ul {:class "py-1" :role "none"} (d/li (d/a {:href "" ;; TODO settings - :class-name "block py-2 px-4 text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600 dark:hover:text-white" + :class "block py-2 px-4 text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600 dark:hover:text-white" :role "menuitem"} "Settings")) (d/li (d/button - {:class-name (str "w-full block py-2 px-4 text-sm text-left text-gray-700 hover:bg-gray-100" + {:class (str "w-full block py-2 px-4 text-sm text-left text-gray-700 hover:bg-gray-100" "dark:text-gray-300 dark:hover:bg-gray-600 dark:hover:text-white") :on-click (fn [e] (.preventDefault e) diff --git a/src/front/app/components/section.cljs b/src/front/app/components/section.cljs index a8b2d8ef..412f2610 100644 --- a/src/front/app/components/section.cljs +++ b/src/front/app/components/section.cljs @@ -6,6 +6,6 @@ (def section-styles {:default "bg-gray-50 dark:bg-gray-800"}) -(defnc section [{:keys [children class-name]}] - (d/section {:class-name (or class-name (get section-styles :default))} +(defnc section [{:keys [children class]}] + (d/section {:class (or class (get section-styles :default))} children)) diff --git a/src/front/app/components/svg.cljs b/src/front/app/components/svg.cljs index 794c5457..b0a39151 100644 --- a/src/front/app/components/svg.cljs +++ b/src/front/app/components/svg.cljs @@ -31,7 +31,7 @@ (defnc save [] (d/svg {:width "17" - :class-name "shrink-0 relative overflow-visible" + :class "shrink-0 relative overflow-visible" :height "17" :viewBox "0 0 17 17" :fill "none"} @@ -67,7 +67,7 @@ :transform "translate(0 0.5)"}))))) (defnc personal-mock [] - (d/svg {:class-name "" + (d/svg {:class "" :fill "none" :width "22" :height "23" @@ -79,7 +79,7 @@ :d "M10.5882 9.92283C10.5882 14.0357 9.40118 17.8738 7.34941 21.1155M3.30235 18.7299L3.36588 18.6246C5.0159 16.019 5.8885 13.0016 5.88235 9.92283C5.88235 8.68221 6.37815 7.4924 7.26067 6.61516C8.1432 5.73791 9.34016 5.24507 10.5882 5.24507C11.8363 5.24507 13.0333 5.73791 13.9158 6.61516C14.7983 7.4924 15.2941 8.68221 15.2941 9.92283C15.2941 11.1121 15.2118 12.2839 15.0553 13.4311M12.5635 21.4348C13.2897 19.9946 13.8774 18.4895 14.3188 16.9395M18.8353 18.2633C19.5941 15.6133 20 12.8148 20 9.92283C20.0004 8.28041 19.5658 6.66685 18.7399 5.24434C17.914 3.82183 16.7259 2.64051 15.295 1.81914C13.8642 0.997776 12.2411 0.565308 10.5888 0.565216C8.93648 0.565124 7.31328 0.997411 5.88235 1.81862M0 15.0263C0.752941 13.4838 1.17647 11.7518 1.17647 9.92283C1.17647 8.21895 1.63529 6.6215 2.43529 5.24507"}))) (defnc org-mock [] - (d/svg {:class-name "" + (d/svg {:class "" :fill "none" :width "20" :height "21" @@ -121,7 +121,7 @@ (defnc hamburger-menu [] (d/svg {:id "toggleSidebarMobileHamburger" - :class-name "w-6 h-6" + :class "w-6 h-6" :viewBox "0 0 20 20" :fill "currentColor"} (d/path {:fill-rule "evenodd" @@ -130,7 +130,7 @@ (defnc hamburger-menu-close [] (d/svg {:id "toggleSidebarMobileClose" - :class-name "w-6 h-6" + :class "w-6 h-6" :fill "currentColor" :viewBox "0 0 20 20"} (d/path {:fill-rule "evenodd" @@ -138,7 +138,7 @@ :clip-rule "evenodd"}))) (defnc arrow [{:keys [direction class]}] - (d/svg {:class-name (str "w-6 h-6 " + (d/svg {:class (str "w-6 h-6 " (case direction :up "rotate-180 " :down "rotate-0 " @@ -151,7 +151,7 @@ :fill-rule "evenodd"}))) (defnc mock-list-box [] - (d/svg {:class-name "flex-shrink-0 w-6 h-6 text-gray-500 transition duration-75 group-hover:text-gray-900 dark:text-gray-400 dark:group-hover:text-white" + (d/svg {:class "flex-shrink-0 w-6 h-6 text-gray-500 transition duration-75 group-hover:text-gray-900 dark:text-gray-400 dark:group-hover:text-white" :fill "currentColor" :viewBox "0 0 24 24"} (d/path {:d "M10.5021 1.40273C10.9577 1.14023 11.4742 1.00204 12 1.00204C12.5258 1.00204 13.0424 1.14024 13.4979 1.40276C13.4986 1.40317 13.4993 1.40357 13.5 1.40397L20.5 5.40396C20.9556 5.66701 21.334 6.04524 21.5973 6.50071C21.8606 6.95618 21.9995 7.47288 22 7.99897V16.001C21.9995 16.5271 21.8606 17.0438 21.5973 17.4993C21.334 17.9547 20.9556 18.333 20.5 18.596L20.4961 18.5982L13.5 22.596C13.4994 22.5964 13.4988 22.5967 13.4982 22.5971C13.0426 22.8597 12.5259 22.9979 12 22.9979C11.4741 22.9979 10.9575 22.8597 10.5019 22.5971C10.5012 22.5967 10.5006 22.5964 10.5 22.596L3.50386 18.5982L3.5 18.596C3.04439 18.333 2.66597 17.9547 2.40269 17.4993C2.13941 17.0438 2.00054 16.5271 2 16.001V7.99897C2.00054 7.47288 2.13941 6.95618 2.40269 6.50071C2.66597 6.04524 3.04439 5.66701 3.5 5.40397L3.50386 5.40174L10.5021 1.40273ZM12 3.00204C11.8245 3.00204 11.652 3.04825 11.5 3.13602L11.4961 3.13825L4.5 7.13602C4.49947 7.13632 4.49895 7.13663 4.49842 7.13693C4.34726 7.22457 4.22169 7.3503 4.13423 7.5016C4.04654 7.6533 4.00025 7.82537 4 8.00059V15.9994C4.00025 16.1746 4.04654 16.3467 4.13423 16.4984C4.22169 16.6497 4.34726 16.7754 4.49842 16.8631C4.49895 16.8634 4.49947 16.8637 4.5 16.864L11.5 20.864C11.652 20.9517 11.8245 20.9979 12 20.9979C12.1755 20.9979 12.348 20.9517 12.5 20.864L12.5039 20.8618L19.5 16.864C19.5005 16.8637 19.5011 16.8634 19.5016 16.8631C19.6527 16.7754 19.7783 16.6497 19.8658 16.4984C19.9535 16.3466 19.9998 16.1743 20 15.999V8.00102C19.9998 7.82566 19.9535 7.65342 19.8658 7.5016C19.7783 7.35031 19.6527 7.22458 19.5016 7.13694C19.5011 7.13663 19.5005 7.13633 19.5 7.13602L12.5 3.13603C12.348 3.04826 12.1755 3.00204 12 3.00204Z" @@ -166,7 +166,7 @@ :fill-rule "evenodd"}))) (defnc house [] - (d/svg {:class-name "w-6 h-6 text-gray-500 transition duration-75 group-hover:text-gray-900 dark:text-gray-400 dark:group-hover:text-white" + (d/svg {:class "w-6 h-6 text-gray-500 transition duration-75 group-hover:text-gray-900 dark:text-gray-400 dark:group-hover:text-white" :fill "none" :viewBox "0 0 24 24"} (d/path {:fill "currentColor" :clip-rule "evenodd" @@ -177,9 +177,9 @@ :clip-rule "evenodd" :d "M8 12C8 11.4477 8.44772 11 9 11H15C15.5523 11 16 11.4477 16 12V22C16 22.5523 15.5523 23 15 23C14.4477 23 14 22.5523 14 22V13H10V22C10 22.5523 9.55228 23 9 23C8.44772 23 8 22.5523 8 22V12Z"}))) -(defnc upload [{:keys [class-name]}] +(defnc upload [{:keys [class]}] (d/svg - {:class class-name + {:class class :aria-hidden "true" :fill "none" :viewBox "0 0 20 16"} @@ -251,7 +251,7 @@ (defnc close [] (d/svg - {:class-name "w-5 h-5" + {:class "w-5 h-5" :fill "currentColor" :viewBox " 0 0 20 20"} (d/path @@ -308,14 +308,14 @@ :fill "white"}))) (defnc help [] - (d/svg {:class-name "flex-shrink-0 w-6 h-6 text-gray-500 transition duration-75 group-hover:text-gray-900 dark:text-gray-400 dark:group-hover:text-white" + (d/svg {:class "flex-shrink-0 w-6 h-6 text-gray-500 transition duration-75 group-hover:text-gray-900 dark:text-gray-400 dark:group-hover:text-white" :fill "currentColor" :viewBox "0 0 20 20"} (d/path {:fill-rule "evenodd" :d "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-2 0c0 .993-.241 1.929-.668 2.754l-1.524-1.525a3.997 3.997 0 00.078-2.183l1.562-1.562C15.802 8.249 16 9.1 16 10zm-5.165 3.913l1.58 1.58A5.98 5.98 0 0110 16a5.976 5.976 0 01-2.516-.552l1.562-1.562a4.006 4.006 0 001.789.027zm-4.677-2.796a4.002 4.002 0 01-.041-2.08l-.08.08-1.53-1.533A5.98 5.98 0 004 10c0 .954.223 1.856.619 2.657l1.54-1.54zm1.088-6.45A5.974 5.974 0 0110 4c.954 0 1.856.223 2.657.619l-1.54 1.54a4.002 4.002 0 00-2.346.033L7.246 4.668zM12 10a2 2 0 11-4 0 2 2 0 014 0z"}))) (defnc docs [] - (d/svg {:class-name "flex-shrink-0 w-6 h-6 text-gray-500 transition duration-75 group-hover:text-gray-900 dark:text-gray-400 dark:group-hover:text-white" + (d/svg {:class "flex-shrink-0 w-6 h-6 text-gray-500 transition duration-75 group-hover:text-gray-900 dark:text-gray-400 dark:group-hover:text-white" :fill "currentColor" :viewBox "0 0 20 20"} (d/path {:d "M9 2a1 1 0 000 2h2a1 1 0 100-2H9z"}) diff --git a/src/front/app/dashboard/base.cljs b/src/front/app/dashboard/base.cljs index 7d042e17..80951ee9 100644 --- a/src/front/app/dashboard/base.cljs +++ b/src/front/app/dashboard/base.cljs @@ -4,9 +4,9 @@ [front.app.components.modal :refer [modal]] [front.app.components.svg :as svg] [front.app.components.aside :refer [aside]] - [front.app.components.button :refer [button]] + [mockingbird.components.button :refer [button]] [front.app.components.navbar :refer [nav-bar]] - [front.app.lib :refer [defnc]] + [mockingbird.lib :refer-macros [defnc]] [helix.core :refer [$ <>]] [helix.dom :as d] [helix.hooks :as hooks] @@ -156,7 +156,7 @@ (d/div {:class "flex justify-between items-end py-4"} ($ button - {:class-name + {:class (str "px-3 py-2 rounded-lg justify-end items-center gap-2 flex btn-add " (if allow-save? "bg-pink-600" "btn-add__disabled bg-gray-600 cursor-not-allowed")) :on-click #(when allow-save? @@ -192,7 +192,7 @@ (d/div {:class "flex flex-row space-x-2"} ($ button - {:class-name "px-4 py-2 bg-red-500 rounded-lg hover:opacity-80" + {:class "px-4 py-2 bg-red-500 rounded-lg hover:opacity-80" :on-click #(do (close-modal!) (refx/dispatch-sync [:app.dashboard/delete-mock mock]))} @@ -200,7 +200,7 @@ {:class "text-white"} "Yes, I want to delete it")) ($ button - {:class-name "px-4 py-2 border-2 border-gray-400 rounded-lg hover:bg-gray-200"} + {:class "px-4 py-2 border-2 border-gray-400 rounded-lg hover:bg-gray-200"} (d/p {:class-name "text-gray-800 text-sm font-medium" :on-click #(close-modal!)} diff --git a/src/front/app/dashboard/editor.cljs b/src/front/app/dashboard/editor.cljs index 4f698268..a2199e04 100644 --- a/src/front/app/dashboard/editor.cljs +++ b/src/front/app/dashboard/editor.cljs @@ -9,7 +9,7 @@ [front.app.components.svg :as svg] [front.app.dashboard.base :as base] [front.app.dashboard.linter :as linter] - [front.app.lib :refer [defnc]] + [mockingbird.lib :refer-macros [defnc]] [helix.core :refer [$]] [helix.dom :as d] [helix.hooks :as hooks] diff --git a/src/front/app/dashboard/mocks.cljs b/src/front/app/dashboard/mocks.cljs index 561b99a1..2506fe1c 100644 --- a/src/front/app/dashboard/mocks.cljs +++ b/src/front/app/dashboard/mocks.cljs @@ -78,7 +78,8 @@ ($ api-mock {:enabled enabled :url url :id id}))) (d/div {:class "self-stretch pt-6 justify-start items-start inline-flex text-white text-xs font-bold leading-[18px]"} - (d/button {:class "px-3 py-2 bg-mockingbird-main rounded-lg justify-end items-center gap-2 flex btn-add" + ($ button {:class "px-3 py-2 text-white hover:text-white bg-pink-600 rounded-lg justify-end items-center gap-2 flex btn-add" + :theme :mockingbird :on-click (fn [_] (refx/dispatch [:app.dashboard/toggle-mock-modal]))} (d/svg {:width "16" :height "17" diff --git a/src/front/app/dashboard/views.cljs b/src/front/app/dashboard/views.cljs index d0db358f..fc6673e0 100644 --- a/src/front/app/dashboard/views.cljs +++ b/src/front/app/dashboard/views.cljs @@ -1,8 +1,8 @@ (ns front.app.dashboard.views (:require + [mockingbird.components.message :refer [message]] [front.app.dashboard.base :as base] - [front.app.components.messages :refer [default-message blogpost-message]] - [front.app.lib :refer-macros [defnc]] + [mockingbird.lib :refer-macros [defnc]] [helix.core :refer [$]] [helix.dom :as d])) @@ -10,18 +10,10 @@ (d/div ($ base/index (d/main - ($ default-message + ($ message {:title "Welcome to moclojer beta" :email "avelino@moclojer.com" :author "Avelino" :image "/images/users/avatar.png" :image-style "rounded" :message ["I'm happy to have you here, we are launching the SaaS version of moclojer, seeking to make it simple for you to put a mock API in the air to develop your projects." "I look forward to your feedback (this is the only way we can improve the product)."]}))))) - -(comment - ($ blogpost-message - {:author "Avelino" - :email "avelino@moclojer.com" - :link "https://www.github.com" - :image "/images/users/avatar.png" - :image-style "default"})) From 901eb09324ea118b669d590558690e5cb0f9faed Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Wed, 2 Oct 2024 17:07:19 -0300 Subject: [PATCH 08/22] fix: login image left roundness --- src/front/app/auth/views.cljs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index 1ea06d5d..c0e96421 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -59,7 +59,7 @@ (.preventDefault e) (when (:email state) (refx/dispatch [:app.auth/send-email state]))) - :class "mt-8 space-y-6"} + :class "mt-8 space-y-6 "} ($ input {:for "email" @@ -100,7 +100,7 @@ "md:mt-0 lg:max-w-screen-lg 2xl:max:max-w-screen-lg xl:p-0 dark:bg-gray-800")} (d/div {:class "hidden w-2/3 lg:flex"} ($ image {:src "/images/authentication/login.svg" - :class "rounded-l-lg"})) + :class "rounded-l-lg "})) (if sent? (d/div ($ loading-spinner) "loading ...") @@ -117,7 +117,7 @@ (.preventDefault e) (when (and (not-empty username) available?) (refx/dispatch [:app.auth/save-username username]))) - :class "mt-8 space-y-6"} + :class "mt-8 space-y-6 "} (d/div ($ input {:for "username" From 02c7d563082bd765e2a1c3ab22210ee33ef85951 Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Mon, 18 Nov 2024 12:55:07 -0300 Subject: [PATCH 09/22] feat: last mockingbird components added --- deps.edn | 2 +- src/front/app/auth/views.cljs | 37 +++++---- src/front/app/components/button.cljs | 60 ++------------ src/front/app/components/container.cljs | 8 +- src/front/app/components/footer.cljs | 15 ---- src/front/app/components/messages.cljs | 17 ++-- src/front/app/components/profile.cljs | 83 +++++++------------ src/front/app/core.cljs | 72 ++++++++-------- .../back/integration/components/utils.clj | 2 +- .../app/unit/components/button_test.cljs | 17 ---- 10 files changed, 113 insertions(+), 200 deletions(-) delete mode 100644 src/front/app/components/footer.cljs delete mode 100644 test/front/front/app/unit/components/button_test.cljs diff --git a/deps.edn b/deps.edn index fc846143..63c5c2eb 100644 --- a/deps.edn +++ b/deps.edn @@ -10,7 +10,7 @@ org.clojure/tools.deps {:mvn/version "0.21.1449"} - moclojer/mockingbird {:local/root "../mockingbird/target/mockingbird-0.0.1.jar"} + com.moclojer/mockingbird {:mvn/version "0.0.1"} ;; back com.moclojer/components {:mvn/version "0.1.0"} diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index c0e96421..9b32059b 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -23,10 +23,11 @@ error error-res]}] ($ container {} (d/div {:class (str "flex justify-center items-center w-full bg-white rounded-lg shadow lg:flex " - "md:mt-0 lg:max-w-screen-lg 2xl:max:max-w-screen-lg xl:p-0 dark:bg-gray-800")} + "md:mt-0 lg:max-w-screen-lg 2xl:max:max-w-screen-lg xl:p-0 dark:bg-gray-800")} (d/div {:class "hidden w-2/3 lg:flex"} - ($ image {:src "/images/authentication/login.svg" - :class "rounded-l-lg"})) + (d/div {:class " "} + ($ image {:src "/images/authentication/login.svg" + :class "rounded-l-lg "}))) (if sent? (d/div {:id "login-email-sent" :class "p-6 space-y-8 w-full sm:p-8 lg:p-16 lg:py-0"} @@ -61,22 +62,22 @@ (refx/dispatch [:app.auth/send-email state]))) :class "mt-8 space-y-6 "} - ($ input + ($ input {:for "email" :label "your email" :placeholder "name@company.com" - :on-change #(set-state assoc :email (.. % -target -value))}) + :on-change #(set-state assoc :email (.. % -target -value))}) (d/div {:class "flex items-start "} (d/div {:class "flex items-center h-5"})) - ($ button {:class (str (if loading? + ($ button {:class (str (if loading? "bg-gray-700 " - "bg-mockingbird-main ") + "bg-mockingbird-main ") "hover:bg-mockingbird-400 ") :type :submit :theme :mockingbird - :size :full + :size :full :label "login to your account"} (if loading? (d/span {:class "inline-flex"} @@ -97,9 +98,9 @@ available? (refx/use-sub [:app.auth/is-username-available?])] (d/div {:class "flex flex-col justify-center items-center px-6 pt-8 mx-auto md:h-screen pt:mt-0 dark:bg-gray-900"} (d/div {:class (str "flex justify-center items-center w-full bg-white rounded-lg shadow lg:flex " - "md:mt-0 lg:max-w-screen-lg 2xl:max:max-w-screen-lg xl:p-0 dark:bg-gray-800")} + "md:mt-0 lg:max-w-screen-lg 2xl:max:max-w-screen-lg xl:p-0 dark:bg-gray-800")} (d/div {:class "hidden w-2/3 lg:flex"} - ($ image {:src "/images/authentication/login.svg" + ($ image {:src "/images/authentication/login.svg" :class "rounded-l-lg "})) (if sent? (d/div ($ loading-spinner) @@ -135,11 +136,11 @@ (d/b {:class "text-gray-900"} "*..") (d/span {:class "text-gray-500"} "moclojer.com")) - ($ button {:class(str (if loading? - "bg-gray-700 " - "bg-mockingbird-main ") - "hover:bg-mockingbird-400 " - (when (not available?) " cursor-not-allowed ")) + ($ button {:class (str (if loading? + "bg-gray-700 " + "bg-mockingbird-main ") + "hover:bg-mockingbird-400 " + (when (not available?) " cursor-not-allowed ")) :type :submit :theme :mockingbird :size :full @@ -155,9 +156,9 @@ sent? (refx/use-sub [:app.auth/username-sent]) [error error-res] (refx/use-sub [:app.auth/login-error])] (hooks/use-effect - [sent?] - (when sent? - (rfe/push-state :app.core/dashboard))) + [sent?] + (when sent? + (rfe/push-state :app.core/dashboard))) (d/div ($ section diff --git a/src/front/app/components/button.cljs b/src/front/app/components/button.cljs index cd319795..bc6c8c77 100644 --- a/src/front/app/components/button.cljs +++ b/src/front/app/components/button.cljs @@ -1,6 +1,6 @@ (ns front.app.components.button (:require - [mockingbird.components.button :refer [button]] + [mockingbird.components.button :refer [button]] [front.app.lib :refer [defnc]] [helix.dom :as d] [helix.core :refer [$]] @@ -8,49 +8,6 @@ [front.app.components.svg :as svg] [reitit.frontend.easy :as rfe])) -; #TODO remove solid, outline keeping here because it is used in other pages - -; deprecated solid -old layout -; deprecated outline -old layout - -(def base-styles - {:solid "group inline-flex items-center justify-center rounded-full py-2 px-4 text-sm font-semibold focus:outline-none focus-visible:outline-2 focus-visible:outline-offset-2 " - :solid-blue "py-3 px-5 w-full text-base font-medium text-center text-white rounded-lg bg-primary-700 focus:ring-4 focus:ring-primary-300 dark:bg-primary-600 dark:hover:bg-primary-700 dark:focus:ring-primary-800 " - :outline "group inline-flex ring-1 items-center justify-center rounded-full py-2 px-4 text-sm focus:outline-none "}) - -(def variant-styles - {:solid {:slate "bg-slate-900 text-white hover:bg-slate-700 hover:text-slate-100 active:bg-slate-800 active:text-slate-300 focus-visible:outline-slate-900 ", - :blue "bg-blue-600 text-white hover:text-slate-100 hover:bg-blue-500 active:bg-blue-800 active:text-blue-100 focus-visible:outline-blue-600 ", - :white "bg-white text-slate-900 hover:bg-blue-50 active:bg-blue-200 active:text-slate-600 focus-visible:outline-white "}, - :solid-blue {:pink " login-button" - :grey " login-button-block"} - :outline {:slate "ring-slate-200 text-slate-700 hover:text-slate-900 hover:ring-slate-300 active:bg-slate-100 active:text-slate-600 focus-visible:outline-blue-600 focus-visible:ring-slate-300 ", - :pink " login-button" - :grey " login-button-block" - :white "ring-slate-700 text-white hover:ring-slate-500 active:ring-slate-700 active:text-slate-400 focus-visible:outline-white "}}) - -;; TODO -(def aside-styles {}) - -(defn get-login-style - [class base variant] - (let [base-style (keyword base) - variant-style (keyword variant)] - (str - (get base-styles base-style) - (get-in variant-styles [base-style variant-style]) - class))) - -(defnc login-button - [{:keys [children base variant class type disabled] - :or {children "" base "solid" variant "blue" type "submit" disabled false}}] - (let [class (get-login-style class base variant)] - ($ button - {:class class - :type type - :disabled disabled} - children))) - (defnc new-mock-btn [] ($ button {:class "px-3 py-2 bg-pink-600 rounded-lg flex flex-row space-x-2 items-center btn-add" :on-click #(refx/dispatch [:app.dashboard/toggle-mock-modal])} @@ -81,15 +38,12 @@ :or {aside-open? false}}] (d/button {:class (str "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg " - "transtion duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700 " - (if aside-open? - "w-[calc(100%-8px)]" - "w-full")) + "transtion duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700 " + (if aside-open? + "w-[calc(100%-8px)]" + "w-full")) :on-click #(rfe/push-state :app.core/dashboard)} ($ svg/house) (d/span {:class (str "ml-3 " - (when-not aside-open? - "lg:hidden lg:absolute"))} "Home"))) - - - + (when-not aside-open? + "lg:hidden lg:absolute"))} "Home"))) diff --git a/src/front/app/components/container.cljs b/src/front/app/components/container.cljs index eb29c0ec..c7c427af 100644 --- a/src/front/app/components/container.cljs +++ b/src/front/app/components/container.cljs @@ -15,10 +15,10 @@ aside-open? (:open? aside)] (d/div {:class (str "overflow-y-auto relative h-full bg-gray-50 " - (if aside-open? - "lg:ml-64" - "lg:ml-16") - " dark:bg-gray-900") + (if aside-open? + "lg:ml-64" + "lg:ml-16") + " dark:bg-gray-900") :id "main-content"} children))) diff --git a/src/front/app/components/footer.cljs b/src/front/app/components/footer.cljs deleted file mode 100644 index c7d8a89f..00000000 --- a/src/front/app/components/footer.cljs +++ /dev/null @@ -1,15 +0,0 @@ -(ns front.app.components.footer - (:require - [cljs.pprint :as pprint] - [front.app.components.container :refer [aside-container]] - [front.app.lib :refer [defnc]] - [helix.core :refer [$]] - [helix.dom :as d] - [refx.alpha :as refx])) - -(defnc footer [] - (let [db (refx/use-sub [:app.database/db])] - (d/footer {:class "bg-slate-50"} - ($ aside-container - (d/pre (with-out-str - (pprint/pprint db))))))) diff --git a/src/front/app/components/messages.cljs b/src/front/app/components/messages.cljs index 2b44f7ee..e2d58bae 100644 --- a/src/front/app/components/messages.cljs +++ b/src/front/app/components/messages.cljs @@ -3,7 +3,7 @@ [cljs.pprint :as pprint] [clojure.string :as str] [front.app.lib :refer [defnc]] - [front.app.components.profile :refer [pfp-img]] + [mockingbird.components.pfp :refer [pfp]] [helix.dom :as d] [helix.core :refer [$]])) @@ -30,7 +30,7 @@ [{:keys [children] :as props}] (d/section (d/div {:class (str "p-4 bg-white block sm:flex items-center justify-between border-b" - "border-gray-200 lg:mt-1.5 dark:bg-gray-800 dark:border-gray-700")} + "border-gray-200 lg:mt-1.5 dark:bg-gray-800 dark:border-gray-700")} (d/div {:class "flex items-center divide-x divide-gray-100 dark:divide-gray-700"} (d/div {:class "pl-3 text-sm font-medium text-gray-500"} (gen-today-date)))) @@ -38,9 +38,12 @@ (d/div {:class "p-5"} (d/div {:class "flex items-center mb-4"} (d/div {:class "flex-shrink-0"} - ($ pfp-img - {:image-style (props :image-style) - :pfp-url (props :image) + ($ pfp + {:style (props :image-style) + :pfp-url (if (= true (props :pfp-loading?)) + "/images/default-pfp.png" + (props :image)) + :pfp-loading? false})) (d/div {:class "ml-4"} (d/p (props :author)) @@ -58,11 +61,11 @@ (defnc blogpost-message [{:keys [children] :as props}] (d/div {:class (str "p-4 bg-gray-200 block sm:flex items-center justify-left border-b mr-8 py-8" - "border-gray-200 lg:mt-1.5 dark:bg-gray-800 dark:border-gray-700")} + "border-gray-200 lg:mt-1.5 dark:bg-gray-800 dark:border-gray-700")} (d/div {:class "flex items-center mb-4"} (d/div {:class "flex-shrink-0"} ($ pfp-img - {:image-style (props :image-style) + {:style (props :image-style) :pfp-loading? false :pfp-url (props :image)})) (d/div {:class "ml-4"} diff --git a/src/front/app/components/profile.cljs b/src/front/app/components/profile.cljs index 5e2e9291..1fd5d3f3 100644 --- a/src/front/app/components/profile.cljs +++ b/src/front/app/components/profile.cljs @@ -3,6 +3,7 @@ [clojure.string :as str] [front.app.auth.supabase :as supabase] [front.app.lib :refer [defnc]] + [mockingbird.components.pfp :refer [pfp]] [helix.core :refer [$]] [helix.dom :as d] [helix.hooks :as hooks] @@ -12,11 +13,6 @@ (def gravatar-base-url "https://gravatar.com/avatar/") (def auth0-cdn-base-url "https://cdn.auth0.com/avatars/") -(def pfp-styles - {:default "w-8 h-8 rounded-none opacity-100" - :rounded "w-8 h-8 rounded-full opacity-100" - :loading "w-8 h-8 rounded-full opacity-30 animate-pulse"}) - (defn get-simple-avatar-url [username] (let [uq-names (-> username (str/split #" ")) @@ -28,21 +24,6 @@ str/lower-case)] (str auth0-cdn-base-url initials ".png"))) -(defn get-image-style - [{:keys [children image-style]}] - (let [image-style (keyword image-style)] - (str (get pfp-styles image-style) - children))) - -(defnc pfp-img - [{:keys [image-style - pfp-loading? pfp-url] :as props}] - (let [classes (get-image-style props)] - (d/img {:class classes & (dissoc props :image-style) - :src (if (= true pfp-loading?) - "/images/default-pfp.png" - pfp-url)}))) - (defnc user-profile [{:keys [user-data]}] (let [[pfp-url set-pfp-url!] (hooks/use-state nil) username (:username user-data) @@ -55,41 +36,43 @@ ;; https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest ;; https://cdn.auth0.com/avatars/jt.png (hooks/use-effect - [pfp-url] - (when (and pfp-loading? (nil? pfp-url)) - (if-let [email (some->> (:email user-data) - str/trim - str/lower-case - (.encode (js/TextEncoder. "utf-8")))] - (-> (.digest (.-subtle js/crypto) "SHA-256" email) - (p/then - (fn [hash-buf] - (-> (.from js/Array (js/Uint8Array. hash-buf)) - (.map #(-> (.toString % 16) - (.padStart 2 "0"))) - (.join "")))) - (p/then - (fn [hex] - (set-pfp-url! (str gravatar-base-url hex - "?default=" default-pfp-url)))) - (p/catch - (fn [err] - (.log js/console "failed to digest email hash:" err) - (set-pfp-url! default-pfp-url)))) - (set-pfp-url! default-pfp-url)))) + [pfp-url] + (when (and pfp-loading? (nil? pfp-url)) + (if-let [email (some->> (:email user-data) + str/trim + str/lower-case + (.encode (js/TextEncoder. "utf-8")))] + (-> (.digest (.-subtle js/crypto) "SHA-256" email) + (p/then + (fn [hash-buf] + (-> (.from js/Array (js/Uint8Array. hash-buf)) + (.map #(-> (.toString % 16) + (.padStart 2 "0"))) + (.join "")))) + (p/then + (fn [hex] + (set-pfp-url! (str gravatar-base-url hex + "?default=" default-pfp-url)))) + (p/catch + (fn [err] + (.log js/console "failed to digest email hash:" err) + (set-pfp-url! default-pfp-url)))) + (set-pfp-url! default-pfp-url)))) (d/div {:class "hidden lg:block"} (d/button {:type "button" :class (str "flex text-sm bg-gray-800 aspect-square rounded-full " - (when dropdown-open? "focus:ring-4 focus:ring-gray-300 dark:focus:ring-gray-600")) + (when dropdown-open? "focus:ring-4 focus:ring-gray-300 dark:focus:ring-gray-600")) :on-click #(toggle-dropdown! not)} (d/span {:class "sr-only"} "Open user menu") - ($ pfp-img {:image-style "rounded" - :pfp-loading? pfp-loading? - :pfp-url pfp-url})) + ($ pfp {:roundness :full + :loading? pfp-loading? + :src (if (= true pfp-loading?) + "/images/default-pfp.png" + pfp-url)})) (d/div {:class (str "absolute z-50 my-4 right-0 text-base list-none bg-white rounded divide-y" - "divide-gray-100 shadow dark:bg-gray-700 dark:divide-gray-600 " - (when-not dropdown-open? "hidden"))} + "divide-gray-100 shadow dark:bg-gray-700 dark:divide-gray-600 " + (when-not dropdown-open? "hidden"))} (d/div {:class "py-3 px-4" :role "none"} (d/p {:class "text-sm font-medium text-gray-900 truncate dark:text-gray-300" :role "none"} (:email user-data))) @@ -104,12 +87,10 @@ (d/li (d/button {:class (str "w-full block py-2 px-4 text-sm text-left text-gray-700 hover:bg-gray-100" - "dark:text-gray-300 dark:hover:bg-gray-600 dark:hover:text-white") + "dark:text-gray-300 dark:hover:bg-gray-600 dark:hover:text-white") :on-click (fn [e] (.preventDefault e) (supabase/sign-out #(refx/dispatch-sync [:app.auth/logout %]))) :role "menuitem"} "Logout"))))))) - - diff --git a/src/front/app/core.cljs b/src/front/app/core.cljs index 945ca65b..b8a0dee5 100644 --- a/src/front/app/core.cljs +++ b/src/front/app/core.cljs @@ -3,12 +3,14 @@ ["@sentry/react" :as Sentry] ["flowbite"] ["react-dom/client" :as rdom] + [cljs.pprint :as pprint] [front.app.auth.db] [front.app.auth.events] [front.app.auth.subs] [front.app.auth.supabase :as supabase] - [front.app.components.footer :refer [footer]] + [mockingbird.layout.footer :refer [footer]] [front.app.components.notifications :refer [notifications]] + [front.app.components.container :refer [aside-container]] [front.app.dashboard.events] [front.app.dashboard.subs] [front.app.lib :refer [defnc]] @@ -56,40 +58,40 @@ user-exists? (refx/use-sub [:app.auth/user-exists?])] (hooks/use-effect - [login-err current-route] - (when (or login-err (nil? current-route)) - (rfe/push-state :app.core/login))) + [login-err current-route] + (when (or login-err (nil? current-route)) + (rfe/push-state :app.core/login))) (hooks/use-effect - [user-exists?] - (if (and (not user-exists?) (some? session)) - (do - (refx/dispatch-sync [:app.auth/saving-user session]) - (rfe/push-state :app.core/first-login) - (set-session! nil)) - (when (some-> current-user :user) - (if (not= route-name :app.core/auth) - (rfe/push-state route-name) - (rfe/push-state :app.core/dashboard))))) + [user-exists?] + (if (and (not user-exists?) (some? session)) + (do + (refx/dispatch-sync [:app.auth/saving-user session]) + (rfe/push-state :app.core/first-login) + (set-session! nil)) + (when (some-> current-user :user) + (if (not= route-name :app.core/auth) + (rfe/push-state route-name) + (rfe/push-state :app.core/dashboard))))) (hooks/use-effect - [current-user] - (when-not (and (some? session) valid-user?) - (-> (.. supabase/client -auth getSession) - (p/then - (fn [resp] - (let [ses (-> (utils/js->cljs-key resp) - (get-in [:data :session]) - utils/convert-keys) - access-token (:access-token ses) - valid-session? (and (some? ses) (not= ses {}) - (some? access-token))] - (if valid-session? - (do - (set-session! ses) - (refx/dispatch-sync [:app.auth/user-exists? ses])) - (rfe/push-state :app.core/login))))) - (p/catch (fn [err] (refx/dispatch-sync [:app.auth/login-error err])))))) + [current-user] + (when-not (and (some? session) valid-user?) + (-> (.. supabase/client -auth getSession) + (p/then + (fn [resp] + (let [ses (-> (utils/js->cljs-key resp) + (get-in [:data :session]) + utils/convert-keys) + access-token (:access-token ses) + valid-session? (and (some? ses) (not= ses {}) + (some? access-token))] + (if valid-session? + (do + (set-session! ses) + (refx/dispatch-sync [:app.auth/user-exists? ses])) + (rfe/push-state :app.core/login))))) + (p/catch (fn [err] (refx/dispatch-sync [:app.auth/login-error err])))))) (let [view (-> current-route :data :view)] (when (and (some? view) accessible-route?) @@ -100,8 +102,12 @@ (defnc app [] (d/div ($ route-handler) - (when debug - ($ footer)))) + (let [db (refx/use-sub [:app.database/db])] + (when debug + ($ footer + ($ aside-container + (d/pre (with-out-str + (pprint/pprint db))))))))) ;;; Setup ;;; (defonce root diff --git a/test/back/back/integration/components/utils.clj b/test/back/back/integration/components/utils.clj index 36e71445..aebbb588 100644 --- a/test/back/back/integration/components/utils.clj +++ b/test/back/back/integration/components/utils.clj @@ -8,7 +8,7 @@ (defn start-system! [system-start-fn] (fn [] - (logs/setup :info :auto :dev) + #_(logs/setup :info :auto :dev) (pg-emb/init-pg) (migrations/migrate (migrations/build-complete-db-config "back/config.edn")) (system-start-fn))) diff --git a/test/front/front/app/unit/components/button_test.cljs b/test/front/front/app/unit/components/button_test.cljs deleted file mode 100644 index cef577c1..00000000 --- a/test/front/front/app/unit/components/button_test.cljs +++ /dev/null @@ -1,17 +0,0 @@ -(ns front.app.unit.components.button-test - (:require [cljs.test :refer [deftest is testing]] - [front.app.components.button :as components.button])) - -(deftest props-classes-test - (testing "should build classes name" - (is (= "group inline-flex items-center justify-center rounded-full py-2 px-4 text-sm font-semibold focus:outline-none focus-visible:outline-2 focus-visible:outline-offset-2 bg-blue-600 text-white hover:text-slate-100 hover:bg-blue-500 active:bg-blue-800 active:text-blue-100 focus-visible:outline-blue-600 " - (components.button/get-login-style {}))) - (is (= "group inline-flex items-center justify-center rounded-full py-2 px-4 text-sm font-semibold focus:outline-none focus-visible:outline-2 focus-visible:outline-offset-2 bg-slate-900 text-white hover:bg-slate-700 hover:text-slate-100 active:bg-slate-800 active:text-slate-300 focus-visible:outline-slate-900 " - (components.button/get-login-style {:base "slate"}))) - (is (= "group inline-flex ring-1 items-center justify-center rounded-full py-2 px-4 text-sm focus:outline-none ring-slate-200 text-slate-700 hover:text-slate-900 hover:ring-slate-300 active:bg-slate-100 active:text-slate-600 focus-visible:outline-blue-600 focus-visible:ring-slate-300 " - (components.button/get-login-style {:variant "slate" - :base "outline"}))) - (is (= "group inline-flex ring-1 items-center justify-center rounded-full py-2 px-4 text-sm focus:outline-none ring-slate-200 text-slate-700 hover:text-slate-900 hover:ring-slate-300 active:bg-slate-100 active:text-slate-600 focus-visible:outline-blue-600 focus-visible:ring-slate-300 extra" - (components.button/get-login-style {:variant "slate" - :base "outline" - :class-name "extra"}))))) From b192419b4ad602a07ee4c1538a0eb34e65bb4880 Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Thu, 21 Nov 2024 18:00:14 -0300 Subject: [PATCH 10/22] feat: github signin --- resources/back/config.edn | 1 + src/front/app/auth/effects.cljs | 16 ++++++ src/front/app/auth/supabase.cljs | 14 ++++- src/front/app/auth/views.cljs | 90 +++++++++++++++++-------------- src/front/app/components/svg.cljs | 22 +++++--- 5 files changed, 97 insertions(+), 46 deletions(-) diff --git a/resources/back/config.edn b/resources/back/config.edn index b37afb32..d681fcc1 100644 --- a/resources/back/config.edn +++ b/resources/back/config.edn @@ -5,6 +5,7 @@ :release "1.0.0" :supabase-api-key #or [#env SUPABASE_API_KEY "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InRndmRmeHVyZ3NkZHhvdXhtdWdzIiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODE1MDM0NDMsImV4cCI6MTk5NzA3OTQ0M30.7pq4MM_ZldiWvOk_cnQuxlvUF8eFcxlPDB7jMTNMYb0"] :supabase-url #or [#env SUPABASE_URL "https://tgvdfxurgsddxouxmugs.supabase.co"] + :supabase-github-redirect #or [#env SUPABASE_GITHUB_REDIRECT "https://auth.moclojer.com/auth/v1/callback"] :supabase-jwt-secret #or [#env SUPABASE_JWT_SECRET "OP6cAnR4J7im0KH2sWeeTlwf4xQOZTuYtoO1mJ3vpON/szjCMpixe4r+9X3HvhZphxV79wl+2amIxo/AkfR28g=="] :moclojer {:config-path #profile {:default "resources/moclojer.yml" :prod "moclojer.yml"} diff --git a/src/front/app/auth/effects.cljs b/src/front/app/auth/effects.cljs index 20619eda..b826e52d 100644 --- a/src/front/app/auth/effects.cljs +++ b/src/front/app/auth/effects.cljs @@ -30,3 +30,19 @@ (fn-req req))) (reg-fx :auth (auth-effect send-email)) + +(defn send-gh [{:keys [provider on-failure on-success]}] + (.log js/console :sending-email) + (-> (supabase/signin-with-oauth supabase/client provider) + (p/then (fn [resp] + (let [obj (utils/js->cljs-key resp)] + (if (:error obj) + (do + (js/console.error :resp-faiure obj) + (dispatch (conj on-failure {:body obj}))) + (do + (js/console.log :resp-success obj) + (dispatch (conj on-success {:body (assoc + (utils/js->cljs-key resp) + :ok true)}))))))))) + diff --git a/src/front/app/auth/supabase.cljs b/src/front/app/auth/supabase.cljs index e5adb013..65f91fdf 100644 --- a/src/front/app/auth/supabase.cljs +++ b/src/front/app/auth/supabase.cljs @@ -4,8 +4,11 @@ [promesa.core :as p] [reitit.frontend.easy :as rfe])) +(defn inspect [a] (js/console.log a) a) + (goog-define SUPABASE_URL "") (goog-define SUPABASE_TOKEN "") +(goog-define SUPABASE_GITHUB_REDIRECT "") (when-not (every? not-empty [SUPABASE_URL SUPABASE_TOKEN]) (throw (js/Error. "SUPABASE_URL or SUPABASE_TOKEN weren't defined"))) (goog-define SUPABASE_REDIRECT "http://localhost:8200/#/") @@ -37,6 +40,14 @@ (dispatch-fn-logout e) (rfe/push-state :app.core/login)))))) +;; Github +(defn signin-with-oauth [^js client provider] + (let [auth (.-auth client) + options (clj->js + {:provider (clj->js provider) + :options {:redirect-to SUPABASE_GITHUB_REDIRECT}})] + (inspect (.signInWithOAuth auth options)))) + (defn event-changes [invoke] (.onAuthStateChange (.-auth client) (fn [event new-session] @@ -50,4 +61,5 @@ "token")) (prn :client client-test) - (signin-with-email client "chicao@cljazz.co")) + (signin-with-email client "chicao@cljazz.co") + (signin-with-oauth client "github")) diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index 9b32059b..17de6a00 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -1,13 +1,16 @@ (ns front.app.auth.views (:require + [mockingbird.components.button :refer [button]] [mockingbird.components.image :refer [image]] [mockingbird.components.input :refer [input]] + [front.app.auth.effects :refer [send-gh]] [front.app.components.alerts :as alerts] [front.app.components.container :refer [container]] [front.app.components.section :refer [section]] [front.app.components.loading :refer [loading-spinner]] [front.app.components.navlink :refer [nav-link]] + [front.app.components.svg :refer [github]] [front.app.lib :refer [defnc]] [helix.core :refer [$]] [helix.dom :as d] @@ -42,48 +45,57 @@ {:class "ml-3 "} "If you have an account with us, we’ve sent an email to " (:email state) - " with a link that you can use to sign in.") - (d/div - {:class "ml-3 "} - "You can also " - ($ nav-link - {:children "try again." - :on-click (fn [e] - (.preventDefault e) - (refx/dispatch [:app.auth/send-email-again])) - :href "#"})))) - ($ section {:class "p-6 space-y-8 w-full sm:p-8 lg:p-16 lg:py-0"} - (d/h2 {:class "text-2xl font-bold text-gray-900 lg:text-3xl dark:text-white"} - "sign in to moclojer") - (d/form {:disabled loading? - :on-submit (fn [e] - (.preventDefault e) - (when (:email state) - (refx/dispatch [:app.auth/send-email state]))) - :class "mt-8 space-y-6 "} + " with a link that you can use to sign in.") + (d/div + {:class "ml-3 "} + "You can also " + ($ nav-link + {:children "try again." + :on-click (fn [e] + (.preventDefault e) + (refx/dispatch [:app.auth/send-email-again])) + :href "#"})))) + ($ section {:class "p-6 space-y-8 w-full sm:p-8 lg:p-16 lg:py-0"} + (d/h2 {:class "text-2xl font-bold text-gray-900 lg:text-3xl dark:text-white"} + "sign in to moclojer") + (d/form {:disabled loading? + :on-submit (fn [e] + (.preventDefault e) + (when (:email state) + (refx/dispatch [:app.auth/send-email state]))) + :class "mt-8 space-y-6 "} + + ($ input + {:for "email" + :label "your email" + :placeholder "name@company.com" + :on-change #(set-state assoc :email (.. % -target -value))}) - ($ input - {:for "email" - :label "your email" - :placeholder "name@company.com" - :on-change #(set-state assoc :email (.. % -target -value))}) + (d/div {:class "flex items-start "} + (d/div {:class "flex items-center h-5"})) - (d/div {:class "flex items-start "} - (d/div {:class "flex items-center h-5"})) + (d/div + ($ button {:class (str (if loading? + "bg-gray-700 " + "bg-mockingbird-main ") + "hover:bg-mockingbird-400 ") + :type :submit + :theme :mockingbird + :size :full + :label "login to your account"} + (if loading? + (d/span {:class "inline-flex"} + ($ loading-spinner {}) + "loading...") + (d/span "login to your account"))) - ($ button {:class (str (if loading? - "bg-gray-700 " - "bg-mockingbird-main ") - "hover:bg-mockingbird-400 ") - :type :submit - :theme :mockingbird - :size :full - :label "login to your account"} - (if loading? - (d/span {:class "inline-flex"} - ($ loading-spinner {}) - "loading...") - (d/span "login to your account"))) + (d/div {:class "w-full h-6 flex flex-row justify-center items-center lg:justify-start lg:items-start pt-6 lg:pt-2 "} + (d/span {:class "hidden text-gray-300 lg:flex justify-start items-start m-0 lg:mr-2 lg:ml-1"} "or") + ($ button {:roundness :full + :class "flex justify-center flex-col items-center w-6 h-6 " + :on-click #(send-gh {:provider "github"})} + (d/div {:class "flex text-gray-400 p-4 "} + ($ github))))) (d/div {:class "text-sm font-medium text-gray-500 dark:text-gray-400"} (if error diff --git a/src/front/app/components/svg.cljs b/src/front/app/components/svg.cljs index b0a39151..ee916d3c 100644 --- a/src/front/app/components/svg.cljs +++ b/src/front/app/components/svg.cljs @@ -139,12 +139,12 @@ (defnc arrow [{:keys [direction class]}] (d/svg {:class (str "w-6 h-6 " - (case direction - :up "rotate-180 " - :down "rotate-0 " - :left "rotate-90 " - :right "-rotate-90 ") - class) + (case direction + :up "rotate-180 " + :down "rotate-0 " + :left "rotate-90 " + :right "-rotate-90 ") + class) :fill "currentColor" :viewBox "0 0 20 20"} (d/path {:d "M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" :clip-rule "evenodd" @@ -321,3 +321,13 @@ (d/path {:d "M9 2a1 1 0 000 2h2a1 1 0 100-2H9z"}) (d/path {:d "M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm3 4a1 1 0 000 2h.01a1 1 0 100-2H7zm3 0a1 1 0 000 2h3a1 1 0 100-2h-3zm-3 4a1 1 0 100 2h.01a1 1 0 100-2H7zm3 0a1 1 0 100 2h3a1 1 0 100-2h-3z" :clip-rule "evenodd"}))) + +(defnc github [] + (d/svg {:class "flex-shrink-0 w-6 h-6 text-gray-300 transition duration-75 group-hover:text-gray-400 dark:text-gray-400 dark:group-hover:text-white" + :fill "currentColor" + :viewBox "0 0 100 100"} + (d/path {:fill-rule "evenodd" + :clip-rule "evenodd" + :d "M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z"}))) + + From 85d75362d751b26e85649f24e8ce9b5327a84af5 Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Thu, 21 Nov 2024 18:46:30 -0300 Subject: [PATCH 11/22] fix: oauth instead of github --- resources/back/config.edn | 2 +- src/front/app/auth/supabase.cljs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/back/config.edn b/resources/back/config.edn index d681fcc1..8d54760c 100644 --- a/resources/back/config.edn +++ b/resources/back/config.edn @@ -5,7 +5,7 @@ :release "1.0.0" :supabase-api-key #or [#env SUPABASE_API_KEY "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InRndmRmeHVyZ3NkZHhvdXhtdWdzIiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODE1MDM0NDMsImV4cCI6MTk5NzA3OTQ0M30.7pq4MM_ZldiWvOk_cnQuxlvUF8eFcxlPDB7jMTNMYb0"] :supabase-url #or [#env SUPABASE_URL "https://tgvdfxurgsddxouxmugs.supabase.co"] - :supabase-github-redirect #or [#env SUPABASE_GITHUB_REDIRECT "https://auth.moclojer.com/auth/v1/callback"] + :supabase-oauth-redirect #or [#env SUPABASE_OAUTH_REDIRECT "https://auth.moclojer.com/auth/v1/callback"] :supabase-jwt-secret #or [#env SUPABASE_JWT_SECRET "OP6cAnR4J7im0KH2sWeeTlwf4xQOZTuYtoO1mJ3vpON/szjCMpixe4r+9X3HvhZphxV79wl+2amIxo/AkfR28g=="] :moclojer {:config-path #profile {:default "resources/moclojer.yml" :prod "moclojer.yml"} diff --git a/src/front/app/auth/supabase.cljs b/src/front/app/auth/supabase.cljs index 65f91fdf..e415b64e 100644 --- a/src/front/app/auth/supabase.cljs +++ b/src/front/app/auth/supabase.cljs @@ -8,7 +8,7 @@ (goog-define SUPABASE_URL "") (goog-define SUPABASE_TOKEN "") -(goog-define SUPABASE_GITHUB_REDIRECT "") +(goog-define SUPABASE_OAUTH_REDIRECT "") (when-not (every? not-empty [SUPABASE_URL SUPABASE_TOKEN]) (throw (js/Error. "SUPABASE_URL or SUPABASE_TOKEN weren't defined"))) (goog-define SUPABASE_REDIRECT "http://localhost:8200/#/") @@ -45,7 +45,7 @@ (let [auth (.-auth client) options (clj->js {:provider (clj->js provider) - :options {:redirect-to SUPABASE_GITHUB_REDIRECT}})] + :options {:redirect-to SUPABASE_OAUTH_REDIRECT}})] (inspect (.signInWithOAuth auth options)))) (defn event-changes [invoke] From b1b212eda256facec7e1711e0a96dbaf46ee9fcb Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Tue, 26 Nov 2024 17:18:23 -0300 Subject: [PATCH 12/22] feat: adds refx event for oauth --- src/front/app/auth/effects.cljs | 23 ++------ src/front/app/auth/events.cljs | 9 +++ src/front/app/auth/supabase.cljs | 16 +++--- src/front/app/auth/views.cljs | 99 ++++++++++++++++---------------- 4 files changed, 73 insertions(+), 74 deletions(-) diff --git a/src/front/app/auth/effects.cljs b/src/front/app/auth/effects.cljs index b826e52d..5c425928 100644 --- a/src/front/app/auth/effects.cljs +++ b/src/front/app/auth/effects.cljs @@ -13,7 +13,7 @@ (let [obj (utils/js->cljs-key resp)] (if (:error obj) (do - (js/console.error :resp-faiure obj) + (js/console.error :resp-failure obj) (dispatch (conj on-failure {:body obj}))) (do (js/console.log :resp-success obj) @@ -25,24 +25,13 @@ (js/console.log :resp resp) (dispatch (conj on-failure {:body (utils/js->cljs-key resp)})))))) +(defn send-oauth [{:keys [provider]}] + (.log js/console :sending-oauth) + (supabase/signin-with-oauth supabase/client provider)) + (defn auth-effect [fn-req] (fn [req] (fn-req req))) (reg-fx :auth (auth-effect send-email)) - -(defn send-gh [{:keys [provider on-failure on-success]}] - (.log js/console :sending-email) - (-> (supabase/signin-with-oauth supabase/client provider) - (p/then (fn [resp] - (let [obj (utils/js->cljs-key resp)] - (if (:error obj) - (do - (js/console.error :resp-faiure obj) - (dispatch (conj on-failure {:body obj}))) - (do - (js/console.log :resp-success obj) - (dispatch (conj on-success {:body (assoc - (utils/js->cljs-key resp) - :ok true)}))))))))) - +(reg-fx :oauth (auth-effect send-oauth)) diff --git a/src/front/app/auth/events.cljs b/src/front/app/auth/events.cljs index a7b87608..e8456db2 100644 --- a/src/front/app/auth/events.cljs +++ b/src/front/app/auth/events.cljs @@ -185,6 +185,15 @@ :login-error nil :login-loading? true)})) +(refx/reg-event-fx + :app.auth/send-oauth + (fn + [{db :db} [_ provider]] + {:oauth {:provider (:provider provider)} + :db (assoc db + :login-error nil + :login-loading? true)})) + (refx/reg-event-db :app.auth/send-email-again (fn diff --git a/src/front/app/auth/supabase.cljs b/src/front/app/auth/supabase.cljs index e415b64e..527edd48 100644 --- a/src/front/app/auth/supabase.cljs +++ b/src/front/app/auth/supabase.cljs @@ -33,14 +33,6 @@ :options {:emailRedirectTo SUPABASE_REDIRECT}})] (.signInWithOtp auth options))) -(defn sign-out [dispatch-fn-logout] - (let [auth (.-auth client)] - (-> (.signOut auth) - (p/then (fn [e] - (dispatch-fn-logout e) - (rfe/push-state :app.core/login)))))) - -;; Github (defn signin-with-oauth [^js client provider] (let [auth (.-auth client) options (clj->js @@ -48,6 +40,14 @@ :options {:redirect-to SUPABASE_OAUTH_REDIRECT}})] (inspect (.signInWithOAuth auth options)))) + +(defn sign-out [dispatch-fn-logout] + (let [auth (.-auth client)] + (-> (.signOut auth) + (p/then (fn [e] + (dispatch-fn-logout e) + (rfe/push-state :app.core/login)))))) + (defn event-changes [invoke] (.onAuthStateChange (.-auth client) (fn [event new-session] diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index 17de6a00..3bc19a1a 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -1,10 +1,8 @@ (ns front.app.auth.views (:require - [mockingbird.components.button :refer [button]] [mockingbird.components.image :refer [image]] [mockingbird.components.input :refer [input]] - [front.app.auth.effects :refer [send-gh]] [front.app.components.alerts :as alerts] [front.app.components.container :refer [container]] [front.app.components.section :refer [section]] @@ -18,6 +16,7 @@ [refx.alpha :as refx] [reitit.frontend.easy :as rfe])) +(defn inspect [a] (js/console.log a) a) (defnc not-found-view [] (d/div "404")) @@ -45,60 +44,62 @@ {:class "ml-3 "} "If you have an account with us, we’ve sent an email to " (:email state) - " with a link that you can use to sign in.") - (d/div - {:class "ml-3 "} - "You can also " - ($ nav-link - {:children "try again." - :on-click (fn [e] - (.preventDefault e) - (refx/dispatch [:app.auth/send-email-again])) - :href "#"})))) - ($ section {:class "p-6 space-y-8 w-full sm:p-8 lg:p-16 lg:py-0"} - (d/h2 {:class "text-2xl font-bold text-gray-900 lg:text-3xl dark:text-white"} - "sign in to moclojer") - (d/form {:disabled loading? - :on-submit (fn [e] - (.preventDefault e) - (when (:email state) - (refx/dispatch [:app.auth/send-email state]))) - :class "mt-8 space-y-6 "} + " with a link that you can use to sign in.") + (d/div + {:class "ml-3 "} + "You can also " + ($ nav-link + {:children "try again." + :on-click (fn [e] + (.preventDefault e) + (refx/dispatch [:app.auth/send-email-again])) + :href "#"})))) + ($ section {:class "p-6 space-y-8 w-full sm:p-8 lg:p-16 lg:py-0"} + (d/h2 {:class "text-2xl font-bold text-gray-900 lg:text-3xl dark:text-white"} + "sign in to moclojer") + (d/form {:disabled loading? + :on-submit (fn [e] + (.preventDefault e) + (if (and (:email state) (= (:provider state) "")) + (refx/dispatch [:app.auth/send-email state]) + (refx/dispatch [:app.auth/send-oauth state]))) + :class "mt-8 space-y-6 "} + + ($ input + {:for "email" + :label "your email" + :placeholder "name@company.com" + :on-change #(set-state assoc :email (.. % -target -value))}) - ($ input - {:for "email" - :label "your email" - :placeholder "name@company.com" - :on-change #(set-state assoc :email (.. % -target -value))}) + (d/div {:class "flex items-start "} + (d/div {:class "flex items-center h-5"})) - (d/div {:class "flex items-start "} - (d/div {:class "flex items-center h-5"})) + (d/div + ($ button {:class (str (if loading? + "bg-gray-700 " + "bg-mockingbird-main ") + "hover:bg-mockingbird-400 ") + :type :submit + :theme :mockingbird + :size :full + :label "login to your account"} + (if loading? + (d/span {:class "inline-flex"} + ($ loading-spinner {}) + "loading...") + (d/span "login to your account"))) - (d/div - ($ button {:class (str (if loading? - "bg-gray-700 " - "bg-mockingbird-main ") - "hover:bg-mockingbird-400 ") - :type :submit - :theme :mockingbird - :size :full - :label "login to your account"} - (if loading? - (d/span {:class "inline-flex"} - ($ loading-spinner {}) - "loading...") - (d/span "login to your account"))) + (d/div {:class "w-full h-6 flex flex-row justify-center items-center lg:justify-start lg:items-start pt-6 lg:pt-2 "} + (d/span {:class "hidden text-gray-300 lg:flex justify-start items-start m-0 lg:mr-2 lg:ml-1"} "or") + ($ button {:roundness :full + :class "flex justify-center flex-col items-center w-6 h-6 " + :on-click #(set-state assoc :provider "github")} - (d/div {:class "w-full h-6 flex flex-row justify-center items-center lg:justify-start lg:items-start pt-6 lg:pt-2 "} - (d/span {:class "hidden text-gray-300 lg:flex justify-start items-start m-0 lg:mr-2 lg:ml-1"} "or") - ($ button {:roundness :full - :class "flex justify-center flex-col items-center w-6 h-6 " - :on-click #(send-gh {:provider "github"})} (d/div {:class "flex text-gray-400 p-4 "} ($ github))))) (d/div {:class "text-sm font-medium text-gray-500 dark:text-gray-400"} - (if error + (if (inspect error) ($ alerts/error {:id "login-error" :error "Error... try it again." @@ -183,7 +184,7 @@ (let [loading? (refx/use-sub [:app.auth/login-loading]) [error error-res] (refx/use-sub [:app.auth/login-error]) email-sent? (refx/use-sub [:app.auth/email-sent]) - [state set-state] (hooks/use-state {:email ""})] + [state set-state] (hooks/use-state {:email "" :provider ""})] ($ section ($ login {:sent? email-sent? :loading? loading? From 3624e4b4faa1542a3e140ea3fd86c62daf12896a Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Tue, 26 Nov 2024 17:42:10 -0300 Subject: [PATCH 13/22] fix: error and success status --- src/front/app/auth/effects.cljs | 10 ++++++++-- src/front/app/auth/events.cljs | 3 ++- src/front/app/auth/views.cljs | 6 +++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/front/app/auth/effects.cljs b/src/front/app/auth/effects.cljs index 5c425928..2b1643ff 100644 --- a/src/front/app/auth/effects.cljs +++ b/src/front/app/auth/effects.cljs @@ -25,9 +25,15 @@ (js/console.log :resp resp) (dispatch (conj on-failure {:body (utils/js->cljs-key resp)})))))) -(defn send-oauth [{:keys [provider]}] +(defn send-oauth [{:keys [provider on-success on-failure]}] (.log js/console :sending-oauth) - (supabase/signin-with-oauth supabase/client provider)) + (-> (supabase/signin-with-oauth supabase/client provider) + (p/then (fn [resp] + (let [obj (utils/js->cljs-key resp)] + (if (:error obj) + (do + (js/console.error :resp-failure obj) + (dispatch (conj on-failure {:body obj}))))))))) (defn auth-effect [fn-req] (fn [req] diff --git a/src/front/app/auth/events.cljs b/src/front/app/auth/events.cljs index e8456db2..4ad064c5 100644 --- a/src/front/app/auth/events.cljs +++ b/src/front/app/auth/events.cljs @@ -189,7 +189,8 @@ :app.auth/send-oauth (fn [{db :db} [_ provider]] - {:oauth {:provider (:provider provider)} + {:oauth {:provider (:provider provider) + :on-failure [:app.auth/send-email-error]} :db (assoc db :login-error nil :login-loading? true)})) diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index 3bc19a1a..75e2cdf3 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -60,7 +60,7 @@ (d/form {:disabled loading? :on-submit (fn [e] (.preventDefault e) - (if (and (:email state) (= (:provider state) "")) + (if (and (not (= (:email state) "")) (= (:provider state) "")) (refx/dispatch [:app.auth/send-email state]) (refx/dispatch [:app.auth/send-oauth state]))) :class "mt-8 space-y-6 "} @@ -69,7 +69,7 @@ {:for "email" :label "your email" :placeholder "name@company.com" - :on-change #(set-state assoc :email (.. % -target -value))}) + :on-change #(set-state assoc :email (.. % -target -value) :provider "")}) (d/div {:class "flex items-start "} (d/div {:class "flex items-center h-5"})) @@ -93,7 +93,7 @@ (d/span {:class "hidden text-gray-300 lg:flex justify-start items-start m-0 lg:mr-2 lg:ml-1"} "or") ($ button {:roundness :full :class "flex justify-center flex-col items-center w-6 h-6 " - :on-click #(set-state assoc :provider "github")} + :on-click #(set-state assoc :provider "github" :email "")} (d/div {:class "flex text-gray-400 p-4 "} ($ github))))) From 9fdd91109f58451c31b6409d61066df088bcb575 Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Wed, 11 Dec 2024 11:24:41 -0300 Subject: [PATCH 14/22] fix: moclojer icon on tab --- resources/front/index.src.html | 4 ++-- .../front/public/images/favicon-moclojer.png | Bin 0 -> 2973 bytes 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 resources/front/public/images/favicon-moclojer.png diff --git a/resources/front/index.src.html b/resources/front/index.src.html index cf78ba84..01d1c1ed 100644 --- a/resources/front/index.src.html +++ b/resources/front/index.src.html @@ -5,8 +5,8 @@ api mock server - moclojer - - + + diff --git a/resources/front/public/images/favicon-moclojer.png b/resources/front/public/images/favicon-moclojer.png new file mode 100644 index 0000000000000000000000000000000000000000..b555d30f6abd14931d3c0854dfc4ceceaf876a98 GIT binary patch literal 2973 zcmcImXHXO97X5;BmKs5QNQcl21_lr!U0Ud%#8AYjK|o4El_E<}6hYWPXb~X@h=?F1 z2q7X6eJY7kL{yTct`tEjvc^SfUiSTaKi;1=^S+sT&)hTToVjytz2tYW@-qRj{Hj>oNIT69Ee!1cLw5larHES68>Qvzwlt=JWYgRaFQCqOY%SZEYUD6$ss^2EG(?9u0D6}+{((z zYPms`e-P1Oj$Rq6t?D?{RCxxF zx?jis_zR2*wYDe)ZCHcO6U`z##Y^m@umcB^9Ub@N?D#nb`9H-GE~bq$K8g%$?moiY zXg9KxcUe8#MJEE634i&%R;3t*WXA$te|~5 zX(U=@$VEot2B;{TeG<)fQOjNCVdi;Us2z@BJuNaI71;hFnmrYgk_m4OAdblAKiUmB zR9_Y*^!N=j9qn`i>^5V(Y-Ay~Eq*WEidmJ-eySe=99VEe)3LYYp!|ssl{Q7u zt)7g;460grXf#`>nh_Xn7?kq^1FF1Sru``pO+9(t$+E-@GP%&N=*_iK~`iZ&utW`Ltg zKX6s5fEbXi>45!{tP&*1 zX%vC!1|$e5vcX+p0&dfxN1ea9M%8LO&n#pd3?OdbW~3pJv@eHmn(2O+2v4961#jq2hF}@ z@rxY!NULC{FM|d`g$!7+_TM%WTj65u?H5@!I3v^Buu)vOM^S`{=Y977HoV6L`x4S@Szqo(MOouj*7#`-pQq&C?@ z7=qi#L_eo@=L>zTZ+lCb!6qZ9e`*ySk6&Hq(#OWCGIZ;Pem?5{{?;2$aqt*fzNUP3 zZ%=k?n!hfkuab3kz~=NnFPw+eN)WRsgGV7V*$vNpCq2>&f2m#$T;p%lfeln+QKM_p~Or!IF_WPSHg0lu;r$;7Cea6 z&b}5*^@MyospPfz>XStB3tBIpG!kLGwy*R}mhS9Hk{$wLQ?173%*EnncM_F2w_+MU zOdccJGhe`FtG)B|M6si&fg*{v+9um5URwK|NmXTLin=McfWx8s2ouvBsZ}9KPaiKF zJ()2j)+7(53|w>}dJc#pqz|^~ea$)4*Og&E_hw;!p}8lG0Iu;O>N41y-`)-=VAh^> z&?4MTMg%9;#Ur;-$#l<9g36Vryw?-GkgQA$?qoLROO7kO;ixqM$GspL z9}xLPS8H#*hmIy44zq22`le$1s5JA^1D#vs^(re{isy{JvDB5gv8>OxSCT*TZqqG} z9fL@c*C~rhn=chbBA~s!k^S>Q{m;BI8&|eP2Po0`M(htJn`pc}5j1A^v4 zP=A?Qt5&K!cPf_dj4S!QX#!oiezIH*{V_beY-(xj68m-G_@HG^nmxR@8(taZ?_WGDae#VQPK7IR-Ja1QTq8jO{hkj{bx z?6;VbORS|k1$VZwE(tfe;`)GDnIK|*2UC~(VXJWbjKz>m&Y=-plGST(&Q~j!2|T^L zMRu%s+?uwe({>ASUwlG?^u00k9K*Q2#WHTVh`Xnoc|iL9i>L~yWyn-6#>n(EF0J#% z!~$C(_cw*4*Vagpjf3*>$5wb|Uc}9e;~RPls_yS*mkC!YIy9RPlp7iahiYx~)W6kpDHW%kyKdI1y_5^f0t)w6a^fBAG7ES2$r7`ljByIC@ZlFUa z?&92#&iJZ90io95L#)A)W1$}D-a^j&Miu=DCb^2bQj zX;~Q2&@a5%EUw!GnXbWL+!9KANA7w;l4g485)B6p{LKYn$lZsf37;L}>2=O^h2tfW zB?j@&b?Bp?ony|Oh)-m&>28W?QQOLiTl{@LCUwFik@qbHUnrdfCrkqFTtX=FLR_c- zfC<9H6pk>1n^>Mgm?9Afq#43c&=H8WhO4#zVTi`#A}*% Date: Thu, 12 Dec 2024 10:45:02 -0300 Subject: [PATCH 15/22] refactor: semantic errors --- src/front/app/dashboard/base.cljs | 42 +++++++++++++++--------------- src/front/app/dashboard/views.cljs | 3 +-- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/front/app/dashboard/base.cljs b/src/front/app/dashboard/base.cljs index 80951ee9..74e83a6c 100644 --- a/src/front/app/dashboard/base.cljs +++ b/src/front/app/dashboard/base.cljs @@ -28,27 +28,27 @@ default-subdomain (first user-orgs)] (hooks/use-effect - [mocks-raw] - (->> mocks-raw - count - inc - (str "my-mock-") - set-default-wildcard!)) + [mocks-raw] + (->> mocks-raw + count + inc + (str "my-mock-") + set-default-wildcard!)) (hooks/use-effect - [new-mock] + [new-mock] - (let [wildcard (:wildcard new-mock) - subdomain (:subdomain new-mock)] + (let [wildcard (:wildcard new-mock) + subdomain (:subdomain new-mock)] - (when-not wildcard - (set-mock assoc :wildcard default-wildcard)) - (when-not wildcard - (set-mock assoc :subdomain default-subdomain)) + (when-not wildcard + (set-mock assoc :wildcard default-wildcard)) + (when-not wildcard + (set-mock assoc :subdomain default-subdomain)) - (when (and wildcard subdomain) - (refx/dispatch-sync [:app.dashboard/wildcard-available? - (select-keys new-mock [:subdomain :wildcard])])))) + (when (and wildcard subdomain) + (refx/dispatch-sync [:app.dashboard/wildcard-available? + (select-keys new-mock [:subdomain :wildcard])])))) ($ modal {:title "New mock" @@ -174,10 +174,10 @@ mock (refx/use-sub [:app.dashboard/mock-to-delete])] (hooks/use-effect - [mock] - (if (nil? mock) - (close-modal!) - (set-open! true))) + [mock] + (if (nil? mock) + (close-modal!) + (set-open! true))) ($ modal {:title nil @@ -208,7 +208,7 @@ (defnc index [{:keys [children]}] (let [user (-> (refx/use-sub [:app.auth/current-user]) :user)] - (d/body + (d/div {:class-name "bg-gray-50 dark:bg-gray-800"} ($ nav-bar {:user-data user}) diff --git a/src/front/app/dashboard/views.cljs b/src/front/app/dashboard/views.cljs index fc6673e0..4c8cbacd 100644 --- a/src/front/app/dashboard/views.cljs +++ b/src/front/app/dashboard/views.cljs @@ -7,7 +7,6 @@ [helix.dom :as d])) (defnc welcome [] - (d/div ($ base/index (d/main ($ message @@ -16,4 +15,4 @@ :author "Avelino" :image "/images/users/avatar.png" :image-style "rounded" - :message ["I'm happy to have you here, we are launching the SaaS version of moclojer, seeking to make it simple for you to put a mock API in the air to develop your projects." "I look forward to your feedback (this is the only way we can improve the product)."]}))))) + :message ["I'm happy to have you here, we are launching the SaaS version of moclojer, seeking to make it simple for you to put a mock API in the air to develop your projects." "I look forward to your feedback (this is the only way we can improve the product)."]})))) From 3c7cd72d23c21083438f7834a3f9ddb6602cb86c Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Thu, 12 Dec 2024 10:54:07 -0300 Subject: [PATCH 16/22] fix: removes mockingbird from npm --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 5866d0e6..dbfa6c82 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,6 @@ "flowbite-react": "^0.4.7", "js-cookie": "^3.0.5", "js-yaml": "^4.1.0", - "mockingbird-lib": "^0.0.11", "postcss-focus-visible": "^8.0.2", "puppeteer": "^23.4.0", "react": "^18.2.0", From ee3b17abc986b8976b180b9dbaad0eff836fa06d Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Thu, 12 Dec 2024 11:14:21 -0300 Subject: [PATCH 17/22] fix: gh login pos --- src/front/app/auth/views.cljs | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index 75e2cdf3..82ddac17 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -63,16 +63,26 @@ (if (and (not (= (:email state) "")) (= (:provider state) "")) (refx/dispatch [:app.auth/send-email state]) (refx/dispatch [:app.auth/send-oauth state]))) - :class "mt-8 space-y-6 "} + :class "mt-8 space-y-8 "} - ($ input - {:for "email" - :label "your email" - :placeholder "name@company.com" - :on-change #(set-state assoc :email (.. % -target -value) :provider "")}) + (d/div + ($ input + {:for "email" + :label "your email" + :placeholder "name@company.com" + :on-change #(set-state assoc :email (.. % -target -value) :provider "")}) + + (d/div {:class "w-8 lg:w-full h-8 lg:h-6 flex flex-row justify-center items-center mt-4 lg:mt-2 lg:justify-start lg:items-start "} + (d/span {:class "hidden text-gray-300 lg:flex justify-start items-start m-0 lg:mr-2 lg:ml-1"} "or") + ($ button {:roundness :full + :class "flex justify-center flex-col items-center w-8 h-8 lg:w-6 lg:h-6" + :on-click #(set-state assoc :provider "github" :email "")} + + (d/div {:class "flex text-gray-400 "} + ($ github))))) (d/div {:class "flex items-start "} - (d/div {:class "flex items-center h-5"})) + (d/div {:class "flex items-center h-6 lg:h-12"})) (d/div ($ button {:class (str (if loading? @@ -87,16 +97,7 @@ (d/span {:class "inline-flex"} ($ loading-spinner {}) "loading...") - (d/span "login to your account"))) - - (d/div {:class "w-full h-6 flex flex-row justify-center items-center lg:justify-start lg:items-start pt-6 lg:pt-2 "} - (d/span {:class "hidden text-gray-300 lg:flex justify-start items-start m-0 lg:mr-2 lg:ml-1"} "or") - ($ button {:roundness :full - :class "flex justify-center flex-col items-center w-6 h-6 " - :on-click #(set-state assoc :provider "github" :email "")} - - (d/div {:class "flex text-gray-400 p-4 "} - ($ github))))) + (d/span "login to your account")))) (d/div {:class "text-sm font-medium text-gray-500 dark:text-gray-400"} (if (inspect error) From b89edd9e95e81c06e1249e4d9be7e09bebed67d2 Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Fri, 13 Dec 2024 09:48:54 -0300 Subject: [PATCH 18/22] fix: remomves some sensible keys from config.edn --- resources/back/config.edn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/back/config.edn b/resources/back/config.edn index 8d54760c..09815abe 100644 --- a/resources/back/config.edn +++ b/resources/back/config.edn @@ -3,10 +3,10 @@ :default :dev :prod :prod} :release "1.0.0" - :supabase-api-key #or [#env SUPABASE_API_KEY "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InRndmRmeHVyZ3NkZHhvdXhtdWdzIiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODE1MDM0NDMsImV4cCI6MTk5NzA3OTQ0M30.7pq4MM_ZldiWvOk_cnQuxlvUF8eFcxlPDB7jMTNMYb0"] + :supabase-api-key #or [#env SUPABASE_API_KEY "foo"] :supabase-url #or [#env SUPABASE_URL "https://tgvdfxurgsddxouxmugs.supabase.co"] :supabase-oauth-redirect #or [#env SUPABASE_OAUTH_REDIRECT "https://auth.moclojer.com/auth/v1/callback"] - :supabase-jwt-secret #or [#env SUPABASE_JWT_SECRET "OP6cAnR4J7im0KH2sWeeTlwf4xQOZTuYtoO1mJ3vpON/szjCMpixe4r+9X3HvhZphxV79wl+2amIxo/AkfR28g=="] + :supabase-jwt-secret #or [#env SUPABASE_JWT_SECRET "bar"] :moclojer {:config-path #profile {:default "resources/moclojer.yml" :prod "moclojer.yml"} :join? #profile {:default false From 9491c2f9731cfc91e2bedd8cf2264effb5c0b85c Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Thu, 26 Dec 2024 13:01:12 -0300 Subject: [PATCH 19/22] fix (wip): auth with git --- resources/back/config.edn | 1 + shadow-cljs.edn | 17 +++++++++-------- src/front/app/auth/supabase.cljs | 8 +++----- src/front/app/auth/views.cljs | 17 +++++++---------- src/front/app/components/aside.cljs | 2 +- src/front/app/components/svg.cljs | 8 +++++++- 6 files changed, 28 insertions(+), 25 deletions(-) diff --git a/resources/back/config.edn b/resources/back/config.edn index 09815abe..e6c6509c 100644 --- a/resources/back/config.edn +++ b/resources/back/config.edn @@ -4,6 +4,7 @@ :prod :prod} :release "1.0.0" :supabase-api-key #or [#env SUPABASE_API_KEY "foo"] + :supabase-token #or [#env SUPABASE_TOKEN "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InRndmRmeHVyZ3NkZHhvdXhtdWdzIiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODE1MDM0NDMsImV4cCI6MTk5NzA3OTQ0M30.7pq4MM_ZldiWvOk_cnQuxlvUF8eFcxlPDB7jMTNMYb0"] :supabase-url #or [#env SUPABASE_URL "https://tgvdfxurgsddxouxmugs.supabase.co"] :supabase-oauth-redirect #or [#env SUPABASE_OAUTH_REDIRECT "https://auth.moclojer.com/auth/v1/callback"] :supabase-jwt-secret #or [#env SUPABASE_JWT_SECRET "bar"] diff --git a/shadow-cljs.edn b/shadow-cljs.edn index 11ce4e14..07a135e9 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -1,9 +1,10 @@ ;;shadow clj config {:deps {:aliases [:front-dev]} :nrepl {:port 8777} - :build-defaults {:closure-defines {front.app.auth.supabase/SUPABASE_URL "https://tgvdfxurgsddxouxmugs.supabase.co" - front.app.auth.supabase/SUPABASE_TOKEN "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InRndmRmeHVyZ3NkZHhvdXhtdWdzIiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODE1MDM0NDMsImV4cCI6MTk5NzA3OTQ0M30.7pq4MM_ZldiWvOk_cnQuxlvUF8eFcxlPDB7jMTNMYb0" - front.app.core/SENTRY_DNS "https://27ee051c754588f05b85c61327b675e9@o4506376447131648.ingest.us.sentry.io/4507012897374208"}} + :build-defaults {:closure-defines + {front.app.auth.supabase/SUPABASE_URL "https://tgvdfxurgsddxouxmugs.supabase.co" + front.app.auth.supabase/SUPABASE_TOKEN "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InRndmRmeHVyZ3NkZHhvdXhtdWdzIiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODE1MDM0NDMsImV4cCI6MTk5NzA3OTQ0M30.7pq4MM_ZldiWvOk_cnQuxlvUF8eFcxlPDB7jMTNMYb0" + front.app.core/SENTRY_DNS "https://27ee051c754588f05b85c61327b675e9@o4506376447131648.ingest.us.sentry.io/4507012897374208"}} :builds {:app {:target :browser :output-dir "resources/front/public/assets/js" :asset-path "/assets/js" @@ -12,13 +13,13 @@ :http-port 8200 :http-root "resources/front/public/"} :build-hooks [(dev.shadow.hooks/hash-files - ["./resources/front/public/assets/css/output.css" - "./resources/front/public/assets/js/core.js"]) + ["./resources/front/public/assets/css/output.css" + "./resources/front/public/assets/js/core.js"]) (dev.shadow.hooks/replace-hashed-files - "./resources/front/index.src.html" - "./resources/front/public/index.html") + "./resources/front/index.src.html" + "./resources/front/public/index.html") (mockingbird.dev.shadow.hooks/get-target-css - {:path "resources/front/public/assets/css/target.css"})] + {:path "resources/front/public/assets/css/target.css"})] :dev {:modules {:core {:init-fn dev.core/init}} :compiler-options {:warning-as-errors true} :build-hooks [(dev.shadow.hooks/build-css diff --git a/src/front/app/auth/supabase.cljs b/src/front/app/auth/supabase.cljs index 527edd48..2e322df3 100644 --- a/src/front/app/auth/supabase.cljs +++ b/src/front/app/auth/supabase.cljs @@ -4,14 +4,13 @@ [promesa.core :as p] [reitit.frontend.easy :as rfe])) -(defn inspect [a] (js/console.log a) a) - (goog-define SUPABASE_URL "") (goog-define SUPABASE_TOKEN "") -(goog-define SUPABASE_OAUTH_REDIRECT "") + (when-not (every? not-empty [SUPABASE_URL SUPABASE_TOKEN]) (throw (js/Error. "SUPABASE_URL or SUPABASE_TOKEN weren't defined"))) (goog-define SUPABASE_REDIRECT "http://localhost:8200/#/") +(goog-define SUPABASE_OAUTH_REDIRECT "") (defn create-client "creates a supabase client" @@ -38,8 +37,7 @@ options (clj->js {:provider (clj->js provider) :options {:redirect-to SUPABASE_OAUTH_REDIRECT}})] - (inspect (.signInWithOAuth auth options)))) - + (.signInWithOAuth auth options))) (defn sign-out [dispatch-fn-logout] (let [auth (.-auth client)] diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index 82ddac17..928da93f 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -58,26 +58,23 @@ (d/h2 {:class "text-2xl font-bold text-gray-900 lg:text-3xl dark:text-white"} "sign in to moclojer") (d/form {:disabled loading? + :class "mt-8 space-y-8 " :on-submit (fn [e] (.preventDefault e) - (if (and (not (= (:email state) "")) (= (:provider state) "")) - (refx/dispatch [:app.auth/send-email state]) - (refx/dispatch [:app.auth/send-oauth state]))) - :class "mt-8 space-y-8 "} - - (d/div + (refx/dispatch [:app.auth/send-email state]))} + (d/div ($ input {:for "email" :label "your email" :placeholder "name@company.com" - :on-change #(set-state assoc :email (.. % -target -value) :provider "")}) - + :on-change #(set-state assoc :email (.. % -target -value))}) (d/div {:class "w-8 lg:w-full h-8 lg:h-6 flex flex-row justify-center items-center mt-4 lg:mt-2 lg:justify-start lg:items-start "} (d/span {:class "hidden text-gray-300 lg:flex justify-start items-start m-0 lg:mr-2 lg:ml-1"} "or") ($ button {:roundness :full :class "flex justify-center flex-col items-center w-8 h-8 lg:w-6 lg:h-6" - :on-click #(set-state assoc :provider "github" :email "")} - + :on-click #(do + (set-state assoc :provider "github") + (refx/dispatch [:app.auth/send-oauth state]))} (d/div {:class "flex text-gray-400 "} ($ github))))) diff --git a/src/front/app/components/aside.cljs b/src/front/app/components/aside.cljs index 66c537cb..6d962d9a 100644 --- a/src/front/app/components/aside.cljs +++ b/src/front/app/components/aside.cljs @@ -116,7 +116,7 @@ #(refx/dispatch-sync [:app.auth/logout %]))) :class (str "flex items-center p-2 text-base font-normal text-gray-900 rounded-lg transition" " duration-75 hover:bg-gray-100 group dark:text-gray-200 dark:hover:bg-gray-700")} - ($ svg/help) + ($ svg/logout) (when aside-open? (d/span {:class "ml-3"} "Logout"))))))))) diff --git a/src/front/app/components/svg.cljs b/src/front/app/components/svg.cljs index ee916d3c..af362ad1 100644 --- a/src/front/app/components/svg.cljs +++ b/src/front/app/components/svg.cljs @@ -330,4 +330,10 @@ :clip-rule "evenodd" :d "M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z"}))) - +(defnc logout [] + (d/svg {:class "flex-shrink-0 w-6 h-6 text-gray-300 transition duration-75 group-hover:text-gray-400 dark:text-gray-400 dark:group-hover:text-white" + :fill "currentColor" + :viewBox "0 0 100 100"} + (d/path {:fill-rule "evenodd" + :clip-rule "evenodd" + :d "M381.481,184.088l-83.009-84.2c-4.704-4.752-12.319-4.74-17.011,0c-4.704,4.74-4.704,12.439,0,17.179l62.558,63.46H96.279 c-6.641,0-12.03,5.438-12.03,12.151c0,6.713,5.39,12.151,12.03,12.151h247.74l-62.558,63.46c-4.704,4.752-4.704,12.439,0,17.179 c4.704,4.752,12.319,4.752,17.011,0l82.997-84.2C386.113,196.588,386.161,188.756,381.481,184.088z"}))) From 568f30b139b8688bdf3f00eabfe0c2b34e584880 Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Thu, 26 Dec 2024 14:51:57 -0300 Subject: [PATCH 20/22] fix (wip): wrongfully handling git auth --- src/back/api/logic/mocks.clj | 1 + src/front/app/auth/effects.cljs | 3 +-- src/front/app/auth/views.cljs | 21 +++++++++++---------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/back/api/logic/mocks.clj b/src/back/api/logic/mocks.clj index 7f7625c3..9718768d 100644 --- a/src/back/api/logic/mocks.clj +++ b/src/back/api/logic/mocks.clj @@ -1,4 +1,5 @@ (ns back.api.logic.mocks + (:refer-clojure :exclude [update]) (:require [camel-snake-kebab.core :as csk] [clojure.java.io :as io] [clojure.string :as str])) diff --git a/src/front/app/auth/effects.cljs b/src/front/app/auth/effects.cljs index 2b1643ff..6d9376eb 100644 --- a/src/front/app/auth/effects.cljs +++ b/src/front/app/auth/effects.cljs @@ -7,7 +7,6 @@ (defn send-email [{:keys [body on-success on-failure]}] (.log js/console :sending-email) - (-> (supabase/signin-with-email supabase/client (:email body)) (p/then (fn [resp] (let [obj (utils/js->cljs-key resp)] @@ -25,7 +24,7 @@ (js/console.log :resp resp) (dispatch (conj on-failure {:body (utils/js->cljs-key resp)})))))) -(defn send-oauth [{:keys [provider on-success on-failure]}] +(defn send-oauth [{:keys [provider on-failure]}] (.log js/console :sending-oauth) (-> (supabase/signin-with-oauth supabase/client provider) (p/then (fn [resp] diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index 928da93f..6d4a63fd 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -8,7 +8,7 @@ [front.app.components.section :refer [section]] [front.app.components.loading :refer [loading-spinner]] [front.app.components.navlink :refer [nav-link]] - [front.app.components.svg :refer [github]] + [front.app.components.svg :as svg] [front.app.lib :refer [defnc]] [helix.core :refer [$]] [helix.dom :as d] @@ -16,7 +16,8 @@ [refx.alpha :as refx] [reitit.frontend.easy :as rfe])) -(defn inspect [a] (js/console.log a) a) +(defn inspect [a] (.log js/console a) a) + (defnc not-found-view [] (d/div "404")) @@ -59,9 +60,11 @@ "sign in to moclojer") (d/form {:disabled loading? :class "mt-8 space-y-8 " + :on-submit (fn [e] (.preventDefault e) - (refx/dispatch [:app.auth/send-email state]))} + (when (:email state) + (refx/dispatch [:app.auth/send-email state])))} (d/div ($ input {:for "email" @@ -72,11 +75,9 @@ (d/span {:class "hidden text-gray-300 lg:flex justify-start items-start m-0 lg:mr-2 lg:ml-1"} "or") ($ button {:roundness :full :class "flex justify-center flex-col items-center w-8 h-8 lg:w-6 lg:h-6" - :on-click #(do - (set-state assoc :provider "github") - (refx/dispatch [:app.auth/send-oauth state]))} + :on-click #(refx/dispatch [:app.auth/send-oauth "github" (:on-failure state)])} (d/div {:class "flex text-gray-400 "} - ($ github))))) + ($ svg/github))))) (d/div {:class "flex items-start "} (d/div {:class "flex items-center h-6 lg:h-12"})) @@ -97,12 +98,12 @@ (d/span "login to your account")))) (d/div {:class "text-sm font-medium text-gray-500 dark:text-gray-400"} - (if (inspect error) + (when error-res ($ alerts/error {:id "login-error" :error "Error... try it again." - :description (:message error-res)}) - "if you don't have an account, it is created automatically")))))))) + :description (:message error-res)} + "if you don't have an account, it is created automatically"))))))))) (defnc first-login [{:keys [sent? loading?]}] (let [username (refx/use-sub [:app.auth/username-to-save]) From 2bddeba6d8586494525e41f172d38bc69127f6c7 Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Fri, 27 Dec 2024 13:59:15 -0300 Subject: [PATCH 21/22] fix: oauth --- resources/back/config.edn | 1 - shadow-cljs.edn | 3 ++- src/front/app/auth/effects.cljs | 35 ++++++++++++++++++--------------- src/front/app/auth/views.cljs | 11 +++++++---- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/resources/back/config.edn b/resources/back/config.edn index e6c6509c..e069c79c 100644 --- a/resources/back/config.edn +++ b/resources/back/config.edn @@ -6,7 +6,6 @@ :supabase-api-key #or [#env SUPABASE_API_KEY "foo"] :supabase-token #or [#env SUPABASE_TOKEN "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InRndmRmeHVyZ3NkZHhvdXhtdWdzIiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODE1MDM0NDMsImV4cCI6MTk5NzA3OTQ0M30.7pq4MM_ZldiWvOk_cnQuxlvUF8eFcxlPDB7jMTNMYb0"] :supabase-url #or [#env SUPABASE_URL "https://tgvdfxurgsddxouxmugs.supabase.co"] - :supabase-oauth-redirect #or [#env SUPABASE_OAUTH_REDIRECT "https://auth.moclojer.com/auth/v1/callback"] :supabase-jwt-secret #or [#env SUPABASE_JWT_SECRET "bar"] :moclojer {:config-path #profile {:default "resources/moclojer.yml" :prod "moclojer.yml"} diff --git a/shadow-cljs.edn b/shadow-cljs.edn index 07a135e9..f4ba2f25 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -4,7 +4,8 @@ :build-defaults {:closure-defines {front.app.auth.supabase/SUPABASE_URL "https://tgvdfxurgsddxouxmugs.supabase.co" front.app.auth.supabase/SUPABASE_TOKEN "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InRndmRmeHVyZ3NkZHhvdXhtdWdzIiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODE1MDM0NDMsImV4cCI6MTk5NzA3OTQ0M30.7pq4MM_ZldiWvOk_cnQuxlvUF8eFcxlPDB7jMTNMYb0" - front.app.core/SENTRY_DNS "https://27ee051c754588f05b85c61327b675e9@o4506376447131648.ingest.us.sentry.io/4507012897374208"}} + front.app.core/SENTRY_DNS "https://27ee051c754588f05b85c61327b675e9@o4506376447131648.ingest.us.sentry.io/4507012897374208" + front.app.core/SUPABASE_OAUTH_REDIRECT "https://auth.moclojer.com/auth/v1/callback"}} :builds {:app {:target :browser :output-dir "resources/front/public/assets/js" :asset-path "/assets/js" diff --git a/src/front/app/auth/effects.cljs b/src/front/app/auth/effects.cljs index 6d9376eb..7a3568f9 100644 --- a/src/front/app/auth/effects.cljs +++ b/src/front/app/auth/effects.cljs @@ -5,24 +5,27 @@ [promesa.core :as p] [refx.alpha :refer [dispatch reg-fx]])) -(defn send-email [{:keys [body on-success on-failure]}] +(defn send-email [{:keys [body provider on-success on-failure]}] (.log js/console :sending-email) - (-> (supabase/signin-with-email supabase/client (:email body)) - (p/then (fn [resp] - (let [obj (utils/js->cljs-key resp)] - (if (:error obj) - (do - (js/console.error :resp-failure obj) - (dispatch (conj on-failure {:body obj}))) - (do - (js/console.log :resp-success obj) - (dispatch (conj on-success {:body (assoc - (utils/js->cljs-key resp) - :ok true)}))))))) + (-> + (supabase/signin-with-email supabase/client (:email body)) + + (p/then (fn [resp] + (let [obj (utils/js->cljs-key resp)] + (if (:error obj) + (do + (js/console.error :resp-failure obj) + (dispatch (conj on-failure {:body obj}))) + (when (:email body) + (do + (js/console.log :resp-success obj) + (dispatch (conj on-success {:body (assoc + (utils/js->cljs-key resp) + :ok true)})))))))) - (p/catch (fn [resp] - (js/console.log :resp resp) - (dispatch (conj on-failure {:body (utils/js->cljs-key resp)})))))) + (p/catch (fn [resp] + (js/console.log :resp resp) + (dispatch (conj on-failure {:body (utils/js->cljs-key resp)})))))) (defn send-oauth [{:keys [provider on-failure]}] (.log js/console :sending-oauth) diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index 6d4a63fd..9399819d 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -63,19 +63,22 @@ :on-submit (fn [e] (.preventDefault e) - (when (:email state) - (refx/dispatch [:app.auth/send-email state])))} + (if (and + (not (= (:email state) "")) + (= (:provider state) "")) + (refx/dispatch [:app.auth/send-email state]) + (refx/dispatch [:app.auth/send-oauth state])))} (d/div ($ input {:for "email" :label "your email" :placeholder "name@company.com" - :on-change #(set-state assoc :email (.. % -target -value))}) + :on-change #(set-state assoc :email (.. % -target -value) :provider "")}) (d/div {:class "w-8 lg:w-full h-8 lg:h-6 flex flex-row justify-center items-center mt-4 lg:mt-2 lg:justify-start lg:items-start "} (d/span {:class "hidden text-gray-300 lg:flex justify-start items-start m-0 lg:mr-2 lg:ml-1"} "or") ($ button {:roundness :full :class "flex justify-center flex-col items-center w-8 h-8 lg:w-6 lg:h-6" - :on-click #(refx/dispatch [:app.auth/send-oauth "github" (:on-failure state)])} + :on-click #(set-state assoc :provider "github" :email "")} (d/div {:class "flex text-gray-400 "} ($ svg/github))))) From 9d47f4e6e0f8d90498ed4ead3e79254b2c438af0 Mon Sep 17 00:00:00 2001 From: Felipe-gsilva Date: Sat, 11 Jan 2025 09:59:28 -0300 Subject: [PATCH 22/22] fix: wrong default behavior for oauth --- shadow-cljs.edn | 2 +- src/front/app/auth/effects.cljs | 34 ++++++++++++++++----------------- src/front/app/auth/views.cljs | 6 ++---- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/shadow-cljs.edn b/shadow-cljs.edn index f4ba2f25..a2263a15 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -5,7 +5,7 @@ {front.app.auth.supabase/SUPABASE_URL "https://tgvdfxurgsddxouxmugs.supabase.co" front.app.auth.supabase/SUPABASE_TOKEN "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InRndmRmeHVyZ3NkZHhvdXhtdWdzIiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODE1MDM0NDMsImV4cCI6MTk5NzA3OTQ0M30.7pq4MM_ZldiWvOk_cnQuxlvUF8eFcxlPDB7jMTNMYb0" front.app.core/SENTRY_DNS "https://27ee051c754588f05b85c61327b675e9@o4506376447131648.ingest.us.sentry.io/4507012897374208" - front.app.core/SUPABASE_OAUTH_REDIRECT "https://auth.moclojer.com/auth/v1/callback"}} + front.app.auth.supabase/SUPABASE_OAUTH_REDIRECT "https://auth.moclojer.com/auth/v1/callback"}} :builds {:app {:target :browser :output-dir "resources/front/public/assets/js" :asset-path "/assets/js" diff --git a/src/front/app/auth/effects.cljs b/src/front/app/auth/effects.cljs index 7a3568f9..b8e8a509 100644 --- a/src/front/app/auth/effects.cljs +++ b/src/front/app/auth/effects.cljs @@ -7,25 +7,23 @@ (defn send-email [{:keys [body provider on-success on-failure]}] (.log js/console :sending-email) - (-> - (supabase/signin-with-email supabase/client (:email body)) - - (p/then (fn [resp] - (let [obj (utils/js->cljs-key resp)] - (if (:error obj) - (do - (js/console.error :resp-failure obj) - (dispatch (conj on-failure {:body obj}))) - (when (:email body) - (do - (js/console.log :resp-success obj) - (dispatch (conj on-success {:body (assoc - (utils/js->cljs-key resp) - :ok true)})))))))) + (-> (supabase/signin-with-email supabase/client (:email body)) + (p/then (fn [resp] + (let [obj (utils/js->cljs-key resp)] + (if (:error obj) + (do + (js/console.error :resp-failure obj) + (dispatch (conj on-failure {:body obj}))) + (when (:email body) + (do + (js/console.log :resp-success obj) + (dispatch (conj on-success {:body (assoc + (utils/js->cljs-key resp) + :ok true)})))))))) - (p/catch (fn [resp] - (js/console.log :resp resp) - (dispatch (conj on-failure {:body (utils/js->cljs-key resp)})))))) + (p/catch (fn [resp] + (js/console.log :resp resp) + (dispatch (conj on-failure {:body (utils/js->cljs-key resp)})))))) (defn send-oauth [{:keys [provider on-failure]}] (.log js/console :sending-oauth) diff --git a/src/front/app/auth/views.cljs b/src/front/app/auth/views.cljs index 9399819d..e664b51e 100644 --- a/src/front/app/auth/views.cljs +++ b/src/front/app/auth/views.cljs @@ -16,8 +16,6 @@ [refx.alpha :as refx] [reitit.frontend.easy :as rfe])) -(defn inspect [a] (.log js/console a) a) - (defnc not-found-view [] (d/div "404")) @@ -60,7 +58,6 @@ "sign in to moclojer") (d/form {:disabled loading? :class "mt-8 space-y-8 " - :on-submit (fn [e] (.preventDefault e) (if (and @@ -78,7 +75,8 @@ (d/span {:class "hidden text-gray-300 lg:flex justify-start items-start m-0 lg:mr-2 lg:ml-1"} "or") ($ button {:roundness :full :class "flex justify-center flex-col items-center w-8 h-8 lg:w-6 lg:h-6" - :on-click #(set-state assoc :provider "github" :email "")} + :on-click #((.preventDefault %) + (set-state assoc :provider "github" :email ""))} (d/div {:class "flex text-gray-400 "} ($ svg/github)))))