From 98cf4a476dd2b196e02ae9fcdd4702c68af9a3a8 Mon Sep 17 00:00:00 2001 From: realaravinth Date: Sat, 29 May 2021 21:19:45 +0530 Subject: [PATCH] widget: verification works --- jest.config.ts | 2 +- package.json | 1 + src/pages/panel/sitekey/view.rs | 6 +- src/tests/mod.rs | 14 +++ src/widget/mod.rs | 82 ++++++++++++++---- .../widget/1476099975f2b060264c.module.wasm | Bin 0 -> 67071 bytes static/widget/bundle.js | 1 + templates/panel/sitekey/view/index.html | 11 ++- templates/widget/footer.html | 2 + templates/widget/index.ts | 46 ++++++++-- templates/widget/main.scss | 2 +- webpack.config.js | 21 ++++- yarn.lock | 39 ++++++++- 13 files changed, 188 insertions(+), 39 deletions(-) create mode 100644 static/widget/1476099975f2b060264c.module.wasm create mode 100644 static/widget/bundle.js diff --git a/jest.config.ts b/jest.config.ts index f2efca96..95eed4fe 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -159,7 +159,7 @@ export default { // testRunner: "jasmine2", // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href - testURL: 'http://localhost:7000', + testURL: 'http://localhost:7000/?sitekey=imbatman', // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" // timers: "real", diff --git a/package.json b/package.json index 9bbe1106..66537142 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "@types/jsdom": "^16.2.10", "@types/node": "^15.0.2", "@types/sinon": "^10.0.0", + "@wasm-tool/wasm-pack-plugin": "^1.4.0", "css-loader": "^5.2.4", "css-minimizer-webpack-plugin": "^2.0.0", "dart-sass": "^1.25.0", diff --git a/src/pages/panel/sitekey/view.rs b/src/pages/panel/sitekey/view.rs index 54844859..4d629bfd 100644 --- a/src/pages/panel/sitekey/view.rs +++ b/src/pages/panel/sitekey/view.rs @@ -43,15 +43,17 @@ struct Level { struct IndexPage { duration: u32, name: String, + key: String, levels: Vec, } impl IndexPage { - fn new(config: McaptchaConfig, levels: Vec) -> Self { + fn new(config: McaptchaConfig, levels: Vec, key: String) -> Self { IndexPage { duration: config.duration as u32, name: config.name, levels, + key, } } } @@ -91,7 +93,7 @@ pub async fn view_sitekey( let (stats, levels) = try_join!(Stats::new(&key, &data.db), levels_fut)?; - let body = IndexPage::new(config, levels).render_once().unwrap(); + let body = IndexPage::new(config, levels, key).render_once().unwrap(); Ok(HttpResponse::Ok() .content_type("text/html; charset=utf-8") .body(body)) diff --git a/src/tests/mod.rs b/src/tests/mod.rs index 7b0aea0d..a7b83830 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -46,6 +46,20 @@ macro_rules! post_request { }; } +#[macro_export] +macro_rules! get_works { + ($app:expr,$route:expr ) => { + let list_sitekey_resp = test::call_service( + &mut $app, + test::TestRequest::get() + .uri($route) + .to_request(), + ) + .await; + assert_eq!(list_sitekey_resp.status(), StatusCode::OK); + }; +} + #[macro_export] macro_rules! get_app { () => { diff --git a/src/widget/mod.rs b/src/widget/mod.rs index 3a3cdf98..64feda74 100644 --- a/src/widget/mod.rs +++ b/src/widget/mod.rs @@ -14,27 +14,41 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ +use std::borrow::Cow; + +use actix_web::body::Body; +use actix_web::{get, http::header, web, HttpResponse, Responder}; +use mime_guess::from_path; +use rust_embed::RustEmbed; +use lazy_static::lazy_static; +use sailfish::TemplateOnce; + +use crate::errors::*; + + + pub const WIDGET_ROUTES: routes::Widget = routes::Widget::new(); pub mod routes { pub struct Widget { pub verification_widget: &'static str, + pub js: &'static str, + pub wasm: &'static str, } impl Widget { pub const fn new() -> Self { - Widget { verification_widget: "/widget" } + Widget { + verification_widget: "/widget", + js: "/widget/bundle.js", + wasm: "/widget/1476099975f2b060264c.module.wasm", + } } } } -use actix_web::{web, HttpResponse, Responder}; -use lazy_static::lazy_static; -use sailfish::TemplateOnce; - -use crate::errors::*; #[derive(TemplateOnce, Clone)] #[template(path = "widget/index.html")] @@ -60,14 +74,42 @@ async fn show_widget() -> PageResult { .body(&*INDEX_PAGE)) } +#[derive(RustEmbed)] +#[folder = "static/widget/"] +struct WidgetAssets; -pub fn services(cfg: &mut web::ServiceConfig) { - cfg.service(show_widget); +fn handle_widget_assets(path: &str) -> HttpResponse { + match WidgetAssets::get(path) { + Some(content) => { + let body: Body = match content { + Cow::Borrowed(bytes) => bytes.into(), + Cow::Owned(bytes) => bytes.into(), + }; + + HttpResponse::Ok() + .set(header::CacheControl(vec![header::CacheDirective::MaxAge( + crate::CACHE_AGE, + )])) + .content_type(from_path(path).first_or_octet_stream().as_ref()) + .body(body) + } + None => HttpResponse::NotFound().body("404 Not Found"), + } } +#[get("/widget/{_:.*}")] +pub async fn widget_assets(path: web::Path) -> impl Responder { + handle_widget_assets(&path.0) +} + +pub fn services(cfg: &mut web::ServiceConfig) { + cfg.service(show_widget); + cfg.service(widget_assets); +} + #[cfg(test)] mod test { use actix_web::http::StatusCode; @@ -77,18 +119,20 @@ mod test { #[actix_rt::test] async fn captcha_widget_route_works() { + let mut app = get_app!().await; +// let list_sitekey_resp = test::call_service( +// &mut app, +// test::TestRequest::get() +// .uri(crate::WIDGET_ROUTES.verification_widget) +// .to_request(), +// ) +// .await; +// assert_eq!(list_sitekey_resp.status(), StatusCode::OK); - - let list_sitekey_resp = test::call_service( - &mut app, - test::TestRequest::get() - .uri(crate::WIDGET_ROUTES.verification_widget) - .to_request(), - ) - .await; - - assert_eq!(list_sitekey_resp.status(), StatusCode::OK); - + get_works!(app, crate::WIDGET_ROUTES.verification_widget); + get_works!(app, crate::WIDGET_ROUTES.js); + get_works!(app, crate::WIDGET_ROUTES.wasm); + } } diff --git a/static/widget/1476099975f2b060264c.module.wasm b/static/widget/1476099975f2b060264c.module.wasm new file mode 100644 index 0000000000000000000000000000000000000000..016d531f022df2a5ea8d4ef47c43a96c94af2afc GIT binary patch literal 67071 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

#&xCv@Rqdr9Ruvnw*vT>YJ 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 O(lCQ2PP`)X`~M%Z4Z5`e literal 0 HcmV?d00001 diff --git a/static/widget/bundle.js b/static/widget/bundle.js new file mode 100644 index 00000000..4852999f --- /dev/null +++ b/static/widget/bundle.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,n,t,r,o,i={180:(e,n,t)=>{t.d(n,{Nj:()=>r,Z6:()=>o,yY:()=>i,yM:()=>a});var r=function(){var e;return function(){if(null==e&&null==(e=new URL(window.location.href).searchParams.get("sitekey")))throw console.error(window.location.href),new Error("Define sitekey in query parameter)");return e}()},o={getConfig:"/api/v1/pow/config",verififyPoW:"/api/v1/pow/verify"},i=function(){var e;return function(){if(null==e&&null==(e=document.getElementById("widget__verification-checkbox")))throw new Error("mCaptcha button not found)");return e}()},a=function(){var e,n,t,r;return{before:function(){if(null==e&&null==(e=document.querySelector(".widget__verification-text--before")))throw new Error("before element not found)");return e},after:function(){if(null==n&&null==(n=document.querySelector(".widget__verification-text--after")))throw new Error("after element not found)");return n},during:function(){if(null==t&&null==(t=document.querySelector(".widget__verification-text--during")))throw new Error("before during not found)");return t},error:function(){if(null==r&&null==(r=document.querySelector(".widget__verification-text--error")))throw new Error("before error not found)");return r}}}},731:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(525),o=t(180);const i=function(){return e=void 0,n=void 0,i=function(){var e,n,t;return function(e,n){var t,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(t)throw new TypeError("Generator is already executing.");for(;a;)try{if(t=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]{t.a(e,(async e=>{var n=t(720),r=t(731),o=t(792),i=t(243),a=t(180),c=e([n]);n=(c.then?await c:c)[0];var u=function(e){return t=void 0,c=void 0,l=function(){var t,c,u;return function(e,n){var t,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(t)throw new TypeError("Generator is already executing.");for(;a;)try{if(t=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]{t.a(e,(async e=>{t.d(n,{Z:()=>a});var r=t(838),o=t(180),i=e([r]);r=(i.then?await i:i)[0];const a=function(e){return n=void 0,t=void 0,a=function(){var n,t;return function(e,n){var t,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(t)throw new TypeError("Generator is already executing.");for(;a;)try{if(t=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]{t.d(n,{Z:()=>r});const r=function(e){window.parent.postMessage(e,"*")}},792:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(525),o=t(180);const i=function(e){return n=void 0,t=void 0,a=function(){var n,t,i;return function(e,n){var t,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(t)throw new TypeError("Generator is already executing.");for(;a;)try{if(t=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]{t.d(n,{Z:()=>r});const r=function(e){return{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}}},838:(e,n,t)=>{t.a(e,(async r=>{t.d(n,{I:()=>h});var o=t(716);e=t.hmd(e);var i=r([o]);o=(i.then?await i:i)[0];let a=0,c=null;function u(){return null!==c&&c.buffer===o.memory.buffer||(c=new Uint8Array(o.memory.buffer)),c}let l=new("undefined"==typeof TextEncoder?(0,e.require)("util").TextEncoder:TextEncoder)("utf-8");const f="function"==typeof l.encodeInto?function(e,n){return l.encodeInto(e,n)}:function(e,n){const t=l.encode(e);return n.set(t),{read:e.length,written:t.length}};function s(e,n,t){if(void 0===t){const t=l.encode(e),r=n(t.length);return u().subarray(r,r+t.length).set(t),a=t.length,r}let r=e.length,o=n(r);const i=u();let c=0;for(;c127)break;i[o+c]=n}if(c!==r){0!==c&&(e=e.slice(c)),o=t(o,r,r=c+3*e.length);const n=u().subarray(o+c,o+r);c+=f(e,n).written}return a=c,o}let d=null;function p(){return null!==d&&d.buffer===o.memory.buffer||(d=new Int32Array(o.memory.buffer)),d}let y=new("undefined"==typeof TextDecoder?(0,e.require)("util").TextDecoder:TextDecoder)("utf-8",{ignoreBOM:!0,fatal:!0});function h(e,n,t){try{const w=o.__wbindgen_add_to_stack_pointer(-16);var r=s(e,o.__wbindgen_malloc,o.__wbindgen_realloc),i=a,c=s(n,o.__wbindgen_malloc,o.__wbindgen_realloc),l=a;o.gen_pow(w,r,i,c,l,t);var f=p()[w/4+0],d=p()[w/4+1];return h=f,b=d,y.decode(u().subarray(h,h+b))}finally{o.__wbindgen_add_to_stack_pointer(16),o.__wbindgen_free(f,d)}var h,b}y.decode()}))},716:(e,n,t)=>{e.exports=t.v(n,e.id,"1476099975f2b060264c")}},a={};function c(e){var n=a[e];if(void 0!==n)return n.exports;var t=a[e]={id:e,loaded:!1,exports:{}};return i[e](t,t.exports,c),t.loaded=!0,t.exports}e="function"==typeof Symbol?Symbol("webpack then"):"__webpack_then__",n="function"==typeof Symbol?Symbol("webpack exports"):"__webpack_exports__",t=e=>{e&&(e.forEach((e=>e.r--)),e.forEach((e=>e.r--?e.r++:e())))},r=e=>!--e.r&&e(),o=(e,n)=>e?e.push(n):r(n),c.a=(i,a,c)=>{var u,l,f,s=c&&[],d=i.exports,p=!0,y=!1,h=(n,t,r)=>{y||(y=!0,t.r+=n.length,n.map(((n,o)=>n[e](t,r))),y=!1)},b=new Promise(((e,n)=>{f=n,l=()=>(e(d),t(s),s=0)}));b[n]=d,b[e]=(e,n)=>{if(p)return r(e);u&&h(u,e,n),o(s,e),b.catch(n)},i.exports=b,a((i=>{if(!i)return l();var a,c;u=(i=>i.map((i=>{if(null!==i&&"object"==typeof i){if(i[e])return i;if(i.then){var a=[];i.then((e=>{c[n]=e,t(a),a=0}));var c={[e]:(e,n)=>(o(a,e),i.catch(n))};return c}}return{[e]:e=>r(e),[n]:i}})))(i);var f=new Promise(((e,t)=>{(a=()=>e(c=u.map((e=>e[n])))).r=0,h(u,a,t)}));return a.r?f:c})).then(l,f),p=!1},c.d=(e,n)=>{for(var t in n)c.o(n,t)&&!c.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},c.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),c.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),c.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),(()=>{var e;c.g.importScripts&&(e=c.g.location+"");var n=c.g.document;if(!e&&n&&(n.currentScript&&(e=n.currentScript.src),!e)){var t=n.getElementsByTagName("script");t.length&&(e=t[t.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),c.p=e})(),c.v=(e,n,t,r)=>{var o=fetch(c.p+""+t+".module.wasm");return"function"==typeof WebAssembly.instantiateStreaming?WebAssembly.instantiateStreaming(o,r).then((n=>Object.assign(e,n.instance.exports))):o.then((e=>e.arrayBuffer())).then((e=>WebAssembly.instantiate(e,r))).then((n=>Object.assign(e,n.instance.exports)))},c(404)})(); \ No newline at end of file diff --git a/templates/panel/sitekey/view/index.html b/templates/panel/sitekey/view/index.html index bd5e533b..4af66a65 100644 --- a/templates/panel/sitekey/view/index.html +++ b/templates/panel/sitekey/view/index.html @@ -1,4 +1,5 @@ -<. include!("../../../components/headers/index.html"); .> +<. include!("../../../components/headers/widget-headers.html"); .> + <. include!("../../navbar/index.html"); .>

<. include!("../../header/index.html"); .> @@ -10,7 +11,11 @@

- Sitekey: <.= name .> + Sitekey: <.= name .> + Click here to see CAPTCHA widget in action + +

<. include!("../../../components/footers.html"); .> diff --git a/templates/widget/footer.html b/templates/widget/footer.html index ff0f908f..ca99118b 100644 --- a/templates/widget/footer.html +++ b/templates/widget/footer.html @@ -5,5 +5,7 @@ href="<.= &*crate::VERIFICATIN_WIDGET_CSS .>" /> + + diff --git a/templates/widget/index.ts b/templates/widget/index.ts index 61832223..d74237de 100644 --- a/templates/widget/index.ts +++ b/templates/widget/index.ts @@ -15,11 +15,41 @@ * along with this program. If not, see . */ import './main.scss'; - -const PARENT = window.parent; -const verificationContainer = ( - document.querySelector('.widget__verification-container') -); -verificationContainer.style.display = 'flex'; - -//PARENT.postMessage +//import prove from './runner/prove'; +//import fetchPoWConfig from './runner/fetchPoWConfig'; +//import sendWork from './runner/sendWork'; +//import sendToParent from './runner/sendToParent'; +//import * as CONST from './runner/const'; +// +///** add mcaptcha widget element to DOM */ +//export const register = () => { +// const verificationContainer = ( +// document.querySelector('.widget__verification-container') +// ); +// verificationContainer.style.display = 'flex'; +// +// CONST.btn().addEventListener('click', e => solveCaptchaRunner(e)); +//}; +// +//const solveCaptchaRunner = async (e: Event) => { +// e.preventDefault(); +// // steps: +// +// // 1. hide --before message +// CONST.messageText().before().style.display = 'none'; +// +// // 1. show --during +// CONST.messageText().during().style.display = 'block'; +// // 1. get config +// const config = await fetchPoWConfig(); +// // 2. prove work +// const proof = await prove(config); +// // 3. submit work +// const token = await sendWork(proof); +// // 4. send token +// sendToParent(token); +// // 5. mark checkbox checked +// CONST.btn().checked = true; +//}; +// +//register(); diff --git a/templates/widget/main.scss b/templates/widget/main.scss index 8c131bd7..e3b2bbfc 100644 --- a/templates/widget/main.scss +++ b/templates/widget/main.scss @@ -83,7 +83,7 @@ } .widget__verification-checkbox:checked ~ .widget__verification-text--during { - display: non; + display: none; } .widget__verification-checkbox:checked ~ .widget__verification-text--error { diff --git a/webpack.config.js b/webpack.config.js index 1c393c13..470c0251 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,13 +2,14 @@ const path = require('path'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); +//const WasmPackPlugin = require('@wasm-tool/wasm-pack-plugin'); module.exports = { devtool: 'inline-source-map', mode: 'development', //mode: 'production', entry: { - bundle: './templates/index.ts', + bundle: './templates/index.ts', mobile: './templates/mobile.ts', verificationWidget: './templates/widget/index.ts', }, @@ -36,14 +37,19 @@ module.exports = { }, ], }, - ], }, resolve: { extensions: ['.ts', '.tsx', '.js'], }, - plugins: [new MiniCssExtractPlugin()], + plugins: [ + new MiniCssExtractPlugin(), +// new WasmPackPlugin({ +// crateDirectory: __dirname, +// outName: "pow.wasm", +// }), + ], optimization: { minimizer: [ // For webpack@5 you can use the `...` syntax to extend existing minimizers (i.e. `terser-webpack-plugin`), uncomment the next line @@ -51,4 +57,13 @@ module.exports = { new CssMinimizerPlugin(), ], }, +// experiments: { +// // executeModule: true, +// // outputModule: true, +// //syncWebAssembly: true, +// // topLevelAwait: true, +// asyncWebAssembly: true, +// // layers: true, +// // lazyCompilation: true, +// }, }; diff --git a/yarn.lock b/yarn.lock index d9a9fd47..cba31c6a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -696,6 +696,16 @@ dependencies: "@types/yargs-parser" "*" +"@wasm-tool/wasm-pack-plugin@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@wasm-tool/wasm-pack-plugin/-/wasm-pack-plugin-1.4.0.tgz#752e4a6d8fe35477a3c6cafd2ac6b0351f692848" + integrity sha512-zQh0gA7E73dgwhUM9sXX2rsaXsdWUIdK1kMlEhds3oi6ASn+ePxhb/quZweoeo0SjxuETVb0iu+/nxUZ5HxsUQ== + dependencies: + chalk "^2.4.1" + command-exists "^1.2.7" + watchpack "^1.6.0" + which "^2.0.2" + "@webassemblyjs/ast@1.11.0": version "1.11.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" @@ -1372,7 +1382,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@^2.0.0: +chalk@^2.0.0, chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1394,7 +1404,7 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -"chokidar@>=2.0.0 <4.0.0": +"chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.1: version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== @@ -1550,6 +1560,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +command-exists@^1.2.7: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -4140,7 +4155,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.6.2: +neo-async@^2.5.0, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -6145,6 +6160,24 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.6.0: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + watchpack@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7"