From 5a82ac29b4095e29354f565605721d21c2f98087 Mon Sep 17 00:00:00 2001 From: Pascal Date: Tue, 12 Sep 2023 12:01:45 +0000 Subject: [PATCH] 1.0 --- .devcontainer/devcontainer.json | 18 + .gitignore | 2 + assets/html/popup.html | 16 + assets/icons/128.png | Bin 0 -> 9074 bytes assets/icons/16.png | Bin 0 -> 4957 bytes assets/icons/32.png | Bin 0 -> 5794 bytes assets/icons/48.png | Bin 0 -> 6429 bytes manifest.json | 32 + package-lock.json | 1475 +++++++++++++++++++++++++++++++ package.json | 21 + readme.md | 62 ++ src/content_script.ts | 39 + src/popup.ts | 22 + tsconfig.json | 13 + webpack/webpack.config.js | 24 + 15 files changed, 1724 insertions(+) create mode 100644 .devcontainer/devcontainer.json create mode 100644 .gitignore create mode 100644 assets/html/popup.html create mode 100644 assets/icons/128.png create mode 100644 assets/icons/16.png create mode 100644 assets/icons/32.png create mode 100644 assets/icons/48.png create mode 100644 manifest.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 readme.md create mode 100644 src/content_script.ts create mode 100644 src/popup.ts create mode 100644 tsconfig.json create mode 100644 webpack/webpack.config.js diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..d1e5bc7 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,18 @@ +{ + "image": "mcr.microsoft.com/devcontainers/typescript-node:20", + "features": { + "ghcr.io/devcontainers/features/common-utils:2": { + "configureZshAsDefaultShell": true, + "installOhMyZsh": true, + "upgradePackages": true + } + }, + "customizations": { + "vscode" : { + "extensions" : [ + "github.copilot", + "hamza-aziane.obsidian-dark" + ] + } + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..76add87 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +dist \ No newline at end of file diff --git a/assets/html/popup.html b/assets/html/popup.html new file mode 100644 index 0000000..79dc882 --- /dev/null +++ b/assets/html/popup.html @@ -0,0 +1,16 @@ + + + + Popup + + + + +
+

Tinkercad circuits SVG Extractor

+
+
+
+
+ + \ No newline at end of file diff --git a/assets/icons/128.png b/assets/icons/128.png new file mode 100644 index 0000000000000000000000000000000000000000..3e15fa6ffafb1f72484c8adcbffe1c0f1dd44817 GIT binary patch literal 9074 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 TnRdXpWgw)skyg$bhv5GL;Vdrv literal 0 HcmV?d00001 diff --git a/assets/icons/16.png b/assets/icons/16.png new file mode 100644 index 0000000000000000000000000000000000000000..2cb02cacdd703ef5eb0278c4d4f08d14901b120f GIT binary patch literal 4957 zcmeHKX;c$g7EVBAx7EgFTp$KFkR+9)vX!7L2@o`ZfC6eOl~g5^WFrX>a6?)VP|;Cw z6mg*yaCEer)}sj6fFmmItt0KIFf^jzipw}E-N?KO`%IrR$8)Ctk(`%z>%H%O@4oNd zccHSvLIR!a$JQV)tPcmPQ15DJyVfJW_S zTT!hk)?h3Hv{Aq&F=QK09ct+}0eeEXy#v@Yx-nM3W>c*wPN2^RjRS0F&>sPf*wD4s z55Oirww7-Yut?^fK2RzPqj8vQh{=V4Kg8i8kO*OOXlypZh7kw`XzGE!h)AX%F;xO! zSx5N$he`eYX?lZBNvLrO#hkzDkF$dQ8s?nQSroh~a^iDZ)7AncX2j@(zj-(p_#Ga- zC=ojI#32u!;?B%TkFT!2D8Ex(6BA_<-iB`rMqg6XBR}74*rQl@m20*PnSwRT=>cR&in^8W>#m}oP(j)VjOKV z&!4yoX_}mxp2+SuR)kJOB{5THPj}%GK23qgXS!4-FiSmO?HkG6n>RgY#K!gfh4*%i zmTfj?3y&;E-i_tB9L+y1jDO@2f4z3uxa&`5URhE+F~DkLbo!8y_D5zEI8I(_kjd zgcuStk;I|Twx@X+FeMT$4(O%;Pu}!6lSz-TSjoxB%w#T8XHc=&B9Vv%aabG<10Wd2 z6s-w0GqgrGlA?=4j2jgOLT@5;S{liT%5{k*Z#o^!(|Y35=w-5Adabcr1)vAZjOtlz zCdATcSp7YWCP@+?=?>^OJ&chldYl!G8+C~W1ujX#wI;Xz6qusdU!Q1DTegEKShyP3 z0H_hH${w&JdEq+)M6xjusF6at5DJ)c&0twI=G$=SuLW8PsmR_r} zOpt;jzF|^tI)@4MjfAODlM*<1)8`S|M04LnB%#40Oem=)n=gWSYzTs30iVa^!F`~G zxWNcAk>s@0PRk5=EC|>P5Edo#6cAX(!Cnx51CE+>hDe=G?M?5ky1mmfaGfyJgo;rU z4oG|JaAZ#%o(XXfs4IMuPNu^MWy=3Tlb46)1@Pd=g9sy7KgBZCb)zEigs!KqM>S!& zN;I0~QXr_JYYRp+3CApP0F(ZYnXg)pqSE0 zeh-{2-VR3W^g%I33dP||vQa5{`QyN#jY%q#*tFO=+6^BvMx8U4La}O>ihU!6R~BrO z#Vx^|Gxoo&Z)>=|xAs?TUfy!WJkKJ@$*fbEQ^!61LSoNfJkqyN?pAiw6cM?kd~5og zjp=2#Hfys>zkB*kq}q*sk1vlO6=aPH?Ss*o?f~{+`y*JnTZ+>rZ<| z27NihX);=(qNd8X`Rq(@Xikm^Enn+*%eV8x&{NG+Nz=uPZs%#aFXB3qeHJHu)9F_7 z7+3H2b(|tAc4;d|jk{tG_|#b~UTe1g<+;O(kmwRD4{ct^xz^P2b<1Px+ppJeOKUnz zqzNho69YbQTN$e->F+*TvijxbNul50T~ZkLw&FyRN7;?gj{9%8--f7HT|Q52G(HRb z>gxF2m5+kfyo=lK>Ntv5SzO=l7_rr-DC7O*f|9^yKShi@aoE;yX!)tpZQHbUqb@np z{9@a)%WK{r4fhPSi)NpVbG~8Tp{D-anHj|D*pm*+YqtfotvfZX{b9R=S+{f7bJvzD z7t*ay{$W|dggtYooy5h4;ga0D8vdHP>&qOP&#mzBeoj$S^3ogo@^!m`NpKq5R-s%6ttjg>0s=E18Z8!b%?5CTV(QXwf zsS6@REOun;p`3u}k8T%^Pg4C|wesX;?!`5Yh8?#)6=%(wOTF(Q8iFSCE{6V8 zZX3J#)yMG7Ez>e=H^tU1a-To*@!hL?D^9kI@uP;uc1EvHb&l9rHgC&<@7}aUHCDy# zjz6|eT>a@@LdBcvp)U0clnDoA58}O4Q4{hjRyqwmHP+L9O2|ifNe1tn;l$jg9hKDO Wa)HbEYNirg42o0|B0laHoBnT~Pz}8R literal 0 HcmV?d00001 diff --git a/assets/icons/32.png b/assets/icons/32.png new file mode 100644 index 0000000000000000000000000000000000000000..94ea3fe273bfd840970c448d7426a2ce5af2aaea GIT binary patch literal 5794 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 literal 0 HcmV?d00001 diff --git a/assets/icons/48.png b/assets/icons/48.png new file mode 100644 index 0000000000000000000000000000000000000000..8872f58995b8af8cb33cef94fb07f60563e17672 GIT binary patch literal 6429 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 W?%u@Q{2KaU1EbixkxOm2?)o1d66@gr literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..5c2f2de --- /dev/null +++ b/manifest.json @@ -0,0 +1,32 @@ +{ + "name" : "Tinkercad Circuits SVG Extractor", + "version" : "1.0", + "description" : "A tool to extract Tinkercad Circuits as SVGs", + "manifest_version" : 3, + "author" : "Pascal Flores", + "permissions": [ + "webRequest", + "downloads", + "storage" + ], + "host_permissions" : [ + "" + ], + "content_scripts": [ + { + "matches": ["*://*/*"], + "js": ["dist/content_script.js"] + } + ], + "icons" : { + "16": "assets/icons/16.png", + "32": "assets/icons/32.png", + "48": "assets/icons/48.png", + "128": "assets/icons/128.png" + }, + "action": { + "default_popup": "assets/html/popup.html", + "default_title": "Tinkercad Circuits SVG Extractor" + } + +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..142fb9c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1475 @@ +{ + "name": "tinkercad-svg-extractor", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "tinkercad-svg-extractor", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@types/chrome": "^0.0.245", + "@types/node": "^20.6.0", + "ts-loader": "^9.4.4", + "typescript": "^5.2.2", + "webpack": "^5.88.2" + }, + "devDependencies": { + "webpack-cli": "^5.1.4" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "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==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@types/chrome": { + "version": "0.0.245", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.245.tgz", + "integrity": "sha512-bBdONkLO8wMbJK6iG0Q8ShFuh67Grnod+5OpClJaa8MuKJXP/Kjl3f8wRYeMOnQ0Q8HDgpUlopu8bvl9siR8/A==", + "dependencies": { + "@types/filesystem": "*", + "@types/har-format": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.44.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", + "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "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==", + "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==" + }, + "node_modules/@types/filesystem": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.32.tgz", + "integrity": "sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ==", + "dependencies": { + "@types/filewriter": "*" + } + }, + "node_modules/@types/filewriter": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.29.tgz", + "integrity": "sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ==" + }, + "node_modules/@types/har-format": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.12.tgz", + "integrity": "sha512-P20p/YBrqUBmzD6KhIQ8EiY4/RRzlekL4eCvfQnulFPfjmiGxKIoyCeI7qam5I7oKH3P8EU4ptEi0EfyGoLysw==" + }, + "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==" + }, + "node_modules/@types/node": { + "version": "20.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.0.tgz", + "integrity": "sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==" + }, + "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==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@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==" + }, + "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==" + }, + "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==" + }, + "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==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@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==" + }, + "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==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + }, + "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==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@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" + } + }, + "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==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "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==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "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==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "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==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "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==" + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "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==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001533", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001533.tgz", + "integrity": "sha512-9aY/b05NKU4Yl2sbcJhn4A7MsGwR1EPfW/nrqsnqVA0Oq50wpmPaGI+R1Z0UKlUl96oxUkGEOILWtOHck0eCWw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=6.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.515", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.515.tgz", + "integrity": "sha512-VTq6vjk3kCfG2qdzQRd/i9dIyVVm0dbtZIgFzrLgfB73mXDQT2HPKVRc1EoZcAVUv9XhXAu08DWqJuababdGGg==" + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "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==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=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==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/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==" + }, + "node_modules/graceful-fs": { + "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==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "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/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.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==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "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==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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==" + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "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==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.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==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "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==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/schema-utils": { + "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==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=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==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "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==", + "dev": true, + "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", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.19.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz", + "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-loader": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz", + "integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "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==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.88.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "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", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "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", + "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.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "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==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..18aea7d --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "tinkercad-svg-extractor", + "version": "1.0.0", + "description": "Feur is a chrome extension that allows you to easily extract images for certain websites, and save them locally.", + "main": "index.js", + "scripts": { + "build": "webpack --config webpack/webpack.config.js" + }, + "author": "", + "license": "ISC", + "dependencies": { + "@types/chrome": "^0.0.245", + "@types/node": "^20.6.0", + "ts-loader": "^9.4.4", + "typescript": "^5.2.2", + "webpack": "^5.88.2" + }, + "devDependencies": { + "webpack-cli": "^5.1.4" + } +} diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..c19a598 --- /dev/null +++ b/readme.md @@ -0,0 +1,62 @@ +# Feur + +Feur is a chrome extension that allows you to easily extract images for certain websites, and save them locally. + +## Installation + +### From sources + +Needed tools : [Node.js](https://nodejs.org/en/), [npm](https://www.npmjs.com/), [git](https://git-scm.com/) + +1. Clone the repository + +```bash +git clone https://github.com/Pascal-Flores/feur.git +``` + +2. Install dependencies (in the extension folder) + +```bash +npm install +``` + +3. Build the extension (in the extension folder) + +```bash +npm run build +``` + +4. Load the extension in chrome + +- Go to chrome://extensions/ +- Enable developer mode +- Click on "Load unpacked" +- Select the entire extension folder +- Et voilĂ  ! + +### Usage + +1. Go to a website that you want to extract images from +2. Click on the extension icon +3. If the website is compatible and the page has content that can be extracted, a download button will appear +4. Click on the download button to download the images + + +## Supported websites + +- [x] [SushiScan](https://sushiscan.net/) -> work for a single volume / chapter page or for all the volumes at once (the download button will appear on the main page (https://sushiscan.net/catalogue/manga_name/)) + +## Contributing + +Adding support for more website would be cool, so please feel free to open issues / PR if you want to add support for a website. + +## TODO + +- [ ] Better UI -> popup +- [ ] Better interaction with the user (error messages, etc.) -> popup +- [ ] Find a way to download all volumes in a single zip file + +## What does "Feur" mean ? + +Feur is a french "word" (it is not technically a word) that is supposed to be said after someone says "Quoi ?" (which means "What ?" in french). It is used for humoristic (or not) purposes, because the juxtaposition of the two words makes "coiffeur" (which means "hairdresser" in french). Other examples of this kind of puns are "Qui ? Quette" or "Comment ? Dant de bord". +I chose this name because I love to say "Feur" to everybody because it's very annoying :) \ No newline at end of file diff --git a/src/content_script.ts b/src/content_script.ts new file mode 100644 index 0000000..84bd7db --- /dev/null +++ b/src/content_script.ts @@ -0,0 +1,39 @@ +function downloadSVG() { + const SVGName = document.querySelector("nav > div:first-child > div:nth-child(2) > a > span")!.textContent; + const SVGCopy = document.querySelector(".hasSVG > svg")!.cloneNode(true) as SVGSVGElement; + const SVG = document.querySelector(".hasSVG > svg")!; + + SVG.parentElement!.appendChild(SVGCopy); + cropSVG(SVGCopy); + + const svgData = new XMLSerializer().serializeToString(SVGCopy); + const blob = new Blob([svgData], {type: "image/svg+xml;charset=utf-8"}); + const url = URL.createObjectURL(blob); + const link = document.createElement("a"); + link.href = url; + link.download = `${SVGName}.svg`; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + SVG.parentElement!.removeChild(SVGCopy); +} + +function cropSVG(svgEl : SVGSVGElement) { + const bbox = svgEl.getBBox(); + svgEl.setAttribute("viewBox", `${bbox.x} ${bbox.y} ${bbox.width} ${bbox.height}`); + return svgEl; +} + +chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { + switch (message.type) { + case 'can_download': + if (document.querySelector("#CIRCUITS_VIEW_ID") !== null) + sendResponse(true); + else + sendResponse(false); + break; + case 'download': + downloadSVG(); + break; + } +}); \ No newline at end of file diff --git a/src/popup.ts b/src/popup.ts new file mode 100644 index 0000000..d52fb95 --- /dev/null +++ b/src/popup.ts @@ -0,0 +1,22 @@ +document.addEventListener('DOMContentLoaded', async () => { + try { + const activeTab = await chrome.tabs.query({active: true, currentWindow: true}); + const message = await chrome.tabs.sendMessage(activeTab[0].id!, {type: 'can_download'}); + if (message === false) + document.querySelector('#download')!.innerHTML = 'Current page is unsupported'; + else { + document.querySelector('#download')!.innerHTML = ''; + document.querySelector('#download > button')!.addEventListener('click', download); + } + } + catch (e) { + console.log(e); + document.querySelector('#download')!.innerHTML = 'Current page is unsupported'; + return; + } +}); + +async function download() { + const activeTab = await chrome.tabs.query({active: true, currentWindow: true}); + await chrome.tabs.sendMessage(activeTab[0].id!, {type: 'download'}); +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..3430728 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "strict": true, + "module": "commonjs", + "target": "es6", + "esModuleInterop": true, + "sourceMap": true, + "rootDir": "src", + "outDir": "dist/", + "noEmitOnError": true, + "typeRoots": [ "node_modules/@types" ] + } + } \ No newline at end of file diff --git a/webpack/webpack.config.js b/webpack/webpack.config.js new file mode 100644 index 0000000..58c2796 --- /dev/null +++ b/webpack/webpack.config.js @@ -0,0 +1,24 @@ +const path = require('path'); +module.exports = { + mode: "production", + entry: { + content_script: path.resolve(__dirname, "..", "src", "content_script.ts"), + popup: path.resolve(__dirname, "..", "src", "popup.ts"), + }, + output: { + path: path.join(__dirname, "../dist"), + filename: "[name].js", + }, + resolve: { + extensions: [".ts", ".js"], + }, + module: { + rules: [ + { + test: /\.tsx?$/, + loader: "ts-loader", + exclude: /node_modules/, + }, + ], + }, +}; \ No newline at end of file