From 573f7d63e143dee1e4ddad814e7ef8761e3d2e09 Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Mon, 3 Oct 2022 01:42:18 +0800 Subject: [PATCH 01/23] refactor layer futures and results --- examples/src/bin/middleware.rs | 4 +- src/internal/jsonrpc_exec.rs | 8 +-- src/internal/middleware.rs | 101 +++++++++++++++++++------------ src/middleware.rs | 106 ++++++++++++++------------------- src/resolver.rs | 14 ++--- src/resolver_result.rs | 29 +++------ src/router.rs | 14 ++--- src/router_builder.rs | 33 ++++++---- 8 files changed, 158 insertions(+), 151 deletions(-) diff --git a/examples/src/bin/middleware.rs b/examples/src/bin/middleware.rs index 55f8c889..493ad80b 100644 --- a/examples/src/bin/middleware.rs +++ b/examples/src/bin/middleware.rs @@ -2,7 +2,7 @@ use std::{path::PathBuf, time::Duration}; use async_stream::stream; use axum::routing::get; -use rspc::{Config, ErrorCode, MiddlewareContext, Router}; +use rspc::{Config, ErrorCode, MiddlewareState, Router}; use tokio::time::sleep; use tower_http::cors::{Any, CorsLayer}; @@ -95,7 +95,7 @@ async fn main() { Err(rspc::Error::new( ErrorCode::Unauthorized, "Unauthorized".into(), - )) as Result, _> + )) as Result, _> }) }) // Plugin middleware // TODO: Coming soon! diff --git a/src/internal/jsonrpc_exec.rs b/src/internal/jsonrpc_exec.rs index 46da99ca..e44a79f4 100644 --- a/src/internal/jsonrpc_exec.rs +++ b/src/internal/jsonrpc_exec.rs @@ -8,7 +8,7 @@ use crate::{internal::jsonrpc, ExecError, Router}; use super::{ jsonrpc::{RequestId, RequestInner, ResponseInner}, - ProcedureKind, RequestContext, ValueOrStream, + LayerReturn, ProcedureKind, RequestContext, }; // TODO: Deduplicate this function with the httpz integration @@ -170,9 +170,9 @@ pub async fn handle_json_rpc( }, ) }) { - Ok(op) => match op.into_value_or_stream().await { - Ok(ValueOrStream::Value(v)) => ResponseInner::Response(v), - Ok(ValueOrStream::Stream(mut stream)) => { + Ok(op) => match op.into_layer_return().await { + Ok(LayerReturn::Request(v)) => ResponseInner::Response(v), + Ok(LayerReturn::Stream(mut stream)) => { if matches!(sender, Sender::Response(_)) || matches!(subscriptions, SubscriptionMap::None) { diff --git a/src/internal/middleware.rs b/src/internal/middleware.rs index 37e27e18..7dd1fd2c 100644 --- a/src/internal/middleware.rs +++ b/src/internal/middleware.rs @@ -1,6 +1,6 @@ -use std::{future::Future, marker::PhantomData, pin::Pin, sync::Arc}; +use std::{marker::PhantomData, sync::Arc}; -use futures::Stream; +use futures::{future::BoxFuture, stream::BoxStream}; use serde_json::Value; use crate::{ExecError, MiddlewareLike}; @@ -98,13 +98,8 @@ where TMiddleware: Layer + Sync + 'static, TNewMiddleware: MiddlewareLike + Send + Sync + 'static, { - fn call( - &self, - ctx: TLayerCtx, - input: Value, - req: RequestContext, - ) -> Result { - self.mw.handle(ctx, input, req, self.next.clone()) + fn call(&self, ctx: TLayerCtx, input: Value, req: RequestContext) -> ExecResult { + Ok(self.mw.handle(ctx, input, req, self.next.clone())) } } @@ -137,13 +132,13 @@ where // TODO: Rename this so it doesn't conflict with the middleware builder struct pub trait Layer: Send + Sync + 'static { - fn call(&self, a: TLayerCtx, b: Value, c: RequestContext) -> Result; + fn call(&self, a: TLayerCtx, b: Value, c: RequestContext) -> Result; } pub struct ResolverLayer where TLayerCtx: Send + Sync + 'static, - T: Fn(TLayerCtx, Value, RequestContext) -> Result + T: Fn(TLayerCtx, Value, RequestContext) -> Result + Send + Sync + 'static, @@ -155,12 +150,12 @@ where impl Layer for ResolverLayer where TLayerCtx: Send + Sync + 'static, - T: Fn(TLayerCtx, Value, RequestContext) -> Result + T: Fn(TLayerCtx, Value, RequestContext) -> Result + Send + Sync + 'static, { - fn call(&self, a: TLayerCtx, b: Value, c: RequestContext) -> Result { + fn call(&self, a: TLayerCtx, b: Value, c: RequestContext) -> Result { (self.func)(a, b, c) } } @@ -169,7 +164,7 @@ impl Layer for Box + 'static> where TLayerCtx: 'static, { - fn call(&self, a: TLayerCtx, b: Value, c: RequestContext) -> Result { + fn call(&self, a: TLayerCtx, b: Value, c: RequestContext) -> Result { (**self).call(a, b, c) } } @@ -200,37 +195,67 @@ pub struct RequestContext { pub path: String, // TODO: String slice?? } -pub enum ValueOrStream { - Value(Value), - Stream(Pin> + Send>>), +pub type ExecResult = Result; + +pub enum RequestFuture { + Ready(ExecResult), + Future(BoxFuture<'static, ExecResult>), } -pub enum ValueOrStreamOrFutureStream { - Value(Value), - Stream(Pin> + Send>>), +impl RequestFuture { + pub async fn exec(self) -> ExecResult { + match self { + Self::Ready(res) => res, + Self::Future(fut) => fut.await, + } + } } -pub enum LayerResult { - Future(Pin> + Send>>), - Stream(Pin> + Send>>), - FutureValueOrStream(Pin> + Send>>), - FutureValueOrStreamOrFutureStream( - Pin> + Send>>, - ), - Ready(Result), +pub type StreamItem = ExecResult; + +pub enum StreamFuture { + Stream(BoxStream<'static, StreamItem>), } -impl LayerResult { - pub async fn into_value_or_stream(self) -> Result { +impl StreamFuture { + pub async fn exec(self) -> ExecResult> { match self { - LayerResult::Stream(stream) => Ok(ValueOrStream::Stream(stream)), - LayerResult::Future(fut) => Ok(ValueOrStream::Value(fut.await?)), - LayerResult::FutureValueOrStream(fut) => Ok(fut.await?), - LayerResult::FutureValueOrStreamOrFutureStream(fut) => Ok(match fut.await? { - ValueOrStreamOrFutureStream::Value(val) => ValueOrStream::Value(val), - ValueOrStreamOrFutureStream::Stream(stream) => ValueOrStream::Stream(stream), - }), - LayerResult::Ready(res) => Ok(ValueOrStream::Value(res?)), + Self::Stream(stream) => Ok(stream), } } } + +pub enum LayerFuture { + Request(RequestFuture), + Stream(StreamFuture), + Wrapped(BoxFuture<'static, ExecResult>), +} + +pub enum LayerReturn { + Request(Value), + Stream(BoxStream<'static, StreamItem>), +} + +impl LayerFuture { + pub fn into_layer_return(self) -> BoxFuture<'static, ExecResult> { + Box::pin(async { + match self { + Self::Request(req) => req.exec().await.map(LayerReturn::Request), + Self::Stream(stream) => stream.exec().await.map(LayerReturn::Stream), + Self::Wrapped(fut) => fut.await?.into_layer_return().await, + } + }) + } +} + +impl From for LayerFuture { + fn from(v: RequestFuture) -> Self { + Self::Request(v) + } +} + +impl From for LayerFuture { + fn from(v: StreamFuture) -> Self { + Self::Stream(v) + } +} diff --git a/src/middleware.rs b/src/middleware.rs index bd751c0f..a270f9bb 100644 --- a/src/middleware.rs +++ b/src/middleware.rs @@ -3,7 +3,7 @@ use serde_json::Value; use std::{future::Future, marker::PhantomData, sync::Arc}; use crate::{ - internal::{Layer, LayerResult, RequestContext, ValueOrStream, ValueOrStreamOrFutureStream}, + internal::{Layer, LayerFuture, LayerReturn, RequestContext, RequestFuture, StreamFuture}, ExecError, }; @@ -17,7 +17,7 @@ pub trait MiddlewareLike: Clone { input: Value, req: RequestContext, next: Arc, - ) -> Result; + ) -> LayerFuture; } pub struct MiddlewareContext where @@ -153,9 +153,11 @@ where TRespHandlerFut: Future> + Send + 'static, { MiddlewareWithResponseHandler { - handler: self.handler, + inner: Middleware { + handler: self.handler, + phantom: PhantomData, + }, resp_handler: handler, - phantom: PhantomData, } } } @@ -178,9 +180,8 @@ pub struct MiddlewareWithResponseHandler< TRespHandlerFunc: Fn(TState, Value) -> TRespHandlerFut + Clone + Sync + Send + 'static, TRespHandlerFut: Future> + Send + 'static, { - handler: THandlerFunc, + inner: Middleware, resp_handler: TRespHandlerFunc, - phantom: PhantomData<(TState, TLayerCtx)>, } impl Clone @@ -205,9 +206,8 @@ where { fn clone(&self) -> Self { Self { - handler: self.handler.clone(), + inner: self.inner.clone(), resp_handler: self.resp_handler.clone(), - phantom: PhantomData, } } } @@ -232,7 +232,7 @@ where input: Value, req: RequestContext, next: Arc, - ) -> Result { + ) -> LayerFuture { let handler = (self.handler)(MiddlewareContext { state: (), ctx, @@ -241,12 +241,10 @@ where phantom: PhantomData, }); - Ok(LayerResult::FutureValueOrStream(Box::pin(async move { + LayerFuture::Wrapped(Box::pin(async move { let handler = handler.await?; - next.call(handler.ctx, handler.input, handler.req)? - .into_value_or_stream() - .await - }))) + next.call(handler.ctx, handler.input, handler.req) + })) } } @@ -281,8 +279,8 @@ where input: Value, req: RequestContext, next: Arc, - ) -> Result { - let handler = (self.handler)(MiddlewareContext { + ) -> LayerFuture { + let handler = (self.inner.handler)(MiddlewareContext { state: (), ctx, input, @@ -293,52 +291,38 @@ where let f = self.resp_handler.clone(); // TODO: Runtime clone is bad. Avoid this! - Ok(LayerResult::FutureValueOrStreamOrFutureStream(Box::pin( - async move { - let handler = handler.await?; + LayerFuture::Wrapped(Box::pin(async move { + let handler = handler.await?; + let handler_state = handler.state; - Ok( - match next - .call(handler.ctx, handler.input, handler.req)? - .into_value_or_stream() - .await? - { - ValueOrStream::Value(v) => { - ValueOrStreamOrFutureStream::Value(f(handler.state, v).await?) - } - ValueOrStream::Stream(s) => { - ValueOrStreamOrFutureStream::Stream(Box::pin( - // This follow code is expanded from the `async_stream::stream!` macro shown below. Using the macro causes borrow errors. - { - let (mut __yield_tx, __yield_rx) = - ::async_stream::yielder::pair(); - ::async_stream::AsyncStream::new(__yield_rx, async move { - let mut s = s; - let ctx = handler.state; - while let Some(v) = s.next().await { - match v { - Ok(v) => { - __yield_tx - .send( - f(ctx.clone(), v).await.map_err( - ExecError::ErrResolverError, - ), - ) - .await; - } - Err(err) => { - __yield_tx.send(Err(err)).await; - } - } - } - }) - }, - )) - } - }, - ) - }, - ))) + Ok( + match next + .call(handler.ctx, handler.input, handler.req)? + .into_layer_return() + .await? + { + LayerReturn::Request(v) => { + RequestFuture::Ready(f(handler_state, v).await.map_err(Into::into)).into() + } + LayerReturn::Stream(s) => { + StreamFuture::Stream(Box::pin(async_stream::stream! { + let mut s = s; + while let Some(v) = s.next().await { + match v { + Ok(v) => { + yield f(handler_state.clone(), v) + .await + .map_err(ExecError::ErrResolverError); + } + e => yield e + } + } + })) + .into() + } + }, + ) + })) } } diff --git a/src/resolver.rs b/src/resolver.rs index f259fe73..b9a5252c 100644 --- a/src/resolver.rs +++ b/src/resolver.rs @@ -6,14 +6,14 @@ use serde_json::Value; use specta::{DefOpts, Type, TypeDefs}; use crate::{ - internal::{LayerResult, ProcedureDataType}, + internal::{ProcedureDataType, RequestFuture, StreamFuture}, ExecError, RequestLayer, }; pub trait Resolver { type Result; - fn exec(&self, ctx: TCtx, input: Value) -> Result; + fn exec(&self, ctx: TCtx, input: Value) -> Result; fn typedef(defs: &mut TypeDefs) -> ProcedureDataType; } @@ -78,9 +78,9 @@ where { type Result = TResult; - fn exec(&self, ctx: TCtx, input: Value) -> Result { + fn exec(&self, ctx: TCtx, input: Value) -> Result { let input = serde_json::from_value(input).map_err(ExecError::DeserializingArgErr)?; - self(ctx, input).into_layer_result() + self(ctx, input).into_request_future() } fn typedef(defs: &mut TypeDefs) -> ProcedureDataType { @@ -104,7 +104,7 @@ where } pub trait StreamResolver { - fn exec(&self, ctx: TCtx, input: Value) -> Result; + fn exec(&self, ctx: TCtx, input: Value) -> Result; fn typedef(defs: &mut TypeDefs) -> ProcedureDataType; } @@ -120,9 +120,9 @@ where TStream: Stream + Send + Sync + 'static, TResult: Serialize + Type, { - fn exec(&self, ctx: TCtx, input: Value) -> Result { + fn exec(&self, ctx: TCtx, input: Value) -> Result { let input = serde_json::from_value(input).map_err(ExecError::DeserializingArgErr)?; - Ok(LayerResult::Stream(Box::pin(self(ctx, input).map(|v| { + Ok(StreamFuture::Stream(Box::pin(self(ctx, input).map(|v| { serde_json::to_value(&v).map_err(ExecError::SerializingResultErr) })))) } diff --git a/src/resolver_result.rs b/src/resolver_result.rs index 75d4dc5d..b8498c19 100644 --- a/src/resolver_result.rs +++ b/src/resolver_result.rs @@ -3,15 +3,12 @@ use std::{future::Future, marker::PhantomData}; use serde::Serialize; use specta::Type; -use crate::{ - internal::{LayerResult, ValueOrStream}, - Error, ExecError, -}; +use crate::{internal::RequestFuture, Error, ExecError}; pub trait RequestLayer { type Result: Type; - fn into_layer_result(self) -> Result; + fn into_request_future(self) -> Result; } pub struct SerializeMarker(PhantomData<()>); @@ -21,8 +18,8 @@ where { type Result = T; - fn into_layer_result(self) -> Result { - Ok(LayerResult::Ready(Ok( + fn into_request_future(self) -> Result { + Ok(RequestFuture::Ready(Ok( serde_json::to_value(self).map_err(ExecError::SerializingResultErr)? ))) } @@ -35,8 +32,8 @@ where { type Result = T; - fn into_layer_result(self) -> Result { - Ok(LayerResult::Ready(Ok(serde_json::to_value( + fn into_request_future(self) -> Result { + Ok(RequestFuture::Ready(Ok(serde_json::to_value( self.map_err(ExecError::ErrResolverError)?, ) .map_err(ExecError::SerializingResultErr)?))) @@ -51,17 +48,9 @@ where { type Result = T::Result; - fn into_layer_result(self) -> Result { - Ok(LayerResult::Future(Box::pin(async move { - match self - .await - .into_layer_result()? - .into_value_or_stream() - .await? - { - ValueOrStream::Stream(_) => unreachable!(), - ValueOrStream::Value(v) => Ok(v), - } + fn into_request_future(self) -> Result { + Ok(RequestFuture::Future(Box::pin(async move { + self.await.into_request_future()?.exec().await }))) } } diff --git a/src/router.rs b/src/router.rs index bf7ddeae..6113f211 100644 --- a/src/router.rs +++ b/src/router.rs @@ -13,7 +13,7 @@ use serde_json::Value; use specta::{to_ts, to_ts_export, DataType, TypeDefs}; use crate::{ - internal::{Procedure, ProcedureKind, ProcedureStore, RequestContext, ValueOrStream}, + internal::{LayerReturn, Procedure, ProcedureKind, ProcedureStore, RequestContext}, Config, ExecError, ExportError, }; @@ -65,11 +65,11 @@ where path: key.clone(), }, )? - .into_value_or_stream() + .into_layer_return() .await? { - ValueOrStream::Value(v) => Ok(v), - ValueOrStream::Stream(_) => Err(ExecError::UnsupportedMethod(key)), + LayerReturn::Request(v) => Ok(v), + LayerReturn::Stream(_) => Err(ExecError::UnsupportedMethod(key)), } } @@ -93,11 +93,11 @@ where path: key.clone(), }, )? - .into_value_or_stream() + .into_layer_return() .await? { - ValueOrStream::Value(_) => Err(ExecError::UnsupportedMethod(key)), - ValueOrStream::Stream(s) => Ok(s), + LayerReturn::Request(_) => Err(ExecError::UnsupportedMethod(key)), + LayerReturn::Stream(s) => Ok(s), } } diff --git a/src/router_builder.rs b/src/router_builder.rs index 3ee5a704..d16d257d 100644 --- a/src/router_builder.rs +++ b/src/router_builder.rs @@ -129,10 +129,13 @@ where key.into(), self.middleware.build(ResolverLayer { func: move |ctx, input, _| { - resolver.exec( - ctx, - serde_json::from_value(input).map_err(ExecError::DeserializingArgErr)?, - ) + resolver + .exec( + ctx, + serde_json::from_value(input) + .map_err(ExecError::DeserializingArgErr)?, + ) + .map(Into::into) }, phantom: PhantomData, }), @@ -158,10 +161,13 @@ where key.into(), self.middleware.build(ResolverLayer { func: move |ctx, input, _| { - resolver.exec( - ctx, - serde_json::from_value(input).map_err(ExecError::DeserializingArgErr)?, - ) + resolver + .exec( + ctx, + serde_json::from_value(input) + .map_err(ExecError::DeserializingArgErr)?, + ) + .map(Into::into) }, phantom: PhantomData, }), @@ -192,10 +198,13 @@ where key.into(), self.middleware.build(ResolverLayer { func: move |ctx, input, _| { - resolver.exec( - ctx, - serde_json::from_value(input).map_err(ExecError::DeserializingArgErr)?, - ) + resolver + .exec( + ctx, + serde_json::from_value(input) + .map_err(ExecError::DeserializingArgErr)?, + ) + .map(Into::into) }, phantom: PhantomData, }), From 98e8ac09315388a030ab1672bf7da2e58aa65313 Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Mon, 3 Oct 2022 02:03:16 +0800 Subject: [PATCH 02/23] remove StreamFuture enum --- src/internal/middleware.rs | 15 ++------------- src/middleware.rs | 25 +++++++++++-------------- src/resolver.rs | 5 +++-- 3 files changed, 16 insertions(+), 29 deletions(-) diff --git a/src/internal/middleware.rs b/src/internal/middleware.rs index 7dd1fd2c..957e70e4 100644 --- a/src/internal/middleware.rs +++ b/src/internal/middleware.rs @@ -212,18 +212,7 @@ impl RequestFuture { } pub type StreamItem = ExecResult; - -pub enum StreamFuture { - Stream(BoxStream<'static, StreamItem>), -} - -impl StreamFuture { - pub async fn exec(self) -> ExecResult> { - match self { - Self::Stream(stream) => Ok(stream), - } - } -} +pub type StreamFuture = BoxStream<'static, StreamItem>; pub enum LayerFuture { Request(RequestFuture), @@ -241,7 +230,7 @@ impl LayerFuture { Box::pin(async { match self { Self::Request(req) => req.exec().await.map(LayerReturn::Request), - Self::Stream(stream) => stream.exec().await.map(LayerReturn::Stream), + Self::Stream(stream) => Ok(LayerReturn::Stream(stream)), Self::Wrapped(fut) => fut.await?.into_layer_return().await, } }) diff --git a/src/middleware.rs b/src/middleware.rs index a270f9bb..20675f1b 100644 --- a/src/middleware.rs +++ b/src/middleware.rs @@ -304,22 +304,19 @@ where LayerReturn::Request(v) => { RequestFuture::Ready(f(handler_state, v).await.map_err(Into::into)).into() } - LayerReturn::Stream(s) => { - StreamFuture::Stream(Box::pin(async_stream::stream! { - let mut s = s; - while let Some(v) = s.next().await { - match v { - Ok(v) => { - yield f(handler_state.clone(), v) - .await - .map_err(ExecError::ErrResolverError); - } - e => yield e + LayerReturn::Stream(s) => StreamFuture::into(Box::pin(async_stream::stream! { + let mut s = s; + while let Some(v) = s.next().await { + match v { + Ok(v) => { + yield f(handler_state.clone(), v) + .await + .map_err(ExecError::ErrResolverError); } + e => yield e } - })) - .into() - } + } + })), }, ) })) diff --git a/src/resolver.rs b/src/resolver.rs index b9a5252c..6bdbfe9c 100644 --- a/src/resolver.rs +++ b/src/resolver.rs @@ -122,9 +122,10 @@ where { fn exec(&self, ctx: TCtx, input: Value) -> Result { let input = serde_json::from_value(input).map_err(ExecError::DeserializingArgErr)?; - Ok(StreamFuture::Stream(Box::pin(self(ctx, input).map(|v| { + + Ok(Box::pin(self(ctx, input).map(|v| { serde_json::to_value(&v).map_err(ExecError::SerializingResultErr) - })))) + }))) } fn typedef(defs: &mut TypeDefs) -> ProcedureDataType { From 7cb60dff61e10447c1a5aedc7dd0dac6a8426b66 Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Mon, 3 Oct 2022 14:45:52 +0800 Subject: [PATCH 03/23] add arg to RequestResolver --- src/middleware.rs | 50 +++++++++++++------------- src/resolver.rs | 81 +++++++++++++++++++++--------------------- src/resolver_result.rs | 18 +++++----- src/router_builder.rs | 17 ++++----- 4 files changed, 82 insertions(+), 84 deletions(-) diff --git a/src/middleware.rs b/src/middleware.rs index 20675f1b..734dc549 100644 --- a/src/middleware.rs +++ b/src/middleware.rs @@ -19,7 +19,7 @@ pub trait MiddlewareLike: Clone { next: Arc, ) -> LayerFuture; } -pub struct MiddlewareContext +pub struct MiddlewareState where TState: Send, { @@ -31,15 +31,15 @@ where } // This will match were TState is the default (`()`) so it shouldn't let you call it if you've already swapped the generic -impl MiddlewareContext +impl MiddlewareState where TLayerCtx: Send, { - pub fn with_state(self, state: TState) -> MiddlewareContext + pub fn with_state(self, state: TState) -> MiddlewareState where TState: Send, { - MiddlewareContext { + MiddlewareState { state, input: self.input, ctx: self.ctx, @@ -50,7 +50,7 @@ where } // This will match were TNewCtx is the default (`TCtx`) so it shouldn't let you call it if you've already swapped the generic -impl MiddlewareContext +impl MiddlewareState where TLayerCtx: Send, TState: Send, @@ -58,8 +58,8 @@ where pub fn with_ctx( self, new_ctx: TNewCtx, - ) -> MiddlewareContext { - MiddlewareContext { + ) -> MiddlewareState { + MiddlewareState { state: self.state, input: self.input, ctx: new_ctx, @@ -73,8 +73,8 @@ pub struct Middleware where TState: Send, TLayerCtx: Send, - THandlerFunc: Fn(MiddlewareContext) -> THandlerFut + Clone, - THandlerFut: Future, crate::Error>> + THandlerFunc: Fn(MiddlewareState) -> THandlerFut + Clone, + THandlerFut: Future, crate::Error>> + Send + 'static, { @@ -87,8 +87,8 @@ impl Clone where TState: Send, TLayerCtx: Send, - THandlerFunc: Fn(MiddlewareContext) -> THandlerFut + Clone, - THandlerFut: Future, crate::Error>> + THandlerFunc: Fn(MiddlewareState) -> THandlerFut + Clone, + THandlerFut: Future, crate::Error>> + Send + 'static, { @@ -114,8 +114,8 @@ where ) -> Middleware where TState: Send, - THandlerFunc: Fn(MiddlewareContext) -> THandlerFut + Clone, - THandlerFut: Future, crate::Error>> + THandlerFunc: Fn(MiddlewareState) -> THandlerFut + Clone, + THandlerFut: Future, crate::Error>> + Send + 'static, { @@ -131,8 +131,8 @@ impl where TState: Send, TLayerCtx: Send, - THandlerFunc: Fn(MiddlewareContext) -> THandlerFut + Clone, - THandlerFut: Future, crate::Error>> + THandlerFunc: Fn(MiddlewareState) -> THandlerFut + Clone, + THandlerFut: Future, crate::Error>> + Send + 'static, { @@ -173,8 +173,8 @@ pub struct MiddlewareWithResponseHandler< > where TState: Send, TLayerCtx: Send, - THandlerFunc: Fn(MiddlewareContext) -> THandlerFut + Clone, - THandlerFut: Future, crate::Error>> + THandlerFunc: Fn(MiddlewareState) -> THandlerFut + Clone, + THandlerFut: Future, crate::Error>> + Send + 'static, TRespHandlerFunc: Fn(TState, Value) -> TRespHandlerFut + Clone + Sync + Send + 'static, @@ -197,8 +197,8 @@ impl) -> THandlerFut + Clone, - THandlerFut: Future, crate::Error>> + THandlerFunc: Fn(MiddlewareState) -> THandlerFut + Clone, + THandlerFut: Future, crate::Error>> + Send + 'static, TRespHandlerFunc: Fn(TState, Value) -> TRespHandlerFut + Clone + Sync + Send + 'static, @@ -218,8 +218,8 @@ where TState: Clone + Send + Sync + 'static, TLayerCtx: Send, TNewCtx: Send + 'static, - THandlerFunc: Fn(MiddlewareContext) -> THandlerFut + Clone, - THandlerFut: Future, crate::Error>> + THandlerFunc: Fn(MiddlewareState) -> THandlerFut + Clone, + THandlerFut: Future, crate::Error>> + Send + 'static, { @@ -233,7 +233,7 @@ where req: RequestContext, next: Arc, ) -> LayerFuture { - let handler = (self.handler)(MiddlewareContext { + let handler = (self.handler)(MiddlewareState { state: (), ctx, input, @@ -263,8 +263,8 @@ where TState: Clone + Send + Sync + 'static, TLayerCtx: Send + 'static, TNewCtx: Send + 'static, - THandlerFunc: Fn(MiddlewareContext) -> THandlerFut + Clone, - THandlerFut: Future, crate::Error>> + THandlerFunc: Fn(MiddlewareState) -> THandlerFut + Clone, + THandlerFut: Future, crate::Error>> + Send + 'static, TRespHandlerFunc: Fn(TState, Value) -> TRespHandlerFut + Clone + Sync + Send + 'static, @@ -280,7 +280,7 @@ where req: RequestContext, next: Arc, ) -> LayerFuture { - let handler = (self.inner.handler)(MiddlewareContext { + let handler = (self.inner.handler)(MiddlewareState { state: (), ctx, input, diff --git a/src/resolver.rs b/src/resolver.rs index 6bdbfe9c..175db3b6 100644 --- a/src/resolver.rs +++ b/src/resolver.rs @@ -7,17 +7,55 @@ use specta::{DefOpts, Type, TypeDefs}; use crate::{ internal::{ProcedureDataType, RequestFuture, StreamFuture}, - ExecError, RequestLayer, + ExecError, RequestResult, }; -pub trait Resolver { +pub trait RequestResolver: Send + Sync + 'static { + type Arg: DeserializeOwned + Type; type Result; - fn exec(&self, ctx: TCtx, input: Value) -> Result; + fn exec(&self, ctx: TCtx, input: Self::Arg) -> Result; fn typedef(defs: &mut TypeDefs) -> ProcedureDataType; } +pub struct DoubleArgMarker( + /* private */ PhantomData<(TArg, TResultMarker)>, +); +impl + RequestResolver> for TFunc +where + TArg: DeserializeOwned + Type, + TFunc: Fn(TCtx, TArg) -> TResult + Send + Sync + 'static, + TResult: RequestResult, +{ + type Result = TResult; + type Arg = TArg; + + fn exec(&self, ctx: TCtx, input: Self::Arg) -> Result { + self(ctx, input).into_request_future() + } + + fn typedef(defs: &mut TypeDefs) -> ProcedureDataType { + ProcedureDataType { + arg_ty: ::reference( + DefOpts { + parent_inline: false, + type_map: defs, + }, + &[], + ), + result_ty: ::reference( + DefOpts { + parent_inline: false, + type_map: defs, + }, + &[], + ), + } + } +} + // pub struct NoArgMarker(/* private */ PhantomData); // impl Resolver> for TFunc // where @@ -66,43 +104,6 @@ pub trait Resolver { // } // } -pub struct DoubleArgMarker( - /* private */ PhantomData<(TArg, TResultMarker)>, -); -impl Resolver> - for TFunc -where - TArg: DeserializeOwned + Type, - TFunc: Fn(TCtx, TArg) -> TResult, - TResult: RequestLayer, -{ - type Result = TResult; - - fn exec(&self, ctx: TCtx, input: Value) -> Result { - let input = serde_json::from_value(input).map_err(ExecError::DeserializingArgErr)?; - self(ctx, input).into_request_future() - } - - fn typedef(defs: &mut TypeDefs) -> ProcedureDataType { - ProcedureDataType { - arg_ty: ::reference( - DefOpts { - parent_inline: false, - type_map: defs, - }, - &[], - ), - result_ty: ::reference( - DefOpts { - parent_inline: false, - type_map: defs, - }, - &[], - ), - } - } -} - pub trait StreamResolver { fn exec(&self, ctx: TCtx, input: Value) -> Result; diff --git a/src/resolver_result.rs b/src/resolver_result.rs index b8498c19..964de0d3 100644 --- a/src/resolver_result.rs +++ b/src/resolver_result.rs @@ -5,18 +5,18 @@ use specta::Type; use crate::{internal::RequestFuture, Error, ExecError}; -pub trait RequestLayer { - type Result: Type; +pub trait RequestResult { + type Data: Type; fn into_request_future(self) -> Result; } pub struct SerializeMarker(PhantomData<()>); -impl RequestLayer for T +impl RequestResult for T where T: Serialize + Type, { - type Result = T; + type Data = T; fn into_request_future(self) -> Result { Ok(RequestFuture::Ready(Ok( @@ -26,11 +26,11 @@ where } pub struct ResultMarker(PhantomData<()>); -impl RequestLayer for Result +impl RequestResult for Result where T: Serialize + Type, { - type Result = T; + type Data = T; fn into_request_future(self) -> Result { Ok(RequestFuture::Ready(Ok(serde_json::to_value( @@ -41,12 +41,12 @@ where } pub struct FutureMarker(PhantomData); -impl RequestLayer> for TFut +impl RequestResult> for TFut where TFut: Future + Send + 'static, - T: RequestLayer + Send, + T: RequestResult + Send, { - type Result = T::Result; + type Data = T::Data; fn into_request_future(self) -> Result { Ok(RequestFuture::Future(Box::pin(async move { diff --git a/src/router_builder.rs b/src/router_builder.rs index d16d257d..a52abef1 100644 --- a/src/router_builder.rs +++ b/src/router_builder.rs @@ -9,8 +9,8 @@ use crate::{ BaseMiddleware, BuiltProcedureBuilder, MiddlewareBuilderLike, MiddlewareLayerBuilder, MiddlewareMerger, ProcedureStore, ResolverLayer, UnbuiltProcedureBuilder, }, - Config, DoubleArgStreamMarker, ExecError, MiddlewareBuilder, MiddlewareLike, RequestLayer, - Resolver, Router, StreamResolver, + Config, DoubleArgStreamMarker, ExecError, MiddlewareBuilder, MiddlewareLike, RequestResolver, + Router, StreamResolver, }; pub struct RouterBuilder< @@ -112,7 +112,7 @@ where } } - pub fn query( + pub fn query( mut self, key: &'static str, builder: impl Fn( @@ -120,11 +120,10 @@ where ) -> BuiltProcedureBuilder, ) -> Self where - TArg: DeserializeOwned + Type, - TResult: RequestLayer, - TResolver: Fn(TLayerCtx, TArg) -> TResult + Send + Sync + 'static, + TResolver: RequestResolver, { let resolver = builder(UnbuiltProcedureBuilder::default()).resolver; + self.queries.append( key.into(), self.middleware.build(ResolverLayer { @@ -144,7 +143,7 @@ where self } - pub fn mutation( + pub fn mutation( mut self, key: &'static str, builder: impl Fn( @@ -152,9 +151,7 @@ where ) -> BuiltProcedureBuilder, ) -> Self where - TArg: DeserializeOwned + Type, - TResult: RequestLayer, - TResolver: Fn(TLayerCtx, TArg) -> TResult + Send + Sync + 'static, + TResolver: RequestResolver, { let resolver = builder(UnbuiltProcedureBuilder::default()).resolver; self.mutations.append( From 06818c7de525e62623a0c36a6cfd473ae3d45441 Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Mon, 3 Oct 2022 16:32:29 +0800 Subject: [PATCH 04/23] enforce closure in unbuilt builder --- src/router_builder.rs | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/router_builder.rs b/src/router_builder.rs index a52abef1..2e096c71 100644 --- a/src/router_builder.rs +++ b/src/router_builder.rs @@ -10,7 +10,7 @@ use crate::{ MiddlewareMerger, ProcedureStore, ResolverLayer, UnbuiltProcedureBuilder, }, Config, DoubleArgStreamMarker, ExecError, MiddlewareBuilder, MiddlewareLike, RequestResolver, - Router, StreamResolver, + RequestResult, Router, StreamResolver, }; pub struct RouterBuilder< @@ -112,15 +112,17 @@ where } } - pub fn query( + pub fn query( mut self, key: &'static str, builder: impl Fn( - UnbuiltProcedureBuilder, - ) -> BuiltProcedureBuilder, + UnbuiltProcedureBuilder, + ) -> BuiltProcedureBuilder, ) -> Self where - TResolver: RequestResolver, + TUnbuiltResolver: Fn(TLayerCtx, TBuiltResolver::Arg) -> TUnbuiltResult, + TUnbuiltResult: RequestResult, + TBuiltResolver: RequestResolver, { let resolver = builder(UnbuiltProcedureBuilder::default()).resolver; @@ -138,20 +140,28 @@ where }, phantom: PhantomData, }), - TResolver::typedef(&mut self.typ_store), + TBuiltResolver::typedef(&mut self.typ_store), ); self } - pub fn mutation( + pub fn mutation< + TBuiltResolver, + TResultMarker, + TUnbuiltResolver, + TUnbuiltResult, + TInResultMarker, + >( mut self, key: &'static str, builder: impl Fn( - UnbuiltProcedureBuilder, - ) -> BuiltProcedureBuilder, + UnbuiltProcedureBuilder, + ) -> BuiltProcedureBuilder, ) -> Self where - TResolver: RequestResolver, + TUnbuiltResolver: Fn(TLayerCtx, TBuiltResolver::Arg) -> TUnbuiltResult, + TUnbuiltResult: RequestResult, + TBuiltResolver: RequestResolver, { let resolver = builder(UnbuiltProcedureBuilder::default()).resolver; self.mutations.append( @@ -168,7 +178,7 @@ where }, phantom: PhantomData, }), - TResolver::typedef(&mut self.typ_store), + TBuiltResolver::typedef(&mut self.typ_store), ); self } From c6f4a9f5753fc478562c050f8f00620eebe85db6 Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Mon, 3 Oct 2022 18:00:48 +0800 Subject: [PATCH 05/23] typed request future + builder wrapper --- examples/src/bin/middleware.rs | 167 +++++++++++++++++++++------------ src/internal/middleware.rs | 36 +++++++ src/resolver.rs | 20 ++-- src/resolver_result.rs | 35 ++++--- src/router_builder.rs | 28 ++++-- 5 files changed, 189 insertions(+), 97 deletions(-) diff --git a/examples/src/bin/middleware.rs b/examples/src/bin/middleware.rs index 493ad80b..b2a2fa04 100644 --- a/examples/src/bin/middleware.rs +++ b/examples/src/bin/middleware.rs @@ -2,7 +2,12 @@ use std::{path::PathBuf, time::Duration}; use async_stream::stream; use axum::routing::get; -use rspc::{Config, ErrorCode, MiddlewareState, Router}; +use rspc::{ + internal::{specta::Type, BuiltProcedureBuilder}, + Config, DoubleArgMarker, ErrorCode, FutureMarker, MiddlewareState, RequestResolver, + ResultMarker, Router, +}; +use serde::{de::DeserializeOwned, Serialize}; use tokio::time::sleep; use tower_http::cors::{Any, CorsLayer}; @@ -31,77 +36,115 @@ pub struct AuthenticatedCtx { #[tokio::main] async fn main() { - let router = - Router::::new() - .config(Config::new().export_ts_bindings( + let router = Router::::new() + .config( + Config::new().export_ts_bindings( PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("./bindings.ts"), - )) - // Logger middleware - .middleware(|mw| { - mw.middleware(|mw| async move { - let state = (mw.req.clone(), mw.ctx.clone(), mw.input.clone()); - Ok(mw.with_state(state)) - }) - .resp(|state, result| async move { - println!( - "[LOG] req='{:?}' ctx='{:?}' input='{:?}' result='{:?}'", - state.0, state.1, state.2, result - ); - Ok(result) - }) + ), + ) + // Logger middleware + .middleware(|mw| { + mw.middleware(|mw| async move { + let state = (mw.req.clone(), mw.ctx.clone(), mw.input.clone()); + Ok(mw.with_state(state)) }) - .query("version", |t| { - t(|_ctx, _: ()| { - println!("ANOTHER QUERY"); - env!("CARGO_PKG_VERSION") - }) + .resp(|state, result| async move { + println!( + "[LOG] req='{:?}' ctx='{:?}' input='{:?}' result='{:?}'", + state.0, state.1, state.2, result + ); + Ok(result) }) - // Auth middleware - .middleware(|mw| { - mw.middleware(|mw| async move { - match mw.ctx.session_id { - Some(ref session_id) => { - let user = db_get_user_from_session(session_id).await; - Ok(mw.with_ctx(AuthenticatedCtx { user })) + }) + .query("version", { + #[derive(Serialize, rspc::Type)] + struct Bruh { + meta: String, + data: T, + } + + fn typed( + builder: BuiltProcedureBuilder, + ) -> BuiltProcedureBuilder< + impl RequestResolver< + TLayerCtx, + DoubleArgMarker>, + FutureMarker, + Arg = TArg, + >, + > + where + TArg: Type + DeserializeOwned, + TLayerCtx: Send + Sync + 'static, + TResolver: RequestResolver, + { + BuiltProcedureBuilder { + resolver: move |ctx, arg| { + let val = builder.resolver.exec(ctx, arg); + + async { + Ok(Bruh { + meta: "Bruh".to_string(), + data: val?.exec().await?, + }) } - None => Err(rspc::Error::new( - ErrorCode::Unauthorized, - "Unauthorized".into(), - )), + }, + } + } + + |t| { + typed(t(|_ctx, _: ()| { + println!("ANOTHER QUERY"); + env!("CARGO_PKG_VERSION") + })) + } + }) + // Auth middleware + .middleware(|mw| { + mw.middleware(|mw| async move { + match mw.ctx.session_id { + Some(ref session_id) => { + let user = db_get_user_from_session(session_id).await; + Ok(mw.with_ctx(AuthenticatedCtx { user })) } - }) + None => Err(rspc::Error::new( + ErrorCode::Unauthorized, + "Unauthorized".into(), + )), + } }) - .query("another", |t| { - t(|_, _: ()| { - println!("ANOTHER QUERY"); - "Another Result!" - }) + }) + .query("another", |t| { + t(|_, _: ()| { + println!("ANOTHER QUERY"); + "Another Result!" }) - .subscription("subscriptions.pings", |t| { - t(|_ctx, _args: ()| { - stream! { - println!("Client subscribed to 'pings'"); - for i in 0..5 { - println!("Sending ping {}", i); - yield "ping".to_string(); - sleep(Duration::from_secs(1)).await; - } + }) + .subscription("subscriptions.pings", |t| { + t(|_ctx, _args: ()| { + stream! { + println!("Client subscribed to 'pings'"); + for i in 0..5 { + println!("Sending ping {}", i); + yield "ping".to_string(); + sleep(Duration::from_secs(1)).await; } - }) + } }) - // Reject all middleware - .middleware(|mw| { - mw.middleware(|_mw| async move { - Err(rspc::Error::new( - ErrorCode::Unauthorized, - "Unauthorized".into(), - )) as Result, _> - }) + }) + // Reject all middleware + .middleware(|mw| { + mw.middleware(|_mw| async move { + Err(rspc::Error::new( + ErrorCode::Unauthorized, + "Unauthorized".into(), + )) as Result, _> }) - // Plugin middleware // TODO: Coming soon! - // .middleware(|mw| mw.openapi(OpenAPIConfig {})) - .build() - .arced(); + }) + // Plugin middleware // TODO: Coming soon! + // .middleware(|mw| mw.openapi(OpenAPIConfig {})) + .build() + .arced(); let app = axum::Router::new() .route("/", get(|| async { "Hello 'rspc'!" })) diff --git a/src/internal/middleware.rs b/src/internal/middleware.rs index 957e70e4..99a52521 100644 --- a/src/internal/middleware.rs +++ b/src/internal/middleware.rs @@ -1,7 +1,9 @@ use std::{marker::PhantomData, sync::Arc}; use futures::{future::BoxFuture, stream::BoxStream}; +use serde::Serialize; use serde_json::Value; +use specta::Type; use crate::{ExecError, MiddlewareLike}; @@ -211,6 +213,40 @@ impl RequestFuture { } } +pub trait RequestResultData: Serialize + Type + Send + 'static {} +impl RequestResultData for T {} + +pub enum TypedRequestFuture { + Ready(ExecResult), + Future(BoxFuture<'static, ExecResult>), +} + +impl TypedRequestFuture +where + T: RequestResultData, +{ + pub fn to_request_future(self) -> RequestFuture { + match self { + Self::Ready(val) => RequestFuture::Ready({ + val.map(|v| serde_json::to_value(v).map_err(ExecError::DeserializingArgErr)) + .and_then(|v| v) + }), + Self::Future(fut) => RequestFuture::Future(Box::pin(async move { + fut.await + .map(serde_json::to_value)? + .map_err(ExecError::DeserializingArgErr) + })), + } + } + + pub async fn exec(self) -> ExecResult { + match self { + Self::Ready(res) => res, + Self::Future(fut) => fut.await, + } + } +} + pub type StreamItem = ExecResult; pub type StreamFuture = BoxStream<'static, StreamItem>; diff --git a/src/resolver.rs b/src/resolver.rs index 175db3b6..26302e9a 100644 --- a/src/resolver.rs +++ b/src/resolver.rs @@ -6,15 +6,19 @@ use serde_json::Value; use specta::{DefOpts, Type, TypeDefs}; use crate::{ - internal::{ProcedureDataType, RequestFuture, StreamFuture}, + internal::{ProcedureDataType, StreamFuture, TypedRequestFuture}, ExecError, RequestResult, }; -pub trait RequestResolver: Send + Sync + 'static { +pub trait RequestResolver: Send + Sync + 'static { type Arg: DeserializeOwned + Type; - type Result; + type Result: RequestResult; - fn exec(&self, ctx: TCtx, input: Self::Arg) -> Result; + fn exec( + &self, + ctx: TCtx, + input: Self::Arg, + ) -> Result>::Data>, ExecError>; fn typedef(defs: &mut TypeDefs) -> ProcedureDataType; } @@ -23,7 +27,7 @@ pub struct DoubleArgMarker( /* private */ PhantomData<(TArg, TResultMarker)>, ); impl - RequestResolver> for TFunc + RequestResolver, TResultMarker> for TFunc where TArg: DeserializeOwned + Type, TFunc: Fn(TCtx, TArg) -> TResult + Send + Sync + 'static, @@ -32,7 +36,11 @@ where type Result = TResult; type Arg = TArg; - fn exec(&self, ctx: TCtx, input: Self::Arg) -> Result { + fn exec( + &self, + ctx: TCtx, + input: Self::Arg, + ) -> Result, ExecError> { self(ctx, input).into_request_future() } diff --git a/src/resolver_result.rs b/src/resolver_result.rs index 964de0d3..831a5f47 100644 --- a/src/resolver_result.rs +++ b/src/resolver_result.rs @@ -1,42 +1,39 @@ use std::{future::Future, marker::PhantomData}; -use serde::Serialize; -use specta::Type; - -use crate::{internal::RequestFuture, Error, ExecError}; +use crate::{ + internal::{RequestResultData, TypedRequestFuture}, + Error, ExecError, +}; pub trait RequestResult { - type Data: Type; + type Data: RequestResultData; - fn into_request_future(self) -> Result; + fn into_request_future(self) -> Result, ExecError>; } pub struct SerializeMarker(PhantomData<()>); impl RequestResult for T where - T: Serialize + Type, + T: RequestResultData, { type Data = T; - fn into_request_future(self) -> Result { - Ok(RequestFuture::Ready(Ok( - serde_json::to_value(self).map_err(ExecError::SerializingResultErr)? - ))) + fn into_request_future(self) -> Result, ExecError> { + Ok(TypedRequestFuture::Ready(Ok(self))) } } pub struct ResultMarker(PhantomData<()>); impl RequestResult for Result where - T: Serialize + Type, + T: RequestResultData, { type Data = T; - fn into_request_future(self) -> Result { - Ok(RequestFuture::Ready(Ok(serde_json::to_value( - self.map_err(ExecError::ErrResolverError)?, - ) - .map_err(ExecError::SerializingResultErr)?))) + fn into_request_future(self) -> Result, ExecError> { + Ok(TypedRequestFuture::Ready(Ok( + self.map_err(ExecError::ErrResolverError)? + ))) } } @@ -48,8 +45,8 @@ where { type Data = T::Data; - fn into_request_future(self) -> Result { - Ok(RequestFuture::Future(Box::pin(async move { + fn into_request_future(self) -> Result, ExecError> { + Ok(TypedRequestFuture::Future(Box::pin(async move { self.await.into_request_future()?.exec().await }))) } diff --git a/src/router_builder.rs b/src/router_builder.rs index 2e096c71..a7ae7552 100644 --- a/src/router_builder.rs +++ b/src/router_builder.rs @@ -112,7 +112,14 @@ where } } - pub fn query( + pub fn query< + TUnbuiltResolver, + TUnbuiltResult, + TUnbuiltResultMarker, + TBuiltResolver, + TBuiltResolverMarker, + TBuiltResultMarker, + >( mut self, key: &'static str, builder: impl Fn( @@ -121,8 +128,8 @@ where ) -> Self where TUnbuiltResolver: Fn(TLayerCtx, TBuiltResolver::Arg) -> TUnbuiltResult, - TUnbuiltResult: RequestResult, - TBuiltResolver: RequestResolver, + TUnbuiltResult: RequestResult, + TBuiltResolver: RequestResolver, { let resolver = builder(UnbuiltProcedureBuilder::default()).resolver; @@ -136,7 +143,7 @@ where serde_json::from_value(input) .map_err(ExecError::DeserializingArgErr)?, ) - .map(Into::into) + .map(|v| v.to_request_future().into()) }, phantom: PhantomData, }), @@ -146,11 +153,12 @@ where } pub fn mutation< - TBuiltResolver, - TResultMarker, TUnbuiltResolver, TUnbuiltResult, - TInResultMarker, + TUnbuiltResultMarker, + TBuiltResolver, + TBuiltResolverMarker, + TBuiltResultMarker, >( mut self, key: &'static str, @@ -160,8 +168,8 @@ where ) -> Self where TUnbuiltResolver: Fn(TLayerCtx, TBuiltResolver::Arg) -> TUnbuiltResult, - TUnbuiltResult: RequestResult, - TBuiltResolver: RequestResolver, + TUnbuiltResult: RequestResult, + TBuiltResolver: RequestResolver, { let resolver = builder(UnbuiltProcedureBuilder::default()).resolver; self.mutations.append( @@ -174,7 +182,7 @@ where serde_json::from_value(input) .map_err(ExecError::DeserializingArgErr)?, ) - .map(Into::into) + .map(|v| v.to_request_future().into()) }, phantom: PhantomData, }), From 1660d83b1e3f644339fe04d103e8039b604f6a78 Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Mon, 3 Oct 2022 18:41:00 +0800 Subject: [PATCH 06/23] procedure builder map --- examples/src/bin/middleware.rs | 29 +++++++++++++++++++++++++++-- src/internal/procedure_builder.rs | 9 +++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/examples/src/bin/middleware.rs b/examples/src/bin/middleware.rs index b2a2fa04..45f96245 100644 --- a/examples/src/bin/middleware.rs +++ b/examples/src/bin/middleware.rs @@ -63,6 +63,24 @@ async fn main() { data: T, } + // pub trait Normalize {} + + // #[derive(Object)] + // pub struct Wrapper { + // pub scalar: i32, + // #[ref] + // pub ref_this: String, + // #[ref] + // pub wrapper_2: Wrapper2, + // pub vec_ref: Vec + // } + + // #[derive(Object)] + // pub struct Wrapper2 { + // #[ref] + // pub vec_ref: Vec + // }; + fn typed( builder: BuiltProcedureBuilder, ) -> BuiltProcedureBuilder< @@ -93,10 +111,17 @@ async fn main() { } |t| { - typed(t(|_ctx, _: ()| { + t(|_ctx, _: ()| { println!("ANOTHER QUERY"); env!("CARGO_PKG_VERSION") - })) + }) + .map(typed) + .map(|_| BuiltProcedureBuilder { + resolver: |_, _| { + println!("This resolver has been overwritten to an int!"); + 0 + }, + }) } }) // Auth middleware diff --git a/src/internal/procedure_builder.rs b/src/internal/procedure_builder.rs index ff680db0..16160e07 100644 --- a/src/internal/procedure_builder.rs +++ b/src/internal/procedure_builder.rs @@ -31,3 +31,12 @@ impl Deref for UnbuiltProcedureBuilder { pub resolver: TResolver, } + +impl BuiltProcedureBuilder { + pub fn map( + self, + func: impl Fn(Self) -> BuiltProcedureBuilder, + ) -> BuiltProcedureBuilder { + func(self) + } +} From 69598b37c86c10610a899103c9f09890eda7ab19 Mon Sep 17 00:00:00 2001 From: Oscar Beaumont Date: Mon, 3 Oct 2022 22:09:13 +0800 Subject: [PATCH 07/23] added normi --- Cargo.toml | 2 + crates/normi/Cargo.toml | 21 ++++++++ crates/normi/examples/basic.rs | 75 ++++++++++++++++++++++++++++ crates/normi/macros/Cargo.toml | 12 +++++ crates/normi/macros/src/lib.rs | 48 ++++++++++++++++++ crates/normi/src/lib.rs | 27 ++++++++++ crates/normi/src/object.rs | 20 ++++++++ crates/normi/src/rspc.rs | 58 +++++++++++++++++++++ src/internal/execute.rs | 1 - src/internal/mod.rs | 4 -- src/internal/subscription_manager.rs | 43 ---------------- src/resolver.rs | 50 +------------------ 12 files changed, 265 insertions(+), 96 deletions(-) create mode 100644 crates/normi/Cargo.toml create mode 100644 crates/normi/examples/basic.rs create mode 100644 crates/normi/macros/Cargo.toml create mode 100644 crates/normi/macros/src/lib.rs create mode 100644 crates/normi/src/lib.rs create mode 100644 crates/normi/src/object.rs create mode 100644 crates/normi/src/rspc.rs delete mode 100644 src/internal/execute.rs delete mode 100644 src/internal/subscription_manager.rs diff --git a/Cargo.toml b/Cargo.toml index 3ee9d772..48f27f59 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -57,6 +57,8 @@ async-stream = "0.3.3" [workspace] members = [ + "./crates/normi", + "./crates/normi/macros", "./create-rspc-app", "./examples", "./examples/axum", diff --git a/crates/normi/Cargo.toml b/crates/normi/Cargo.toml new file mode 100644 index 00000000..d982c659 --- /dev/null +++ b/crates/normi/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "normi" +version = "0.0.1" +edition = "2021" + +[features] +default = ["rspc"] +rspc = ["dep:rspc"] + +[dependencies] +rspc = { path = "../../", optional = true } +normi-macros = { path = "./macros" } +serde = "1.0.145" +serde_json = "1.0.85" +specta = { version = "0.0.4", path = "../../specta" } + +[dev-dependencies] +rspc = { path = "../../", features = ["axum"] } +axum = "0.5.16" +tokio = { version = "1.21.2", features = ["macros", "rt-multi-thread"] } +tower-http = { version = "0.3.4", default-features = false, features = ["cors"] } diff --git a/crates/normi/examples/basic.rs b/crates/normi/examples/basic.rs new file mode 100644 index 00000000..fb8a5c3f --- /dev/null +++ b/crates/normi/examples/basic.rs @@ -0,0 +1,75 @@ +use axum::routing::get; +use normi::{typed, Object}; +use rspc::{Router, Type}; +use serde::Serialize; +use tower_http::cors::{Any, CorsLayer}; + +// #[derive(Serialize, Type, Object)] +// #[normi(name = "org")] +// pub struct Organisation { +// pub id: String, +// pub name: String, +// #[normi(refr)] +// pub users: Vec, +// #[normi(refr)] +// pub owner: User, +// pub non_normalised_data: Vec<()>, +// } + +#[derive(Serialize, Type, Object)] +pub struct User { + // #[normi(id)] + pub id: String, + pub name: String, +} + +// #[derive(Serialize, Type, Object)] +// pub struct CompositeId { +// #[normi(id)] +// pub org_id: String, +// #[normi(id)] +// pub user_id: String, +// } + +#[tokio::main] +async fn main() { + let router = ::new() + .query("version", |t| t(|_, _: ()| "0.1.0")) + .query("userSync", |t| { + t(|_, _: ()| User { + id: "1".to_string(), + name: "Monty Beaumont".to_string(), + }) + .map(typed) + }) + .query("user", |t| { + t(|_, _: ()| async move { + Ok(User { + id: "1".to_string(), + name: "Monty Beaumont".to_string(), + }) + }) + .map(typed) + }) + .build() + .arced(); + + let app = axum::Router::new() + .route("/", get(|| async { "Hello 'rspc'!" })) + // Attach the rspc router to your axum router. The closure is used to generate the request context for each request. + .route("/rspc/:id", router.endpoint(|| ()).axum()) + // We disable CORS because this is just an example. DON'T DO THIS IN PRODUCTION! + .layer( + CorsLayer::new() + .allow_methods(Any) + .allow_headers(Any) + .allow_origin(Any), + ); + + let addr = "[::]:4000".parse::().unwrap(); // This listens on IPv6 and IPv4 + println!("listening on http://{}/rspc/version", addr); + axum::Server::bind(&addr) + .serve(app.into_make_service()) + .await + .unwrap(); +} diff --git a/crates/normi/macros/Cargo.toml b/crates/normi/macros/Cargo.toml new file mode 100644 index 00000000..61fcb14e --- /dev/null +++ b/crates/normi/macros/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "normi-macros" +version = "0.0.1" +edition = "2021" + +[lib] +proc-macro = true + +[dependencies] +proc-macro2 = "1.0.46" +quote = "1.0.21" +syn = "1.0.101" diff --git a/crates/normi/macros/src/lib.rs b/crates/normi/macros/src/lib.rs new file mode 100644 index 00000000..ab6ae1e3 --- /dev/null +++ b/crates/normi/macros/src/lib.rs @@ -0,0 +1,48 @@ +use proc_macro::TokenStream; +use quote::{format_ident, quote}; +use syn::{parse_macro_input, DeriveInput}; + +#[proc_macro_derive(Object, attributes(normi))] +pub fn derive_object(input: TokenStream) -> TokenStream { + let crate_name = format_ident!("normi"); + let DeriveInput { ident, .. } = parse_macro_input!(input); + let normalised_ident = format_ident!("Normalised{}", ident); + let type_name = ident.to_string(); // TODO: Allow user to override using macro attribute + + // TODO: Build test suite for what I want out of this macro + + quote! { + #[derive(#crate_name::internal::NormiSerialize, #crate_name::internal::NormiSpectaType)] + pub struct #normalised_ident { + pub __type: &'static str, + pub __id: #crate_name::internal::NormiSerdeValue, + #[serde(flatten)] + pub data: #ident, + } + + impl #crate_name::Object for #ident { + type NormalizedResult = #normalised_ident; + + fn type_name() -> &'static str { + #type_name + } + + fn id(&self) -> #crate_name::internal::NormiSerdeValue { + // TODO + + #crate_name::internal::NormiSerdeValue::Null + } + + fn normalize(self) -> Self::NormalizedResult { + pub use #crate_name::Object; + + #normalised_ident { + __type: Self::type_name(), + __id: self.id(), + data: self, + } + } + } + } + .into() +} diff --git a/crates/normi/src/lib.rs b/crates/normi/src/lib.rs new file mode 100644 index 00000000..42192651 --- /dev/null +++ b/crates/normi/src/lib.rs @@ -0,0 +1,27 @@ +//! normi: a normalised caching system in Rust. Designed to work with rspc. +#![forbid(unsafe_code)] +#![warn( + clippy::all, + clippy::cargo, + clippy::unwrap_used, + clippy::panic, + clippy::todo, + clippy::panic_in_result_fn, + // missing_docs +)] + +mod object; +#[cfg(feature = "rspc")] +mod rspc; + +#[cfg(feature = "rspc")] +pub use crate::rspc::*; +pub use normi_macros::*; +pub use object::*; + +// plz rename types in this module so they are gonna show up in rust-analyzer recommended imports for external crates +pub mod internal { + pub use serde::Serialize as NormiSerialize; + pub use serde_json::Value as NormiSerdeValue; + pub use specta::Type as NormiSpectaType; +} diff --git a/crates/normi/src/object.rs b/crates/normi/src/object.rs new file mode 100644 index 00000000..0549779d --- /dev/null +++ b/crates/normi/src/object.rs @@ -0,0 +1,20 @@ +use serde::Serialize; +use serde_json::Value; +use specta::Type; +use std::any::type_name; + +/// TODO +pub trait Object { + type NormalizedResult: Serialize + Type + Send; + + /// is used to determine the type of the current object. It will define to Rust's debug type name but you SHOULD override it. + fn type_name() -> &'static str { + type_name::() + } + + /// is used to determine the unique identifier for this object. The id must be unique between all objects of the same type. + fn id(&self) -> Value; + + /// TODO + fn normalize(self) -> Self::NormalizedResult; +} diff --git a/crates/normi/src/rspc.rs b/crates/normi/src/rspc.rs new file mode 100644 index 00000000..ac26401c --- /dev/null +++ b/crates/normi/src/rspc.rs @@ -0,0 +1,58 @@ +use rspc::{ + internal::BuiltProcedureBuilder, + // TODO: All of these following types should probs be in `rspc::internal`! + DoubleArgMarker, + FutureMarker, + RequestResolver, + RequestResult, + ResultMarker, +}; +use serde::de::DeserializeOwned; +use specta::Type; + +use crate::Object; + +// TODO: Convert this in a macro in rspc maybe??? +pub fn typed( + builder: BuiltProcedureBuilder, +) -> BuiltProcedureBuilder< + impl RequestResolver< + TLayerCtx, + DoubleArgMarker>, + FutureMarker, + Arg = TArg, + Data = ::NormalizedResult, + >, +> +where + TLayerCtx: Send + Sync + 'static, + TResolver: RequestResolver< + TLayerCtx, + TResolverMarker, + TResultMarker, + Arg = TArg, + Result = TIncomingResult, + >, + TResolver::Data: Object, + TIncomingResult: RequestResult, + TIncomingResult::Data: Object, + // <>::Result as RequestResult>::Data: Object, + TArg: Type + DeserializeOwned, +{ + // TODO: rspc global store accessible here + + // TODO: Mount into store and error on duplicate type name + + println!("STARTUP {}", TResolver::Data::type_name()); + + BuiltProcedureBuilder { + resolver: move |ctx, arg| { + let val = builder.resolver.exec(ctx, arg); + + async { + let x = val?.exec().await.unwrap(); + Ok(x.normalize()) + } + }, + } +} diff --git a/src/internal/execute.rs b/src/internal/execute.rs deleted file mode 100644 index 8b137891..00000000 --- a/src/internal/execute.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/internal/mod.rs b/src/internal/mod.rs index f929aded..6774daba 100644 --- a/src/internal/mod.rs +++ b/src/internal/mod.rs @@ -1,17 +1,13 @@ //! Internal types which power rspc. The module provides no guarantee of compatibility between updates, so you should be careful rely on types from it. -mod execute; pub mod jsonrpc; mod jsonrpc_exec; mod middleware; mod procedure_builder; mod procedure_store; -mod subscription_manager; -pub use execute::*; pub use middleware::*; pub use procedure_builder::*; pub use procedure_store::*; -pub use subscription_manager::*; pub use specta; diff --git a/src/internal/subscription_manager.rs b/src/internal/subscription_manager.rs deleted file mode 100644 index a3b7c3b0..00000000 --- a/src/internal/subscription_manager.rs +++ /dev/null @@ -1,43 +0,0 @@ -use std::sync::Arc; -// use tokio::sync::{oneshot, Mutex}; - -/// is responsible for managing all of the subscriptions. -pub struct SubscriptionManager { - // subscriptions: Mutex< - // HashMap< - // (), // ( - // // /* operation key */ String, - // // /* method */ String, - // // /* id */ String, - // // ), - // // oneshot::Sender<()>, - // >, - // >, -} - -impl SubscriptionManager { - pub fn new() -> Arc { - Arc::new(Self { - // subscriptions: Mutex::new(HashMap::new()), - }) - } - - // pub fn register(&self, operation: String, method: String, id: String) -> oneshot::Receiver<()> { - // let (tx, rx) = oneshot::channel(); - // self.subscriptions - // .lock() - // .unwrap() - // .insert((operation, method, id), tx); - // rx - // } - - // pub fn unregister(&self, operation: String, method: String, id: String) -> Result<(), ()> { - // self.subscriptions - // .lock() - // .unwrap() - // .remove(&(operation, method, id)) - // .ok_or(())? - // .send(()) - // .map(|_| ()) - // } -} diff --git a/src/resolver.rs b/src/resolver.rs index 26302e9a..224940ed 100644 --- a/src/resolver.rs +++ b/src/resolver.rs @@ -13,6 +13,7 @@ use crate::{ pub trait RequestResolver: Send + Sync + 'static { type Arg: DeserializeOwned + Type; type Result: RequestResult; + type Data; fn exec( &self, @@ -35,6 +36,7 @@ where { type Result = TResult; type Arg = TArg; + type Data = TResult::Data; fn exec( &self, @@ -64,54 +66,6 @@ where } } -// pub struct NoArgMarker(/* private */ PhantomData); -// impl Resolver> for TFunc -// where -// TFunc: Fn() -> TResult, -// TResult: IntoLayerResult + Type, -// { -// fn exec(&self, _ctx: TCtx, _arg: Value) -> Result { -// self().into_layer_result() -// } -// -// fn typedef(defs: &mut TypeDefs) -> ProcedureDataType { -// ProcedureDataType { -// arg_ty: <() as Type>::def(DefOpts { -// parent_inline: true, -// type_map: defs, -// }), -// result_ty: ::def(DefOpts { -// parent_inline: true, -// type_map: defs, -// }), -// } -// } -// } -// -// pub struct SingleArgMarker(/* private */ PhantomData); -// impl Resolver> for TFunc -// where -// TFunc: Fn(TCtx) -> TResult, -// TResult: IntoLayerResult, -// { -// fn exec(&self, ctx: TCtx, _arg: Value) -> Result { -// self(ctx).into_layer_result() -// } -// -// fn typedef(defs: &mut TypeDefs) -> ProcedureDataType { -// ProcedureDataType { -// arg_ty: <() as Type>::def(DefOpts { -// parent_inline: true, -// type_map: defs, -// }), -// result_ty: ::def(DefOpts { -// parent_inline: true, -// type_map: defs, -// }), -// } -// } -// } - pub trait StreamResolver { fn exec(&self, ctx: TCtx, input: Value) -> Result; From 86f529751c51eeb634154ca834eb851b466035be Mon Sep 17 00:00:00 2001 From: Oscar Beaumont Date: Mon, 3 Oct 2022 22:11:14 +0800 Subject: [PATCH 08/23] move specta crate --- Cargo.toml | 4 ++-- {specta => crates/specta}/Cargo.toml | 0 {specta => crates/specta}/README.md | 0 {specta => crates/specta}/macros/Cargo.toml | 0 {specta => crates/specta}/macros/README.md | 0 {specta => crates/specta}/macros/src/attr/container.rs | 0 {specta => crates/specta}/macros/src/attr/enum.rs | 0 {specta => crates/specta}/macros/src/attr/field.rs | 0 {specta => crates/specta}/macros/src/attr/mod.rs | 0 {specta => crates/specta}/macros/src/attr/struct.rs | 0 {specta => crates/specta}/macros/src/attr/variant.rs | 0 {specta => crates/specta}/macros/src/enum.rs | 0 {specta => crates/specta}/macros/src/generics.rs | 0 {specta => crates/specta}/macros/src/lib.rs | 0 {specta => crates/specta}/macros/src/struct.rs | 0 {specta => crates/specta}/macros/src/utils.rs | 0 {specta => crates/specta}/src/datatype.rs | 0 {specta => crates/specta}/src/enum.rs | 0 {specta => crates/specta}/src/impl_type_macros.rs | 0 {specta => crates/specta}/src/lib.rs | 0 {specta => crates/specta}/src/object.rs | 0 {specta => crates/specta}/src/tuple.rs | 0 {specta => crates/specta}/src/typescript.rs | 0 {specta => crates/specta}/tests/lib.rs | 0 {specta => crates/specta}/tests/ts_rs/arrays.rs | 0 {specta => crates/specta}/tests/ts_rs/field_rename.rs | 0 {specta => crates/specta}/tests/ts_rs/flatten.rs | 0 {specta => crates/specta}/tests/ts_rs/list.rs | 0 {specta => crates/specta}/tests/ts_rs/mod.rs | 0 {specta => crates/specta}/tests/ts_rs/nested.rs | 0 {specta => crates/specta}/tests/ts_rs/optional_field.rs | 0 {specta => crates/specta}/tests/ts_rs/raw_idents.rs | 0 {specta => crates/specta}/tests/ts_rs/simple.rs | 0 {specta => crates/specta}/tests/ts_rs/skip.rs | 0 {specta => crates/specta}/tests/ts_rs/struct_rename.rs | 0 {specta => crates/specta}/tests/ts_rs/struct_tag.rs | 0 {specta => crates/specta}/tests/ts_rs/tuple.rs | 0 {specta => crates/specta}/tests/ts_rs/union.rs | 0 {specta => crates/specta}/tests/ts_rs/union_rename.rs | 0 {specta => crates/specta}/tests/ts_rs/union_serde.rs | 0 {specta => crates/specta}/tests/ts_rs/union_with_data.rs | 0 .../specta}/tests/ts_rs/union_with_internal_tag.rs | 0 {specta => crates/specta}/tests/ts_rs/unit.rs | 0 {specta => crates/specta}/tests/typescript.rs | 0 44 files changed, 2 insertions(+), 2 deletions(-) rename {specta => crates/specta}/Cargo.toml (100%) rename {specta => crates/specta}/README.md (100%) rename {specta => crates/specta}/macros/Cargo.toml (100%) rename {specta => crates/specta}/macros/README.md (100%) rename {specta => crates/specta}/macros/src/attr/container.rs (100%) rename {specta => crates/specta}/macros/src/attr/enum.rs (100%) rename {specta => crates/specta}/macros/src/attr/field.rs (100%) rename {specta => crates/specta}/macros/src/attr/mod.rs (100%) rename {specta => crates/specta}/macros/src/attr/struct.rs (100%) rename {specta => crates/specta}/macros/src/attr/variant.rs (100%) rename {specta => crates/specta}/macros/src/enum.rs (100%) rename {specta => crates/specta}/macros/src/generics.rs (100%) rename {specta => crates/specta}/macros/src/lib.rs (100%) rename {specta => crates/specta}/macros/src/struct.rs (100%) rename {specta => crates/specta}/macros/src/utils.rs (100%) rename {specta => crates/specta}/src/datatype.rs (100%) rename {specta => crates/specta}/src/enum.rs (100%) rename {specta => crates/specta}/src/impl_type_macros.rs (100%) rename {specta => crates/specta}/src/lib.rs (100%) rename {specta => crates/specta}/src/object.rs (100%) rename {specta => crates/specta}/src/tuple.rs (100%) rename {specta => crates/specta}/src/typescript.rs (100%) rename {specta => crates/specta}/tests/lib.rs (100%) rename {specta => crates/specta}/tests/ts_rs/arrays.rs (100%) rename {specta => crates/specta}/tests/ts_rs/field_rename.rs (100%) rename {specta => crates/specta}/tests/ts_rs/flatten.rs (100%) rename {specta => crates/specta}/tests/ts_rs/list.rs (100%) rename {specta => crates/specta}/tests/ts_rs/mod.rs (100%) rename {specta => crates/specta}/tests/ts_rs/nested.rs (100%) rename {specta => crates/specta}/tests/ts_rs/optional_field.rs (100%) rename {specta => crates/specta}/tests/ts_rs/raw_idents.rs (100%) rename {specta => crates/specta}/tests/ts_rs/simple.rs (100%) rename {specta => crates/specta}/tests/ts_rs/skip.rs (100%) rename {specta => crates/specta}/tests/ts_rs/struct_rename.rs (100%) rename {specta => crates/specta}/tests/ts_rs/struct_tag.rs (100%) rename {specta => crates/specta}/tests/ts_rs/tuple.rs (100%) rename {specta => crates/specta}/tests/ts_rs/union.rs (100%) rename {specta => crates/specta}/tests/ts_rs/union_rename.rs (100%) rename {specta => crates/specta}/tests/ts_rs/union_serde.rs (100%) rename {specta => crates/specta}/tests/ts_rs/union_with_data.rs (100%) rename {specta => crates/specta}/tests/ts_rs/union_with_internal_tag.rs (100%) rename {specta => crates/specta}/tests/ts_rs/unit.rs (100%) rename {specta => crates/specta}/tests/typescript.rs (100%) diff --git a/Cargo.toml b/Cargo.toml index 48f27f59..959e0b7c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -59,9 +59,9 @@ async-stream = "0.3.3" members = [ "./crates/normi", "./crates/normi/macros", + "./crates/specta", + "./crates/specta/macros", "./create-rspc-app", "./examples", "./examples/axum", - "./specta", - "./specta/macros" ] diff --git a/specta/Cargo.toml b/crates/specta/Cargo.toml similarity index 100% rename from specta/Cargo.toml rename to crates/specta/Cargo.toml diff --git a/specta/README.md b/crates/specta/README.md similarity index 100% rename from specta/README.md rename to crates/specta/README.md diff --git a/specta/macros/Cargo.toml b/crates/specta/macros/Cargo.toml similarity index 100% rename from specta/macros/Cargo.toml rename to crates/specta/macros/Cargo.toml diff --git a/specta/macros/README.md b/crates/specta/macros/README.md similarity index 100% rename from specta/macros/README.md rename to crates/specta/macros/README.md diff --git a/specta/macros/src/attr/container.rs b/crates/specta/macros/src/attr/container.rs similarity index 100% rename from specta/macros/src/attr/container.rs rename to crates/specta/macros/src/attr/container.rs diff --git a/specta/macros/src/attr/enum.rs b/crates/specta/macros/src/attr/enum.rs similarity index 100% rename from specta/macros/src/attr/enum.rs rename to crates/specta/macros/src/attr/enum.rs diff --git a/specta/macros/src/attr/field.rs b/crates/specta/macros/src/attr/field.rs similarity index 100% rename from specta/macros/src/attr/field.rs rename to crates/specta/macros/src/attr/field.rs diff --git a/specta/macros/src/attr/mod.rs b/crates/specta/macros/src/attr/mod.rs similarity index 100% rename from specta/macros/src/attr/mod.rs rename to crates/specta/macros/src/attr/mod.rs diff --git a/specta/macros/src/attr/struct.rs b/crates/specta/macros/src/attr/struct.rs similarity index 100% rename from specta/macros/src/attr/struct.rs rename to crates/specta/macros/src/attr/struct.rs diff --git a/specta/macros/src/attr/variant.rs b/crates/specta/macros/src/attr/variant.rs similarity index 100% rename from specta/macros/src/attr/variant.rs rename to crates/specta/macros/src/attr/variant.rs diff --git a/specta/macros/src/enum.rs b/crates/specta/macros/src/enum.rs similarity index 100% rename from specta/macros/src/enum.rs rename to crates/specta/macros/src/enum.rs diff --git a/specta/macros/src/generics.rs b/crates/specta/macros/src/generics.rs similarity index 100% rename from specta/macros/src/generics.rs rename to crates/specta/macros/src/generics.rs diff --git a/specta/macros/src/lib.rs b/crates/specta/macros/src/lib.rs similarity index 100% rename from specta/macros/src/lib.rs rename to crates/specta/macros/src/lib.rs diff --git a/specta/macros/src/struct.rs b/crates/specta/macros/src/struct.rs similarity index 100% rename from specta/macros/src/struct.rs rename to crates/specta/macros/src/struct.rs diff --git a/specta/macros/src/utils.rs b/crates/specta/macros/src/utils.rs similarity index 100% rename from specta/macros/src/utils.rs rename to crates/specta/macros/src/utils.rs diff --git a/specta/src/datatype.rs b/crates/specta/src/datatype.rs similarity index 100% rename from specta/src/datatype.rs rename to crates/specta/src/datatype.rs diff --git a/specta/src/enum.rs b/crates/specta/src/enum.rs similarity index 100% rename from specta/src/enum.rs rename to crates/specta/src/enum.rs diff --git a/specta/src/impl_type_macros.rs b/crates/specta/src/impl_type_macros.rs similarity index 100% rename from specta/src/impl_type_macros.rs rename to crates/specta/src/impl_type_macros.rs diff --git a/specta/src/lib.rs b/crates/specta/src/lib.rs similarity index 100% rename from specta/src/lib.rs rename to crates/specta/src/lib.rs diff --git a/specta/src/object.rs b/crates/specta/src/object.rs similarity index 100% rename from specta/src/object.rs rename to crates/specta/src/object.rs diff --git a/specta/src/tuple.rs b/crates/specta/src/tuple.rs similarity index 100% rename from specta/src/tuple.rs rename to crates/specta/src/tuple.rs diff --git a/specta/src/typescript.rs b/crates/specta/src/typescript.rs similarity index 100% rename from specta/src/typescript.rs rename to crates/specta/src/typescript.rs diff --git a/specta/tests/lib.rs b/crates/specta/tests/lib.rs similarity index 100% rename from specta/tests/lib.rs rename to crates/specta/tests/lib.rs diff --git a/specta/tests/ts_rs/arrays.rs b/crates/specta/tests/ts_rs/arrays.rs similarity index 100% rename from specta/tests/ts_rs/arrays.rs rename to crates/specta/tests/ts_rs/arrays.rs diff --git a/specta/tests/ts_rs/field_rename.rs b/crates/specta/tests/ts_rs/field_rename.rs similarity index 100% rename from specta/tests/ts_rs/field_rename.rs rename to crates/specta/tests/ts_rs/field_rename.rs diff --git a/specta/tests/ts_rs/flatten.rs b/crates/specta/tests/ts_rs/flatten.rs similarity index 100% rename from specta/tests/ts_rs/flatten.rs rename to crates/specta/tests/ts_rs/flatten.rs diff --git a/specta/tests/ts_rs/list.rs b/crates/specta/tests/ts_rs/list.rs similarity index 100% rename from specta/tests/ts_rs/list.rs rename to crates/specta/tests/ts_rs/list.rs diff --git a/specta/tests/ts_rs/mod.rs b/crates/specta/tests/ts_rs/mod.rs similarity index 100% rename from specta/tests/ts_rs/mod.rs rename to crates/specta/tests/ts_rs/mod.rs diff --git a/specta/tests/ts_rs/nested.rs b/crates/specta/tests/ts_rs/nested.rs similarity index 100% rename from specta/tests/ts_rs/nested.rs rename to crates/specta/tests/ts_rs/nested.rs diff --git a/specta/tests/ts_rs/optional_field.rs b/crates/specta/tests/ts_rs/optional_field.rs similarity index 100% rename from specta/tests/ts_rs/optional_field.rs rename to crates/specta/tests/ts_rs/optional_field.rs diff --git a/specta/tests/ts_rs/raw_idents.rs b/crates/specta/tests/ts_rs/raw_idents.rs similarity index 100% rename from specta/tests/ts_rs/raw_idents.rs rename to crates/specta/tests/ts_rs/raw_idents.rs diff --git a/specta/tests/ts_rs/simple.rs b/crates/specta/tests/ts_rs/simple.rs similarity index 100% rename from specta/tests/ts_rs/simple.rs rename to crates/specta/tests/ts_rs/simple.rs diff --git a/specta/tests/ts_rs/skip.rs b/crates/specta/tests/ts_rs/skip.rs similarity index 100% rename from specta/tests/ts_rs/skip.rs rename to crates/specta/tests/ts_rs/skip.rs diff --git a/specta/tests/ts_rs/struct_rename.rs b/crates/specta/tests/ts_rs/struct_rename.rs similarity index 100% rename from specta/tests/ts_rs/struct_rename.rs rename to crates/specta/tests/ts_rs/struct_rename.rs diff --git a/specta/tests/ts_rs/struct_tag.rs b/crates/specta/tests/ts_rs/struct_tag.rs similarity index 100% rename from specta/tests/ts_rs/struct_tag.rs rename to crates/specta/tests/ts_rs/struct_tag.rs diff --git a/specta/tests/ts_rs/tuple.rs b/crates/specta/tests/ts_rs/tuple.rs similarity index 100% rename from specta/tests/ts_rs/tuple.rs rename to crates/specta/tests/ts_rs/tuple.rs diff --git a/specta/tests/ts_rs/union.rs b/crates/specta/tests/ts_rs/union.rs similarity index 100% rename from specta/tests/ts_rs/union.rs rename to crates/specta/tests/ts_rs/union.rs diff --git a/specta/tests/ts_rs/union_rename.rs b/crates/specta/tests/ts_rs/union_rename.rs similarity index 100% rename from specta/tests/ts_rs/union_rename.rs rename to crates/specta/tests/ts_rs/union_rename.rs diff --git a/specta/tests/ts_rs/union_serde.rs b/crates/specta/tests/ts_rs/union_serde.rs similarity index 100% rename from specta/tests/ts_rs/union_serde.rs rename to crates/specta/tests/ts_rs/union_serde.rs diff --git a/specta/tests/ts_rs/union_with_data.rs b/crates/specta/tests/ts_rs/union_with_data.rs similarity index 100% rename from specta/tests/ts_rs/union_with_data.rs rename to crates/specta/tests/ts_rs/union_with_data.rs diff --git a/specta/tests/ts_rs/union_with_internal_tag.rs b/crates/specta/tests/ts_rs/union_with_internal_tag.rs similarity index 100% rename from specta/tests/ts_rs/union_with_internal_tag.rs rename to crates/specta/tests/ts_rs/union_with_internal_tag.rs diff --git a/specta/tests/ts_rs/unit.rs b/crates/specta/tests/ts_rs/unit.rs similarity index 100% rename from specta/tests/ts_rs/unit.rs rename to crates/specta/tests/ts_rs/unit.rs diff --git a/specta/tests/typescript.rs b/crates/specta/tests/typescript.rs similarity index 100% rename from specta/tests/typescript.rs rename to crates/specta/tests/typescript.rs From f64fd74b1ef242d5346de3abee11d106e6d19796 Mon Sep 17 00:00:00 2001 From: Oscar Beaumont Date: Mon, 3 Oct 2022 22:49:03 +0800 Subject: [PATCH 09/23] rspc global store + normi check for duplicate types --- Cargo.toml | 2 +- crates/normi/Cargo.toml | 2 +- crates/normi/examples/basic.rs | 21 ++++++++++++++++++--- crates/normi/src/object.rs | 2 +- crates/normi/src/rspc.rs | 26 +++++++++++++++++++++++--- src/internal/procedure_builder.rs | 22 ++++++++++++++++------ src/router_builder.rs | 21 +++++++++++++++++---- 7 files changed, 77 insertions(+), 19 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 959e0b7c..f6cf84f9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,7 +41,7 @@ bit-vec = ["specta/bit-vec"] bson = ["specta/bson"] [dependencies] -specta = { version = "0.0.4", path = "./specta", features = ["serde"] } +specta = { version = "0.0.4", path = "./crates/specta", features = ["serde"] } httpz = { git = "https://github.com/oscartbeaumont/httpz.git", optional = true } # TODO: Move back to crates.io release serde = { version = "1.0.145", features = ["derive"] } serde_json = "1.0.85" diff --git a/crates/normi/Cargo.toml b/crates/normi/Cargo.toml index d982c659..85b8acc7 100644 --- a/crates/normi/Cargo.toml +++ b/crates/normi/Cargo.toml @@ -12,7 +12,7 @@ rspc = { path = "../../", optional = true } normi-macros = { path = "./macros" } serde = "1.0.145" serde_json = "1.0.85" -specta = { version = "0.0.4", path = "../../specta" } +specta = { version = "0.0.4", path = "../specta" } [dev-dependencies] rspc = { path = "../../", features = ["axum"] } diff --git a/crates/normi/examples/basic.rs b/crates/normi/examples/basic.rs index fb8a5c3f..a1813025 100644 --- a/crates/normi/examples/basic.rs +++ b/crates/normi/examples/basic.rs @@ -18,11 +18,26 @@ use tower_http::cors::{Any, CorsLayer}; #[derive(Serialize, Type, Object)] pub struct User { - // #[normi(id)] + #[normi(id)] pub id: String, pub name: String, } +// TODO: Unit test this +// mod bruh { +// use axum::routing::get; +// use normi::{typed, Object}; +// use rspc::{Router, Type}; +// use serde::Serialize; + +// #[derive(Serialize, Type, Object)] +// pub struct User { +// // #[normi(id)] +// pub id: String, +// pub name: String, +// } +// } + // #[derive(Serialize, Type, Object)] // pub struct CompositeId { // #[normi(id)] @@ -36,14 +51,14 @@ async fn main() { let router = ::new() .query("version", |t| t(|_, _: ()| "0.1.0")) .query("userSync", |t| { - t(|_, _: ()| User { + t.resolver(|_, _: ()| User { id: "1".to_string(), name: "Monty Beaumont".to_string(), }) .map(typed) }) .query("user", |t| { - t(|_, _: ()| async move { + t.resolver(|_, _: ()| async move { Ok(User { id: "1".to_string(), name: "Monty Beaumont".to_string(), diff --git a/crates/normi/src/object.rs b/crates/normi/src/object.rs index 0549779d..a9a3dfba 100644 --- a/crates/normi/src/object.rs +++ b/crates/normi/src/object.rs @@ -4,7 +4,7 @@ use specta::Type; use std::any::type_name; /// TODO -pub trait Object { +pub trait Object: 'static { type NormalizedResult: Serialize + Type + Send; /// is used to determine the type of the current object. It will define to Rust's debug type name but you SHOULD override it. diff --git a/crates/normi/src/rspc.rs b/crates/normi/src/rspc.rs index ac26401c..3c1618b8 100644 --- a/crates/normi/src/rspc.rs +++ b/crates/normi/src/rspc.rs @@ -1,3 +1,5 @@ +use std::{any::TypeId, collections::HashMap}; + use rspc::{ internal::BuiltProcedureBuilder, // TODO: All of these following types should probs be in `rspc::internal`! @@ -12,6 +14,11 @@ use specta::Type; use crate::Object; +#[derive(Default)] +pub struct NormiContext { + types: HashMap<&'static str, TypeId>, +} + // TODO: Convert this in a macro in rspc maybe??? pub fn typed( builder: BuiltProcedureBuilder, @@ -39,13 +46,26 @@ where // <>::Result as RequestResult>::Data: Object, TArg: Type + DeserializeOwned, { - // TODO: rspc global store accessible here + { + let mut data = builder.data.as_ref().unwrap().write().unwrap(); - // TODO: Mount into store and error on duplicate type name + let ctx = data + .entry(TypeId::of::()) + .or_insert_with(|| Box::new(NormiContext::default()) as Box) + .downcast_mut::() + .unwrap(); - println!("STARTUP {}", TResolver::Data::type_name()); + let expected_tid = ctx + .types + .entry(TResolver::Data::type_name()) + .or_insert_with(|| TypeId::of::()); + if *expected_tid != TypeId::of::() { + panic!("A types with typeid '{:?}' and '{:?}' were both mounted with an identical type name '{}'. The type name must be unique!", expected_tid, TypeId::of::(), TResolver::Data::type_name()); + } + } BuiltProcedureBuilder { + data: builder.data, resolver: move |ctx, arg| { let val = builder.resolver.exec(ctx, arg); diff --git a/src/internal/procedure_builder.rs b/src/internal/procedure_builder.rs index 16160e07..f47b3a76 100644 --- a/src/internal/procedure_builder.rs +++ b/src/internal/procedure_builder.rs @@ -1,22 +1,30 @@ use std::{marker::PhantomData, ops::Deref}; +use crate::GlobalData; + pub struct UnbuiltProcedureBuilder { + data: GlobalData, deref_handler: fn(TResolver) -> BuiltProcedureBuilder, phantom: PhantomData, } -impl Default for UnbuiltProcedureBuilder { - fn default() -> Self { +impl UnbuiltProcedureBuilder { + pub fn new(data: GlobalData) -> Self { Self { - deref_handler: |resolver| BuiltProcedureBuilder { resolver }, + data, + deref_handler: |resolver| BuiltProcedureBuilder { + data: None, + resolver, + }, phantom: PhantomData, } } -} -impl UnbuiltProcedureBuilder { pub fn resolver(self, resolver: TResolver) -> BuiltProcedureBuilder { - (self.deref_handler)(resolver) + BuiltProcedureBuilder { + data: Some(self.data), + resolver, + } } } @@ -29,6 +37,8 @@ impl Deref for UnbuiltProcedureBuilder { + // TODO: This shouldn't be an option + pub data: Option, pub resolver: TResolver, } diff --git a/src/router_builder.rs b/src/router_builder.rs index a7ae7552..f1c4ca26 100644 --- a/src/router_builder.rs +++ b/src/router_builder.rs @@ -1,4 +1,9 @@ -use std::marker::PhantomData; +use std::{ + any::{Any, TypeId}, + collections::HashMap, + marker::PhantomData, + sync::{Arc, RwLock}, +}; use futures::Stream; use serde::{de::DeserializeOwned, Serialize}; @@ -13,6 +18,8 @@ use crate::{ RequestResult, Router, StreamResolver, }; +pub type GlobalData = Arc>>>; + pub struct RouterBuilder< TCtx = (), // The is the context the current router was initialised with TMeta = (), @@ -22,6 +29,7 @@ pub struct RouterBuilder< TMeta: Send + 'static, TMiddleware: MiddlewareBuilderLike + Send + 'static, { + data: GlobalData, config: Config, middleware: TMiddleware, queries: ProcedureStore, @@ -50,6 +58,7 @@ where { pub fn new() -> Self { Self { + data: GlobalData::default(), config: Config::new(), middleware: BaseMiddleware::default(), queries: ProcedureStore::new("query"), @@ -87,6 +96,7 @@ where TNewMiddleware: MiddlewareLike + Send + Sync + 'static, { let Self { + data, config, middleware, queries, @@ -98,6 +108,7 @@ where let mw = builder(MiddlewareBuilder(PhantomData)); RouterBuilder { + data, config, middleware: MiddlewareLayerBuilder { middleware, @@ -131,7 +142,7 @@ where TUnbuiltResult: RequestResult, TBuiltResolver: RequestResolver, { - let resolver = builder(UnbuiltProcedureBuilder::default()).resolver; + let resolver = builder(UnbuiltProcedureBuilder::new(self.data.clone())).resolver; self.queries.append( key.into(), @@ -171,7 +182,7 @@ where TUnbuiltResult: RequestResult, TBuiltResolver: RequestResolver, { - let resolver = builder(UnbuiltProcedureBuilder::default()).resolver; + let resolver = builder(UnbuiltProcedureBuilder::new(self.data.clone())).resolver; self.mutations.append( key.into(), self.middleware.build(ResolverLayer { @@ -208,7 +219,7 @@ where + Sync + 'static, { - let resolver = builder(UnbuiltProcedureBuilder::default()).resolver; + let resolver = builder(UnbuiltProcedureBuilder::new(self.data.clone())).resolver; self.subscriptions.append( key.into(), self.middleware.build(ResolverLayer { @@ -251,6 +262,7 @@ where } let Self { + data, config, middleware, mut queries, @@ -289,6 +301,7 @@ where } RouterBuilder { + data, config, middleware: MiddlewareMerger { middleware, From dbc0f3772d920726f0378443ec8309c62ee883b9 Mon Sep 17 00:00:00 2001 From: Oscar Beaumont Date: Tue, 4 Oct 2022 00:27:49 +0800 Subject: [PATCH 10/23] normi: normalising subtypes --- crates/normi/examples/basic.rs | 92 +++++++++++------- crates/normi/macros/src/lib.rs | 173 ++++++++++++++++++++++++++++++--- crates/normi/src/lib.rs | 2 + crates/normi/src/object.rs | 36 +++++-- crates/normi/src/rspc.rs | 2 +- 5 files changed, 251 insertions(+), 54 deletions(-) diff --git a/crates/normi/examples/basic.rs b/crates/normi/examples/basic.rs index a1813025..74f0aa90 100644 --- a/crates/normi/examples/basic.rs +++ b/crates/normi/examples/basic.rs @@ -1,20 +1,21 @@ use axum::routing::get; use normi::{typed, Object}; -use rspc::{Router, Type}; +use rspc::{Config, Router, Type}; use serde::Serialize; use tower_http::cors::{Any, CorsLayer}; -// #[derive(Serialize, Type, Object)] -// #[normi(name = "org")] -// pub struct Organisation { -// pub id: String, -// pub name: String, -// #[normi(refr)] -// pub users: Vec, -// #[normi(refr)] -// pub owner: User, -// pub non_normalised_data: Vec<()>, -// } +#[derive(Serialize, Type, Object)] +// #[normi(rename = "org")] +pub struct Organisation { + #[normi(id)] + pub id: String, + pub name: String, + #[normi(refr)] + pub users: Vec, + #[normi(refr)] + pub owner: User, + pub non_normalised_data: Vec<()>, +} #[derive(Serialize, Type, Object)] pub struct User { @@ -23,32 +24,20 @@ pub struct User { pub name: String, } -// TODO: Unit test this -// mod bruh { -// use axum::routing::get; -// use normi::{typed, Object}; -// use rspc::{Router, Type}; -// use serde::Serialize; +// TODO: Unit test this duplicate naming -// #[derive(Serialize, Type, Object)] -// pub struct User { -// // #[normi(id)] -// pub id: String, -// pub name: String, -// } -// } - -// #[derive(Serialize, Type, Object)] -// pub struct CompositeId { -// #[normi(id)] -// pub org_id: String, -// #[normi(id)] -// pub user_id: String, -// } +#[derive(Serialize, Type, Object)] +pub struct CompositeId { + #[normi(id)] + pub org_id: String, + #[normi(id)] + pub user_id: String, +} #[tokio::main] async fn main() { let router = ::new() + .config(Config::new().export_ts_bindings("./bindings.ts")) .query("version", |t| t(|_, _: ()| "0.1.0")) .query("userSync", |t| { t.resolver(|_, _: ()| User { @@ -66,6 +55,43 @@ async fn main() { }) .map(typed) }) + .query("org", |t| { + t.resolver(|_, _: ()| async move { + Ok(Organisation { + id: "org-1".into(), + name: "Org 1".into(), + users: vec![ + User { + id: "user-1".into(), + name: "Monty Beaumont".into(), + }, + User { + id: "user-2".into(), + name: "Millie Beaumont".into(), + }, + User { + id: "user-3".into(), + name: "Oscar Beaumont".into(), + }, + ], + owner: User { + id: "user-1".into(), + name: "Monty Beaumont".into(), + }, + non_normalised_data: vec![(), ()], + }) + }) + .map(typed) + }) + .query("composite", |t| { + t.resolver(|_, _: ()| async move { + Ok(CompositeId { + org_id: "org-1".into(), + user_id: "user-1".into(), + }) + }) + .map(typed) + }) .build() .arced(); diff --git a/crates/normi/macros/src/lib.rs b/crates/normi/macros/src/lib.rs index ab6ae1e3..b9e8dfaa 100644 --- a/crates/normi/macros/src/lib.rs +++ b/crates/normi/macros/src/lib.rs @@ -1,23 +1,170 @@ use proc_macro::TokenStream; -use quote::{format_ident, quote}; -use syn::{parse_macro_input, DeriveInput}; +use quote::{format_ident, quote, ToTokens}; +use syn::{parse_macro_input, Attribute, Data, DeriveInput, Field}; + +macro_rules! syn_err { + ($l:literal $(, $a:expr)*) => { + syn_err!(proc_macro2::Span::call_site(); $l $(, $a)*) + }; + ($s:expr; $l:literal $(, $a:expr)*) => { + return Err(syn::Error::new($s, format!($l $(, $a)*))) + }; +} + +macro_rules! impl_parse { + ($i:ident ($input:ident, $out:ident) { $($k:pat => $e:expr),* $(,)? }) => { + impl std::convert::TryFrom<&syn::Attribute> for $i { + type Error = syn::Error; + + fn try_from(attr: &syn::Attribute) -> syn::Result { attr.parse_args() } + } + + impl syn::parse::Parse for $i { + fn parse($input: syn::parse::ParseStream) -> syn::Result { + #[allow(warnings)] + let mut $out = $i::default(); + loop { + let key: syn::Ident = $input.call(syn::ext::IdentExt::parse_any)?; + match &*key.to_string() { + $($k => $e,)* + #[allow(unreachable_patterns)] + _ => syn_err!($input.span(); "unexpected attribute") + } + + match $input.is_empty() { + true => break, + false => { + $input.parse::()?; + } + } + } + + Ok($out) + } + } + }; +} + +fn parse_attrs<'a, A>(attrs: &'a [Attribute]) -> syn::Result> +where + A: TryFrom<&'a Attribute, Error = syn::Error>, +{ + Ok(attrs + .iter() + .filter(|a| a.path.is_ident("normi")) + .map(A::try_from) + .collect::>>()? + .into_iter()) +} + +#[derive(Default, Clone, Debug)] +struct FieldAttrs { + pub id: bool, + pub refr: bool, +} + +impl FieldAttrs { + pub fn from_attrs(attrs: &[Attribute]) -> syn::Result { + let mut result = Self::default(); + parse_attrs(attrs)?.for_each(|a: FieldAttrs| { + result.id = a.id || result.id; + result.refr = a.refr || result.refr; + }); + Ok(result) + } +} + +impl_parse! { + FieldAttrs(input, out) { + "id" => out.id = true, + "refr" => out.refr = true, + } +} #[proc_macro_derive(Object, attributes(normi))] pub fn derive_object(input: TokenStream) -> TokenStream { let crate_name = format_ident!("normi"); - let DeriveInput { ident, .. } = parse_macro_input!(input); + let DeriveInput { + ident, data, attrs, .. + } = parse_macro_input!(input); let normalised_ident = format_ident!("Normalised{}", ident); let type_name = ident.to_string(); // TODO: Allow user to override using macro attribute // TODO: Build test suite for what I want out of this macro + // for v in attrs.iter().filter(|a| a.path.is_ident("specta")) { + // println!("{:?}", v.to_token_stream().to_string()); + // } + + let mut id_fields = Vec::new(); + let fields = match data { + Data::Struct(data) => { + for field in data.fields.iter() { + match field { + Field { + ident: ident, + attrs, + .. + } => { + let ident = ident.clone().unwrap(); + let attrs = FieldAttrs::from_attrs(&attrs).unwrap(); + attrs.id.then(|| id_fields.push(ident)); + } + _ => todo!(), + } + } + + data.fields + } + _ => todo!(), + }; + + let mut id_fields = id_fields.into_iter().peekable(); + let id_impl = match (id_fields.next(), id_fields.peek().is_some()) { + (None, false) => panic!("TODO"), + (None, true) => unreachable!(), + (Some(field_ident), false) => { + quote! ( #crate_name::internal::normi_to_json_value(&self.#field_ident).unwrap() ) + } + (Some(field_ident), true) => { + quote! ( #crate_name::internal::normi_to_json_value(&[&self.#field_ident, #(&self.#id_fields),*]).unwrap() ) + } + }; + + let field_map = fields + .iter() + .map(|f| { + let ident = f.ident.clone().unwrap(); + let attrs = FieldAttrs::from_attrs(&f.attrs).unwrap(); + + if attrs.refr { + quote!( #ident: self.#ident.normalize()? ) + } else { + quote! ( #ident: self.#ident ) + } + }) + .collect::>(); + + let field_decls = fields.into_iter().map(|f| { + let ident = f.ident.unwrap(); + let ty = f.ty; + let vis = f.vis; + + let attrs = FieldAttrs::from_attrs(&f.attrs).unwrap(); + + if attrs.refr { + quote!( #vis #ident: <#ty as #crate_name::Object>::NormalizedResult ) + } else { + quote!( #vis #ident: #ty ) + } + }); + quote! { #[derive(#crate_name::internal::NormiSerialize, #crate_name::internal::NormiSpectaType)] pub struct #normalised_ident { pub __type: &'static str, pub __id: #crate_name::internal::NormiSerdeValue, - #[serde(flatten)] - pub data: #ident, + #(#field_decls,)* } impl #crate_name::Object for #ident { @@ -27,20 +174,18 @@ pub fn derive_object(input: TokenStream) -> TokenStream { #type_name } - fn id(&self) -> #crate_name::internal::NormiSerdeValue { - // TODO - - #crate_name::internal::NormiSerdeValue::Null + fn id(&self) -> #crate_name::internal::NormiResult<#crate_name::internal::NormiSerdeValue> { + Ok(#id_impl) } - fn normalize(self) -> Self::NormalizedResult { + fn normalize(self) -> #crate_name::internal::NormiResult { pub use #crate_name::Object; - #normalised_ident { + Ok(#normalised_ident { __type: Self::type_name(), - __id: self.id(), - data: self, - } + __id: self.id()?, + #(#field_map),* + }) } } } diff --git a/crates/normi/src/lib.rs b/crates/normi/src/lib.rs index 42192651..9e9ae23f 100644 --- a/crates/normi/src/lib.rs +++ b/crates/normi/src/lib.rs @@ -22,6 +22,8 @@ pub use object::*; // plz rename types in this module so they are gonna show up in rust-analyzer recommended imports for external crates pub mod internal { pub use serde::Serialize as NormiSerialize; + pub use serde_json::to_value as normi_to_json_value; pub use serde_json::Value as NormiSerdeValue; pub use specta::Type as NormiSpectaType; + pub type NormiResult = Result; } diff --git a/crates/normi/src/object.rs b/crates/normi/src/object.rs index a9a3dfba..1331771f 100644 --- a/crates/normi/src/object.rs +++ b/crates/normi/src/object.rs @@ -1,20 +1,44 @@ use serde::Serialize; use serde_json::Value; use specta::Type; -use std::any::type_name; /// TODO pub trait Object: 'static { type NormalizedResult: Serialize + Type + Send; /// is used to determine the type of the current object. It will define to Rust's debug type name but you SHOULD override it. - fn type_name() -> &'static str { - type_name::() - } + fn type_name() -> &'static str; /// is used to determine the unique identifier for this object. The id must be unique between all objects of the same type. - fn id(&self) -> Value; + fn id(&self) -> Result; /// TODO - fn normalize(self) -> Self::NormalizedResult; + fn normalize(self) -> Result; +} + +#[derive(Serialize, Type)] +pub struct NormalizedVec { + __type: &'static str, + edges: Vec, +} + +impl Object for Vec { + type NormalizedResult = NormalizedVec; + + fn type_name() -> &'static str { + T::type_name() + } + + fn id(&self) -> Result { + unreachable!(); + } + + fn normalize(self) -> Result { + Ok(NormalizedVec { + __type: Self::type_name(), + edges: self, + }) + } } + +// TODO: All other common container types diff --git a/crates/normi/src/rspc.rs b/crates/normi/src/rspc.rs index 3c1618b8..07b27d64 100644 --- a/crates/normi/src/rspc.rs +++ b/crates/normi/src/rspc.rs @@ -71,7 +71,7 @@ where async { let x = val?.exec().await.unwrap(); - Ok(x.normalize()) + Ok(x.normalize().unwrap()) } }, } From dcbeea62d89b4dcdf1ffeb7700f5bd60d74758b6 Mon Sep 17 00:00:00 2001 From: Oscar Beaumont Date: Tue, 4 Oct 2022 11:11:58 +0800 Subject: [PATCH 11/23] rspc: move more API's into internal crate --- crates/normi/src/rspc.rs | 9 ++------- src/internal/middleware.rs | 2 +- src/{middleware.rs => internal/middleware_builder.rs} | 0 src/internal/mod.rs | 6 ++++++ src/{ => internal}/resolver.rs | 4 ++-- src/{ => internal}/resolver_result.rs | 0 src/lib.rs | 6 ------ src/router_builder.rs | 7 +++++-- 8 files changed, 16 insertions(+), 18 deletions(-) rename src/{middleware.rs => internal/middleware_builder.rs} (100%) rename src/{ => internal}/resolver.rs (97%) rename src/{ => internal}/resolver_result.rs (100%) diff --git a/crates/normi/src/rspc.rs b/crates/normi/src/rspc.rs index 07b27d64..e58b9227 100644 --- a/crates/normi/src/rspc.rs +++ b/crates/normi/src/rspc.rs @@ -1,12 +1,7 @@ use std::{any::TypeId, collections::HashMap}; -use rspc::{ - internal::BuiltProcedureBuilder, - // TODO: All of these following types should probs be in `rspc::internal`! - DoubleArgMarker, - FutureMarker, - RequestResolver, - RequestResult, +use rspc::internal::{ + BuiltProcedureBuilder, DoubleArgMarker, FutureMarker, RequestResolver, RequestResult, ResultMarker, }; use serde::de::DeserializeOwned; diff --git a/src/internal/middleware.rs b/src/internal/middleware.rs index 99a52521..5713ab94 100644 --- a/src/internal/middleware.rs +++ b/src/internal/middleware.rs @@ -5,7 +5,7 @@ use serde::Serialize; use serde_json::Value; use specta::Type; -use crate::{ExecError, MiddlewareLike}; +use crate::{internal::MiddlewareLike, ExecError}; pub trait MiddlewareBuilderLike { type LayerContext: 'static; diff --git a/src/middleware.rs b/src/internal/middleware_builder.rs similarity index 100% rename from src/middleware.rs rename to src/internal/middleware_builder.rs diff --git a/src/internal/mod.rs b/src/internal/mod.rs index 6774daba..6eb78527 100644 --- a/src/internal/mod.rs +++ b/src/internal/mod.rs @@ -3,11 +3,17 @@ pub mod jsonrpc; mod jsonrpc_exec; mod middleware; +mod middleware_builder; mod procedure_builder; mod procedure_store; +mod resolver; +mod resolver_result; pub use middleware::*; +pub use middleware_builder::*; pub use procedure_builder::*; pub use procedure_store::*; +pub use resolver::*; +pub use resolver_result::*; pub use specta; diff --git a/src/resolver.rs b/src/internal/resolver.rs similarity index 97% rename from src/resolver.rs rename to src/internal/resolver.rs index 224940ed..9bc3416a 100644 --- a/src/resolver.rs +++ b/src/internal/resolver.rs @@ -6,8 +6,8 @@ use serde_json::Value; use specta::{DefOpts, Type, TypeDefs}; use crate::{ - internal::{ProcedureDataType, StreamFuture, TypedRequestFuture}, - ExecError, RequestResult, + internal::{ProcedureDataType, RequestResult, StreamFuture, TypedRequestFuture}, + ExecError, }; pub trait RequestResolver: Send + Sync + 'static { diff --git a/src/resolver_result.rs b/src/internal/resolver_result.rs similarity index 100% rename from src/resolver_result.rs rename to src/internal/resolver_result.rs diff --git a/src/lib.rs b/src/lib.rs index 251d07e1..1ca71264 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,18 +12,12 @@ mod config; mod error; -mod middleware; -mod resolver; -mod resolver_result; mod router; mod router_builder; mod selection; pub use config::*; pub use error::*; -pub use middleware::*; -pub use resolver::*; -pub use resolver_result::*; pub use router::*; pub use router_builder::*; diff --git a/src/router_builder.rs b/src/router_builder.rs index f1c4ca26..9abdf891 100644 --- a/src/router_builder.rs +++ b/src/router_builder.rs @@ -14,8 +14,11 @@ use crate::{ BaseMiddleware, BuiltProcedureBuilder, MiddlewareBuilderLike, MiddlewareLayerBuilder, MiddlewareMerger, ProcedureStore, ResolverLayer, UnbuiltProcedureBuilder, }, - Config, DoubleArgStreamMarker, ExecError, MiddlewareBuilder, MiddlewareLike, RequestResolver, - RequestResult, Router, StreamResolver, + internal::{ + DoubleArgStreamMarker, MiddlewareBuilder, MiddlewareLike, RequestResolver, RequestResult, + StreamResolver, + }, + Config, ExecError, Router, }; pub type GlobalData = Arc>>>; From 08c19f5e485dfc6841c7e9877c80058402bf71d7 Mon Sep 17 00:00:00 2001 From: Oscar Beaumont Date: Thu, 6 Oct 2022 20:50:54 +0800 Subject: [PATCH 12/23] more normi work + ResponseAndChannel for SD RN bridge --- .gitignore | 5 +- crates/normi/Cargo.toml | 2 + crates/normi/examples/basic.rs | 2 +- crates/normi/macros/src/attrs.rs | 51 +++++ crates/normi/macros/src/lib.rs | 304 +++++++++++++----------------- crates/normi/macros/src/utils.rs | 67 +++++++ crates/normi/src/lib.rs | 8 +- crates/normi/src/object.rs | 221 +++++++++++++++++++++- crates/normi/tests/macros.rs | 273 +++++++++++++++++++++++++++ crates/normi/tests/macros/fail.rs | 78 ++++++++ crates/normi/tests/object.rs | 4 + crates/normi/tests/rspc.rs | 0 src/internal/jsonrpc_exec.rs | 9 + src/internal/procedure_builder.rs | 4 + src/router_builder.rs | 6 +- 15 files changed, 848 insertions(+), 186 deletions(-) create mode 100644 crates/normi/macros/src/attrs.rs create mode 100644 crates/normi/macros/src/utils.rs create mode 100644 crates/normi/tests/macros.rs create mode 100644 crates/normi/tests/macros/fail.rs create mode 100644 crates/normi/tests/object.rs create mode 100644 crates/normi/tests/rspc.rs diff --git a/.gitignore b/.gitignore index b0c489b9..f91f65cd 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,7 @@ node_modules /packages/*/dist # Compiled vscode extension -*.vsix \ No newline at end of file +*.vsix + +# Trybuild +crates/*/wip \ No newline at end of file diff --git a/crates/normi/Cargo.toml b/crates/normi/Cargo.toml index 85b8acc7..fb3b0317 100644 --- a/crates/normi/Cargo.toml +++ b/crates/normi/Cargo.toml @@ -19,3 +19,5 @@ rspc = { path = "../../", features = ["axum"] } axum = "0.5.16" tokio = { version = "1.21.2", features = ["macros", "rt-multi-thread"] } tower-http = { version = "0.3.4", default-features = false, features = ["cors"] } +trybuild = "1.0.65" +assert-json-diff = "2.0.2" diff --git a/crates/normi/examples/basic.rs b/crates/normi/examples/basic.rs index 74f0aa90..2d800f06 100644 --- a/crates/normi/examples/basic.rs +++ b/crates/normi/examples/basic.rs @@ -5,7 +5,7 @@ use serde::Serialize; use tower_http::cors::{Any, CorsLayer}; #[derive(Serialize, Type, Object)] -// #[normi(rename = "org")] +#[normi(rename = "org")] pub struct Organisation { #[normi(id)] pub id: String, diff --git a/crates/normi/macros/src/attrs.rs b/crates/normi/macros/src/attrs.rs new file mode 100644 index 00000000..16c3a783 --- /dev/null +++ b/crates/normi/macros/src/attrs.rs @@ -0,0 +1,51 @@ +use syn::Attribute; + +use crate::utils::{parse_assign_str, parse_attrs}; + +#[derive(Default, Clone, Debug)] +pub struct FieldAttrs { + pub id: bool, + pub refr: bool, + pub flatten: bool, +} + +impl FieldAttrs { + pub fn from_attrs(attrs: &[Attribute]) -> syn::Result { + let mut result = Self::default(); + parse_attrs(attrs)?.for_each(|a: FieldAttrs| { + result.id = a.id || result.id; + result.refr = a.refr || result.refr; + result.flatten = a.flatten || result.flatten; + }); + Ok(result) + } +} + +impl_parse! { + FieldAttrs(input, out) { + "id" => out.id = true, + "refr" => out.refr = true, + "flatten" => out.flatten = true, + } +} + +#[derive(Default, Clone, Debug)] +pub struct StructAttrs { + pub rename: Option, +} + +impl StructAttrs { + pub fn from_attrs(attrs: &[Attribute]) -> syn::Result { + let mut result = Self::default(); + parse_attrs(attrs)?.for_each(|a: StructAttrs| { + result.rename = result.rename.take().or(a.rename); + }); + Ok(result) + } +} + +impl_parse! { + StructAttrs(input, out) { + "rename" => out.rename = Some(parse_assign_str(input)?), + } +} diff --git a/crates/normi/macros/src/lib.rs b/crates/normi/macros/src/lib.rs index b9e8dfaa..0ab5d8b5 100644 --- a/crates/normi/macros/src/lib.rs +++ b/crates/normi/macros/src/lib.rs @@ -1,85 +1,13 @@ +use attrs::FieldAttrs; use proc_macro::TokenStream; -use quote::{format_ident, quote, ToTokens}; -use syn::{parse_macro_input, Attribute, Data, DeriveInput, Field}; +use quote::{format_ident, quote}; +use syn::{parse_macro_input, Data, DeriveInput, Index}; -macro_rules! syn_err { - ($l:literal $(, $a:expr)*) => { - syn_err!(proc_macro2::Span::call_site(); $l $(, $a)*) - }; - ($s:expr; $l:literal $(, $a:expr)*) => { - return Err(syn::Error::new($s, format!($l $(, $a)*))) - }; -} - -macro_rules! impl_parse { - ($i:ident ($input:ident, $out:ident) { $($k:pat => $e:expr),* $(,)? }) => { - impl std::convert::TryFrom<&syn::Attribute> for $i { - type Error = syn::Error; - - fn try_from(attr: &syn::Attribute) -> syn::Result { attr.parse_args() } - } - - impl syn::parse::Parse for $i { - fn parse($input: syn::parse::ParseStream) -> syn::Result { - #[allow(warnings)] - let mut $out = $i::default(); - loop { - let key: syn::Ident = $input.call(syn::ext::IdentExt::parse_any)?; - match &*key.to_string() { - $($k => $e,)* - #[allow(unreachable_patterns)] - _ => syn_err!($input.span(); "unexpected attribute") - } - - match $input.is_empty() { - true => break, - false => { - $input.parse::()?; - } - } - } +use crate::attrs::StructAttrs; - Ok($out) - } - } - }; -} - -fn parse_attrs<'a, A>(attrs: &'a [Attribute]) -> syn::Result> -where - A: TryFrom<&'a Attribute, Error = syn::Error>, -{ - Ok(attrs - .iter() - .filter(|a| a.path.is_ident("normi")) - .map(A::try_from) - .collect::>>()? - .into_iter()) -} - -#[derive(Default, Clone, Debug)] -struct FieldAttrs { - pub id: bool, - pub refr: bool, -} - -impl FieldAttrs { - pub fn from_attrs(attrs: &[Attribute]) -> syn::Result { - let mut result = Self::default(); - parse_attrs(attrs)?.for_each(|a: FieldAttrs| { - result.id = a.id || result.id; - result.refr = a.refr || result.refr; - }); - Ok(result) - } -} - -impl_parse! { - FieldAttrs(input, out) { - "id" => out.id = true, - "refr" => out.refr = true, - } -} +#[macro_use] +mod utils; +mod attrs; #[proc_macro_derive(Object, attributes(normi))] pub fn derive_object(input: TokenStream) -> TokenStream { @@ -87,107 +15,139 @@ pub fn derive_object(input: TokenStream) -> TokenStream { let DeriveInput { ident, data, attrs, .. } = parse_macro_input!(input); + let args = StructAttrs::from_attrs(&attrs).unwrap(); + let type_name = args.rename.unwrap_or(ident.to_string()); let normalised_ident = format_ident!("Normalised{}", ident); - let type_name = ident.to_string(); // TODO: Allow user to override using macro attribute - // TODO: Build test suite for what I want out of this macro - - // for v in attrs.iter().filter(|a| a.path.is_ident("specta")) { - // println!("{:?}", v.to_token_stream().to_string()); - // } - - let mut id_fields = Vec::new(); - let fields = match data { + match data { Data::Struct(data) => { - for field in data.fields.iter() { - match field { - Field { - ident: ident, - attrs, - .. - } => { - let ident = ident.clone().unwrap(); - let attrs = FieldAttrs::from_attrs(&attrs).unwrap(); - attrs.id.then(|| id_fields.push(ident)); - } - _ => todo!(), - } - } - - data.fields - } - _ => todo!(), - }; - - let mut id_fields = id_fields.into_iter().peekable(); - let id_impl = match (id_fields.next(), id_fields.peek().is_some()) { - (None, false) => panic!("TODO"), - (None, true) => unreachable!(), - (Some(field_ident), false) => { - quote! ( #crate_name::internal::normi_to_json_value(&self.#field_ident).unwrap() ) - } - (Some(field_ident), true) => { - quote! ( #crate_name::internal::normi_to_json_value(&[&self.#field_ident, #(&self.#id_fields),*]).unwrap() ) - } - }; - - let field_map = fields - .iter() - .map(|f| { - let ident = f.ident.clone().unwrap(); - let attrs = FieldAttrs::from_attrs(&f.attrs).unwrap(); - - if attrs.refr { - quote!( #ident: self.#ident.normalize()? ) - } else { - quote! ( #ident: self.#ident ) + let mut fields = data.fields.iter().peekable(); + let is_tuple_struct = fields.peek().map(|v| v.ident.is_some()).expect("normi::Object requires at least one fields"); + + let mut id_fields = Vec::new(); + for (i, field) in fields.enumerate() { + let attrs = FieldAttrs::from_attrs(&field.attrs).unwrap(); + + attrs.id.then(|| id_fields.push( + match &field.ident { + Some(ident) => quote!(self.#ident), + None => { + let i = Index::from(i); + quote!(self.#i) + } + }) + ); } - }) - .collect::>(); - - let field_decls = fields.into_iter().map(|f| { - let ident = f.ident.unwrap(); - let ty = f.ty; - let vis = f.vis; - - let attrs = FieldAttrs::from_attrs(&f.attrs).unwrap(); - - if attrs.refr { - quote!( #vis #ident: <#ty as #crate_name::Object>::NormalizedResult ) - } else { - quote!( #vis #ident: #ty ) - } - }); - - quote! { - #[derive(#crate_name::internal::NormiSerialize, #crate_name::internal::NormiSpectaType)] - pub struct #normalised_ident { - pub __type: &'static str, - pub __id: #crate_name::internal::NormiSerdeValue, - #(#field_decls,)* - } - - impl #crate_name::Object for #ident { - type NormalizedResult = #normalised_ident; + + let mut id_fields = id_fields.into_iter().peekable(); + let _ = id_fields.peek().ok_or_else(|| panic!("normi::Object must have an id field set. Ensure you add `#[normi(id)]`")); + let id_impl = id_fields.peek().map(|field| quote! ( #crate_name::internal::to_value(&#field).unwrap() )).unwrap_or(quote! ( #crate_name::internal::to_value(&[#(&#id_fields),*]).unwrap() )); + + let object_impl_decl = { + let fields = match is_tuple_struct { + true => { + let fields = data.fields + .iter() + .map(|f| { + let attrs = FieldAttrs::from_attrs(&f.attrs).unwrap(); + let ident = f.ident.clone().unwrap(); + if attrs.refr { + quote!( #ident: self.#ident.normalize()? ) + } else { + quote! ( #ident: self.#ident ) + } + }) + .collect::>(); + + quote!( #(#fields),* ) + }, + false => { + let fields = data.fields + .iter() + .enumerate() + .map(|(i, f)| { + let attrs = FieldAttrs::from_attrs(&f.attrs).unwrap(); + if attrs.refr { + quote!( self.#i.normalize()? ) + } else { + let i = Index::from(i); + quote! ( self.#i ) + } + }) + .collect::>(); + if fields.len() == 1 { + panic!("You must have more than one field on a tuple struct!"); + } + + quote!( data: (#(#fields),*) ) + } + }; + + quote! { + impl #crate_name::Object for #ident { + type NormalizedResult = #normalised_ident; + + fn type_name() -> &'static str { + #type_name + } - fn type_name() -> &'static str { - #type_name - } + fn id(&self) -> Result<#crate_name::internal::Value, #crate_name::internal::Error> { + Ok(#id_impl) + } - fn id(&self) -> #crate_name::internal::NormiResult<#crate_name::internal::NormiSerdeValue> { - Ok(#id_impl) - } + fn normalize(self) -> Result { + pub use #crate_name::Object; - fn normalize(self) -> #crate_name::internal::NormiResult { - pub use #crate_name::Object; + Ok(#normalised_ident { + __type: Self::type_name(), + __id: self.id()?, + #fields + }) + } + } + } + }; + + let normalized_struct_decl = { + let fields = data.fields.into_iter().map(|f| { + let ty = f.ty; + let vis = f.vis; + let attrs = FieldAttrs::from_attrs(&f.attrs).unwrap(); + + match &f.ident { + Some(ident) => { + if attrs.refr { + quote!( #vis #ident: <#ty as #crate_name::Object>::NormalizedResult ) + } else { + quote!( #vis #ident: #ty ) + } + }, + None => quote!( #ty ), + } + }); + + let fields = match is_tuple_struct { + true => quote! ( #(#fields),* ), + false => quote! ( data: (#(#fields),*) ), + }; + + quote! { + #[derive(#crate_name::internal::Serialize, #crate_name::internal::Type)] + pub struct #normalised_ident { + pub __type: &'static str, + pub __id: #crate_name::internal::Value, + #fields + } + } + }; - Ok(#normalised_ident { - __type: Self::type_name(), - __id: self.id()?, - #(#field_map),* - }) + quote! { + #normalized_struct_decl + #object_impl_decl } + } - } - .into() + Data::Enum(_) => panic!("TODO: enums not supported"), // TODO + Data::Union(_) => panic!("normi::Object can't be derived for unions!"), + }.into() } diff --git a/crates/normi/macros/src/utils.rs b/crates/normi/macros/src/utils.rs new file mode 100644 index 00000000..934727c7 --- /dev/null +++ b/crates/normi/macros/src/utils.rs @@ -0,0 +1,67 @@ +use syn::{ + parse::{Parse, ParseStream}, + Attribute, Error, Lit, Result, Token, +}; + +macro_rules! syn_err { + ($l:literal $(, $a:expr)*) => { + syn_err!(proc_macro2::Span::call_site(); $l $(, $a)*) + }; + ($s:expr; $l:literal $(, $a:expr)*) => { + return Err(syn::Error::new($s, format!($l $(, $a)*))) + }; +} + +macro_rules! impl_parse { + ($i:ident ($input:ident, $out:ident) { $($k:pat => $e:expr),* $(,)? }) => { + impl std::convert::TryFrom<&syn::Attribute> for $i { + type Error = syn::Error; + + fn try_from(attr: &syn::Attribute) -> syn::Result { attr.parse_args() } + } + + impl syn::parse::Parse for $i { + fn parse($input: syn::parse::ParseStream) -> syn::Result { + #[allow(warnings)] + let mut $out = $i::default(); + loop { + let key: syn::Ident = $input.call(syn::ext::IdentExt::parse_any)?; + match &*key.to_string() { + $($k => $e,)* + #[allow(unreachable_patterns)] + _ => syn_err!($input.span(); "unexpected attribute") + } + + match $input.is_empty() { + true => break, + false => { + $input.parse::()?; + } + } + } + + Ok($out) + } + } + }; +} + +pub fn parse_attrs<'a, A>(attrs: &'a [Attribute]) -> syn::Result> +where + A: TryFrom<&'a Attribute, Error = syn::Error>, +{ + Ok(attrs + .iter() + .filter(|a| a.path.is_ident("normi")) + .map(A::try_from) + .collect::>>()? + .into_iter()) +} + +pub fn parse_assign_str(input: ParseStream) -> Result { + input.parse::()?; + match Lit::parse(input)? { + Lit::Str(string) => Ok(string.value()), + other => Err(Error::new(other.span(), "expected string")), + } +} diff --git a/crates/normi/src/lib.rs b/crates/normi/src/lib.rs index 9e9ae23f..43dac004 100644 --- a/crates/normi/src/lib.rs +++ b/crates/normi/src/lib.rs @@ -21,9 +21,7 @@ pub use object::*; // plz rename types in this module so they are gonna show up in rust-analyzer recommended imports for external crates pub mod internal { - pub use serde::Serialize as NormiSerialize; - pub use serde_json::to_value as normi_to_json_value; - pub use serde_json::Value as NormiSerdeValue; - pub use specta::Type as NormiSpectaType; - pub type NormiResult = Result; + pub use serde::Serialize; + pub use serde_json::{to_value, Error, Value}; + pub use specta::Type; } diff --git a/crates/normi/src/object.rs b/crates/normi/src/object.rs index 1331771f..2fb0e964 100644 --- a/crates/normi/src/object.rs +++ b/crates/normi/src/object.rs @@ -1,3 +1,9 @@ +use std::{ + boxed::Box, + collections::{BTreeSet, BinaryHeap, HashSet, LinkedList, VecDeque}, + hash::Hash, +}; + use serde::Serialize; use serde_json::Value; use specta::Type; @@ -22,8 +28,8 @@ pub struct NormalizedVec { edges: Vec, } -impl Object for Vec { - type NormalizedResult = NormalizedVec; +impl Object for Vec { + type NormalizedResult = NormalizedVec; fn type_name() -> &'static str { T::type_name() @@ -36,9 +42,216 @@ impl Object for Vec { fn normalize(self) -> Result { Ok(NormalizedVec { __type: Self::type_name(), - edges: self, + edges: self + .into_iter() + .map(|v| v.normalize()) + .collect::, _>>()?, + }) + } +} + +impl Object for Box { + type NormalizedResult = T::NormalizedResult; + + fn type_name() -> &'static str { + ::type_name() + } + + fn id(&self) -> Result { + ::id(&self) + } + + fn normalize(self) -> Result { + ::normalize(*self) + } +} + +impl Object for Option { + type NormalizedResult = Option; + + fn type_name() -> &'static str { + ::type_name() + } + + fn id(&self) -> Result { + unreachable!(); + } + + fn normalize(self) -> Result { + match self { + Some(v) => Ok(Some(::normalize(v)?)), + None => Ok(None), + } + } +} + +#[derive(Serialize, Type)] +pub struct NormalizedVecDeque { + __type: &'static str, + edges: VecDeque, +} + +impl Object for VecDeque { + type NormalizedResult = NormalizedVecDeque; + + fn type_name() -> &'static str { + ::type_name() + } + + fn id(&self) -> Result { + unreachable!(); + } + + fn normalize(self) -> Result { + Ok(NormalizedVecDeque { + __type: Self::type_name(), + edges: self + .into_iter() + .map(|v| v.normalize()) + .collect::, _>>()?, }) } } -// TODO: All other common container types +#[derive(Serialize, Type)] +pub struct NormalizedBinaryHeap +where + T: Ord, +{ + __type: &'static str, + edges: BinaryHeap, +} + +impl Object for BinaryHeap +where + T::NormalizedResult: Ord, +{ + type NormalizedResult = NormalizedBinaryHeap; + + fn type_name() -> &'static str { + ::type_name() + } + + fn id(&self) -> Result { + unreachable!(); + } + + fn normalize(self) -> Result { + Ok(NormalizedBinaryHeap { + __type: Self::type_name(), + edges: self + .into_iter() + .map(|v| v.normalize()) + .collect::, _>>()?, + }) + } +} + +#[derive(Serialize, Type)] +pub struct NormalizedLinkedList +where + T: Ord, +{ + __type: &'static str, + edges: LinkedList, +} + +impl Object for LinkedList +where + T::NormalizedResult: Ord, +{ + type NormalizedResult = NormalizedBinaryHeap; + + fn type_name() -> &'static str { + ::type_name() + } + + fn id(&self) -> Result { + unreachable!(); + } + + fn normalize(self) -> Result { + Ok(NormalizedBinaryHeap { + __type: Self::type_name(), + edges: self + .into_iter() + .map(|v| v.normalize()) + .collect::, _>>()?, + }) + } +} + +#[derive(Serialize, Type)] +pub struct NormalizedHashSet +where + T: Hash + Eq, +{ + __type: &'static str, + edges: HashSet, +} + +impl Object for HashSet +where + T::NormalizedResult: Hash + Eq, +{ + type NormalizedResult = NormalizedHashSet; + + fn type_name() -> &'static str { + ::type_name() + } + + fn id(&self) -> Result { + unreachable!(); + } + + fn normalize(self) -> Result { + Ok(NormalizedHashSet { + __type: Self::type_name(), + edges: self + .into_iter() + .map(|v| v.normalize()) + .collect::, _>>()?, + }) + } +} + +#[derive(Serialize, Type)] +pub struct NormalizedBTreeSet +where + T: Ord, +{ + __type: &'static str, + edges: BTreeSet, +} + +impl Object for BTreeSet +where + T::NormalizedResult: Ord, +{ + type NormalizedResult = NormalizedBTreeSet; + + fn type_name() -> &'static str { + ::type_name() + } + + fn id(&self) -> Result { + unreachable!(); + } + + fn normalize(self) -> Result { + Ok(NormalizedBTreeSet { + __type: Self::type_name(), + edges: self + .into_iter() + .map(|v| v.normalize()) + .collect::, _>>()?, + }) + } +} + +// &'a [T] +// [T; N] + +// TODO: IndexSet +// TODO: Implmenting for tuples??? +// TODO: Normalising Map types -> BTreeMap, HashMap, serde_json::Map, IndexMap diff --git a/crates/normi/tests/macros.rs b/crates/normi/tests/macros.rs new file mode 100644 index 00000000..9222d147 --- /dev/null +++ b/crates/normi/tests/macros.rs @@ -0,0 +1,273 @@ +use assert_json_diff::assert_json_eq; +use normi::Object; +use serde_json::json; +use std::cell::RefCell; +use trybuild::TestCases; + +// #[test] +// fn macro_expected_failures() { +// let t = TestCases::new(); +// t.compile_fail("tests/macros/fail.rs"); +// } + +#[test] +fn test_rename() { + #[derive(Object)] + #[normi(rename = "NewStructName")] + struct Struct { + #[normi(id)] + id: String, + } + + let v = Struct { + id: "hello".to_string(), + }; + + assert_eq!(::type_name(), "NewStructName"); + assert_eq!(v.id().unwrap(), json!("hello")); + assert_json_eq!( + serde_json::to_value(&v.normalize().unwrap()).unwrap(), + json!({ + "__id": "hello", + "__type": "NewStructName", + "id": "hello" + }) + ); +} + +// TODO: It would be nice to support this in the future but it's not worth it for now +// #[test] +// fn test_unit_struct() { +// #[derive(Object)] +// struct Struct { +// #[normi(id)] +// id: String, +// } + +// #[derive(Object)] +// struct UnitRef(#[normi(flatten)] Struct); + +// let v = UnitRef(Struct { +// id: "hello".to_string(), +// }); + +// assert_eq!(::type_name(), "UnitRef"); +// assert_eq!(v.id().unwrap(), json!("hello")); +// assert_json_eq!( +// serde_json::to_value(&v.normalize().unwrap()).unwrap(), +// json!({"__id": "hello", "__type": "UnitRef", "id": "hello"}) +// ); +// } + +#[test] +fn test_simple_struct() { + #[derive(Object)] + struct Struct { + #[normi(id)] + id: i32, + b: String, + c: (i32, String, RefCell), + d: Vec, + e: Option, + } + + let v = Struct { + id: 5, + b: "Hello".into(), + c: (5, "Bruh".into(), RefCell::new(42)), + d: [].to_vec(), + e: None, + }; + + assert_eq!(::type_name(), "Struct"); + assert_eq!(v.id().unwrap(), json!(5)); + assert_json_eq!( + serde_json::to_value(&v.normalize().unwrap()).unwrap(), + json!({ + "__id": 5, + "__type": "Struct", + "b": "Hello", + "c": [5, "Bruh", 42], + "d": [], + "e": null, + "id": 5 + }) + ); +} + +#[test] +fn test_advanced_struct() { + #[derive(Object)] + struct User { + #[normi(id)] + id: String, + name: String, + } + + #[derive(Object)] + struct Struct { + #[normi(id)] + id: i32, + #[normi(refr)] + users: Vec, + #[normi(refr)] + owner: User, + } + + let v = Struct { + id: 42, + users: [ + User { + id: "a".into(), + name: "Monty".into(), + }, + User { + id: "b".into(), + name: "Millie".into(), + }, + ] + .into_iter() + .collect::>(), + owner: User { + id: "c".into(), + name: "Oscar".into(), + }, + }; + + assert_eq!(::type_name(), "Struct"); + assert_eq!(v.id().unwrap(), json!(42)); + assert_json_eq!( + serde_json::to_value(&v.normalize().unwrap()).unwrap(), + json!({ + "__id": 42, + "__type": "Struct", + "id": 42, + "users": { + "__type": "User", + "edges": [ + { "__id": "a", "__type": "User", "id": "a", "name": "Monty"}, + { "__id": "b", "__type": "User", "id": "b", "name": "Millie" } + ], + }, + "owner": { + "__id": "c", + "__type": "User", + "id": "c", + "name": "Oscar" + } + }) + ); +} + +#[test] +fn test_tuple_struct() { + #[derive(Object)] + struct TupleStruct(#[normi(id)] String, i32); + + let v = TupleStruct("one".into(), 42); + + assert_eq!(::type_name(), "Unit"); + assert_eq!(v.id().unwrap(), json!("one")); + assert_json_eq!( + serde_json::to_value(&v.normalize().unwrap()).unwrap(), + json!({ + "__id": "one", + "__type": "Unit", + "data": ["one", 42] + }) + ); +} + +#[test] +fn test_tuple_struct_refr() { + #[derive(Object)] + struct Struct { + #[normi(id)] + id: i32, + } + + #[derive(Object)] + struct TupleStruct(#[normi(id)] String, i32, #[normi(refr)] Struct); + + assert_eq!(::type_name(), "Unit"); + assert_eq!(v.id().unwrap(), json!("one")); + assert_json_eq!( + serde_json::to_value(&v.normalize().unwrap()).unwrap(), + json!({ + "__id": "one", + "__type": "Unit", + "data": ["one", 42] + }) + ); +} + +#[test] +fn test_enum() { + // #[derive(Object)] + // enum TestEnum { + // Unit, + // Single(i32), + // Multiple(i32, i32), + // Struct { a: i32 }, + // } +} + +#[test] +fn test_externally_tagged_enum() { + // #[derive(Object)] + // enum AorB { + // A(Struct), + // B(Struct), + // } +} + +#[test] +fn test_internally_tagged_enum() { + // #[derive(Object)] + // #[serde(tag = "type")] + // enum AorB { + // A(Struct), + // B(Struct), + // } +} + +#[test] +fn test_adjacently_tagged_enum() { + // #[derive(Object)] + // #[serde(tag = "t", content = "c")] + // enum AorB { + // A(Struct), + // B(Struct), + // } +} + +#[test] +fn test_untagged_enum() { + // #[derive(Object)] + // #[serde(untagged)] + // enum AorB { + // A(Struct), + // B(Struct), + // } +} + +#[test] +fn test_generic_struct() { + // #[derive(Object)] + // struct GenericStruct { + // #[normi(id)] + // id: String, + // arg: T, + // } +} + +#[test] +fn test_generic_struct_refr() { + // #[derive(Object)] + // struct GenericStruct { + // #[normi(id)] + // id: String, + // #[normi(refr)] + // arg: T, + // } +} diff --git a/crates/normi/tests/macros/fail.rs b/crates/normi/tests/macros/fail.rs new file mode 100644 index 00000000..21a29f78 --- /dev/null +++ b/crates/normi/tests/macros/fail.rs @@ -0,0 +1,78 @@ +use normi::Object; + +#[derive(Object)] +struct GoodStruct { + #[normi(id)] + id: String, +} + +fn main() {} + +/* A type that has no fields can never have an if field and hence is invalid */ + +#[derive(Object)] +struct Unit; + +#[derive(Object)] +struct Unit2 {} + +#[derive(Object)] +struct Unit3(); + +#[derive(Object)] +enum EmptyEnum {} + +/* Unions are not supported */ + +#[derive(Object)] +union Union { + f1: u32, + f2: f32, +} + +/* Tuple structs */ + +#[derive(Object)] +struct TupleStruct1(i32); // Only single field + +#[derive(Object)] +struct UnitRef(GoodStruct); // Doesn't have flatten attribute + +#[derive(Object)] +struct TupleStruct1(i32, String, bool); // No id field + +#[derive(Object)] +struct TupleStruct2(#[normi(id)] String, #[normi(refr)] i32); // i32 doesn't implement Object + +#[derive(Object)] +struct TupleStruct3(#[normi(id, refr)] i32); // The id can't also be normalised + +#[derive(Object)] +struct Unit(#[normi(id)] String); // Technically this type could be supported but using it would be useless. + +/* Structs */ + +#[derive(Object)] +struct Struct { + #[normi(id)] + id: String, + #[normi(refr)] + arg: i32, // i32 doesn't implement Object +} + +#[derive(Object)] +struct Struct1 { + #[normi(id, refr)] // The id can't also be normalised + id: String, +} + +#[derive(Object)] +struct GenericStruct { + #[normi(id)] + id: String, + #[normi(refr)] + arg: T, +} + +pub type Demo = GenericStruct; // i32 doesn't implement Object + diff --git a/crates/normi/tests/object.rs b/crates/normi/tests/object.rs new file mode 100644 index 00000000..cbdcc8f1 --- /dev/null +++ b/crates/normi/tests/object.rs @@ -0,0 +1,4 @@ +#[test] +fn test_standard_types() { + // TODO: Unit test the default impls on `object.rs` +} \ No newline at end of file diff --git a/crates/normi/tests/rspc.rs b/crates/normi/tests/rspc.rs new file mode 100644 index 00000000..e69de29b diff --git a/src/internal/jsonrpc_exec.rs b/src/internal/jsonrpc_exec.rs index e44a79f4..25b02c2a 100644 --- a/src/internal/jsonrpc_exec.rs +++ b/src/internal/jsonrpc_exec.rs @@ -62,6 +62,11 @@ pub enum Sender<'a> { ResponseChannel(&'a mut mpsc::UnboundedSender), Broadcast(&'a broadcast::Sender), Response(Option), + // We don't use this internally but Spacedrive uses it for the React Native bridge. + ResponseAndChannel( + Option, + &'a mut mpsc::UnboundedSender, + ), } pub enum Sender2 { @@ -107,6 +112,9 @@ impl<'a> Sender<'a> { Self::Response(r) => { *r = Some(resp); } + Self::ResponseAndChannel(r, _) => { + *r = Some(resp); + } } Ok(()) @@ -118,6 +126,7 @@ impl<'a> Sender<'a> { Self::ResponseChannel(tx) => Sender2::ResponseChannel(tx.clone()), Self::Broadcast(tx) => Sender2::Broadcast(tx.clone()), Self::Response(_) => unreachable!(), + Self::ResponseAndChannel(_, tx) => Sender2::ResponseChannel(tx.clone()), } } } diff --git a/src/internal/procedure_builder.rs b/src/internal/procedure_builder.rs index f47b3a76..bf99a1bc 100644 --- a/src/internal/procedure_builder.rs +++ b/src/internal/procedure_builder.rs @@ -26,6 +26,10 @@ impl UnbuiltProcedureBuilder { resolver, } } + + pub fn data(&self) -> GlobalData { + self.data.clone() + } } impl Deref for UnbuiltProcedureBuilder { diff --git a/src/router_builder.rs b/src/router_builder.rs index 9abdf891..fd7002a6 100644 --- a/src/router_builder.rs +++ b/src/router_builder.rs @@ -136,7 +136,7 @@ where >( mut self, key: &'static str, - builder: impl Fn( + builder: impl FnOnce( UnbuiltProcedureBuilder, ) -> BuiltProcedureBuilder, ) -> Self @@ -176,7 +176,7 @@ where >( mut self, key: &'static str, - builder: impl Fn( + builder: impl FnOnce( UnbuiltProcedureBuilder, ) -> BuiltProcedureBuilder, ) -> Self @@ -208,7 +208,7 @@ where pub fn subscription( mut self, key: &'static str, - builder: impl Fn( + builder: impl FnOnce( UnbuiltProcedureBuilder, ) -> BuiltProcedureBuilder, ) -> Self From 3dbff8246c09908fc97649b85a2455a6f989cb12 Mon Sep 17 00:00:00 2001 From: Oscar Beaumont Date: Tue, 11 Oct 2022 01:14:12 +0800 Subject: [PATCH 13/23] [WIP] Fork tRPC into new rspc client I was building out a link system similar to `@trpc/client` and thought it probably made more sense to fork the upstream code into the new `@rspc/client`. This way I get batching and a bunch of other awesome features without redesigning them from scratch. --- crates/normi/Cargo.toml | 5 +- examples/astro/src/components/react.tsx | 130 ++-- examples/astro/src/pages/index.astro | 6 +- package.json | 1 + packages/client/package.json | 4 + packages/client/src/client.ts | 191 +++-- packages/client/src/index.ts | 8 +- packages/client/src/link.ts | 9 + packages/client/src/links/httpLink.ts | 63 ++ packages/client/src/links/index.ts | 3 + packages/client/src/links/loggerLink.ts | 17 + packages/client/src/links/websocketLink.ts | 14 + packages/client/src/new/createClient.ts | 29 + packages/client/src/new/index.ts | 3 + .../client/src/new/internals/TRPCClient.ts | 238 ++++++ .../client/src/new/internals/dataLoader.ts | 166 +++++ .../client/src/new/internals/fetchHelpers.ts | 29 + .../client/src/new/internals/retryDelay.ts | 2 + .../client/src/new/links/dedupeLink.test.ts | 128 ++++ packages/client/src/new/links/dedupeLink.ts | 52 ++ .../client/src/new/links/httpBatchLink.ts | 120 +++ packages/client/src/new/links/httpLink.ts | 55 ++ packages/client/src/new/links/index.ts | 10 + .../new/links/internals/createChain.test.ts | 117 +++ .../src/new/links/internals/createChain.ts | 36 + .../src/new/links/internals/httpUtils.ts | 158 ++++ .../new/links/internals/transformResult.ts | 40 + packages/client/src/new/links/loggerLink.ts | 151 ++++ packages/client/src/new/links/retryLink.ts | 56 ++ .../client/src/new/links/splitLink.test.ts | 56 ++ packages/client/src/new/links/splitLink.ts | 30 + packages/client/src/new/links/types.ts | 105 +++ packages/client/src/new/links/wsLink.ts | 365 +++++++++ packages/client/src/new/observable/index.ts | 4 + .../src/new/observable/internals/identity.ts | 3 + .../internals/observableToPromise.ts | 49 ++ .../src/new/observable/internals/pipe.ts | 23 + .../src/new/observable/observable.test.ts | 101 +++ .../client/src/new/observable/observable.ts | 78 ++ .../src/new/observable/operators/index.ts | 3 + .../src/new/observable/operators/map.test.ts | 92 +++ .../src/new/observable/operators/map.ts | 25 + .../new/observable/operators/share.test.ts | 60 ++ .../src/new/observable/operators/share.ts | 67 ++ .../src/new/observable/operators/tap.ts | 26 + packages/client/src/new/observable/types.ts | 80 ++ packages/client/src/transport.ts | 360 +++++---- packages/client/src/utils/index.ts | 1 + .../client/src/utils/observableToPromise.ts | 50 ++ packages/normi/package.json | 47 ++ packages/normi/src/index.ts | 7 + packages/normi/tsconfig.json | 10 + packages/react/src/index.tsx | 694 +++++++++--------- packages/tauri/src/index.ts | 130 ++-- pnpm-lock.yaml | 24 + 55 files changed, 3565 insertions(+), 766 deletions(-) create mode 100644 packages/client/src/link.ts create mode 100644 packages/client/src/links/httpLink.ts create mode 100644 packages/client/src/links/index.ts create mode 100644 packages/client/src/links/loggerLink.ts create mode 100644 packages/client/src/links/websocketLink.ts create mode 100644 packages/client/src/new/createClient.ts create mode 100644 packages/client/src/new/index.ts create mode 100644 packages/client/src/new/internals/TRPCClient.ts create mode 100644 packages/client/src/new/internals/dataLoader.ts create mode 100644 packages/client/src/new/internals/fetchHelpers.ts create mode 100644 packages/client/src/new/internals/retryDelay.ts create mode 100644 packages/client/src/new/links/dedupeLink.test.ts create mode 100644 packages/client/src/new/links/dedupeLink.ts create mode 100644 packages/client/src/new/links/httpBatchLink.ts create mode 100644 packages/client/src/new/links/httpLink.ts create mode 100644 packages/client/src/new/links/index.ts create mode 100644 packages/client/src/new/links/internals/createChain.test.ts create mode 100644 packages/client/src/new/links/internals/createChain.ts create mode 100644 packages/client/src/new/links/internals/httpUtils.ts create mode 100644 packages/client/src/new/links/internals/transformResult.ts create mode 100644 packages/client/src/new/links/loggerLink.ts create mode 100644 packages/client/src/new/links/retryLink.ts create mode 100644 packages/client/src/new/links/splitLink.test.ts create mode 100644 packages/client/src/new/links/splitLink.ts create mode 100644 packages/client/src/new/links/types.ts create mode 100644 packages/client/src/new/links/wsLink.ts create mode 100644 packages/client/src/new/observable/index.ts create mode 100644 packages/client/src/new/observable/internals/identity.ts create mode 100644 packages/client/src/new/observable/internals/observableToPromise.ts create mode 100644 packages/client/src/new/observable/internals/pipe.ts create mode 100644 packages/client/src/new/observable/observable.test.ts create mode 100644 packages/client/src/new/observable/observable.ts create mode 100644 packages/client/src/new/observable/operators/index.ts create mode 100644 packages/client/src/new/observable/operators/map.test.ts create mode 100644 packages/client/src/new/observable/operators/map.ts create mode 100644 packages/client/src/new/observable/operators/share.test.ts create mode 100644 packages/client/src/new/observable/operators/share.ts create mode 100644 packages/client/src/new/observable/operators/tap.ts create mode 100644 packages/client/src/new/observable/types.ts create mode 100644 packages/client/src/utils/index.ts create mode 100644 packages/client/src/utils/observableToPromise.ts create mode 100644 packages/normi/package.json create mode 100644 packages/normi/src/index.ts create mode 100644 packages/normi/tsconfig.json diff --git a/crates/normi/Cargo.toml b/crates/normi/Cargo.toml index fb3b0317..ff9df88e 100644 --- a/crates/normi/Cargo.toml +++ b/crates/normi/Cargo.toml @@ -1,5 +1,6 @@ [package] name = "normi" +description = "A normalised caching layer for rspc." version = "0.0.1" edition = "2021" @@ -18,6 +19,8 @@ specta = { version = "0.0.4", path = "../specta" } rspc = { path = "../../", features = ["axum"] } axum = "0.5.16" tokio = { version = "1.21.2", features = ["macros", "rt-multi-thread"] } -tower-http = { version = "0.3.4", default-features = false, features = ["cors"] } +tower-http = { version = "0.3.4", default-features = false, features = [ + "cors", +] } trybuild = "1.0.65" assert-json-diff = "2.0.2" diff --git a/examples/astro/src/components/react.tsx b/examples/astro/src/components/react.tsx index abfc0dfd..101de749 100644 --- a/examples/astro/src/components/react.tsx +++ b/examples/astro/src/components/react.tsx @@ -1,72 +1,88 @@ -import { createClient, FetchTransport, WebsocketTransport } from "@rspc/client"; -import { createReactQueryHooks } from "@rspc/react"; +import { + createClient, + httpLink, + Observable, + observableToPromise, +} from "@rspc/client"; +// import { createReactQueryHooks } from "@rspc/react"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; -import React, { useState } from "react"; +import React, { useEffect, useState } from "react"; -import type { Procedures } from "../../../bindings"; +// import type { Procedures } from "../../../bindings"; +type Procedures = any; // TODO -export const rspc = createReactQueryHooks(); +// export const rspc = createReactQueryHooks(); export const fetchQueryClient = new QueryClient(); const fetchClient = createClient({ - transport: new FetchTransport("http://localhost:4000/rspc"), + links: [ + // loggerLink(), + httpLink({ + url: "http://localhost:4000/rspc", + }), + ], }); -export const wsQueryClient = new QueryClient(); -const wsClient = createClient({ - transport: new WebsocketTransport("ws://localhost:4000/rspc/ws"), -}); +// export const wsQueryClient = new QueryClient(); +// const wsClient = createClient({ +// // links: [], // new WebsocketTransport("ws://localhost:4000/rspc/ws"), +// }); -function Example({ name }: { name: string }) { - const [rerenderProp, setRendererProp] = useState(Date.now().toString()); - const { data: version } = rspc.useQuery(["version"]); - const { data: transformMe } = rspc.useQuery(["transformMe"]); - const { data: echo } = rspc.useQuery(["echo", "Hello From Frontend!"]); - const { mutate, isLoading } = rspc.useMutation("sendMsg"); - const { error } = rspc.useQuery(["error"], { - retry: false, - }); +// function Example({ name }: { name: string }) { +// const [rerenderProp, setRendererProp] = useState(Date.now().toString()); +// const { data: version } = rspc.useQuery(["version"]); +// const { data: transformMe } = rspc.useQuery(["transformMe"]); +// const { data: echo } = rspc.useQuery(["echo", "Hello From Frontend!"]); +// const { mutate, isLoading } = rspc.useMutation("sendMsg"); +// const { error } = rspc.useQuery(["error"], { +// retry: false, +// }); - return ( -
-

{name}

-

Using rspc version: {version}

-

Echo response: {echo}

-

- Error returned: {error?.code} {error?.message} -

-

Transformed Query: {transformMe}

- - - -
- ); -} +// return ( +//
+//

{name}

+//

Using rspc version: {version}

+//

Echo response: {echo}

+//

+// Error returned: {error?.code} {error?.message} +//

+//

Transformed Query: {transformMe}

+// +// +// +//
+// ); +// } -function ExampleSubscription({ rerenderProp }: { rerenderProp: string }) { - const [i, setI] = useState(0); - rspc.useSubscription(["pings"], { - onData(msg) { - setI((i) => i + 1); - }, - }); +// function ExampleSubscription({ rerenderProp }: { rerenderProp: string }) { +// const [i, setI] = useState(0); +// rspc.useSubscription(["pings"], { +// onData(msg) { +// setI((i) => i + 1); +// }, +// }); - return ( -

- Pings received: {i} {rerenderProp} -

- ); -} +// return ( +//

+// Pings received: {i} {rerenderProp} +//

+// ); +// } export default function App() { + useEffect(() => { + console.log("HERE"); + fetchClient.query("version").then(console.log); + }, []); + return (

React

- + {/* @@ -84,7 +100,7 @@ export default function App() { - + */}
); diff --git a/examples/astro/src/pages/index.astro b/examples/astro/src/pages/index.astro index 94c43062..b2710ba2 100644 --- a/examples/astro/src/pages/index.astro +++ b/examples/astro/src/pages/index.astro @@ -1,6 +1,6 @@ --- import ReactComponent from "../components/react"; -import SolidComponent from "../components/solid"; +// import SolidComponent from "../components/solid"; --- @@ -8,7 +8,7 @@ import SolidComponent from "../components/solid"; RSPC Example with Astro - + + + + + + diff --git a/packages/normi/src/index.ts b/packages/normi/src/index.ts index 21d79fea..e2eca1d0 100644 --- a/packages/normi/src/index.ts +++ b/packages/normi/src/index.ts @@ -1,23 +1,201 @@ -// TODO: Subscribing to backend alerts for changes -// TODO: Modify data in cache -// TODO: Fixing types - -import { TRPCLink, DataTransformer } from "@rspc/client"; +import { observable, TRPCLink } from "@rspc/client"; import type { QueryClient } from "@tanstack/react-query"; +type NormiCache = Map>; +declare global { + interface Window { + normiCache?: NormiCache; + } +} + export interface NormiOptions { queryClient: QueryClient; + contextSharing?: boolean; } -export function normi({ queryClient }: NormiOptions): DataTransformer { - return { - serialize(data) { - console.log("NORMI IN", data); - return data; - }, - deserialize(data) { - console.log("NORMI OUT", data); - return data; - }, - }; +function getNormiCache(contextSharing: boolean): NormiCache { + if (contextSharing) { + if (window.normiCache === undefined) { + window.normiCache = new Map(); + } + + return window.normiCache; + } else { + return new Map(); + } +} + +// function refreshRQ(queryClient: QueryClient) { +// let c = queryClient.getQueryCache(); + +// c.getAll().forEach((query) => { +// const d = query.state.data; +// if (Array.isArray(d)) { +// queryClient.setQueryData( +// query.queryKey, +// d.map((f) => { +// if (typeof f?.__id == "string" && normyCache.has(f?.__id)) { +// return normyCache.get(f.__id); +// } +// return f; +// }) +// ); +// } +// }); +// } + +function getOrCreate(map: Map>, key: K): Map { + let m = map.get(key); + if (m === undefined) { + m = new Map(); + map.set(key, m); + } + return m; +} + +function normaliseValue(value: any, normiCache: NormiCache): any { + if (value === null || value === undefined) { + return value; + } else if (typeof value === "object") { + if ("__id" in value && "__type" in value) { + getOrCreate(normiCache, value.__type).set( + value.__id, + normaliseValueForStorage(value, true) + ); + delete value.__id; + delete value.__type; + } else if ("__type" in value && "edges" in value) { + // TODO: Caching all the edges + value = (value.edges as any[]).map((v) => normaliseValue(v, normiCache)); + } + + // TODO: Optimise this to only check fields the backend marks as normalisable or on root + for (const [k, v] of Object.entries(value)) { + value[k] = normaliseValue(v, normiCache); + } + } + + return value; +} + +function normaliseValueForStorage(value: any, rootElem: boolean): any { + if (value === null || value === undefined) { + return value; + } else if (typeof value === "object") { + if ("__id" in value && "__type" in value) { + if (rootElem) { + let v = Object.assign({}, value); + delete v.__id; + delete v.__type; + + // TODO: Optimise this to only check fields the backend marks as normalisable or on root + for (const [k, vv] of Object.entries(v)) { + v[k] = normaliseValueForStorage(vv, false); + } + + return v; + } + + // TODO: Optimise this to only check fields the backend marks as normalisable or on root + for (const [k, v] of Object.entries(value)) { + value[k] = normaliseValueForStorage(v, false); + } + + return { + __id: value.__id, + __type: value.__type, + }; + } else if ("__type" in value && "edges" in value) { + return { + __type: value.__type, + edges: Object.values(value.edges as any[]).map((v) => v.__id), + }; + } + + // TODO: Optimise this to only check fields the backend marks as normalisable or on root + for (const [k, v] of Object.entries(value)) { + value[k] = normaliseValueForStorage(v, false); + } + } + + return value; +} + +function recomputeNormalisedValueFromStorage( + value: any, + normiCache: NormiCache +): any { + if (value === null || value === undefined) { + return value; + } else if (typeof value === "object") { + if ("__id" in value && "__type" in value) { + value = normiCache.get(value.__type)!.get(value.__id); // TODO: Handle `undefined` + } else if ("__type" in value && "edges" in value) { + value = (value.edges as any[]).map( + (id) => normiCache.get(value.__type)!.get(id) // TODO: Handle `undefined` + ); + } + + // TODO: Optimise this to only check fields the backend marks as normalisable or on root + for (const [k, v] of Object.entries(value)) { + value[k] = recomputeNormalisedValueFromStorage(v, normiCache); + } + } + + return value; } + +export const normiLink: (opts: NormiOptions) => TRPCLink = ({ + queryClient, + contextSharing, +}: NormiOptions) => { + let normiCache = getNormiCache(contextSharing ?? false); + + // TODO: Disable staleness in React Query + // TODO: Subscribing to backend alerts for changes + // TODO: Modify data in cache + + // window.demo = () => { + // return recomputeNormalisedValueFromStorage( + // normiCache.get("org")!.get("org-1"), + // normiCache + // ); + // }; + + // queryClient.getQueryCache().subscribe(({ type, query }) => { + // if (type === "added") { + // console.log("ADDED", query.queryKey, query.state.data); + // } else if (type === "updated") { + // console.log("UPDATE", query.queryKey, query.state.data); + + // const d = query.state.data; + // if (Array.isArray(d)) { + // d.forEach((f) => { + // if (typeof f?.__id == "string") normyCache.set(f.__id, f); + // }); + // } + // } else if (type === "removed") { + // console.log("REMOVED", query.queryKey, query.state.data); + // } + // }); + + return () => { + return ({ next, op }) => { + return observable((observer) => { + const unsubscribe = next(op).subscribe({ + next(value) { + value.result.data = normaliseValue(value.result.data, normiCache); + observer.next(value); + }, + error(err) { + observer.error(err); + }, + complete() { + observer.complete(); + }, + }); + return unsubscribe; + }); + }; + }; +}; From b41e4d7868818119d8e3e4e0319d7dce0e675eb0 Mon Sep 17 00:00:00 2001 From: Oscar Beaumont Date: Thu, 13 Oct 2022 14:45:58 +0800 Subject: [PATCH 19/23] hotfix for Spacedrive --- Cargo.toml | 2 +- src/router_builder.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index db76238c..11575498 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,7 +42,7 @@ bson = ["specta/bson"] [dependencies] specta = { version = "0.0.4", path = "./crates/specta", features = ["serde"] } -httpz = { git = "https://github.com/oscartbeaumont/httpz.git", optional = true } # TODO: Move back to crates.io release +httpz = { git = "https://github.com/oscartbeaumont/httpz.git", rev = "1ddbd9ad594ac7ee3e5b167afe689d1ce1228519", optional = true } # TODO: Move back to crates.io release serde = { version = "1.0.145", features = ["derive"] } serde_json = "1.0.85" thiserror = "1.0.36" diff --git a/src/router_builder.rs b/src/router_builder.rs index dbf9590c..0912118e 100644 --- a/src/router_builder.rs +++ b/src/router_builder.rs @@ -30,7 +30,7 @@ pub(crate) fn is_valid_procedure_name(s: &str) -> bool { || s.starts_with("rspc.") || !s .chars() - .all(|c| c.is_alphabetic() || c.is_numeric() || c == '.') + .all(|c| c.is_alphabetic() || c.is_numeric() || c == '.' || c == '_') } pub struct RouterBuilder< From 1a0a5681f1e520a421e4eab926a76105ee89f60a Mon Sep 17 00:00:00 2001 From: Oscar Beaumont Date: Sun, 16 Oct 2022 00:41:07 +0800 Subject: [PATCH 20/23] Primitive OpenAPI plugin --- Cargo.toml | 5 +- examples/Cargo.toml | 2 +- examples/src/bin/openapi.rs | 60 ++++ src/integrations/httpz.rs | 2 +- src/internal/procedure_builder.rs | 19 +- src/lib.rs | 1 + src/plugins/mod.rs | 2 + src/plugins/openapi.rs | 338 ++++++++++++++++++ src/plugins/swagger-ui/favicon-16x16.png | Bin 0 -> 665 bytes src/plugins/swagger-ui/favicon-32x32.png | Bin 0 -> 628 bytes src/plugins/swagger-ui/index.css | 16 + src/plugins/swagger-ui/index.html | 40 +++ src/plugins/swagger-ui/swagger-ui-bundle.js | 3 + .../swagger-ui/swagger-ui-bundle.js.map | 1 + .../swagger-ui-standalone-preset.js | 3 + .../swagger-ui-standalone-preset.js.map | 1 + src/plugins/swagger-ui/swagger-ui.css | 3 + src/plugins/swagger-ui/swagger-ui.css.map | 1 + src/router.rs | 3 +- src/router_builder.rs | 21 +- 20 files changed, 500 insertions(+), 21 deletions(-) create mode 100644 examples/src/bin/openapi.rs create mode 100644 src/plugins/mod.rs create mode 100644 src/plugins/openapi.rs create mode 100644 src/plugins/swagger-ui/favicon-16x16.png create mode 100644 src/plugins/swagger-ui/favicon-32x32.png create mode 100644 src/plugins/swagger-ui/index.css create mode 100644 src/plugins/swagger-ui/index.html create mode 100644 src/plugins/swagger-ui/swagger-ui-bundle.js create mode 100644 src/plugins/swagger-ui/swagger-ui-bundle.js.map create mode 100644 src/plugins/swagger-ui/swagger-ui-standalone-preset.js create mode 100644 src/plugins/swagger-ui/swagger-ui-standalone-preset.js.map create mode 100644 src/plugins/swagger-ui/swagger-ui.css create mode 100644 src/plugins/swagger-ui/swagger-ui.css.map diff --git a/Cargo.toml b/Cargo.toml index 11575498..393a7e44 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ default = [] tauri = ["dep:tauri"] tracing = ["dep:tracing"] httpz = ["dep:httpz", "httpz/cookies"] -# openapi = ["dep:openapiv3"] +openapi = ["dep:openapiv3", "dep:httpz", "dep:include_dir", "dep:mime_guess"] # playground = [] # Webservers # Axum feature basically always enabled because we use the extractors regardless of webserver @@ -51,6 +51,9 @@ tokio = { version = "1.21.2", features = ["sync", "rt", "macros"] } tauri = { version = "1.1.1", optional = true } tracing = { version = "0.1.36", optional = true } async-stream = "0.3.3" +openapiv3 = { version = "1.0.1", optional = true } +include_dir = { version = "0.7.2", optional = true, features = ["metadata"] } +mime_guess = { version = "2.0.4", optional = true } [dev-dependencies] async-stream = "0.3.3" diff --git a/examples/Cargo.toml b/examples/Cargo.toml index d11cf24b..c4186c72 100644 --- a/examples/Cargo.toml +++ b/examples/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" publish = false [dependencies] -rspc = { path = "../", features = ["axum"] } +rspc = { path = "../", features = ["axum", "openapi"] } async-stream = "0.3.3" axum = "0.5.16" chrono = { version = "0.4.22", features = ["serde"] } diff --git a/examples/src/bin/openapi.rs b/examples/src/bin/openapi.rs new file mode 100644 index 00000000..16417377 --- /dev/null +++ b/examples/src/bin/openapi.rs @@ -0,0 +1,60 @@ +use axum::{extract::Path, routing::get}; +use rspc::plugins::openapi::{Method, OpenAPI, OpenAPIConfig}; +use tower_http::cors::{Any, CorsLayer}; + +#[tokio::main] +async fn main() { + let router = ::new() + .query("version", |t| { + t(|_, _: ()| async move { env!("CARGO_PKG_VERSION") }).openapi(Method::GET, "/version") + }) + .query("users", |t| { + t(|_, _: ()| async move { env!("CARGO_PKG_VERSION") }).openapi(Method::POST, "/users") + }) + .build() + .arced(); // This function is a shortcut to wrap the router in an `Arc`. + + let app = axum::Router::new() + .route("/", get(|| async { "Hello 'rspc'!" })) + // Attach the rspc router to your axum router. The closure is used to generate the request context for each request. + .route( + "/api/*path", + router + .clone() + .openapi_endpoint( + OpenAPIConfig { + title: "Demo API", + version: "1.0.0", + base_url: "http://[::]:4000/api", + }, + |path: Path| { + println!("Client requested operation '{}'", *path); + () + }, + ) + .axum(), + ) + .route( + "/rspc/:id", + router + .endpoint(|path: Path| { + println!("Client requested operation '{}'", *path); + () + }) + .axum(), + ) + // We disable CORS because this is just an example. DON'T DO THIS IN PRODUCTION! + .layer( + CorsLayer::new() + .allow_methods(Any) + .allow_headers(Any) + .allow_origin(Any), + ); + + let addr = "[::]:4000".parse::().unwrap(); // This listens on IPv6 and IPv4 + println!("listening on http://{}/rspc/version", addr); + axum::Server::bind(&addr) + .serve(app.into_make_service()) + .await + .unwrap(); +} diff --git a/src/integrations/httpz.rs b/src/integrations/httpz.rs index 3a274a8b..160c4f65 100644 --- a/src/integrations/httpz.rs +++ b/src/integrations/httpz.rs @@ -56,7 +56,7 @@ where let ctx_fn = ctx_fn.clone(); async move { - let websocket_url = format!("{}/ws", url_prefix.unwrap_or("/rspc")); + let websocket_url = format!("{}/ws", url_prefix.unwrap_or("/rspc")); // TODO: Match on variable in URL and not not the entire URL?? let cookies = req.cookies(); match (req.method(), req.uri().path()) { diff --git a/src/internal/procedure_builder.rs b/src/internal/procedure_builder.rs index 0c000323..a3a94d96 100644 --- a/src/internal/procedure_builder.rs +++ b/src/internal/procedure_builder.rs @@ -1,9 +1,16 @@ -use std::{marker::PhantomData, ops::Deref}; +use std::{ + any::{Any, TypeId}, + collections::HashMap, + marker::PhantomData, + ops::Deref, + sync::{Arc, RwLock}, +}; -use crate::GlobalData; +pub type GlobalData = Arc>>>; pub struct UnbuiltProcedureBuilder { - data: GlobalData, + pub name: &'static str, + pub data: GlobalData, // This can't be generic or a function pointer so boxing is a requirement in stable Rust. It's done at schema-build time so it should be ok. // For this to be done without boxing we would need `fn_traits` - https://doc.rust-lang.org/beta/unstable-book/library-features/fn-traits.html deref_handler: Box BuiltProcedureBuilder>, @@ -11,11 +18,13 @@ pub struct UnbuiltProcedureBuilder { } impl UnbuiltProcedureBuilder { - pub fn new(data: GlobalData) -> Self { + pub fn new(name: &'static str, data: GlobalData) -> Self { Self { + name, data: data.clone(), // TODO: Make it so this is only boxed in the `Deref` impl so it's a zero cost abstraction! deref_handler: Box::new(move |resolver| BuiltProcedureBuilder { + name, data: data.clone(), resolver, }), @@ -25,6 +34,7 @@ impl UnbuiltProcedureBuilder { pub fn resolver(self, resolver: TResolver) -> BuiltProcedureBuilder { BuiltProcedureBuilder { + name: self.name, data: self.data, resolver, } @@ -44,6 +54,7 @@ impl Deref for UnbuiltProcedureBuilder { + pub name: &'static str, pub data: GlobalData, pub resolver: TResolver, } diff --git a/src/lib.rs b/src/lib.rs index 1ca71264..6fe176c8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -25,6 +25,7 @@ pub use selection::*; pub mod integrations; pub mod internal; +pub mod plugins; pub use specta::RSPCType as Type; diff --git a/src/plugins/mod.rs b/src/plugins/mod.rs new file mode 100644 index 00000000..7968f873 --- /dev/null +++ b/src/plugins/mod.rs @@ -0,0 +1,2 @@ +#[cfg(feature = "openapi")] +pub mod openapi; diff --git a/src/plugins/openapi.rs b/src/plugins/openapi.rs new file mode 100644 index 00000000..ea564f1d --- /dev/null +++ b/src/plugins/openapi.rs @@ -0,0 +1,338 @@ +use std::{ + any::TypeId, + collections::{BTreeMap, HashMap}, + sync::Arc, +}; + +pub use httpz::http::Method; +use httpz::{http::Response, Endpoint, GenericEndpoint, HttpEndpoint, Request}; +use include_dir::{include_dir, Dir}; +use mime_guess::mime; +use openapiv3::{ + Info, MediaType, ObjectType, Operation, PathItem, Paths, ReferenceOr, Responses, Schema, + SchemaData, SchemaKind, Server, StatusCode, StringType, Type, +}; +use serde_json::json; + +use crate::{ + integrations::httpz_extractors::{TCtxFunc, TCtxFuncResult}, + internal::BuiltProcedureBuilder, + ExecKind, Router, +}; + +static SWAGGER_UI: Dir<'_> = include_dir!("$CARGO_MANIFEST_DIR/src/plugins/swagger-ui"); + +#[derive(Default)] +pub struct OpenAPIContext { + endpoints: HashMap< + &'static str, /* OpenAPI URL */ + ( + Method, /* HTTP Method */ + &'static str, /* Procedure name */ + ), + >, +} + +#[derive(Default)] +pub struct OpenAPIConfig { + pub title: &'static str, + pub version: &'static str, + pub base_url: &'static str, +} + +pub trait OpenAPI { + fn openapi(self, method: Method, url: &'static str) -> BuiltProcedureBuilder; +} + +impl OpenAPI for BuiltProcedureBuilder { + fn openapi(self, method: Method, url: &'static str) -> Self { + { + let mut data = self.data.write().unwrap(); + + let ctx = data + .entry(TypeId::of::()) + .or_insert_with(|| { + Box::new(OpenAPIContext::default()) + as Box + }) + .downcast_mut::() + .unwrap(); + + ctx.endpoints.insert(url, (method, self.name)); + } + + self + } +} + +impl Router +where + TCtx: Send + Sync + 'static, + TMeta: Send + Sync + 'static, +{ + pub fn openapi_doc(&self, config: OpenAPIConfig) -> openapiv3::OpenAPI { + let mut data = self.data.write().unwrap(); + + let ctx = data + .entry(TypeId::of::()) + .or_insert_with(|| { + Box::new(OpenAPIContext::default()) + as Box + }) + .downcast_mut::() + .unwrap(); + + openapiv3::OpenAPI { + openapi: "3.0.3".into(), + info: Info { + // TODO + // title: config.title.into(), + // description: Some(config.description), + // version: config.version.into(), + ..Default::default() + }, + servers: vec![Server { + url: config.base_url.into(), + ..Default::default() + }], + paths: Paths { + paths: ctx + .endpoints + .iter() + .map(|(url, (method, _))| { + ( + url.to_string(), + ReferenceOr::Item({ + let operation = Operation { + // operation_id: todo!(), + // parameters: todo!(), + // request_body: todo!(), + responses: Responses { + // default: todo!(), + responses: [( + StatusCode::Code(200), + ReferenceOr::Item(openapiv3::Response { + content: [( + "application/json".to_string(), + MediaType { + schema: Some(ReferenceOr::Item(Schema { + schema_data: SchemaData { + // nullable: todo!(), + // read_only: todo!(), + // write_only: todo!(), + // deprecated: todo!(), + // external_docs: todo!(), + example: Some(json!({ + "todo": "demo", + })), + // title: todo!(), + // description: todo!(), + // discriminator: todo!(), + // default: todo!(), + // extensions: todo!(), + ..Default::default() + }, + schema_kind: SchemaKind::Type( + Type::Object(ObjectType { + properties: [( + "todo".to_string(), + ReferenceOr::Item( + Box::new(Schema { + schema_data: Default::default(), + schema_kind: SchemaKind::Type(Type::String(StringType { + // format: todo!(), + // pattern: todo!(), + // enumeration: todo!(), + // min_length: todo!(), + // max_length: todo!(), + ..Default::default() + })), + }), + ), + )] + .into_iter() + .collect(), + // required: todo!(), + // additional_properties: todo!(), + // min_properties: todo!(), + // max_properties: todo!(), + ..Default::default() + }), + ), + })), + // example: todo!(), + // examples: todo!(), + // encoding: todo!(), + // extensions: todo!(), + ..Default::default() + }, + )] + .into_iter() + .collect(), + ..Default::default() + }), + )] + .into_iter() + .collect(), + ..Default::default() + }, + ..Default::default() + }; + + match *method { + Method::GET => { + PathItem { get: Some(operation), ..Default::default() } + }, + Method::POST => { + PathItem { post: Some(operation), ..Default::default() } + }, + Method::PUT => { + PathItem { put: Some(operation), ..Default::default() } + }, + Method::DELETE => { + PathItem { delete: Some(operation), ..Default::default() } + }, + Method::HEAD => { + PathItem { head: Some(operation), ..Default::default() } + }, + Method::OPTIONS => { + PathItem { options: Some(operation), ..Default::default() } + }, + Method::PATCH => { + PathItem { patch: Some(operation), ..Default::default() } + }, + Method::TRACE => { + PathItem { trace: Some(operation), ..Default::default() } + }, + _ => panic!("TODO") + } + }), + ) + }) + .collect(), + ..Default::default() + }, + ..Default::default() + } + } + + pub fn openapi_endpoint< + TCtxFnMarker: Send + Sync + 'static, + TCtxFn: TCtxFunc, + >( + self: Arc, + config: OpenAPIConfig, + ctx_fn: TCtxFn, + ) -> Endpoint { + let doc = self.openapi_doc(config); + let openapi = + Arc::new(serde_json::to_string(&doc).expect("Could not serialize OpenAPI config!")); + let endpoints = Arc::new({ + let mut data = self.data.write().unwrap(); + + let ctx = data + .entry(TypeId::of::()) + .or_insert_with(|| { + Box::new(OpenAPIContext::default()) + as Box + }) + .downcast_mut::() + .unwrap(); + + ctx.endpoints + .iter() + .map(|(k, v)| (format!("/api{}", k), v.clone())) + .collect::>() + }); + + GenericEndpoint::new( + [Method::GET, Method::POST], // TODO: All methods + move |req: Request| { + // TODO: Don't clone per request, do per thread or keep reference? + let router = self.clone(); + let openapi = openapi.clone(); + let endpoints = endpoints.clone(); + let ctx_fn = ctx_fn.clone(); + + async move { + let path = &*req.uri().path().to_string(); + let endpoint = endpoints.get(&path.to_string()); + // TODO: Path related to prefix defined on the router or allow user providing a base path + match (path, endpoint) { + (_, Some(endpoint)) => { + let (_, key) = endpoint; + #[cfg(not(feature = "workers"))] + let ctx = match ctx_fn.exec( + &mut httpz::axum::axum::extract::RequestParts::new(req.into()), + ) { + TCtxFuncResult::Value(v) => v, + TCtxFuncResult::Future(v) => v.await, + }; + #[cfg(feature = "workers")] + let ctx = match ctx_fn.exec() { + TCtxFuncResult::Value(v) => v, + TCtxFuncResult::Future(v) => v.await, + }; + + // TODO: Support query or mutation and error out if OpenAPI is put on a subscription + // TODO: Input value from request body + let result = router + .exec(ctx.unwrap(), ExecKind::Query, key.to_string(), None) + .await + .unwrap(); + + Response::builder() + .status(200) + .header("Content-Type", "application/json") + .body(serde_json::to_vec(&result).unwrap()) + .unwrap() + } + ("/api/openapi.json", _) => Response::builder() + .status(200) + .header("Content-Type", "application/json") + .body((*openapi).clone().into_bytes()) + .unwrap(), + // TODO: Allow disabling swagger UI + ("/api/ui", _) => Response::builder() + .status(200) + .header("Content-Type", "text/html") + .body( + SWAGGER_UI + .get_file("index.html") + .unwrap() + .contents() + .to_vec(), + ) + .unwrap(), + _ if req.uri().path().starts_with("/api/_swaggerui/") => { + let path = req.uri().path().strip_prefix("/api/_swaggerui/").unwrap(); + match SWAGGER_UI.get_file(path) { + Some(file) => Response::builder() + .status(200) + .header( + "Content-Type", + mime_guess::from_path(path) + .first() + .unwrap_or(mime::TEXT_PLAIN) + .to_string(), + ) + .body(file.contents().to_vec()) + .unwrap(), + None => Response::builder() + .status(404) + .header("Content-Type", "text/html") + .body("404: Not found".into()) + .unwrap(), + } + } + _ => Response::builder() + .status(404) + .header("Content-Type", "text/html") + .body(b"404: Not found".to_vec()) + .unwrap(), + } + } + }, + ) + } +} diff --git a/src/plugins/swagger-ui/favicon-16x16.png b/src/plugins/swagger-ui/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..8b194e617af1c135e6b37939591d24ac3a5efa18 GIT binary patch literal 665 zcmV;K0%rY*P)}JKSduyL>)s!A4EhTMMEM%Q;aL6%l#xiZiF>S;#Y{N2Zz%pvTGHJduXuC6Lx-)0EGfRy*N{Tv4i8@4oJ41gw zKzThrcRe|7J~(YYIBq{SYCkn-KQm=N8$CrEK1CcqMI1dv9z#VRL_{D)L|`QmF8}}l zJ9JV`Q}p!p_4f7m_U`WQ@apR4;o;!mnU<7}iG_qr zF(e)x9~BG-3IzcG2M4an0002kNkl41`ZiN1i62V%{PM@Ry|IS_+Yc7{bb`MM~xm(7p4|kMHP&!VGuDW4kFixat zXw43VmgwEvB$hXt_u=vZ>+v4i7E}n~eG6;n4Z=zF1n?T*yg<;W6kOfxpC6nao>VR% z?fpr=asSJ&`L*wu^rLJ5Peq*PB0;alL#XazZCBxJLd&giTfw@!hW167F^`7kobi;( ze<<>qNlP|xy7S1zl@lZNIBR7#o9ybJsptO#%}P0hz~sBp00000NkvXXu0mjfUsDF? literal 0 HcmV?d00001 diff --git a/src/plugins/swagger-ui/favicon-32x32.png b/src/plugins/swagger-ui/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..249737fe44558e679f0b67134e274461d988fa98 GIT binary patch literal 628 zcmV-)0*n2LP)Ma*GM0}OV<074bNCP7P7GVd{iMr*I6y~TMLss@FjvgL~HxU z%Vvj33AwpD(Z4*$Mfx=HaU16axM zt2xG_rloN<$iy9j9I5 + + + + Swagger UI + + + + + + + +
+ + + + + + diff --git a/src/plugins/swagger-ui/swagger-ui-bundle.js b/src/plugins/swagger-ui/swagger-ui-bundle.js new file mode 100644 index 00000000..b42af404 --- /dev/null +++ b/src/plugins/swagger-ui/swagger-ui-bundle.js @@ -0,0 +1,3 @@ +/*! For license information please see swagger-ui-bundle.js.LICENSE.txt */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SwaggerUIBundle=t():e.SwaggerUIBundle=t()}(this,(function(){return(()=>{var e={17967:(e,t)=>{"use strict";t.N=void 0;var r=/^([^\w]*)(javascript|data|vbscript)/im,n=/&#(\w+)(^\w|;)?/g,o=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,a=/^([^:]+):/gm,i=[".","/"];t.N=function(e){var t,s=(t=e||"",t.replace(n,(function(e,t){return String.fromCharCode(t)}))).replace(o,"").trim();if(!s)return"about:blank";if(function(e){return i.indexOf(e[0])>-1}(s))return s;var l=s.match(a);if(!l)return s;var u=l[0];return r.test(u)?"about:blank":s}},53795:(e,t,r)=>{"use strict";r.d(t,{Z:()=>P});var n=r(23101),o=r.n(n),a=r(61125),i=r.n(a),s=r(11882),l=r.n(s),u=r(97606),c=r.n(u),p=r(67294),f=r(43393);function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function d(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function m(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=k(t,r),o=e||Object.keys(y({},r,{},t));return o.every(n)}function k(e,t){return function(r){if("string"==typeof r)return(0,f.is)(t[r],e[r]);if(Array.isArray(r))return(0,f.is)(S(t,r),S(e,r));throw new TypeError("Invalid key: expected Array or string: "+r)}}var C=function(e){function t(){return d(this,t),E(this,b(t).apply(this,arguments))}var r,n,o;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&w(e,t)}(t,e),r=t,n=[{key:"shouldComponentUpdate",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return!A(this.updateOnProps,this.props,e,"updateOnProps")||!A(this.updateOnStates,this.state,t,"updateOnStates")}}],n&&m(r.prototype,n),o&&m(r,o),t}(p.Component);const O=C;var j=r(23930),I=r.n(j),N=r(45697),T=r.n(N);class P extends O{constructor(){super(...arguments),i()(this,"getModelName",(e=>-1!==l()(e).call(e,"#/definitions/")?e.replace(/^.*#\/definitions\//,""):-1!==l()(e).call(e,"#/components/schemas/")?e.replace(/^.*#\/components\/schemas\//,""):void 0)),i()(this,"getRefSchema",(e=>{let{specSelectors:t}=this.props;return t.findDefinition(e)}))}render(){let{getComponent:e,getConfigs:t,specSelectors:n,schema:a,required:i,name:s,isRef:l,specPath:u,displayName:c,includeReadOnly:f,includeWriteOnly:h}=this.props;const d=e("ObjectModel"),m=e("ArrayModel"),g=e("PrimitiveModel");let v="object",y=a&&a.get("$$ref");if(!s&&y&&(s=this.getModelName(y)),!a&&y&&(a=this.getRefSchema(s)),!a)return p.createElement("span",{className:"model model-title"},p.createElement("span",{className:"model-title__text"},c||s),p.createElement("img",{src:r(2517),height:"20px",width:"20px"}));const b=n.isOAS3()&&a.get("deprecated");switch(l=void 0!==l?l:!!y,v=a&&a.get("type")||v,v){case"object":return p.createElement(d,o()({className:"object"},this.props,{specPath:u,getConfigs:t,schema:a,name:s,deprecated:b,isRef:l,includeReadOnly:f,includeWriteOnly:h}));case"array":return p.createElement(m,o()({className:"array"},this.props,{getConfigs:t,schema:a,name:s,deprecated:b,required:i,includeReadOnly:f,includeWriteOnly:h}));default:return p.createElement(g,o()({},this.props,{getComponent:e,getConfigs:t,schema:a,name:s,deprecated:b,required:i}))}}}i()(P,"propTypes",{schema:c()(I()).isRequired,getComponent:T().func.isRequired,getConfigs:T().func.isRequired,specSelectors:T().object.isRequired,name:T().string,displayName:T().string,isRef:T().bool,required:T().bool,expandDepth:T().number,depth:T().number,specPath:I().list.isRequired,includeReadOnly:T().bool,includeWriteOnly:T().bool})},5623:(e,t,r)=>{"use strict";r.d(t,{Z:()=>f});var n=r(61125),o=r.n(n),a=r(28222),i=r.n(a),s=r(67294),l=r(84564),u=r.n(l),c=r(90242),p=r(27504);class f extends s.Component{constructor(e,t){super(e,t),o()(this,"getDefinitionUrl",(()=>{let{specSelectors:e}=this.props;return new(u())(e.url(),p.Z.location).toString()}));let{getConfigs:r}=e,{validatorUrl:n}=r();this.state={url:this.getDefinitionUrl(),validatorUrl:void 0===n?"https://validator.swagger.io/validator":n}}UNSAFE_componentWillReceiveProps(e){let{getConfigs:t}=e,{validatorUrl:r}=t();this.setState({url:this.getDefinitionUrl(),validatorUrl:void 0===r?"https://validator.swagger.io/validator":r})}render(){let{getConfigs:e}=this.props,{spec:t}=e(),r=(0,c.Nm)(this.state.validatorUrl);return"object"==typeof t&&i()(t).length?null:this.state.url&&(0,c.hW)(this.state.validatorUrl)&&(0,c.hW)(this.state.url)?s.createElement("span",{className:"float-right"},s.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:`${r}/debug?url=${encodeURIComponent(this.state.url)}`},s.createElement(h,{src:`${r}?url=${encodeURIComponent(this.state.url)}`,alt:"Online validator badge"}))):null}}class h extends s.Component{constructor(e){super(e),this.state={loaded:!1,error:!1}}componentDidMount(){const e=new Image;e.onload=()=>{this.setState({loaded:!0})},e.onerror=()=>{this.setState({error:!0})},e.src=this.props.src}UNSAFE_componentWillReceiveProps(e){if(e.src!==this.props.src){const t=new Image;t.onload=()=>{this.setState({loaded:!0})},t.onerror=()=>{this.setState({error:!0})},t.src=e.src}}render(){return this.state.error?s.createElement("img",{alt:"Error"}):this.state.loaded?s.createElement("img",{src:this.props.src,alt:this.props.alt}):null}}},86019:(e,t,r)=>{"use strict";r.d(t,{Z:()=>me,s:()=>ge});var n=r(67294),o=r(89927);function a(e,t){if(Array.prototype.indexOf)return e.indexOf(t);for(var r=0,n=e.length;r=0;r--)!0===t(e[r])&&e.splice(r,1)}function s(e){throw new Error("Unhandled case for value: '"+e+"'")}var l=function(){function e(e){void 0===e&&(e={}),this.tagName="",this.attrs={},this.innerHTML="",this.whitespaceRegex=/\s+/,this.tagName=e.tagName||"",this.attrs=e.attrs||{},this.innerHTML=e.innerHtml||e.innerHTML||""}return e.prototype.setTagName=function(e){return this.tagName=e,this},e.prototype.getTagName=function(){return this.tagName||""},e.prototype.setAttr=function(e,t){return this.getAttrs()[e]=t,this},e.prototype.getAttr=function(e){return this.getAttrs()[e]},e.prototype.setAttrs=function(e){return Object.assign(this.getAttrs(),e),this},e.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},e.prototype.setClass=function(e){return this.setAttr("class",e)},e.prototype.addClass=function(e){for(var t,r=this.getClass(),n=this.whitespaceRegex,o=r?r.split(n):[],i=e.split(n);t=i.shift();)-1===a(o,t)&&o.push(t);return this.getAttrs().class=o.join(" "),this},e.prototype.removeClass=function(e){for(var t,r=this.getClass(),n=this.whitespaceRegex,o=r?r.split(n):[],i=e.split(n);o.length&&(t=i.shift());){var s=a(o,t);-1!==s&&o.splice(s,1)}return this.getAttrs().class=o.join(" "),this},e.prototype.getClass=function(){return this.getAttrs().class||""},e.prototype.hasClass=function(e){return-1!==(" "+this.getClass()+" ").indexOf(" "+e+" ")},e.prototype.setInnerHTML=function(e){return this.innerHTML=e,this},e.prototype.setInnerHtml=function(e){return this.setInnerHTML(e)},e.prototype.getInnerHTML=function(){return this.innerHTML||""},e.prototype.getInnerHtml=function(){return this.getInnerHTML()},e.prototype.toAnchorString=function(){var e=this.getTagName(),t=this.buildAttrsStr();return["<",e,t=t?" "+t:"",">",this.getInnerHtml(),""].join("")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var e=this.getAttrs(),t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(r+'="'+e[r]+'"');return t.join(" ")},e}();var u=function(){function e(e){void 0===e&&(e={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=e.newWindow||!1,this.truncate=e.truncate||{},this.className=e.className||""}return e.prototype.build=function(e){return new l({tagName:"a",attrs:this.createAttrs(e),innerHtml:this.processAnchorText(e.getAnchorText())})},e.prototype.createAttrs=function(e){var t={href:e.getAnchorHref()},r=this.createCssClass(e);return r&&(t.class=r),this.newWindow&&(t.target="_blank",t.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length=s)return l.host.length==t?(l.host.substr(0,t-o)+r).substr(0,s+n):i(c,s).substr(0,s+n);var p="";if(l.path&&(p+="/"+l.path),l.query&&(p+="?"+l.query),p){if((c+p).length>=s)return(c+p).length==t?(c+p).substr(0,t):(c+i(p,s-c.length)).substr(0,s+n);c+=p}if(l.fragment){var f="#"+l.fragment;if((c+f).length>=s)return(c+f).length==t?(c+f).substr(0,t):(c+i(f,s-c.length)).substr(0,s+n);c+=f}if(l.scheme&&l.host){var h=l.scheme+"://";if((c+h).length0&&(d=c.substr(-1*Math.floor(s/2))),(c.substr(0,Math.ceil(s/2))+r+d).substr(0,s+n)}(e,r):"middle"===n?function(e,t,r){if(e.length<=t)return e;var n,o;null==r?(r="…",n=8,o=3):(n=r.length,o=r.length);var a=t-o,i="";return a>0&&(i=e.substr(-1*Math.floor(a/2))),(e.substr(0,Math.ceil(a/2))+r+i).substr(0,a+n)}(e,r):function(e,t,r){return function(e,t,r){var n;return e.length>t&&(null==r?(r="…",n=3):n=r.length,e=e.substring(0,t-n)+r),e}(e,t,r)}(e,r)},e}(),c=function(){function e(e){this.__jsduckDummyDocProp=null,this.matchedText="",this.offset=0,this.tagBuilder=e.tagBuilder,this.matchedText=e.matchedText,this.offset=e.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(e){this.offset=e},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.getType()]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e}(),p=function(e,t){return p=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},p(e,t)};function f(e,t){function r(){this.constructor=e}p(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var h=function(){return h=Object.assign||function(e){for(var t,r=1,n=arguments.length;r-1},e.isValidUriScheme=function(e){var t=e.match(this.uriSchemeRegex),r=t&&t[0].toLowerCase();return"javascript:"!==r&&"vbscript:"!==r},e.urlMatchDoesNotHaveProtocolOrDot=function(e,t){return!(!e||t&&this.hasFullProtocolRegex.test(t)||-1!==e.indexOf("."))},e.urlMatchDoesNotHaveAtLeastOneWordChar=function(e,t){return!(!e||!t)&&(!this.hasFullProtocolRegex.test(t)&&!this.hasWordCharAfterProtocolRegex.test(e))},e.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\/\//,e.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,e.hasWordCharAfterProtocolRegex=new RegExp(":[^\\s]*?["+C+"]"),e.ipRegex=/[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?(:[0-9]*)?\/?$/,e}(),V=(d=new RegExp("[/?#](?:["+N+"\\-+&@#/%=~_()|'$*\\[\\]{}?!:,.;^✓]*["+N+"\\-+&@#/%=~_()|'$*\\[\\]{}✓])?"),new RegExp(["(?:","(",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\/\/)(?!\d+\/?)(?:\/\/)?)/.source,M(2),")","|","(","(//)?",/(?:www\.)/.source,M(6),")","|","(","(//)?",M(10)+"\\.",L.source,"(?![-"+I+"])",")",")","(?::[0-9]+)?","(?:"+d.source+")?"].join(""),"gi")),$=new RegExp("["+N+"]"),W=function(e){function t(t){var r=e.call(this,t)||this;return r.stripPrefix={scheme:!0,www:!0},r.stripTrailingSlash=!0,r.decodePercentEncoding=!0,r.matcherRegex=V,r.wordCharRegExp=$,r.stripPrefix=t.stripPrefix,r.stripTrailingSlash=t.stripTrailingSlash,r.decodePercentEncoding=t.decodePercentEncoding,r}return f(t,e),t.prototype.parseMatches=function(e){for(var t,r=this.matcherRegex,n=this.stripPrefix,o=this.stripTrailingSlash,a=this.decodePercentEncoding,i=this.tagBuilder,s=[],l=function(){var r=t[0],l=t[1],c=t[4],p=t[5],f=t[9],h=t.index,d=p||f,m=e.charAt(h-1);if(!q.isValid(r,l))return"continue";if(h>0&&"@"===m)return"continue";if(h>0&&d&&u.wordCharRegExp.test(m))return"continue";if(/\?$/.test(r)&&(r=r.substr(0,r.length-1)),u.matchHasUnbalancedClosingParen(r))r=r.substr(0,r.length-1);else{var g=u.matchHasInvalidCharAfterTld(r,l);g>-1&&(r=r.substr(0,g))}var v=["http://","https://"].find((function(e){return!!l&&-1!==l.indexOf(e)}));if(v){var y=r.indexOf(v);r=r.substr(y),l=l.substr(y),h+=y}var w=l?"scheme":c?"www":"tld",E=!!l;s.push(new b({tagBuilder:i,matchedText:r,offset:h,urlMatchType:w,url:r,protocolUrlMatch:E,protocolRelativeMatch:!!d,stripPrefix:n,stripTrailingSlash:o,decodePercentEncoding:a}))},u=this;null!==(t=r.exec(e));)l();return s},t.prototype.matchHasUnbalancedClosingParen=function(e){var t,r=e.charAt(e.length-1);if(")"===r)t="(";else if("]"===r)t="[";else{if("}"!==r)return!1;t="{"}for(var n=0,o=0,a=e.length-1;o"===e?(m=new ne(h(h({},m),{name:H()})),W()):E.test(e)||x.test(e)||":"===e||V()}function w(e){">"===e?V():E.test(e)?f=3:V()}function _(e){S.test(e)||("/"===e?f=12:">"===e?W():"<"===e?$():"="===e||A.test(e)||k.test(e)?V():f=5)}function C(e){S.test(e)?f=6:"/"===e?f=12:"="===e?f=7:">"===e?W():"<"===e?$():A.test(e)&&V()}function O(e){S.test(e)||("/"===e?f=12:"="===e?f=7:">"===e?W():"<"===e?$():A.test(e)?V():f=5)}function j(e){S.test(e)||('"'===e?f=8:"'"===e?f=9:/[>=`]/.test(e)?V():"<"===e?$():f=10)}function I(e){'"'===e&&(f=11)}function N(e){"'"===e&&(f=11)}function T(e){S.test(e)?f=4:">"===e?W():"<"===e&&$()}function P(e){S.test(e)?f=4:"/"===e?f=12:">"===e?W():"<"===e?$():(f=4,c--)}function R(e){">"===e?(m=new ne(h(h({},m),{isClosing:!0})),W()):f=4}function M(t){"--"===e.substr(c,2)?(c+=2,m=new ne(h(h({},m),{type:"comment"})),f=14):"DOCTYPE"===e.substr(c,7).toUpperCase()?(c+=7,m=new ne(h(h({},m),{type:"doctype"})),f=20):V()}function D(e){"-"===e?f=15:">"===e?V():f=16}function L(e){"-"===e?f=18:">"===e?V():f=16}function B(e){"-"===e&&(f=17)}function F(e){f="-"===e?18:16}function z(e){">"===e?W():"!"===e?f=19:"-"===e||(f=16)}function U(e){"-"===e?f=17:">"===e?W():f=16}function q(e){">"===e?W():"<"===e&&$()}function V(){f=0,m=u}function $(){f=1,m=new ne({idx:c})}function W(){var t=e.slice(d,m.idx);t&&a(t,d),"comment"===m.type?i(m.idx):"doctype"===m.type?l(m.idx):(m.isOpening&&n(m.name,m.idx),m.isClosing&&o(m.name,m.idx)),V(),d=c+1}function H(){var t=m.idx+(m.isClosing?2:1);return e.slice(t,c).toLowerCase()}d=0&&n++},onText:function(e,r){if(0===n){var a=function(e,t){if(!t.global)throw new Error("`splitRegex` must have the 'g' flag set");for(var r,n=[],o=0;r=t.exec(e);)n.push(e.substring(o,r.index)),n.push(r[0]),o=r.index+r[0].length;return n.push(e.substring(o)),n}(e,/( | |<|<|>|>|"|"|')/gi),i=r;a.forEach((function(e,r){if(r%2==0){var n=t.parseText(e,i);o.push.apply(o,n)}i+=e.length}))}},onCloseTag:function(e){r.indexOf(e)>=0&&(n=Math.max(n-1,0))},onComment:function(e){},onDoctype:function(e){}}),o=this.compactMatches(o),o=this.removeUnwantedMatches(o)},e.prototype.compactMatches=function(e){e.sort((function(e,t){return e.getOffset()-t.getOffset()}));for(var t=0;to?t:t+1;e.splice(i,1);continue}e[t+1].getOffset()/g,">"));for(var t=this.parse(e),r=[],n=0,o=0,a=t.length;o/i.test(e)}function se(){var e=[],t=new oe({stripPrefix:!1,url:!0,email:!0,replaceFn:function(t){switch(t.getType()){case"url":e.push({text:t.matchedText,url:t.getUrl()});break;case"email":e.push({text:t.matchedText,url:"mailto:"+t.getEmail().replace(/^mailto:/i,"")})}return!1}});return{links:e,autolinker:t}}function le(e){var t,r,n,o,a,i,s,l,u,c,p,f,h,d,m=e.tokens,g=null;for(r=0,n=m.length;r=0;t--)if("link_close"!==(a=o[t]).type){if("htmltag"===a.type&&(d=a.content,/^\s]/i.test(d)&&p>0&&p--,ie(a.content)&&p++),!(p>0)&&"text"===a.type&&ae.test(a.content)){if(g||(f=(g=se()).links,h=g.autolinker),i=a.content,f.length=0,h.link(i),!f.length)continue;for(s=[],c=a.level,l=0;l({useUnsafeMarkdown:!1})};const me=de;function ge(e){let{useUnsafeMarkdown:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=t,n=t?[]:["style","class"];return t&&!ge.hasWarnedAboutDeprecation&&(console.warn("useUnsafeMarkdown display configuration parameter is deprecated since >3.26.0 and will be removed in v4.0.0."),ge.hasWarnedAboutDeprecation=!0),pe().sanitize(e,{ADD_ATTR:["target"],FORBID_TAGS:["style","form"],ALLOW_DATA_ATTR:r,FORBID_ATTR:n})}ge.hasWarnedAboutDeprecation=!1},45308:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>f});var n,o=r(86),a=r.n(o),i=r(8712),s=r.n(i),l=r(90242),u=r(27621);const c=r(95102),p={},f=p;a()(n=s()(c).call(c)).call(n,(function(e){if("./index.js"===e)return;let t=c(e);p[(0,l.Zl)(e)]=t.default?t.default:t})),p.SafeRender=u.default},55812:(e,t,r)=>{"use strict";r.r(t),r.d(t,{SHOW_AUTH_POPUP:()=>p,AUTHORIZE:()=>f,LOGOUT:()=>h,PRE_AUTHORIZE_OAUTH2:()=>d,AUTHORIZE_OAUTH2:()=>m,VALIDATE:()=>g,CONFIGURE_AUTH:()=>v,RESTORE_AUTHORIZATION:()=>y,showDefinitions:()=>b,authorize:()=>w,authorizeWithPersistOption:()=>E,logout:()=>x,logoutWithPersistOption:()=>_,preAuthorizeImplicit:()=>S,authorizeOauth2:()=>A,authorizeOauth2WithPersistOption:()=>k,authorizePassword:()=>C,authorizeApplication:()=>O,authorizeAccessCodeWithFormParams:()=>j,authorizeAccessCodeWithBasicAuthentication:()=>I,authorizeRequest:()=>N,configureAuth:()=>T,restoreAuthorization:()=>P,persistAuthorizationIfNeeded:()=>R,authPopup:()=>M});var n=r(35627),o=r.n(n),a=r(76986),i=r.n(a),s=r(84564),l=r.n(s),u=r(27504),c=r(90242);const p="show_popup",f="authorize",h="logout",d="pre_authorize_oauth2",m="authorize_oauth2",g="validate",v="configure_auth",y="restore_authorization";function b(e){return{type:p,payload:e}}function w(e){return{type:f,payload:e}}const E=e=>t=>{let{authActions:r}=t;r.authorize(e),r.persistAuthorizationIfNeeded()};function x(e){return{type:h,payload:e}}const _=e=>t=>{let{authActions:r}=t;r.logout(e),r.persistAuthorizationIfNeeded()},S=e=>t=>{let{authActions:r,errActions:n}=t,{auth:a,token:i,isValid:s}=e,{schema:l,name:c}=a,p=l.get("flow");delete u.Z.swaggerUIRedirectOauth2,"accessCode"===p||s||n.newAuthErr({authId:c,source:"auth",level:"warning",message:"Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"}),i.error?n.newAuthErr({authId:c,source:"auth",level:"error",message:o()(i)}):r.authorizeOauth2WithPersistOption({auth:a,token:i})};function A(e){return{type:m,payload:e}}const k=e=>t=>{let{authActions:r}=t;r.authorizeOauth2(e),r.persistAuthorizationIfNeeded()},C=e=>t=>{let{authActions:r}=t,{schema:n,name:o,username:a,password:s,passwordType:l,clientId:u,clientSecret:p}=e,f={grant_type:"password",scope:e.scopes.join(" "),username:a,password:s},h={};switch(l){case"request-body":!function(e,t,r){t&&i()(e,{client_id:t});r&&i()(e,{client_secret:r})}(f,u,p);break;case"basic":h.Authorization="Basic "+(0,c.r3)(u+":"+p);break;default:console.warn(`Warning: invalid passwordType ${l} was passed, not including client id and secret`)}return r.authorizeRequest({body:(0,c.GZ)(f),url:n.get("tokenUrl"),name:o,headers:h,query:{},auth:e})};const O=e=>t=>{let{authActions:r}=t,{schema:n,scopes:o,name:a,clientId:i,clientSecret:s}=e,l={Authorization:"Basic "+(0,c.r3)(i+":"+s)},u={grant_type:"client_credentials",scope:o.join(" ")};return r.authorizeRequest({body:(0,c.GZ)(u),name:a,url:n.get("tokenUrl"),auth:e,headers:l})},j=e=>{let{auth:t,redirectUrl:r}=e;return e=>{let{authActions:n}=e,{schema:o,name:a,clientId:i,clientSecret:s,codeVerifier:l}=t,u={grant_type:"authorization_code",code:t.code,client_id:i,client_secret:s,redirect_uri:r,code_verifier:l};return n.authorizeRequest({body:(0,c.GZ)(u),name:a,url:o.get("tokenUrl"),auth:t})}},I=e=>{let{auth:t,redirectUrl:r}=e;return e=>{let{authActions:n}=e,{schema:o,name:a,clientId:i,clientSecret:s,codeVerifier:l}=t,u={Authorization:"Basic "+(0,c.r3)(i+":"+s)},p={grant_type:"authorization_code",code:t.code,client_id:i,redirect_uri:r,code_verifier:l};return n.authorizeRequest({body:(0,c.GZ)(p),name:a,url:o.get("tokenUrl"),auth:t,headers:u})}},N=e=>t=>{let r,{fn:n,getConfigs:a,authActions:s,errActions:u,oas3Selectors:c,specSelectors:p,authSelectors:f}=t,{body:h,query:d={},headers:m={},name:g,url:v,auth:y}=e,{additionalQueryStringParams:b}=f.getConfigs()||{};if(p.isOAS3()){let e=c.serverEffectiveValue(c.selectedServer());r=l()(v,e,!0)}else r=l()(v,p.url(),!0);"object"==typeof b&&(r.query=i()({},r.query,b));const w=r.toString();let E=i()({Accept:"application/json, text/plain, */*","Content-Type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},m);n.fetch({url:w,method:"post",headers:E,query:d,body:h,requestInterceptor:a().requestInterceptor,responseInterceptor:a().responseInterceptor}).then((function(e){let t=JSON.parse(e.data),r=t&&(t.error||""),n=t&&(t.parseError||"");e.ok?r||n?u.newAuthErr({authId:g,level:"error",source:"auth",message:o()(t)}):s.authorizeOauth2WithPersistOption({auth:y,token:t}):u.newAuthErr({authId:g,level:"error",source:"auth",message:e.statusText})})).catch((e=>{let t=new Error(e).message;if(e.response&&e.response.data){const r=e.response.data;try{const e="string"==typeof r?JSON.parse(r):r;e.error&&(t+=`, error: ${e.error}`),e.error_description&&(t+=`, description: ${e.error_description}`)}catch(e){}}u.newAuthErr({authId:g,level:"error",source:"auth",message:t})}))};function T(e){return{type:v,payload:e}}function P(e){return{type:y,payload:e}}const R=()=>e=>{let{authSelectors:t,getConfigs:r}=e;if(r().persistAuthorization){const e=t.authorized();localStorage.setItem("authorized",o()(e.toJS()))}},M=(e,t)=>()=>{u.Z.swaggerUIRedirectOauth2=t,u.Z.open(e)}},93705:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>u,preauthorizeBasic:()=>c,preauthorizeApiKey:()=>p});var n=r(11189),o=r.n(n),a=r(43962),i=r(55812),s=r(60035),l=r(48302);function u(){return{afterLoad(e){this.rootInjects=this.rootInjects||{},this.rootInjects.initOAuth=e.authActions.configureAuth,this.rootInjects.preauthorizeApiKey=o()(p).call(p,null,e),this.rootInjects.preauthorizeBasic=o()(c).call(c,null,e)},statePlugins:{auth:{reducers:a.default,actions:i,selectors:s},spec:{wrapActions:l}}}}function c(e,t,r,n){const{authActions:{authorize:o},specSelectors:{specJson:a,isOAS3:i}}=e,s=i()?["components","securitySchemes"]:["securityDefinitions"],l=a().getIn([...s,t]);return l?o({[t]:{value:{username:r,password:n},schema:l.toJS()}}):null}function p(e,t,r){const{authActions:{authorize:n},specSelectors:{specJson:o,isOAS3:a}}=e,i=a()?["components","securitySchemes"]:["securityDefinitions"],s=o().getIn([...i,t]);return s?n({[t]:{value:r,schema:s.toJS()}}):null}},43962:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>c});var n=r(86),o=r.n(n),a=r(76986),i=r.n(a),s=r(43393),l=r(90242),u=r(55812);const c={[u.SHOW_AUTH_POPUP]:(e,t)=>{let{payload:r}=t;return e.set("showDefinitions",r)},[u.AUTHORIZE]:(e,t)=>{var r;let{payload:n}=t,a=(0,s.fromJS)(n),i=e.get("authorized")||(0,s.Map)();return o()(r=a.entrySeq()).call(r,(t=>{let[r,n]=t;if(!(0,l.Wl)(n.getIn))return e.set("authorized",i);let o=n.getIn(["schema","type"]);if("apiKey"===o||"http"===o)i=i.set(r,n);else if("basic"===o){let e=n.getIn(["value","username"]),t=n.getIn(["value","password"]);i=i.setIn([r,"value"],{username:e,header:"Basic "+(0,l.r3)(e+":"+t)}),i=i.setIn([r,"schema"],n.get("schema"))}})),e.set("authorized",i)},[u.AUTHORIZE_OAUTH2]:(e,t)=>{let r,{payload:n}=t,{auth:o,token:a}=n;o.token=i()({},a),r=(0,s.fromJS)(o);let l=e.get("authorized")||(0,s.Map)();return l=l.set(r.get("name"),r),e.set("authorized",l)},[u.LOGOUT]:(e,t)=>{let{payload:r}=t,n=e.get("authorized").withMutations((e=>{o()(r).call(r,(t=>{e.delete(t)}))}));return e.set("authorized",n)},[u.CONFIGURE_AUTH]:(e,t)=>{let{payload:r}=t;return e.set("configs",r)},[u.RESTORE_AUTHORIZATION]:(e,t)=>{let{payload:r}=t;return e.set("authorized",(0,s.fromJS)(r.authorized))}}},60035:(e,t,r)=>{"use strict";r.r(t),r.d(t,{shownDefinitions:()=>y,definitionsToAuthorize:()=>b,getDefinitionsByNames:()=>w,definitionsForRequirements:()=>E,authorized:()=>x,isAuthorized:()=>_,getConfigs:()=>S});var n=r(86),o=r.n(n),a=r(14418),i=r.n(a),s=r(92039),l=r.n(s),u=r(11882),c=r.n(u),p=r(97606),f=r.n(p),h=r(28222),d=r.n(h),m=r(20573),g=r(43393);const v=e=>e,y=(0,m.P1)(v,(e=>e.get("showDefinitions"))),b=(0,m.P1)(v,(()=>e=>{var t;let{specSelectors:r}=e,n=r.securityDefinitions()||(0,g.Map)({}),a=(0,g.List)();return o()(t=n.entrySeq()).call(t,(e=>{let[t,r]=e,n=(0,g.Map)();n=n.set(t,r),a=a.push(n)})),a})),w=(e,t)=>e=>{var r;let{specSelectors:n}=e;console.warn("WARNING: getDefinitionsByNames is deprecated and will be removed in the next major version.");let a=n.securityDefinitions(),i=(0,g.List)();return o()(r=t.valueSeq()).call(r,(e=>{var t;let r=(0,g.Map)();o()(t=e.entrySeq()).call(t,(e=>{let t,[n,i]=e,s=a.get(n);var l;"oauth2"===s.get("type")&&i.size&&(t=s.get("scopes"),o()(l=t.keySeq()).call(l,(e=>{i.contains(e)||(t=t.delete(e))})),s=s.set("allowedScopes",t));r=r.set(n,s)})),i=i.push(r)})),i},E=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,g.List)();return e=>{let{authSelectors:r}=e;const n=r.definitionsToAuthorize()||(0,g.List)();return i()(n).call(n,(e=>l()(t).call(t,(t=>t.get(e.keySeq().first())))))}},x=(0,m.P1)(v,(e=>e.get("authorized")||(0,g.Map)())),_=(e,t)=>e=>{var r;let{authSelectors:n}=e,o=n.authorized();return g.List.isList(t)?!!i()(r=t.toJS()).call(r,(e=>{var t,r;return-1===c()(t=f()(r=d()(e)).call(r,(e=>!!o.get(e)))).call(t,!1)})).length:null},S=(0,m.P1)(v,(e=>e.get("configs")))},48302:(e,t,r)=>{"use strict";r.r(t),r.d(t,{execute:()=>n});const n=(e,t)=>{let{authSelectors:r,specSelectors:n}=t;return t=>{let{path:o,method:a,operation:i,extras:s}=t,l={authorized:r.authorized()&&r.authorized().toJS(),definitions:n.securityDefinitions()&&n.securityDefinitions().toJS(),specSecurity:n.security()&&n.security().toJS()};return e({path:o,method:a,operation:i,securities:l,...s})}}},70714:(e,t,r)=>{"use strict";r.r(t),r.d(t,{UPDATE_CONFIGS:()=>n,TOGGLE_CONFIGS:()=>o,update:()=>a,toggle:()=>i,loaded:()=>s});const n="configs_update",o="configs_toggle";function a(e,t){return{type:n,payload:{[e]:t}}}function i(e){return{type:o,payload:e}}const s=()=>e=>{let{getConfigs:t,authActions:r}=e;if(t().persistAuthorization){const e=localStorage.getItem("authorized");e&&r.restoreAuthorization({authorized:JSON.parse(e)})}}},92256:(e,t,r)=>{"use strict";r.r(t),r.d(t,{parseYamlConfig:()=>o});var n=r(1272);const o=(e,t)=>{try{return n.ZP.load(e)}catch(e){return t&&t.errActions.newThrownErr(new Error(e)),{}}}},1661:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>c});var n=r(15163),o=r(92256),a=r(70714),i=r(22698),s=r(69018),l=r(37743);const u={getLocalConfig:()=>(0,o.parseYamlConfig)(n)};function c(){return{statePlugins:{spec:{actions:i,selectors:u},configs:{reducers:l.default,actions:a,selectors:s}}}}},37743:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>a});var n=r(43393),o=r(70714);const a={[o.UPDATE_CONFIGS]:(e,t)=>e.merge((0,n.fromJS)(t.payload)),[o.TOGGLE_CONFIGS]:(e,t)=>{const r=t.payload,n=e.get(r);return e.set(r,!n)}}},69018:(e,t,r)=>{"use strict";r.r(t),r.d(t,{get:()=>a});var n=r(58309),o=r.n(n);const a=(e,t)=>e.getIn(o()(t)?t:[t])},22698:(e,t,r)=>{"use strict";r.r(t),r.d(t,{downloadConfig:()=>o,getConfigByUrl:()=>a});var n=r(92256);const o=e=>t=>{const{fn:{fetch:r}}=t;return r(e)},a=(e,t)=>r=>{let{specActions:o}=r;if(e)return o.downloadConfig(e).then(a,a);function a(r){r instanceof Error||r.status>=400?(o.updateLoadingStatus("failedConfig"),o.updateLoadingStatus("failedConfig"),o.updateUrl(""),console.error(r.statusText+" "+e.url),t(null)):t((0,n.parseYamlConfig)(r.text))}}},31970:(e,t,r)=>{"use strict";r.r(t),r.d(t,{setHash:()=>n});const n=e=>e?history.pushState(null,null,`#${e}`):window.location.hash=""},34980:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(41599),o=r(60877),a=r(34584);function i(){return[n.default,{statePlugins:{configs:{wrapActions:{loaded:(e,t)=>function(){e(...arguments);const r=decodeURIComponent(window.location.hash);t.layoutActions.parseDeepLinkHash(r)}}}},wrapComponents:{operation:o.default,OperationTag:a.default}}]}},41599:(e,t,r)=>{"use strict";r.r(t),r.d(t,{show:()=>b,scrollTo:()=>w,parseDeepLinkHash:()=>E,readyToScroll:()=>x,scrollToElement:()=>_,clearScrollTo:()=>S,default:()=>A});var n=r(58309),o=r.n(n),a=r(24278),i=r.n(a),s=r(97606),l=r.n(s),u=r(11882),c=r.n(u),p=r(31970),f=r(45172),h=r.n(f),d=r(90242),m=r(43393),g=r.n(m);const v="layout_scroll_to",y="layout_clear_scroll",b=(e,t)=>{let{getConfigs:r,layoutSelectors:n}=t;return function(){for(var t=arguments.length,a=new Array(t),i=0;i({type:v,payload:o()(e)?e:[e]}),E=e=>t=>{let{layoutActions:r,layoutSelectors:n,getConfigs:o}=t;if(o().deepLinking&&e){var a;let t=i()(e).call(e,1);"!"===t[0]&&(t=i()(t).call(t,1)),"/"===t[0]&&(t=i()(t).call(t,1));const o=l()(a=t.split("/")).call(a,(e=>e||"")),s=n.isShownKeyFromUrlHashArray(o),[u,p="",f=""]=s;if("operations"===u){const e=n.isShownKeyFromUrlHashArray([p]);c()(p).call(p,"_")>-1&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),r.show(l()(e).call(e,(e=>e.replace(/_/g," "))),!0)),r.show(e,!0)}(c()(p).call(p,"_")>-1||c()(f).call(f,"_")>-1)&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),r.show(l()(s).call(s,(e=>e.replace(/_/g," "))),!0)),r.show(s,!0),r.scrollTo(s)}},x=(e,t)=>r=>{const n=r.layoutSelectors.getScrollToKey();g().is(n,(0,m.fromJS)(e))&&(r.layoutActions.scrollToElement(t),r.layoutActions.clearScrollTo())},_=(e,t)=>r=>{try{t=t||r.fn.getScrollParent(e),h().createScroller(t).to(e)}catch(e){console.error(e)}},S=()=>({type:y});const A={fn:{getScrollParent:function(e,t){const r=document.documentElement;let n=getComputedStyle(e);const o="absolute"===n.position,a=t?/(auto|scroll|hidden)/:/(auto|scroll)/;if("fixed"===n.position)return r;for(let t=e;t=t.parentElement;)if(n=getComputedStyle(t),(!o||"static"!==n.position)&&a.test(n.overflow+n.overflowY+n.overflowX))return t;return r}},statePlugins:{layout:{actions:{scrollToElement:_,scrollTo:w,clearScrollTo:S,readyToScroll:x,parseDeepLinkHash:E},selectors:{getScrollToKey:e=>e.get("scrollToKey"),isShownKeyFromUrlHashArray(e,t){const[r,n]=t;return n?["operations",r,n]:r?["operations-tag",r]:[]},urlHashArrayFromIsShownKey(e,t){let[r,n,o]=t;return"operations"==r?[n,o]:"operations-tag"==r?[n]:[]}},reducers:{[v]:(e,t)=>e.set("scrollToKey",g().fromJS(t.payload)),[y]:e=>e.delete("scrollToKey")},wrapActions:{show:b}}}}},34584:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(61125),o=r.n(n),a=r(67294);const i=(e,t)=>class extends a.Component{constructor(){super(...arguments),o()(this,"onLoad",(e=>{const{tag:r}=this.props,n=["operations-tag",r];t.layoutActions.readyToScroll(n,e)}))}render(){return a.createElement("span",{ref:this.onLoad},a.createElement(e,this.props))}}},60877:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(61125),o=r.n(n),a=r(67294);r(23930);const i=(e,t)=>class extends a.Component{constructor(){super(...arguments),o()(this,"onLoad",(e=>{const{operation:r}=this.props,{tag:n,operationId:o}=r.toObject();let{isShownKey:a}=r.toObject();a=a||["operations",n,o],t.layoutActions.readyToScroll(a,e)}))}render(){return a.createElement("span",{ref:this.onLoad},a.createElement(e,this.props))}}},48011:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>d});var n=r(76986),o=r.n(n),a=r(63460),i=r.n(a),s=r(11882),l=r.n(s),u=r(35627),c=r.n(u),p=r(20573),f=r(43393),h=r(27504);function d(e){let{fn:t}=e;return{statePlugins:{spec:{actions:{download:e=>r=>{let{errActions:n,specSelectors:a,specActions:s,getConfigs:l}=r,{fetch:u}=t;const c=l();function p(t){if(t instanceof Error||t.status>=400)return s.updateLoadingStatus("failed"),n.newThrownErr(o()(new Error((t.message||t.statusText)+" "+e),{source:"fetch"})),void(!t.status&&t instanceof Error&&function(){try{let t;if("URL"in h.Z?t=new(i())(e):(t=document.createElement("a"),t.href=e),"https:"!==t.protocol&&"https:"===h.Z.location.protocol){const e=o()(new Error(`Possible mixed-content issue? The page was loaded over https:// but a ${t.protocol}// URL was specified. Check that you are not attempting to load mixed content.`),{source:"fetch"});return void n.newThrownErr(e)}if(t.origin!==h.Z.location.origin){const e=o()(new Error(`Possible cross-origin (CORS) issue? The URL origin (${t.origin}) does not match the page (${h.Z.location.origin}). Check the server returns the correct 'Access-Control-Allow-*' headers.`),{source:"fetch"});n.newThrownErr(e)}}catch(e){return}}());s.updateLoadingStatus("success"),s.updateSpec(t.text),a.url()!==e&&s.updateUrl(e)}e=e||a.url(),s.updateLoadingStatus("loading"),n.clear({source:"fetch"}),u({url:e,loadSpec:!0,requestInterceptor:c.requestInterceptor||(e=>e),responseInterceptor:c.responseInterceptor||(e=>e),credentials:"same-origin",headers:{Accept:"application/json,*/*"}}).then(p,p)},updateLoadingStatus:e=>{let t=[null,"loading","failed","success","failedConfig"];return-1===l()(t).call(t,e)&&console.error(`Error: ${e} is not one of ${c()(t)}`),{type:"spec_update_loading_status",payload:e}}},reducers:{spec_update_loading_status:(e,t)=>"string"==typeof t.payload?e.set("loadingStatus",t.payload):e},selectors:{loadingStatus:(0,p.P1)((e=>e||(0,f.Map)()),(e=>e.get("loadingStatus")||null))}}}}}},34966:(e,t,r)=>{"use strict";r.r(t),r.d(t,{NEW_THROWN_ERR:()=>o,NEW_THROWN_ERR_BATCH:()=>a,NEW_SPEC_ERR:()=>i,NEW_SPEC_ERR_BATCH:()=>s,NEW_AUTH_ERR:()=>l,CLEAR:()=>u,CLEAR_BY:()=>c,newThrownErr:()=>p,newThrownErrBatch:()=>f,newSpecErr:()=>h,newSpecErrBatch:()=>d,newAuthErr:()=>m,clear:()=>g,clearBy:()=>v});var n=r(7710);const o="err_new_thrown_err",a="err_new_thrown_err_batch",i="err_new_spec_err",s="err_new_spec_err_batch",l="err_new_auth_err",u="err_clear",c="err_clear_by";function p(e){return{type:o,payload:(0,n.serializeError)(e)}}function f(e){return{type:a,payload:e}}function h(e){return{type:i,payload:e}}function d(e){return{type:s,payload:e}}function m(e){return{type:l,payload:e}}function g(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{type:u,payload:e}}function v(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!0;return{type:c,payload:e}}},56982:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>c});var n=r(14418),o=r.n(n),a=r(97606),i=r.n(a),s=r(54061),l=r.n(s);const u=[r(2392),r(21835)];function c(e){var t;let r={jsSpec:{}},n=l()(u,((e,t)=>{try{let n=t.transform(e,r);return o()(n).call(n,(e=>!!e))}catch(t){return console.error("Transformer error:",t),e}}),e);return i()(t=o()(n).call(n,(e=>!!e))).call(t,(e=>(!e.get("line")&&e.get("path"),e)))}},2392:(e,t,r)=>{"use strict";r.r(t),r.d(t,{transform:()=>p});var n=r(97606),o=r.n(n),a=r(11882),i=r.n(a),s=r(24278),l=r.n(s),u=r(24282),c=r.n(u);function p(e){return o()(e).call(e,(e=>{var t;let r="is not of a type(s)",n=i()(t=e.get("message")).call(t,r);if(n>-1){var o,a;let t=l()(o=e.get("message")).call(o,n+r.length).split(",");return e.set("message",l()(a=e.get("message")).call(a,0,n)+function(e){return c()(e).call(e,((e,t,r,n)=>r===n.length-1&&n.length>1?e+"or "+t:n[r+1]&&n.length>2?e+t+", ":n[r+1]?e+t+" ":e+t),"should be a")}(t))}return e}))}},21835:(e,t,r)=>{"use strict";r.r(t),r.d(t,{transform:()=>n});r(97606),r(11882),r(27361),r(43393);function n(e,t){let{jsSpec:r}=t;return e}},77793:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(93527),o=r(34966),a=r(87667);function i(e){return{statePlugins:{err:{reducers:(0,n.default)(e),actions:o,selectors:a}}}}},93527:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>v});var n=r(76986),o=r.n(n),a=r(97606),i=r.n(a),s=r(39022),l=r.n(s),u=r(14418),c=r.n(u),p=r(2250),f=r.n(p),h=r(34966),d=r(43393),m=r(56982);let g={line:0,level:"error",message:"Unknown error"};function v(){return{[h.NEW_THROWN_ERR]:(e,t)=>{let{payload:r}=t,n=o()(g,r,{type:"thrown"});return e.update("errors",(e=>(e||(0,d.List)()).push((0,d.fromJS)(n)))).update("errors",(e=>(0,m.default)(e)))},[h.NEW_THROWN_ERR_BATCH]:(e,t)=>{let{payload:r}=t;return r=i()(r).call(r,(e=>(0,d.fromJS)(o()(g,e,{type:"thrown"})))),e.update("errors",(e=>{var t;return l()(t=e||(0,d.List)()).call(t,(0,d.fromJS)(r))})).update("errors",(e=>(0,m.default)(e)))},[h.NEW_SPEC_ERR]:(e,t)=>{let{payload:r}=t,n=(0,d.fromJS)(r);return n=n.set("type","spec"),e.update("errors",(e=>(e||(0,d.List)()).push((0,d.fromJS)(n)).sortBy((e=>e.get("line"))))).update("errors",(e=>(0,m.default)(e)))},[h.NEW_SPEC_ERR_BATCH]:(e,t)=>{let{payload:r}=t;return r=i()(r).call(r,(e=>(0,d.fromJS)(o()(g,e,{type:"spec"})))),e.update("errors",(e=>{var t;return l()(t=e||(0,d.List)()).call(t,(0,d.fromJS)(r))})).update("errors",(e=>(0,m.default)(e)))},[h.NEW_AUTH_ERR]:(e,t)=>{let{payload:r}=t,n=(0,d.fromJS)(o()({},r));return n=n.set("type","auth"),e.update("errors",(e=>(e||(0,d.List)()).push((0,d.fromJS)(n)))).update("errors",(e=>(0,m.default)(e)))},[h.CLEAR]:(e,t)=>{var r;let{payload:n}=t;if(!n||!e.get("errors"))return e;let o=c()(r=e.get("errors")).call(r,(e=>{var t;return f()(t=e.keySeq()).call(t,(t=>{const r=e.get(t),o=n[t];return!o||r!==o}))}));return e.merge({errors:o})},[h.CLEAR_BY]:(e,t)=>{var r;let{payload:n}=t;if(!n||"function"!=typeof n)return e;let o=c()(r=e.get("errors")).call(r,(e=>n(e)));return e.merge({errors:o})}}}},87667:(e,t,r)=>{"use strict";r.r(t),r.d(t,{allErrors:()=>a,lastError:()=>i});var n=r(43393),o=r(20573);const a=(0,o.P1)((e=>e),(e=>e.get("errors",(0,n.List)()))),i=(0,o.P1)(a,(e=>e.last()))},49978:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(4309);function o(){return{fn:{opsFilter:n.default}}}},4309:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var n=r(14418),o=r.n(n),a=r(11882),i=r.n(a);function s(e,t){return o()(e).call(e,((e,r)=>-1!==i()(r).call(r,t)))}},25474:(e,t,r)=>{"use strict";r.r(t),r.d(t,{UPDATE_LAYOUT:()=>o,UPDATE_FILTER:()=>a,UPDATE_MODE:()=>i,SHOW:()=>s,updateLayout:()=>l,updateFilter:()=>u,show:()=>c,changeMode:()=>p});var n=r(90242);const o="layout_update_layout",a="layout_update_filter",i="layout_update_mode",s="layout_show";function l(e){return{type:o,payload:e}}function u(e){return{type:a,payload:e}}function c(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e=(0,n.AF)(e),{type:s,payload:{thing:e,shown:t}}}function p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e=(0,n.AF)(e),{type:i,payload:{thing:e,mode:t}}}},26821:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var n=r(5672),o=r(25474),a=r(4400),i=r(28989);function s(){return{statePlugins:{layout:{reducers:n.default,actions:o,selectors:a},spec:{wrapSelectors:i}}}}},5672:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var n=r(39022),o=r.n(n),a=r(43393),i=r(25474);const s={[i.UPDATE_LAYOUT]:(e,t)=>e.set("layout",t.payload),[i.UPDATE_FILTER]:(e,t)=>e.set("filter",t.payload),[i.SHOW]:(e,t)=>{const r=t.payload.shown,n=(0,a.fromJS)(t.payload.thing);return e.update("shown",(0,a.fromJS)({}),(e=>e.set(n,r)))},[i.UPDATE_MODE]:(e,t)=>{var r;let n=t.payload.thing,a=t.payload.mode;return e.setIn(o()(r=["modes"]).call(r,n),(a||"")+"")}}},4400:(e,t,r)=>{"use strict";r.r(t),r.d(t,{current:()=>i,currentFilter:()=>s,isShown:()=>l,whatMode:()=>u,showSummary:()=>c});var n=r(20573),o=r(90242),a=r(43393);const i=e=>e.get("layout"),s=e=>e.get("filter"),l=(e,t,r)=>(t=(0,o.AF)(t),e.get("shown",(0,a.fromJS)({})).get((0,a.fromJS)(t),r)),u=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return t=(0,o.AF)(t),e.getIn(["modes",...t],r)},c=(0,n.P1)((e=>e),(e=>!l(e,"editor")))},28989:(e,t,r)=>{"use strict";r.r(t),r.d(t,{taggedOperations:()=>a});var n=r(24278),o=r.n(n);const a=(e,t)=>function(r){for(var n=arguments.length,a=new Array(n>1?n-1:0),i=1;i=0&&(s=o()(s).call(s,0,f)),s}},9150:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>a});var n=r(11189),o=r.n(n);function a(e){let{configs:t}=e;const r={debug:0,info:1,log:2,warn:3,error:4},n=e=>r[e]||-1;let{logLevel:a}=t,i=n(a);function s(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o=i&&console[e](...r)}return s.warn=o()(s).call(s,null,"warn"),s.error=o()(s).call(s,null,"error"),s.info=o()(s).call(s,null,"info"),s.debug=o()(s).call(s,null,"debug"),{rootInjects:{log:s}}}},67002:(e,t,r)=>{"use strict";r.r(t),r.d(t,{UPDATE_SELECTED_SERVER:()=>n,UPDATE_REQUEST_BODY_VALUE:()=>o,UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG:()=>a,UPDATE_REQUEST_BODY_INCLUSION:()=>i,UPDATE_ACTIVE_EXAMPLES_MEMBER:()=>s,UPDATE_REQUEST_CONTENT_TYPE:()=>l,UPDATE_RESPONSE_CONTENT_TYPE:()=>u,UPDATE_SERVER_VARIABLE_VALUE:()=>c,SET_REQUEST_BODY_VALIDATE_ERROR:()=>p,CLEAR_REQUEST_BODY_VALIDATE_ERROR:()=>f,CLEAR_REQUEST_BODY_VALUE:()=>h,setSelectedServer:()=>d,setRequestBodyValue:()=>m,setRetainRequestBodyValueFlag:()=>g,setRequestBodyInclusion:()=>v,setActiveExamplesMember:()=>y,setRequestContentType:()=>b,setResponseContentType:()=>w,setServerVariableValue:()=>E,setRequestBodyValidateError:()=>x,clearRequestBodyValidateError:()=>_,initRequestBodyValidateError:()=>S,clearRequestBodyValue:()=>A});const n="oas3_set_servers",o="oas3_set_request_body_value",a="oas3_set_request_body_retain_flag",i="oas3_set_request_body_inclusion",s="oas3_set_active_examples_member",l="oas3_set_request_content_type",u="oas3_set_response_content_type",c="oas3_set_server_variable_value",p="oas3_set_request_body_validate_error",f="oas3_clear_request_body_validate_error",h="oas3_clear_request_body_value";function d(e,t){return{type:n,payload:{selectedServerUrl:e,namespace:t}}}function m(e){let{value:t,pathMethod:r}=e;return{type:o,payload:{value:t,pathMethod:r}}}const g=e=>{let{value:t,pathMethod:r}=e;return{type:a,payload:{value:t,pathMethod:r}}};function v(e){let{value:t,pathMethod:r,name:n}=e;return{type:i,payload:{value:t,pathMethod:r,name:n}}}function y(e){let{name:t,pathMethod:r,contextType:n,contextName:o}=e;return{type:s,payload:{name:t,pathMethod:r,contextType:n,contextName:o}}}function b(e){let{value:t,pathMethod:r}=e;return{type:l,payload:{value:t,pathMethod:r}}}function w(e){let{value:t,path:r,method:n}=e;return{type:u,payload:{value:t,path:r,method:n}}}function E(e){let{server:t,namespace:r,key:n,val:o}=e;return{type:c,payload:{server:t,namespace:r,key:n,val:o}}}const x=e=>{let{path:t,method:r,validationErrors:n}=e;return{type:p,payload:{path:t,method:r,validationErrors:n}}},_=e=>{let{path:t,method:r}=e;return{type:f,payload:{path:t,method:r}}},S=e=>{let{pathMethod:t}=e;return{type:f,payload:{path:t[0],method:t[1]}}},A=e=>{let{pathMethod:t}=e;return{type:h,payload:{pathMethod:t}}}},73723:(e,t,r)=>{"use strict";r.r(t),r.d(t,{definitionsToAuthorize:()=>f});var n=r(86),o=r.n(n),a=r(14418),i=r.n(a),s=r(24282),l=r.n(s),u=r(20573),c=r(43393),p=r(7779);const f=(h=(0,u.P1)((e=>e),(e=>{let{specSelectors:t}=e;return t.securityDefinitions()}),((e,t)=>{var r;let n=(0,c.List)();return t?(o()(r=t.entrySeq()).call(r,(e=>{let[t,r]=e;const a=r.get("type");var s;if("oauth2"===a&&o()(s=r.get("flows").entrySeq()).call(s,(e=>{let[o,a]=e,s=(0,c.fromJS)({flow:o,authorizationUrl:a.get("authorizationUrl"),tokenUrl:a.get("tokenUrl"),scopes:a.get("scopes"),type:r.get("type"),description:r.get("description")});n=n.push(new c.Map({[t]:i()(s).call(s,(e=>void 0!==e))}))})),"http"!==a&&"apiKey"!==a||(n=n.push(new c.Map({[t]:r}))),"openIdConnect"===a&&r.get("openIdConnectData")){let e=r.get("openIdConnectData"),a=e.get("grant_types_supported")||["authorization_code","implicit"];o()(a).call(a,(o=>{var a;let s=e.get("scopes_supported")&&l()(a=e.get("scopes_supported")).call(a,((e,t)=>e.set(t,"")),new c.Map),u=(0,c.fromJS)({flow:o,authorizationUrl:e.get("authorization_endpoint"),tokenUrl:e.get("token_endpoint"),scopes:s,type:"oauth2",openIdConnectUrl:r.get("openIdConnectUrl")});n=n.push(new c.Map({[t]:i()(u).call(u,(e=>void 0!==e))}))}))}})),n):n})),(e,t)=>function(){const r=t.getSystem().specSelectors.specJson();for(var n=arguments.length,o=new Array(n),a=0;a{"use strict";r.r(t),r.d(t,{default:()=>u});var n=r(23101),o=r.n(n),a=r(97606),i=r.n(a),s=r(67294),l=(r(23930),r(43393));const u=e=>{var t;let{callbacks:r,getComponent:n,specPath:a}=e;const u=n("OperationContainer",!0);if(!r)return s.createElement("span",null,"No callbacks");let c=i()(t=r.entrySeq()).call(t,(t=>{var r;let[n,c]=t;return s.createElement("div",{key:n},s.createElement("h2",null,n),i()(r=c.entrySeq()).call(r,(t=>{var r;let[c,p]=t;return"$$ref"===c?null:s.createElement("div",{key:c},i()(r=p.entrySeq()).call(r,(t=>{let[r,i]=t;if("$$ref"===r)return null;let p=(0,l.fromJS)({operation:i});return s.createElement(u,o()({},e,{op:p,key:r,tag:"",method:r,path:c,specPath:a.push(n,c,r),allowTryItOut:!1}))})))})))}));return s.createElement("div",null,c)}},86775:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>f});var n=r(61125),o=r.n(n),a=r(76986),i=r.n(a),s=r(14418),l=r.n(s),u=r(97606),c=r.n(u),p=r(67294);class f extends p.Component{constructor(e,t){super(e,t),o()(this,"onChange",(e=>{let{onChange:t}=this.props,{value:r,name:n}=e.target,o=i()({},this.state.value);n?o[n]=r:o=r,this.setState({value:o},(()=>t(this.state)))}));let{name:r,schema:n}=this.props,a=this.getValue();this.state={name:r,schema:n,value:a}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,"value"])}render(){var e;let{schema:t,getComponent:r,errSelectors:n,name:o}=this.props;const a=r("Input"),i=r("Row"),s=r("Col"),u=r("authError"),f=r("Markdown",!0),h=r("JumpToPath",!0),d=(t.get("scheme")||"").toLowerCase();let m=this.getValue(),g=l()(e=n.allErrors()).call(e,(e=>e.get("authId")===o));if("basic"===d){var v;let e=m?m.get("username"):null;return p.createElement("div",null,p.createElement("h4",null,p.createElement("code",null,o||t.get("name")),"  (http, Basic)",p.createElement(h,{path:["securityDefinitions",o]})),e&&p.createElement("h6",null,"Authorized"),p.createElement(i,null,p.createElement(f,{source:t.get("description")})),p.createElement(i,null,p.createElement("label",null,"Username:"),e?p.createElement("code",null," ",e," "):p.createElement(s,null,p.createElement(a,{type:"text",required:"required",name:"username","aria-label":"auth-basic-username",onChange:this.onChange,autoFocus:!0}))),p.createElement(i,null,p.createElement("label",null,"Password:"),e?p.createElement("code",null," ****** "):p.createElement(s,null,p.createElement(a,{autoComplete:"new-password",name:"password",type:"password","aria-label":"auth-basic-password",onChange:this.onChange}))),c()(v=g.valueSeq()).call(v,((e,t)=>p.createElement(u,{error:e,key:t}))))}var y;return"bearer"===d?p.createElement("div",null,p.createElement("h4",null,p.createElement("code",null,o||t.get("name")),"  (http, Bearer)",p.createElement(h,{path:["securityDefinitions",o]})),m&&p.createElement("h6",null,"Authorized"),p.createElement(i,null,p.createElement(f,{source:t.get("description")})),p.createElement(i,null,p.createElement("label",null,"Value:"),m?p.createElement("code",null," ****** "):p.createElement(s,null,p.createElement(a,{type:"text","aria-label":"auth-bearer-value",onChange:this.onChange,autoFocus:!0}))),c()(y=g.valueSeq()).call(y,((e,t)=>p.createElement(u,{error:e,key:t})))):p.createElement("div",null,p.createElement("em",null,p.createElement("b",null,o)," HTTP authentication: unsupported scheme ",`'${d}'`))}}},76467:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>p});var n=r(33427),o=r(42458),a=r(15757),i=r(56617),s=r(9928),l=r(45327),u=r(86775),c=r(96796);const p={Callbacks:n.default,HttpAuth:u.default,RequestBody:o.default,Servers:i.default,ServersContainer:s.default,RequestBodyEditor:l.default,OperationServers:c.default,operationLink:a.default}},15757:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>u});var n=r(35627),o=r.n(n),a=r(97606),i=r.n(a),s=r(67294);r(23930);class l extends s.Component{render(){const{link:e,name:t,getComponent:r}=this.props,n=r("Markdown",!0);let a=e.get("operationId")||e.get("operationRef"),l=e.get("parameters")&&e.get("parameters").toJS(),u=e.get("description");return s.createElement("div",{className:"operation-link"},s.createElement("div",{className:"description"},s.createElement("b",null,s.createElement("code",null,t)),u?s.createElement(n,{source:u}):null),s.createElement("pre",null,"Operation `",a,"`",s.createElement("br",null),s.createElement("br",null),"Parameters ",function(e,t){var r;if("string"!=typeof t)return"";return i()(r=t.split("\n")).call(r,((t,r)=>r>0?Array(e+1).join(" ")+t:t)).join("\n")}(0,o()(l,null,2))||"{}",s.createElement("br",null)))}}const u=l},96796:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(61125),o=r.n(n),a=r(67294);r(23930);class i extends a.Component{constructor(){super(...arguments),o()(this,"setSelectedServer",(e=>{const{path:t,method:r}=this.props;return this.forceUpdate(),this.props.setSelectedServer(e,`${t}:${r}`)})),o()(this,"setServerVariableValue",(e=>{const{path:t,method:r}=this.props;return this.forceUpdate(),this.props.setServerVariableValue({...e,namespace:`${t}:${r}`})})),o()(this,"getSelectedServer",(()=>{const{path:e,method:t}=this.props;return this.props.getSelectedServer(`${e}:${t}`)})),o()(this,"getServerVariable",((e,t)=>{const{path:r,method:n}=this.props;return this.props.getServerVariable({namespace:`${r}:${n}`,server:e},t)})),o()(this,"getEffectiveServerValue",(e=>{const{path:t,method:r}=this.props;return this.props.getEffectiveServerValue({server:e,namespace:`${t}:${r}`})}))}render(){const{operationServers:e,pathServers:t,getComponent:r}=this.props;if(!e&&!t)return null;const n=r("Servers"),o=e||t,i=e?"operation":"path";return a.createElement("div",{className:"opblock-section operation-servers"},a.createElement("div",{className:"opblock-section-header"},a.createElement("div",{className:"tab-header"},a.createElement("h4",{className:"opblock-title"},"Servers"))),a.createElement("div",{className:"opblock-description-wrapper"},a.createElement("h4",{className:"message"},"These ",i,"-level options override the global server options."),a.createElement(n,{servers:o,currentServer:this.getSelectedServer(),setSelectedServer:this.setSelectedServer,setServerVariableValue:this.setServerVariableValue,getServerVariable:this.getServerVariable,getEffectiveServerValue:this.getEffectiveServerValue})))}}},45327:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>c});var n=r(61125),o=r.n(n),a=r(67294),i=r(94184),s=r.n(i),l=r(90242);const u=Function.prototype;class c extends a.PureComponent{constructor(e,t){super(e,t),o()(this,"applyDefaultValue",(e=>{const{onChange:t,defaultValue:r}=e||this.props;return this.setState({value:r}),t(r)})),o()(this,"onChange",(e=>{this.props.onChange((0,l.Pz)(e))})),o()(this,"onDomChange",(e=>{const t=e.target.value;this.setState({value:t},(()=>this.onChange(t)))})),this.state={value:(0,l.Pz)(e.value)||e.defaultValue},e.onChange(e.value)}UNSAFE_componentWillReceiveProps(e){this.props.value!==e.value&&e.value!==this.state.value&&this.setState({value:(0,l.Pz)(e.value)}),!e.value&&e.defaultValue&&this.state.value&&this.applyDefaultValue(e)}render(){let{getComponent:e,errors:t}=this.props,{value:r}=this.state,n=t.size>0;const o=e("TextArea");return a.createElement("div",{className:"body-param"},a.createElement(o,{className:s()("body-param__text",{invalid:n}),title:t.size?t.join(", "):"",value:r,onChange:this.onDomChange}))}}o()(c,"defaultProps",{onChange:u,userHasEditedBody:!1})},42458:(e,t,r)=>{"use strict";r.r(t),r.d(t,{getDefaultRequestBodyValue:()=>m,default:()=>g});var n=r(97606),o=r.n(n),a=r(11882),i=r.n(a),s=r(58118),l=r.n(s),u=r(58309),c=r.n(u),p=r(67294),f=(r(23930),r(43393)),h=r(90242),d=r(2518);const m=(e,t,r)=>{const n=e.getIn(["content",t]),o=n.get("schema").toJS(),a=void 0!==n.get("examples"),i=n.get("example"),s=a?n.getIn(["examples",r,"value"]):i,l=(0,h.xi)(o,t,{includeWriteOnly:!0},s);return(0,h.Pz)(l)},g=e=>{let{userHasEditedBody:t,requestBody:r,requestBodyValue:n,requestBodyInclusionSetting:a,requestBodyErrors:s,getComponent:u,getConfigs:g,specSelectors:v,fn:y,contentType:b,isExecute:w,specPath:E,onChange:x,onChangeIncludeEmpty:_,activeExamplesKey:S,updateActiveExamplesKey:A,setRetainRequestBodyValueFlag:k}=e;const C=e=>{x(e.target.files[0])},O=e=>{let t={key:e,shouldDispatchInit:!1,defaultValue:!0};return"no value"===a.get(e,"no value")&&(t.shouldDispatchInit=!0),t},j=u("Markdown",!0),I=u("modelExample"),N=u("RequestBodyEditor"),T=u("highlightCode"),P=u("ExamplesSelectValueRetainer"),R=u("Example"),M=u("ParameterIncludeEmpty"),{showCommonExtensions:D}=g(),L=r&&r.get("description")||null,B=r&&r.get("content")||new f.OrderedMap;b=b||B.keySeq().first()||"";const F=B.get(b,(0,f.OrderedMap)()),z=F.get("schema",(0,f.OrderedMap)()),U=F.get("examples",null),q=null==U?void 0:o()(U).call(U,((e,t)=>{var n;const o=null===(n=e)||void 0===n?void 0:n.get("value",null);return o&&(e=e.set("value",m(r,b,t),o)),e}));if(s=f.List.isList(s)?s:(0,f.List)(),!F.size)return null;const V="object"===F.getIn(["schema","type"]),$="binary"===F.getIn(["schema","format"]),W="base64"===F.getIn(["schema","format"]);if("application/octet-stream"===b||0===i()(b).call(b,"image/")||0===i()(b).call(b,"audio/")||0===i()(b).call(b,"video/")||$||W){const e=u("Input");return w?p.createElement(e,{type:"file",onChange:C}):p.createElement("i",null,"Example values are not available for ",p.createElement("code",null,b)," media types.")}if(V&&("application/x-www-form-urlencoded"===b||0===i()(b).call(b,"multipart/"))&&z.get("properties",(0,f.OrderedMap)()).size>0){var H;const e=u("JsonSchemaForm"),t=u("ParameterExt"),r=z.get("properties",(0,f.OrderedMap)());return n=f.Map.isMap(n)?n:(0,f.OrderedMap)(),p.createElement("div",{className:"table-container"},L&&p.createElement(j,{source:L}),p.createElement("table",null,p.createElement("tbody",null,f.Map.isMap(r)&&o()(H=r.entrySeq()).call(H,(r=>{var i,d;let[m,g]=r;if(g.get("readOnly"))return;let v=D?(0,h.po)(g):null;const b=l()(i=z.get("required",(0,f.List)())).call(i,m),E=g.get("type"),S=g.get("format"),A=g.get("description"),k=n.getIn([m,"value"]),C=n.getIn([m,"errors"])||s,I=a.get(m)||!1,N=g.has("default")||g.has("example")||g.hasIn(["items","example"])||g.hasIn(["items","default"]),T=g.has("enum")&&(1===g.get("enum").size||b),P=N||T;let R="";"array"!==E||P||(R=[]),("object"===E||P)&&(R=(0,h.xi)(g,!1,{includeWriteOnly:!0})),"string"!=typeof R&&"object"===E&&(R=(0,h.Pz)(R)),"string"==typeof R&&"array"===E&&(R=JSON.parse(R));const L="string"===E&&("binary"===S||"base64"===S);return p.createElement("tr",{key:m,className:"parameters","data-property-name":m},p.createElement("td",{className:"parameters-col_name"},p.createElement("div",{className:b?"parameter__name required":"parameter__name"},m,b?p.createElement("span",null," *"):null),p.createElement("div",{className:"parameter__type"},E,S&&p.createElement("span",{className:"prop-format"},"($",S,")"),D&&v.size?o()(d=v.entrySeq()).call(d,(e=>{let[r,n]=e;return p.createElement(t,{key:`${r}-${n}`,xKey:r,xVal:n})})):null),p.createElement("div",{className:"parameter__deprecated"},g.get("deprecated")?"deprecated":null)),p.createElement("td",{className:"parameters-col_description"},p.createElement(j,{source:A}),w?p.createElement("div",null,p.createElement(e,{fn:y,dispatchInitialValue:!L,schema:g,description:m,getComponent:u,value:void 0===k?R:k,required:b,errors:C,onChange:e=>{x(e,[m])}}),b?null:p.createElement(M,{onChange:e=>_(m,e),isIncluded:I,isIncludedOptions:O(m),isDisabled:c()(k)?0!==k.length:!(0,h.O2)(k)})):null))})))))}const J=m(r,b,S);let K=null;return(0,d.O)(J)&&(K="json"),p.createElement("div",null,L&&p.createElement(j,{source:L}),q?p.createElement(P,{userHasEditedBody:t,examples:q,currentKey:S,currentUserInputValue:n,onSelect:e=>{A(e)},updateValue:x,defaultToFirstExample:!0,getComponent:u,setRetainRequestBodyValueFlag:k}):null,w?p.createElement("div",null,p.createElement(N,{value:n,errors:s,defaultValue:J,onChange:x,getComponent:u})):p.createElement(I,{getComponent:u,getConfigs:g,specSelectors:v,expandDepth:1,isExecute:w,schema:F.get("schema"),specPath:E.push("content",b),example:p.createElement(T,{className:"body-param__example",getConfigs:g,language:K,value:(0,h.Pz)(n)||J}),includeWriteOnly:!0}),q?p.createElement(R,{example:q.get(S),getComponent:u,getConfigs:g}):null)}},9928:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(67294);class o extends n.Component{render(){const{specSelectors:e,oas3Selectors:t,oas3Actions:r,getComponent:o}=this.props,a=e.servers(),i=o("Servers");return a&&a.size?n.createElement("div",null,n.createElement("span",{className:"servers-title"},"Servers"),n.createElement(i,{servers:a,currentServer:t.selectedServer(),setSelectedServer:r.setSelectedServer,setServerVariableValue:r.setServerVariableValue,getServerVariable:t.serverVariableValue,getEffectiveServerValue:t.serverEffectiveValue})):null}}},56617:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>p});var n=r(61125),o=r.n(n),a=r(51679),i=r.n(a),s=r(97606),l=r.n(s),u=r(67294),c=r(43393);r(23930);class p extends u.Component{constructor(){super(...arguments),o()(this,"onServerChange",(e=>{this.setServer(e.target.value)})),o()(this,"onServerVariableValueChange",(e=>{let{setServerVariableValue:t,currentServer:r}=this.props,n=e.target.getAttribute("data-variable"),o=e.target.value;"function"==typeof t&&t({server:r,key:n,val:o})})),o()(this,"setServer",(e=>{let{setSelectedServer:t}=this.props;t(e)}))}componentDidMount(){var e;let{servers:t,currentServer:r}=this.props;r||this.setServer(null===(e=t.first())||void 0===e?void 0:e.get("url"))}UNSAFE_componentWillReceiveProps(e){let{servers:t,setServerVariableValue:r,getServerVariable:n}=e;if(this.props.currentServer!==e.currentServer||this.props.servers!==e.servers){var o;let a=i()(t).call(t,(t=>t.get("url")===e.currentServer)),s=i()(o=this.props.servers).call(o,(e=>e.get("url")===this.props.currentServer))||(0,c.OrderedMap)();if(!a)return this.setServer(t.first().get("url"));let u=s.get("variables")||(0,c.OrderedMap)(),p=(i()(u).call(u,(e=>e.get("default")))||(0,c.OrderedMap)()).get("default"),f=a.get("variables")||(0,c.OrderedMap)(),h=(i()(f).call(f,(e=>e.get("default")))||(0,c.OrderedMap)()).get("default");l()(f).call(f,((t,o)=>{n(e.currentServer,o)&&p===h||r({server:e.currentServer,key:o,val:t.get("default")||""})}))}}render(){var e,t;let{servers:r,currentServer:n,getServerVariable:o,getEffectiveServerValue:a}=this.props,s=(i()(r).call(r,(e=>e.get("url")===n))||(0,c.OrderedMap)()).get("variables")||(0,c.OrderedMap)(),p=0!==s.size;return u.createElement("div",{className:"servers"},u.createElement("label",{htmlFor:"servers"},u.createElement("select",{onChange:this.onServerChange,value:n},l()(e=r.valueSeq()).call(e,(e=>u.createElement("option",{value:e.get("url"),key:e.get("url")},e.get("url"),e.get("description")&&` - ${e.get("description")}`))).toArray())),p?u.createElement("div",null,u.createElement("div",{className:"computed-url"},"Computed URL:",u.createElement("code",null,a(n))),u.createElement("h4",null,"Server variables"),u.createElement("table",null,u.createElement("tbody",null,l()(t=s.entrySeq()).call(t,(e=>{var t;let[r,a]=e;return u.createElement("tr",{key:r},u.createElement("td",null,r),u.createElement("td",null,a.get("enum")?u.createElement("select",{"data-variable":r,onChange:this.onServerVariableValueChange},l()(t=a.get("enum")).call(t,(e=>u.createElement("option",{selected:e===o(n,r),key:e,value:e},e)))):u.createElement("input",{type:"text",value:o(n,r)||"",onChange:this.onServerVariableValueChange,"data-variable":r})))}))))):null)}}},7779:(e,t,r)=>{"use strict";r.r(t),r.d(t,{isOAS3:()=>l,isSwagger2:()=>u,OAS3ComponentWrapFactory:()=>c});var n=r(23101),o=r.n(n),a=r(27043),i=r.n(a),s=r(67294);function l(e){const t=e.get("openapi");return"string"==typeof t&&(i()(t).call(t,"3.0.")&&t.length>4)}function u(e){const t=e.get("swagger");return"string"==typeof t&&i()(t).call(t,"2.0")}function c(e){return(t,r)=>n=>{if(r&&r.specSelectors&&r.specSelectors.specJson){return l(r.specSelectors.specJson())?s.createElement(e,o()({},n,r,{Ori:t})):s.createElement(t,n)}return console.warn("OAS3 wrapper: couldn't get spec"),null}}},97451:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>p});var n=r(92044),o=r(73723),a=r(91741),i=r(76467),s=r(37761),l=r(67002),u=r(5065),c=r(62109);function p(){return{components:i.default,wrapComponents:s.default,statePlugins:{spec:{wrapSelectors:n,selectors:a},auth:{wrapSelectors:o},oas3:{actions:l,reducers:c.default,selectors:u}}}}},62109:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>p});var n=r(8712),o=r.n(n),a=r(86),i=r.n(a),s=r(24282),l=r.n(s),u=r(43393),c=r(67002);const p={[c.UPDATE_SELECTED_SERVER]:(e,t)=>{let{payload:{selectedServerUrl:r,namespace:n}}=t;const o=n?[n,"selectedServer"]:["selectedServer"];return e.setIn(o,r)},[c.UPDATE_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{value:r,pathMethod:n}}=t,[a,s]=n;if(!u.Map.isMap(r))return e.setIn(["requestData",a,s,"bodyValue"],r);let l,c=e.getIn(["requestData",a,s,"bodyValue"])||(0,u.Map)();u.Map.isMap(c)||(c=(0,u.Map)());const[...p]=o()(r).call(r);return i()(p).call(p,(e=>{let t=r.getIn([e]);c.has(e)&&u.Map.isMap(t)||(l=c.setIn([e,"value"],t))})),e.setIn(["requestData",a,s,"bodyValue"],l)},[c.UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG]:(e,t)=>{let{payload:{value:r,pathMethod:n}}=t,[o,a]=n;return e.setIn(["requestData",o,a,"retainBodyValue"],r)},[c.UPDATE_REQUEST_BODY_INCLUSION]:(e,t)=>{let{payload:{value:r,pathMethod:n,name:o}}=t,[a,i]=n;return e.setIn(["requestData",a,i,"bodyInclusion",o],r)},[c.UPDATE_ACTIVE_EXAMPLES_MEMBER]:(e,t)=>{let{payload:{name:r,pathMethod:n,contextType:o,contextName:a}}=t,[i,s]=n;return e.setIn(["examples",i,s,o,a,"activeExample"],r)},[c.UPDATE_REQUEST_CONTENT_TYPE]:(e,t)=>{let{payload:{value:r,pathMethod:n}}=t,[o,a]=n;return e.setIn(["requestData",o,a,"requestContentType"],r)},[c.UPDATE_RESPONSE_CONTENT_TYPE]:(e,t)=>{let{payload:{value:r,path:n,method:o}}=t;return e.setIn(["requestData",n,o,"responseContentType"],r)},[c.UPDATE_SERVER_VARIABLE_VALUE]:(e,t)=>{let{payload:{server:r,namespace:n,key:o,val:a}}=t;const i=n?[n,"serverVariableValues",r,o]:["serverVariableValues",r,o];return e.setIn(i,a)},[c.SET_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:r,method:n,validationErrors:o}}=t,a=[];if(a.push("Required field is not provided"),o.missingBodyValue)return e.setIn(["requestData",r,n,"errors"],(0,u.fromJS)(a));if(o.missingRequiredKeys&&o.missingRequiredKeys.length>0){const{missingRequiredKeys:t}=o;return e.updateIn(["requestData",r,n,"bodyValue"],(0,u.fromJS)({}),(e=>l()(t).call(t,((e,t)=>e.setIn([t,"errors"],(0,u.fromJS)(a))),e)))}return console.warn("unexpected result: SET_REQUEST_BODY_VALIDATE_ERROR"),e},[c.CLEAR_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:r,method:n}}=t;const a=e.getIn(["requestData",r,n,"bodyValue"]);if(!u.Map.isMap(a))return e.setIn(["requestData",r,n,"errors"],(0,u.fromJS)([]));const[...i]=o()(a).call(a);return i?e.updateIn(["requestData",r,n,"bodyValue"],(0,u.fromJS)({}),(e=>l()(i).call(i,((e,t)=>e.setIn([t,"errors"],(0,u.fromJS)([]))),e))):e},[c.CLEAR_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{pathMethod:r}}=t,[n,o]=r;const a=e.getIn(["requestData",n,o,"bodyValue"]);return a?u.Map.isMap(a)?e.setIn(["requestData",n,o,"bodyValue"],(0,u.Map)()):e.setIn(["requestData",n,o,"bodyValue"],""):e}}},5065:(e,t,r)=>{"use strict";r.r(t),r.d(t,{selectedServer:()=>g,requestBodyValue:()=>v,shouldRetainRequestBodyValue:()=>y,hasUserEditedBody:()=>b,requestBodyInclusionSetting:()=>w,requestBodyErrors:()=>E,activeExamplesMember:()=>x,requestContentType:()=>_,responseContentType:()=>S,serverVariableValue:()=>A,serverVariables:()=>k,serverEffectiveValue:()=>C,validateBeforeExecute:()=>O,validateShallowRequired:()=>I});var n=r(97606),o=r.n(n),a=r(86),i=r.n(a),s=r(28222),l=r.n(s),u=r(11882),c=r.n(u),p=r(43393),f=r(7779),h=r(42458),d=r(90242);function m(e){return function(){for(var t=arguments.length,r=new Array(t),n=0;n{const n=t.getSystem().specSelectors.specJson();return(0,f.isOAS3)(n)?e(...r):null}}}const g=m(((e,t)=>{const r=t?[t,"selectedServer"]:["selectedServer"];return e.getIn(r)||""})),v=m(((e,t,r)=>e.getIn(["requestData",t,r,"bodyValue"])||null)),y=m(((e,t,r)=>e.getIn(["requestData",t,r,"retainBodyValue"])||!1)),b=(e,t,r)=>e=>{const{oas3Selectors:n,specSelectors:o}=e.getSystem(),a=o.specJson();if((0,f.isOAS3)(a)){let e=!1;const a=n.requestContentType(t,r);let i=n.requestBodyValue(t,r);if(p.Map.isMap(i)&&(i=(0,d.Pz)(i.mapEntries((e=>p.Map.isMap(e[1])?[e[0],e[1].get("value")]:e)).toJS())),p.List.isList(i)&&(i=(0,d.Pz)(i)),a){const s=(0,h.getDefaultRequestBodyValue)(o.specResolvedSubtree(["paths",t,r,"requestBody"]),a,n.activeExamplesMember(t,r,"requestBody","requestBody"));e=!!i&&i!==s}return e}return null},w=m(((e,t,r)=>e.getIn(["requestData",t,r,"bodyInclusion"])||(0,p.Map)())),E=m(((e,t,r)=>e.getIn(["requestData",t,r,"errors"])||null)),x=m(((e,t,r,n,o)=>e.getIn(["examples",t,r,n,o,"activeExample"])||null)),_=m(((e,t,r)=>e.getIn(["requestData",t,r,"requestContentType"])||null)),S=m(((e,t,r)=>e.getIn(["requestData",t,r,"responseContentType"])||null)),A=m(((e,t,r)=>{let n;if("string"!=typeof t){const{server:e,namespace:o}=t;n=o?[o,"serverVariableValues",e,r]:["serverVariableValues",e,r]}else{n=["serverVariableValues",t,r]}return e.getIn(n)||null})),k=m(((e,t)=>{let r;if("string"!=typeof t){const{server:e,namespace:n}=t;r=n?[n,"serverVariableValues",e]:["serverVariableValues",e]}else{r=["serverVariableValues",t]}return e.getIn(r)||(0,p.OrderedMap)()})),C=m(((e,t)=>{var r,n;if("string"!=typeof t){const{server:o,namespace:a}=t;n=o,r=a?e.getIn([a,"serverVariableValues",n]):e.getIn(["serverVariableValues",n])}else n=t,r=e.getIn(["serverVariableValues",n]);r=r||(0,p.OrderedMap)();let a=n;return o()(r).call(r,((e,t)=>{a=a.replace(new RegExp(`{${t}}`,"g"),e)})),a})),O=(j=(e,t)=>((e,t)=>(t=t||[],!!e.getIn(["requestData",...t,"bodyValue"])))(e,t),function(){for(var e=arguments.length,t=new Array(e),r=0;r{const r=e.getSystem().specSelectors.specJson();let n=[...t][1]||[];return!r.getIn(["paths",...n,"requestBody","required"])||j(...t)}});var j;const I=(e,t)=>{var r;let{oas3RequiredRequestBodyContentType:n,oas3RequestContentType:o,oas3RequestBodyValue:a}=t,s=[];if(!p.Map.isMap(a))return s;let u=[];return i()(r=l()(n.requestContentType)).call(r,(e=>{if(e===o){let t=n.requestContentType[e];i()(t).call(t,(e=>{c()(u).call(u,e)<0&&u.push(e)}))}})),i()(u).call(u,(e=>{a.getIn([e,"value"])||s.push(e)})),s}},91741:(e,t,r)=>{"use strict";r.r(t),r.d(t,{servers:()=>u,isSwagger2:()=>p});var n=r(20573),o=r(43393),a=r(7779);const i=e=>e||(0,o.Map)(),s=(0,n.P1)(i,(e=>e.get("json",(0,o.Map)()))),l=(0,n.P1)(i,(e=>e.get("resolved",(0,o.Map)()))),u=(c=(0,n.P1)((e=>{let t=l(e);return t.count()<1&&(t=s(e)),t}),(e=>e.getIn(["servers"])||(0,o.Map)())),()=>function(e){const t=e.getSystem().specSelectors.specJson();if((0,a.isOAS3)(t)){for(var r=arguments.length,n=new Array(r>1?r-1:0),o=1;o()=>{const e=t.getSystem().specSelectors.specJson();return(0,a.isSwagger2)(e)}},92044:(e,t,r)=>{"use strict";r.r(t),r.d(t,{definitions:()=>h,hasHost:()=>d,securityDefinitions:()=>m,host:()=>g,basePath:()=>v,consumes:()=>y,produces:()=>b,schemes:()=>w,servers:()=>E,isOAS3:()=>x,isSwagger2:()=>_});var n=r(20573),o=r(33881),a=r(43393),i=r(7779);function s(e){return(t,r)=>function(){const n=r.getSystem().specSelectors.specJson();return(0,i.isOAS3)(n)?e(...arguments):t(...arguments)}}const l=e=>e||(0,a.Map)(),u=s((0,n.P1)((()=>null))),c=(0,n.P1)(l,(e=>e.get("json",(0,a.Map)()))),p=(0,n.P1)(l,(e=>e.get("resolved",(0,a.Map)()))),f=e=>{let t=p(e);return t.count()<1&&(t=c(e)),t},h=s((0,n.P1)(f,(e=>{const t=e.getIn(["components","schemas"]);return a.Map.isMap(t)?t:(0,a.Map)()}))),d=s((e=>f(e).hasIn(["servers",0]))),m=s((0,n.P1)(o.specJsonWithResolvedSubtrees,(e=>e.getIn(["components","securitySchemes"])||null))),g=u,v=u,y=u,b=u,w=u,E=s((0,n.P1)(f,(e=>e.getIn(["servers"])||(0,a.Map)()))),x=(e,t)=>()=>{const e=t.getSystem().specSelectors.specJson();return(0,i.isOAS3)(a.Map.isMap(e)?e:(0,a.Map)())},_=(e,t)=>()=>{const e=t.getSystem().specSelectors.specJson();return(0,i.isSwagger2)(a.Map.isMap(e)?e:(0,a.Map)())}},70356:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(67294);const o=(0,r(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...r}=e;const{schema:o,getComponent:a,errSelectors:i,authorized:s,onAuthChange:l,name:u}=r,c=a("HttpAuth");return"http"===o.get("type")?n.createElement(c,{key:u,schema:o,name:u,errSelectors:i,authorized:s,getComponent:a,onChange:l}):n.createElement(t,r)}))},37761:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>u});var n=r(22460),o=r(70356),a=r(69487),i=r(50058),s=r(53499),l=r(90287);const u={Markdown:n.default,AuthItem:o.default,JsonSchema_string:l.default,VersionStamp:a.default,model:s.default,onlineValidatorBadge:i.default}},90287:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(67294);const o=(0,r(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...r}=e;const{schema:o,getComponent:a,errors:i,onChange:s}=r,l=o&&o.get?o.get("format"):null,u=o&&o.get?o.get("type"):null,c=a("Input");return u&&"string"===u&&l&&("binary"===l||"base64"===l)?n.createElement(c,{type:"file",className:i.length?"invalid":"",title:i.length?i:"",onChange:e=>{s(e.target.files[0])},disabled:t.isDisabled}):n.createElement(t,r)}))},22460:(e,t,r)=>{"use strict";r.r(t),r.d(t,{Markdown:()=>f,default:()=>h});var n=r(81607),o=r.n(n),a=r(67294),i=r(94184),s=r.n(i),l=r(89927),u=r(7779),c=r(86019);const p=new l._("commonmark");p.block.ruler.enable(["table"]),p.set({linkTarget:"_blank"});const f=e=>{let{source:t,className:r="",getConfigs:n}=e;if("string"!=typeof t)return null;if(t){const{useUnsafeMarkdown:e}=n(),i=p.render(t),l=(0,c.s)(i,{useUnsafeMarkdown:e});let u;return"string"==typeof l&&(u=o()(l).call(l)),a.createElement("div",{dangerouslySetInnerHTML:{__html:u},className:s()(r,"renderedMarkdown")})}return null};f.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};const h=(0,u.OAS3ComponentWrapFactory)(f)},53499:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>u});var n=r(23101),o=r.n(n),a=r(67294),i=r(7779),s=r(53795);class l extends a.Component{render(){let{getConfigs:e,schema:t}=this.props,r=["model-box"],n=null;return!0===t.get("deprecated")&&(r.push("deprecated"),n=a.createElement("span",{className:"model-deprecated-warning"},"Deprecated:")),a.createElement("div",{className:r.join(" ")},n,a.createElement(s.Z,o()({},this.props,{getConfigs:e,depth:1,expandDepth:this.props.expandDepth||0})))}}const u=(0,i.OAS3ComponentWrapFactory)(l)},50058:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>a});var n=r(7779),o=r(5623);const a=(0,n.OAS3ComponentWrapFactory)(o.Z)},69487:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(67294);const o=(0,r(7779).OAS3ComponentWrapFactory)((e=>{const{Ori:t}=e;return n.createElement("span",null,n.createElement(t,e),n.createElement("small",{className:"version-stamp"},n.createElement("pre",{className:"version"},"OAS3")))}))},28560:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(87198),o=r.n(n);let a=!1;function i(){return{statePlugins:{spec:{wrapActions:{updateSpec:e=>function(){return a=!0,e(...arguments)},updateJsonSpec:(e,t)=>function(){const r=t.getConfigs().onComplete;return a&&"function"==typeof r&&(o()(r,0),a=!1),e(...arguments)}}}}}}},92135:(e,t,r)=>{"use strict";r.r(t),r.d(t,{requestSnippetGenerator_curl_powershell:()=>A,requestSnippetGenerator_curl_bash:()=>k,requestSnippetGenerator_curl_cmd:()=>C});var n=r(11882),o=r.n(n),a=r(81607),i=r.n(a),s=r(35627),l=r.n(s),u=r(97606),c=r.n(u),p=r(12196),f=r.n(p),h=r(74386),d=r.n(h),m=r(58118),g=r.n(m),v=r(27504),y=r(43393);const b=e=>{var t;const r="_**[]";return o()(e).call(e,r)<0?e:i()(t=e.split(r)[0]).call(t)},w=e=>"-d "===e||/^[_\/-]/g.test(e)?e:"'"+e.replace(/'/g,"'\\''")+"'",E=e=>"-d "===(e=e.replace(/\^/g,"^^").replace(/\\"/g,'\\\\"').replace(/"/g,'""').replace(/\n/g,"^\n"))?e.replace(/-d /g,"-d ^\n"):/^[_\/-]/g.test(e)?e:'"'+e+'"',x=e=>"-d "===e?e:/\n/.test(e)?'@"\n'+e.replace(/"/g,'\\"').replace(/`/g,"``").replace(/\$/,"`$")+'\n"@':/^[_\/-]/g.test(e)?e:"'"+e.replace(/"/g,'""').replace(/'/g,"''")+"'";function _(e){let t=[];for(let[r,n]of e.get("body").entrySeq()){let e=b(r);n instanceof v.Z.File?t.push(` "${e}": {\n "name": "${n.name}"${n.type?`,\n "type": "${n.type}"`:""}\n }`):t.push(` "${e}": ${l()(n,null,2).replace(/(\r\n|\r|\n)/g,"\n ")}`)}return`{\n${t.join(",\n")}\n}`}const S=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",o=!1,a="";const i=function(){for(var e=arguments.length,r=new Array(e),n=0;na+=` ${r}`,p=function(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return a+=f()(e=" ").call(e,t)};let h=e.get("headers");if(a+="curl"+n,e.has("curlOptions")&&i(...e.get("curlOptions")),i("-X",e.get("method")),u(),p(),s(`${e.get("url")}`),h&&h.size)for(let t of d()(m=e.get("headers")).call(m)){var m;u(),p();let[e,r]=t;s("-H",`${e}: ${r}`),o=o||/^content-type$/i.test(e)&&/^multipart\/form-data$/i.test(r)}const w=e.get("body");var E;if(w)if(o&&g()(E=["POST","PUT","PATCH"]).call(E,e.get("method")))for(let[e,t]of w.entrySeq()){let r=b(e);u(),p(),s("-F"),t instanceof v.Z.File?i(`${r}=@${t.name}${t.type?`;type=${t.type}`:""}`):i(`${r}=${t}`)}else if(w instanceof v.Z.File)u(),p(),s(`--data-binary '@${w.name}'`);else{u(),p(),s("-d ");let t=w;y.Map.isMap(t)?s(_(e)):("string"!=typeof t&&(t=l()(t)),s(t))}else w||"POST"!==e.get("method")||(u(),p(),s("-d ''"));return a},A=e=>S(e,x,"`\n",".exe"),k=e=>S(e,w,"\\\n"),C=e=>S(e,E,"^\n")},86575:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(92135),o=r(4669),a=r(84206);const i=()=>({components:{RequestSnippets:a.default},fn:n,statePlugins:{requestSnippets:{selectors:o}}})},84206:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>w});var n=r(14418),o=r.n(n),a=r(25110),i=r.n(a),s=r(86),l=r.n(s),u=r(97606),c=r.n(u),p=r(67294),f=r(27361),h=r.n(f),d=r(23560),m=r.n(d),g=r(74855),v=r(36581);const y={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(250, 250, 250)",paddingBottom:"0",paddingTop:"0",border:"1px solid rgb(51, 51, 51)",borderRadius:"4px 4px 0 0",boxShadow:"none",borderBottom:"none"},b={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(51, 51, 51)",boxShadow:"none",border:"1px solid rgb(51, 51, 51)",paddingBottom:"0",paddingTop:"0",borderRadius:"4px 4px 0 0",marginTop:"-5px",marginRight:"-5px",marginLeft:"-5px",zIndex:"9999",borderBottom:"none"},w=e=>{var t,r;let{request:n,requestSnippetsSelectors:a,getConfigs:s}=e;const u=m()(s)?s():null,f=!1!==h()(u,"syntaxHighlight")&&h()(u,"syntaxHighlight.activated",!0),d=(0,p.useRef)(null),[w,E]=(0,p.useState)(null===(t=a.getSnippetGenerators())||void 0===t?void 0:t.keySeq().first()),[x,_]=(0,p.useState)(null==a?void 0:a.getDefaultExpanded());(0,p.useEffect)((()=>{}),[]),(0,p.useEffect)((()=>{var e;const t=o()(e=i()(d.current.childNodes)).call(e,(e=>{var t;return!!e.nodeType&&(null===(t=e.classList)||void 0===t?void 0:t.contains("curl-command"))}));return l()(t).call(t,(e=>e.addEventListener("mousewheel",j,{passive:!1}))),()=>{l()(t).call(t,(e=>e.removeEventListener("mousewheel",j)))}}),[n]);const S=a.getSnippetGenerators(),A=S.get(w),k=A.get("fn")(n),C=()=>{_(!x)},O=e=>e===w?b:y,j=e=>{const{target:t,deltaY:r}=e,{scrollHeight:n,offsetHeight:o,scrollTop:a}=t;n>o&&(0===a&&r<0||o+a>=n&&r>0)&&e.preventDefault()},I=f?p.createElement(v.d3,{language:A.get("syntax"),className:"curl microlight",style:(0,v.C2)(h()(u,"syntaxHighlight.theme"))},k):p.createElement("textarea",{readOnly:!0,className:"curl",value:k});return p.createElement("div",{className:"request-snippets",ref:d},p.createElement("div",{style:{width:"100%",display:"flex",justifyContent:"flex-start",alignItems:"center",marginBottom:"15px"}},p.createElement("h4",{onClick:()=>C(),style:{cursor:"pointer"}},"Snippets"),p.createElement("button",{onClick:()=>C(),style:{border:"none",background:"none"},title:x?"Collapse operation":"Expand operation"},p.createElement("svg",{className:"arrow",width:"10",height:"10"},p.createElement("use",{href:x?"#large-arrow-down":"#large-arrow",xlinkHref:x?"#large-arrow-down":"#large-arrow"})))),x&&p.createElement("div",{className:"curl-command"},p.createElement("div",{style:{paddingLeft:"15px",paddingRight:"10px",width:"100%",display:"flex"}},c()(r=S.entrySeq()).call(r,(e=>{let[t,r]=e;return p.createElement("div",{style:O(t),className:"btn",key:t,onClick:()=>(e=>{w!==e&&E(e)})(t)},p.createElement("h4",{style:t===w?{color:"white"}:{}},r.get("title")))}))),p.createElement("div",{className:"copy-to-clipboard"},p.createElement(g.CopyToClipboard,{text:k},p.createElement("button",null))),p.createElement("div",null,I)))}},4669:(e,t,r)=>{"use strict";r.r(t),r.d(t,{getGenerators:()=>f,getSnippetGenerators:()=>h,getActiveLanguage:()=>d,getDefaultExpanded:()=>m});var n=r(14418),o=r.n(n),a=r(58118),i=r.n(a),s=r(97606),l=r.n(s),u=r(20573),c=r(43393);const p=e=>e||(0,c.Map)(),f=(0,u.P1)(p,(e=>{const t=e.get("languages"),r=e.get("generators",(0,c.Map)());return!t||t.isEmpty()?r:o()(r).call(r,((e,r)=>i()(t).call(t,r)))})),h=e=>t=>{var r,n;let{fn:a}=t;return o()(r=l()(n=f(e)).call(n,((e,t)=>{const r=(e=>a[`requestSnippetGenerator_${e}`])(t);return"function"!=typeof r?null:e.set("fn",r)}))).call(r,(e=>e))},d=(0,u.P1)(p,(e=>e.get("activeLanguage"))),m=(0,u.P1)(p,(e=>e.get("defaultExpanded")))},36195:(e,t,r)=>{"use strict";r.r(t),r.d(t,{ErrorBoundary:()=>i,default:()=>s});var n=r(67294),o=r(56189),a=r(29403);class i extends n.Component{static getDerivedStateFromError(e){return{hasError:!0,error:e}}constructor(){super(...arguments),this.state={hasError:!1,error:null}}componentDidCatch(e,t){this.props.fn.componentDidCatch(e,t)}render(){const{getComponent:e,targetName:t,children:r}=this.props;if(this.state.hasError){const r=e("Fallback");return n.createElement(r,{name:t})}return r}}i.defaultProps={targetName:"this component",getComponent:()=>a.default,fn:{componentDidCatch:o.componentDidCatch},children:null};const s=i},29403:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(67294);const o=e=>{let{name:t}=e;return n.createElement("div",{className:"fallback"},"😱 ",n.createElement("i",null,"Could not render ","t"===t?"this component":t,", see the console."))}},56189:(e,t,r)=>{"use strict";r.r(t),r.d(t,{componentDidCatch:()=>i,withErrorBoundary:()=>s});var n=r(23101),o=r.n(n),a=r(67294);const i=console.error,s=e=>t=>{const{getComponent:r,fn:n}=e(),i=r("ErrorBoundary"),s=n.getDisplayName(t);class l extends a.Component{render(){return a.createElement(i,{targetName:s,getComponent:r,fn:n},a.createElement(t,o()({},this.props,this.context)))}}var u;return l.displayName=`WithErrorBoundary(${s})`,(u=t).prototype&&u.prototype.isReactComponent&&(l.prototype.mapStateToProps=t.prototype.mapStateToProps),l}},27621:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>c});var n=r(47475),o=r.n(n),a=r(7287),i=r.n(a),s=r(36195),l=r(29403),u=r(56189);const c=function(){let{componentList:e=[],fullOverride:t=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=>{var n;let{getSystem:a}=r;const c=t?e:["App","BaseLayout","VersionPragmaFilter","InfoContainer","ServersContainer","SchemesContainer","AuthorizeBtnContainer","FilterContainer","Operations","OperationContainer","parameters","responses","OperationServers","Models","ModelWrapper",...e],p=i()(c,o()(n=Array(c.length)).call(n,((e,t)=>{let{fn:r}=t;return r.withErrorBoundary(e)})));return{fn:{componentDidCatch:u.componentDidCatch,withErrorBoundary:(0,u.withErrorBoundary)(a)},components:{ErrorBoundary:s.default,Fallback:l.default},wrapComponents:p}}}},57050:(e,t,r)=>{"use strict";r.r(t),r.d(t,{sampleFromSchemaGeneric:()=>F,inferSchema:()=>z,createXMLExample:()=>U,sampleFromSchema:()=>q,memoizedCreateXMLExample:()=>$,memoizedSampleFromSchema:()=>W});var n=r(11882),o=r.n(n),a=r(86),i=r.n(a),s=r(58309),l=r.n(s),u=r(58118),c=r.n(u),p=r(92039),f=r.n(p),h=r(24278),d=r.n(h),m=r(51679),g=r.n(m),v=r(39022),y=r.n(v),b=r(97606),w=r.n(b),E=r(35627),x=r.n(E),_=r(53479),S=r.n(_),A=r(14419),k=r.n(A),C=r(41609),O=r.n(C),j=r(90242),I=r(60314);const N={string:e=>e.pattern?(e=>{try{return new(k())(e).gen()}catch(e){return"string"}})(e.pattern):"string",string_email:()=>"user@example.com","string_date-time":()=>(new Date).toISOString(),string_date:()=>(new Date).toISOString().substring(0,10),string_uuid:()=>"3fa85f64-5717-4562-b3fc-2c963f66afa6",string_hostname:()=>"example.com",string_ipv4:()=>"198.51.100.42",string_ipv6:()=>"2001:0db8:5b96:0000:0000:426f:8e17:642a",number:()=>0,number_float:()=>0,integer:()=>0,boolean:e=>"boolean"!=typeof e.default||e.default},T=e=>{e=(0,j.mz)(e);let{type:t,format:r}=e,n=N[`${t}_${r}`]||N[t];return(0,j.Wl)(n)?n(e):"Unknown Type: "+e.type},P=e=>(0,j.XV)(e,"$$ref",(e=>"string"==typeof e&&o()(e).call(e,"#")>-1)),R=["maxProperties","minProperties"],M=["minItems","maxItems"],D=["minimum","maximum","exclusiveMinimum","exclusiveMaximum"],L=["minLength","maxLength"],B=function(e,t){var r;let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const a=r=>{void 0===t[r]&&void 0!==e[r]&&(t[r]=e[r])};var s;(i()(r=["example","default","enum","xml","type",...R,...M,...D,...L]).call(r,(e=>a(e))),void 0!==e.required&&l()(e.required))&&(void 0!==t.required&&t.required.length||(t.required=[]),i()(s=e.required).call(s,(e=>{var r;c()(r=t.required).call(r,e)||t.required.push(e)})));if(e.properties){t.properties||(t.properties={});let r=(0,j.mz)(e.properties);for(let a in r){var u;if(Object.prototype.hasOwnProperty.call(r,a))if(!r[a]||!r[a].deprecated)if(!r[a]||!r[a].readOnly||n.includeReadOnly)if(!r[a]||!r[a].writeOnly||n.includeWriteOnly)if(!t.properties[a])t.properties[a]=r[a],!e.required&&l()(e.required)&&-1!==o()(u=e.required).call(u,a)&&(t.required?t.required.push(a):t.required=[a])}}return e.items&&(t.items||(t.items={}),t.items=B(e.items,t.items,n)),t},F=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e&&(0,j.Wl)(e.toJS)&&(e=e.toJS());let a=void 0!==r||e&&void 0!==e.example||e&&void 0!==e.default;const s=!a&&e&&e.oneOf&&e.oneOf.length>0,u=!a&&e&&e.anyOf&&e.anyOf.length>0;if(!a&&(s||u)){const r=(0,j.mz)(s?e.oneOf[0]:e.anyOf[0]);if(B(r,e,t),!e.xml&&r.xml&&(e.xml=r.xml),void 0!==e.example&&void 0!==r.example)a=!0;else if(r.properties){e.properties||(e.properties={});let n=(0,j.mz)(r.properties);for(let a in n){var p;if(Object.prototype.hasOwnProperty.call(n,a))if(!n[a]||!n[a].deprecated)if(!n[a]||!n[a].readOnly||t.includeReadOnly)if(!n[a]||!n[a].writeOnly||t.includeWriteOnly)if(!e.properties[a])e.properties[a]=n[a],!r.required&&l()(r.required)&&-1!==o()(p=r.required).call(p,a)&&(e.required?e.required.push(a):e.required=[a])}}}const h={};let{xml:m,type:v,example:b,properties:E,additionalProperties:x,items:_}=e||{},{includeReadOnly:S,includeWriteOnly:A}=t;m=m||{};let k,{name:C,prefix:I,namespace:N}=m,L={};if(n&&(C=C||"notagname",k=(I?I+":":"")+C,N)){h[I?"xmlns:"+I:"xmlns"]=N}n&&(L[k]=[]);const z=t=>f()(t).call(t,(t=>Object.prototype.hasOwnProperty.call(e,t)));e&&!v&&(E||x||z(R)?v="object":_||z(M)?v="array":z(D)?(v="number",e.type="number"):a||e.enum||(v="string",e.type="string"));const U=t=>{var r,n,o,a,i;null!==(null===(r=e)||void 0===r?void 0:r.maxItems)&&void 0!==(null===(n=e)||void 0===n?void 0:n.maxItems)&&(t=d()(t).call(t,0,null===(i=e)||void 0===i?void 0:i.maxItems));if(null!==(null===(o=e)||void 0===o?void 0:o.minItems)&&void 0!==(null===(a=e)||void 0===a?void 0:a.minItems)){let r=0;for(;t.length<(null===(s=e)||void 0===s?void 0:s.minItems);){var s;t.push(t[r++%t.length])}}return t},q=(0,j.mz)(E);let V,$=0;const W=()=>e&&null!==e.maxProperties&&void 0!==e.maxProperties&&$>=e.maxProperties,H=()=>{if(!e||!e.required)return 0;let t=0;var r,o;n?i()(r=e.required).call(r,(e=>t+=void 0===L[e]?0:1)):i()(o=e.required).call(o,(e=>{var r;return t+=void 0===(null===(r=L[k])||void 0===r?void 0:g()(r).call(r,(t=>void 0!==t[e])))?0:1}));return e.required.length-t},J=t=>{var r;return!(e&&e.required&&e.required.length)||!c()(r=e.required).call(r,t)},K=t=>!e||null===e.maxProperties||void 0===e.maxProperties||!W()&&(!J(t)||e.maxProperties-$-H()>0);if(V=n?function(r){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&q[r]){if(q[r].xml=q[r].xml||{},q[r].xml.attribute){const e=l()(q[r].enum)?q[r].enum[0]:void 0,t=q[r].example,n=q[r].default;return void(h[q[r].xml.name||r]=void 0!==t?t:void 0!==n?n:void 0!==e?e:T(q[r]))}q[r].xml.name=q[r].xml.name||r}else q[r]||!1===x||(q[r]={xml:{name:r}});let a=F(e&&q[r]||void 0,t,o,n);var i;K(r)&&($++,l()(a)?L[k]=y()(i=L[k]).call(i,a):L[k].push(a))}:(e,r)=>{K(e)&&(L[e]=F(q[e],t,r,n),$++)},a){let o;if(o=P(void 0!==r?r:void 0!==b?b:e.default),!n){if("number"==typeof o&&"string"===v)return`${o}`;if("string"!=typeof o||"string"===v)return o;try{return JSON.parse(o)}catch(e){return o}}if(e||(v=l()(o)?"array":typeof o),"array"===v){if(!l()(o)){if("string"==typeof o)return o;o=[o]}const r=e?e.items:void 0;r&&(r.xml=r.xml||m||{},r.xml.name=r.xml.name||m.name);let a=w()(o).call(o,(e=>F(r,t,e,n)));return a=U(a),m.wrapped?(L[k]=a,O()(h)||L[k].push({_attr:h})):L=a,L}if("object"===v){if("string"==typeof o)return o;for(let t in o)Object.prototype.hasOwnProperty.call(o,t)&&(e&&q[t]&&q[t].readOnly&&!S||e&&q[t]&&q[t].writeOnly&&!A||(e&&q[t]&&q[t].xml&&q[t].xml.attribute?h[q[t].xml.name||t]=o[t]:V(t,o[t])));return O()(h)||L[k].push({_attr:h}),L}return L[k]=O()(h)?o:[{_attr:h},o],L}if("object"===v){for(let e in q)Object.prototype.hasOwnProperty.call(q,e)&&(q[e]&&q[e].deprecated||q[e]&&q[e].readOnly&&!S||q[e]&&q[e].writeOnly&&!A||V(e));if(n&&h&&L[k].push({_attr:h}),W())return L;if(!0===x)n?L[k].push({additionalProp:"Anything can be here"}):L.additionalProp1={},$++;else if(x){const r=(0,j.mz)(x),o=F(r,t,void 0,n);if(n&&r.xml&&r.xml.name&&"notagname"!==r.xml.name)L[k].push(o);else{const t=null!==e.minProperties&&void 0!==e.minProperties&&$F(B(_,e,t),t,void 0,n)));else if(l()(_.oneOf)){var Y;r=w()(Y=_.oneOf).call(Y,(e=>F(B(_,e,t),t,void 0,n)))}else{if(!(!n||n&&m.wrapped))return F(_,t,void 0,n);r=[F(_,t,void 0,n)]}return r=U(r),n&&m.wrapped?(L[k]=r,O()(h)||L[k].push({_attr:h}),L):r}let Q;if(e&&l()(e.enum))Q=(0,j.AF)(e.enum)[0];else{if(!e)return;if(Q=T(e),"number"==typeof Q){let t=e.minimum;null!=t&&(e.exclusiveMinimum&&t++,Q=t);let r=e.maximum;null!=r&&(e.exclusiveMaximum&&r--,Q=r)}if("string"==typeof Q&&(null!==e.maxLength&&void 0!==e.maxLength&&(Q=d()(Q).call(Q,0,e.maxLength)),null!==e.minLength&&void 0!==e.minLength)){let t=0;for(;Q.length(e.schema&&(e=e.schema),e.properties&&(e.type="object"),e),U=(e,t,r)=>{const n=F(e,t,r,!0);if(n)return"string"==typeof n?n:S()(n,{declaration:!0,indent:"\t"})},q=(e,t,r)=>F(e,t,r,!1),V=(e,t,r)=>[e,x()(t),x()(r)],$=(0,I.Z)(U,V),W=(0,I.Z)(q,V)},8883:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(57050);function o(){return{fn:n}}},51228:(e,t,r)=>{"use strict";r.r(t),r.d(t,{UPDATE_SPEC:()=>U,UPDATE_URL:()=>q,UPDATE_JSON:()=>V,UPDATE_PARAM:()=>$,UPDATE_EMPTY_PARAM_INCLUSION:()=>W,VALIDATE_PARAMS:()=>H,SET_RESPONSE:()=>J,SET_REQUEST:()=>K,SET_MUTATED_REQUEST:()=>G,LOG_REQUEST:()=>Z,CLEAR_RESPONSE:()=>Y,CLEAR_REQUEST:()=>Q,CLEAR_VALIDATE_PARAMS:()=>X,UPDATE_OPERATION_META_VALUE:()=>ee,UPDATE_RESOLVED:()=>te,UPDATE_RESOLVED_SUBTREE:()=>re,SET_SCHEME:()=>ne,updateSpec:()=>oe,updateResolved:()=>ae,updateUrl:()=>ie,updateJsonSpec:()=>se,parseToJson:()=>le,resolveSpec:()=>ce,requestResolvedSubtree:()=>he,changeParam:()=>de,changeParamByIdentity:()=>me,updateResolvedSubtree:()=>ge,invalidateResolvedSubtreeCache:()=>ve,validateParams:()=>ye,updateEmptyParamInclusion:()=>be,clearValidateParams:()=>we,changeConsumesValue:()=>Ee,changeProducesValue:()=>xe,setResponse:()=>_e,setRequest:()=>Se,setMutatedRequest:()=>Ae,logRequest:()=>ke,executeRequest:()=>Ce,execute:()=>Oe,clearResponse:()=>je,clearRequest:()=>Ie,setScheme:()=>Ne});var n=r(58309),o=r.n(n),a=r(97606),i=r.n(a),s=r(96718),l=r.n(s),u=r(24282),c=r.n(u),p=r(2250),f=r.n(p),h=r(6226),d=r.n(h),m=r(14418),g=r.n(m),v=r(3665),y=r.n(v),b=r(11882),w=r.n(b),E=r(86),x=r.n(E),_=r(28222),S=r.n(_),A=r(76986),k=r.n(A),C=r(70586),O=r.n(C),j=r(1272),I=r(43393),N=r(84564),T=r.n(N),P=r(7710),R=r(47037),M=r.n(R),D=r(23279),L=r.n(D),B=r(36968),F=r.n(B),z=r(90242);const U="spec_update_spec",q="spec_update_url",V="spec_update_json",$="spec_update_param",W="spec_update_empty_param_inclusion",H="spec_validate_param",J="spec_set_response",K="spec_set_request",G="spec_set_mutated_request",Z="spec_log_request",Y="spec_clear_response",Q="spec_clear_request",X="spec_clear_validate_param",ee="spec_update_operation_meta_value",te="spec_update_resolved",re="spec_update_resolved_subtree",ne="set_scheme";function oe(e){const t=(r=e,M()(r)?r:"").replace(/\t/g," ");var r;if("string"==typeof e)return{type:U,payload:t}}function ae(e){return{type:te,payload:e}}function ie(e){return{type:q,payload:e}}function se(e){return{type:V,payload:e}}const le=e=>t=>{let{specActions:r,specSelectors:n,errActions:o}=t,{specStr:a}=n,i=null;try{e=e||a(),o.clear({source:"parser"}),i=j.ZP.load(e,{schema:j.A8})}catch(e){return console.error(e),o.newSpecErr({source:"parser",level:"error",message:e.reason,line:e.mark&&e.mark.line?e.mark.line+1:void 0})}return i&&"object"==typeof i?r.updateJsonSpec(i):{}};let ue=!1;const ce=(e,t)=>r=>{let{specActions:n,specSelectors:a,errActions:s,fn:{fetch:u,resolve:c,AST:p={}},getConfigs:f}=r;ue||(console.warn("specActions.resolveSpec is deprecated since v3.10.0 and will be removed in v4.0.0; use requestResolvedSubtree instead!"),ue=!0);const{modelPropertyMacro:h,parameterMacro:d,requestInterceptor:m,responseInterceptor:g}=f();void 0===e&&(e=a.specJson()),void 0===t&&(t=a.url());let v=p.getLineNumberForPath?p.getLineNumberForPath:()=>{},y=a.specStr();return c({fetch:u,spec:e,baseDoc:t,modelPropertyMacro:h,parameterMacro:d,requestInterceptor:m,responseInterceptor:g}).then((e=>{let{spec:t,errors:r}=e;if(s.clear({type:"thrown"}),o()(r)&&r.length>0){let e=i()(r).call(r,(e=>(console.error(e),e.line=e.fullPath?v(y,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",l()(e,"message",{enumerable:!0,value:e.message}),e)));s.newThrownErrBatch(e)}return n.updateResolved(t)}))};let pe=[];const fe=L()((async()=>{const e=pe.system;if(!e)return void console.error("debResolveSubtrees: don't have a system to operate on, aborting.");const{errActions:t,errSelectors:r,fn:{resolveSubtree:n,fetch:a,AST:s={}},specSelectors:u,specActions:p}=e;if(!n)return void console.error("Error: Swagger-Client did not provide a `resolveSubtree` method, doing nothing.");let h=s.getLineNumberForPath?s.getLineNumberForPath:()=>{};const m=u.specStr(),{modelPropertyMacro:v,parameterMacro:b,requestInterceptor:w,responseInterceptor:E}=e.getConfigs();try{var x=await c()(pe).call(pe,(async(e,s)=>{const{resultMap:c,specWithCurrentSubtrees:p}=await e,{errors:x,spec:_}=await n(p,s,{baseDoc:u.url(),modelPropertyMacro:v,parameterMacro:b,requestInterceptor:w,responseInterceptor:E});if(r.allErrors().size&&t.clearBy((e=>{var t;return"thrown"!==e.get("type")||"resolver"!==e.get("source")||!f()(t=e.get("fullPath")).call(t,((e,t)=>e===s[t]||void 0===s[t]))})),o()(x)&&x.length>0){let e=i()(x).call(x,(e=>(e.line=e.fullPath?h(m,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",l()(e,"message",{enumerable:!0,value:e.message}),e)));t.newThrownErrBatch(e)}var S,A;_&&u.isOAS3()&&"components"===s[0]&&"securitySchemes"===s[1]&&await d().all(i()(S=g()(A=y()(_)).call(A,(e=>"openIdConnect"===e.type))).call(S,(async e=>{const t={url:e.openIdConnectUrl,requestInterceptor:w,responseInterceptor:E};try{const r=await a(t);r instanceof Error||r.status>=400?console.error(r.statusText+" "+t.url):e.openIdConnectData=JSON.parse(r.text)}catch(e){console.error(e)}})));return F()(c,s,_),F()(p,s,_),{resultMap:c,specWithCurrentSubtrees:p}}),d().resolve({resultMap:(u.specResolvedSubtree([])||(0,I.Map)()).toJS(),specWithCurrentSubtrees:u.specJson().toJS()}));delete pe.system,pe=[]}catch(e){console.error(e)}p.updateResolvedSubtree([],x.resultMap)}),35),he=e=>t=>{var r;w()(r=i()(pe).call(pe,(e=>e.join("@@")))).call(r,e.join("@@"))>-1||(pe.push(e),pe.system=t,fe())};function de(e,t,r,n,o){return{type:$,payload:{path:e,value:n,paramName:t,paramIn:r,isXml:o}}}function me(e,t,r,n){return{type:$,payload:{path:e,param:t,value:r,isXml:n}}}const ge=(e,t)=>({type:re,payload:{path:e,value:t}}),ve=()=>({type:re,payload:{path:[],value:(0,I.Map)()}}),ye=(e,t)=>({type:H,payload:{pathMethod:e,isOAS3:t}}),be=(e,t,r,n)=>({type:W,payload:{pathMethod:e,paramName:t,paramIn:r,includeEmptyValue:n}});function we(e){return{type:X,payload:{pathMethod:e}}}function Ee(e,t){return{type:ee,payload:{path:e,value:t,key:"consumes_value"}}}function xe(e,t){return{type:ee,payload:{path:e,value:t,key:"produces_value"}}}const _e=(e,t,r)=>({payload:{path:e,method:t,res:r},type:J}),Se=(e,t,r)=>({payload:{path:e,method:t,req:r},type:K}),Ae=(e,t,r)=>({payload:{path:e,method:t,req:r},type:G}),ke=e=>({payload:e,type:Z}),Ce=e=>t=>{let{fn:r,specActions:n,specSelectors:a,getConfigs:s,oas3Selectors:l}=t,{pathName:u,method:c,operation:p}=e,{requestInterceptor:f,responseInterceptor:h}=s(),d=p.toJS();var m,v;p&&p.get("parameters")&&x()(m=g()(v=p.get("parameters")).call(v,(e=>e&&!0===e.get("allowEmptyValue")))).call(m,(t=>{if(a.parameterInclusionSettingFor([u,c],t.get("name"),t.get("in"))){e.parameters=e.parameters||{};const r=(0,z.cz)(t,e.parameters);(!r||r&&0===r.size)&&(e.parameters[t.get("name")]="")}}));if(e.contextUrl=T()(a.url()).toString(),d&&d.operationId?e.operationId=d.operationId:d&&u&&c&&(e.operationId=r.opId(d,u,c)),a.isOAS3()){const t=`${u}:${c}`;e.server=l.selectedServer(t)||l.selectedServer();const r=l.serverVariables({server:e.server,namespace:t}).toJS(),n=l.serverVariables({server:e.server}).toJS();e.serverVariables=S()(r).length?r:n,e.requestContentType=l.requestContentType(u,c),e.responseContentType=l.responseContentType(u,c)||"*/*";const a=l.requestBodyValue(u,c),s=l.requestBodyInclusionSetting(u,c);var y;if(a&&a.toJS)e.requestBody=g()(y=i()(a).call(a,(e=>I.Map.isMap(e)?e.get("value"):e))).call(y,((e,t)=>(o()(e)?0!==e.length:!(0,z.O2)(e))||s.get(t))).toJS();else e.requestBody=a}let b=k()({},e);b=r.buildRequest(b),n.setRequest(e.pathName,e.method,b);e.requestInterceptor=async t=>{let r=await f.apply(void 0,[t]),o=k()({},r);return n.setMutatedRequest(e.pathName,e.method,o),r},e.responseInterceptor=h;const w=O()();return r.execute(e).then((t=>{t.duration=O()()-w,n.setResponse(e.pathName,e.method,t)})).catch((t=>{"Failed to fetch"===t.message&&(t.name="",t.message='**Failed to fetch.** \n**Possible Reasons:** \n - CORS \n - Network Failure \n - URL scheme must be "http" or "https" for CORS request.'),n.setResponse(e.pathName,e.method,{error:!0,err:(0,P.serializeError)(t)})}))},Oe=function(){let{path:e,method:t,...r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n=>{let{fn:{fetch:o},specSelectors:a,specActions:i}=n,s=a.specJsonWithResolvedSubtrees().toJS(),l=a.operationScheme(e,t),{requestContentType:u,responseContentType:c}=a.contentTypeValues([e,t]).toJS(),p=/xml/i.test(u),f=a.parameterValues([e,t],p).toJS();return i.executeRequest({...r,fetch:o,spec:s,pathName:e,method:t,parameters:f,requestContentType:u,scheme:l,responseContentType:c})}};function je(e,t){return{type:Y,payload:{path:e,method:t}}}function Ie(e,t){return{type:Q,payload:{path:e,method:t}}}function Ne(e,t,r){return{type:ne,payload:{scheme:e,path:t,method:r}}}},37038:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var n=r(20032),o=r(51228),a=r(33881),i=r(77508);function s(){return{statePlugins:{spec:{wrapActions:i,reducers:n.default,actions:o,selectors:a}}}}},20032:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>d});var n=r(24282),o=r.n(n),a=r(97606),i=r.n(a),s=r(76986),l=r.n(s),u=r(43393),c=r(90242),p=r(27504),f=r(33881),h=r(51228);const d={[h.UPDATE_SPEC]:(e,t)=>"string"==typeof t.payload?e.set("spec",t.payload):e,[h.UPDATE_URL]:(e,t)=>e.set("url",t.payload+""),[h.UPDATE_JSON]:(e,t)=>e.set("json",(0,c.oG)(t.payload)),[h.UPDATE_RESOLVED]:(e,t)=>e.setIn(["resolved"],(0,c.oG)(t.payload)),[h.UPDATE_RESOLVED_SUBTREE]:(e,t)=>{const{value:r,path:n}=t.payload;return e.setIn(["resolvedSubtrees",...n],(0,c.oG)(r))},[h.UPDATE_PARAM]:(e,t)=>{let{payload:r}=t,{path:n,paramName:o,paramIn:a,param:i,value:s,isXml:l}=r,u=i?(0,c.V9)(i):`${a}.${o}`;const p=l?"value_xml":"value";return e.setIn(["meta","paths",...n,"parameters",u,p],s)},[h.UPDATE_EMPTY_PARAM_INCLUSION]:(e,t)=>{let{payload:r}=t,{pathMethod:n,paramName:o,paramIn:a,includeEmptyValue:i}=r;if(!o||!a)return console.warn("Warning: UPDATE_EMPTY_PARAM_INCLUSION could not generate a paramKey."),e;const s=`${a}.${o}`;return e.setIn(["meta","paths",...n,"parameter_inclusions",s],i)},[h.VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:r,isOAS3:n}}=t;const a=(0,f.specJsonWithResolvedSubtrees)(e).getIn(["paths",...r]),i=(0,f.parameterValues)(e,r).toJS();return e.updateIn(["meta","paths",...r,"parameters"],(0,u.fromJS)({}),(t=>{var s;return o()(s=a.get("parameters",(0,u.List)())).call(s,((t,o)=>{const a=(0,c.cz)(o,i),s=(0,f.parameterInclusionSettingFor)(e,r,o.get("name"),o.get("in")),l=(0,c.Ik)(o,a,{bypassRequiredCheck:s,isOAS3:n});return t.setIn([(0,c.V9)(o),"errors"],(0,u.fromJS)(l))}),t)}))},[h.CLEAR_VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:r}}=t;return e.updateIn(["meta","paths",...r,"parameters"],(0,u.fromJS)([]),(e=>i()(e).call(e,(e=>e.set("errors",(0,u.fromJS)([]))))))},[h.SET_RESPONSE]:(e,t)=>{let r,{payload:{res:n,path:o,method:a}}=t;r=n.error?l()({error:!0,name:n.err.name,message:n.err.message,statusCode:n.err.statusCode},n.err.response):n,r.headers=r.headers||{};let i=e.setIn(["responses",o,a],(0,c.oG)(r));return p.Z.Blob&&n.data instanceof p.Z.Blob&&(i=i.setIn(["responses",o,a,"text"],n.data)),i},[h.SET_REQUEST]:(e,t)=>{let{payload:{req:r,path:n,method:o}}=t;return e.setIn(["requests",n,o],(0,c.oG)(r))},[h.SET_MUTATED_REQUEST]:(e,t)=>{let{payload:{req:r,path:n,method:o}}=t;return e.setIn(["mutatedRequests",n,o],(0,c.oG)(r))},[h.UPDATE_OPERATION_META_VALUE]:(e,t)=>{let{payload:{path:r,value:n,key:o}}=t,a=["paths",...r],i=["meta","paths",...r];return e.getIn(["json",...a])||e.getIn(["resolved",...a])||e.getIn(["resolvedSubtrees",...a])?e.setIn([...i,o],(0,u.fromJS)(n)):e},[h.CLEAR_RESPONSE]:(e,t)=>{let{payload:{path:r,method:n}}=t;return e.deleteIn(["responses",r,n])},[h.CLEAR_REQUEST]:(e,t)=>{let{payload:{path:r,method:n}}=t;return e.deleteIn(["requests",r,n])},[h.SET_SCHEME]:(e,t)=>{let{payload:{scheme:r,path:n,method:o}}=t;return n&&o?e.setIn(["scheme",n,o],r):n||o?void 0:e.setIn(["scheme","_defaultScheme"],r)}}},33881:(e,t,r)=>{"use strict";r.r(t),r.d(t,{lastError:()=>O,url:()=>j,specStr:()=>I,specSource:()=>N,specJson:()=>T,specResolved:()=>P,specResolvedSubtree:()=>R,specJsonWithResolvedSubtrees:()=>D,spec:()=>L,isOAS3:()=>B,info:()=>F,externalDocs:()=>z,version:()=>U,semver:()=>q,paths:()=>V,operations:()=>$,consumes:()=>W,produces:()=>H,security:()=>J,securityDefinitions:()=>K,findDefinition:()=>G,definitions:()=>Z,basePath:()=>Y,host:()=>Q,schemes:()=>X,operationsWithRootInherited:()=>ee,tags:()=>te,tagDetails:()=>re,operationsWithTags:()=>ne,taggedOperations:()=>oe,responses:()=>ae,requests:()=>ie,mutatedRequests:()=>se,responseFor:()=>le,requestFor:()=>ue,mutatedRequestFor:()=>ce,allowTryItOutFor:()=>pe,parameterWithMetaByIdentity:()=>fe,parameterInclusionSettingFor:()=>he,parameterWithMeta:()=>de,operationWithMeta:()=>me,getParameter:()=>ge,hasHost:()=>ve,parameterValues:()=>ye,parametersIncludeIn:()=>be,parametersIncludeType:()=>we,contentTypeValues:()=>Ee,currentProducesFor:()=>xe,producesOptionsFor:()=>_e,consumesOptionsFor:()=>Se,operationScheme:()=>Ae,canExecuteScheme:()=>ke,validateBeforeExecute:()=>Ce,getOAS3RequiredRequestBodyContentType:()=>Oe,isMediaTypeSchemaPropertiesEqual:()=>je});var n=r(24278),o=r.n(n),a=r(86),i=r.n(a),s=r(11882),l=r.n(s),u=r(97606),c=r.n(u),p=r(14418),f=r.n(p),h=r(51679),d=r.n(h),m=r(24282),g=r.n(m),v=r(2578),y=r.n(v),b=r(92039),w=r.n(b),E=r(58309),x=r.n(E),_=r(20573),S=r(90242),A=r(43393);const k=["get","put","post","delete","options","head","patch","trace"],C=e=>e||(0,A.Map)(),O=(0,_.P1)(C,(e=>e.get("lastError"))),j=(0,_.P1)(C,(e=>e.get("url"))),I=(0,_.P1)(C,(e=>e.get("spec")||"")),N=(0,_.P1)(C,(e=>e.get("specSource")||"not-editor")),T=(0,_.P1)(C,(e=>e.get("json",(0,A.Map)()))),P=(0,_.P1)(C,(e=>e.get("resolved",(0,A.Map)()))),R=(e,t)=>e.getIn(["resolvedSubtrees",...t],void 0),M=(e,t)=>A.Map.isMap(e)&&A.Map.isMap(t)?t.get("$$ref")?t:(0,A.OrderedMap)().mergeWith(M,e,t):t,D=(0,_.P1)(C,(e=>(0,A.OrderedMap)().mergeWith(M,e.get("json"),e.get("resolvedSubtrees")))),L=e=>T(e),B=(0,_.P1)(L,(()=>!1)),F=(0,_.P1)(L,(e=>Ie(e&&e.get("info")))),z=(0,_.P1)(L,(e=>Ie(e&&e.get("externalDocs")))),U=(0,_.P1)(F,(e=>e&&e.get("version"))),q=(0,_.P1)(U,(e=>{var t;return o()(t=/v?([0-9]*)\.([0-9]*)\.([0-9]*)/i.exec(e)).call(t,1)})),V=(0,_.P1)(D,(e=>e.get("paths"))),$=(0,_.P1)(V,(e=>{if(!e||e.size<1)return(0,A.List)();let t=(0,A.List)();return e&&i()(e)?(i()(e).call(e,((e,r)=>{if(!e||!i()(e))return{};i()(e).call(e,((e,n)=>{l()(k).call(k,n)<0||(t=t.push((0,A.fromJS)({path:r,method:n,operation:e,id:`${n}-${r}`})))}))})),t):(0,A.List)()})),W=(0,_.P1)(L,(e=>(0,A.Set)(e.get("consumes")))),H=(0,_.P1)(L,(e=>(0,A.Set)(e.get("produces")))),J=(0,_.P1)(L,(e=>e.get("security",(0,A.List)()))),K=(0,_.P1)(L,(e=>e.get("securityDefinitions"))),G=(e,t)=>{const r=e.getIn(["resolvedSubtrees","definitions",t],null),n=e.getIn(["json","definitions",t],null);return r||n||null},Z=(0,_.P1)(L,(e=>{const t=e.get("definitions");return A.Map.isMap(t)?t:(0,A.Map)()})),Y=(0,_.P1)(L,(e=>e.get("basePath"))),Q=(0,_.P1)(L,(e=>e.get("host"))),X=(0,_.P1)(L,(e=>e.get("schemes",(0,A.Map)()))),ee=(0,_.P1)($,W,H,((e,t,r)=>c()(e).call(e,(e=>e.update("operation",(e=>{if(e){if(!A.Map.isMap(e))return;return e.withMutations((e=>(e.get("consumes")||e.update("consumes",(e=>(0,A.Set)(e).merge(t))),e.get("produces")||e.update("produces",(e=>(0,A.Set)(e).merge(r))),e)))}return(0,A.Map)()})))))),te=(0,_.P1)(L,(e=>{const t=e.get("tags",(0,A.List)());return A.List.isList(t)?f()(t).call(t,(e=>A.Map.isMap(e))):(0,A.List)()})),re=(e,t)=>{var r;let n=te(e)||(0,A.List)();return d()(r=f()(n).call(n,A.Map.isMap)).call(r,(e=>e.get("name")===t),(0,A.Map)())},ne=(0,_.P1)(ee,te,((e,t)=>g()(e).call(e,((e,t)=>{let r=(0,A.Set)(t.getIn(["operation","tags"]));return r.count()<1?e.update("default",(0,A.List)(),(e=>e.push(t))):g()(r).call(r,((e,r)=>e.update(r,(0,A.List)(),(e=>e.push(t)))),e)}),g()(t).call(t,((e,t)=>e.set(t.get("name"),(0,A.List)())),(0,A.OrderedMap)())))),oe=e=>t=>{var r;let{getConfigs:n}=t,{tagsSorter:o,operationsSorter:a}=n();return c()(r=ne(e).sortBy(((e,t)=>t),((e,t)=>{let r="function"==typeof o?o:S.wh.tagsSorter[o];return r?r(e,t):null}))).call(r,((t,r)=>{let n="function"==typeof a?a:S.wh.operationsSorter[a],o=n?y()(t).call(t,n):t;return(0,A.Map)({tagDetails:re(e,r),operations:o})}))},ae=(0,_.P1)(C,(e=>e.get("responses",(0,A.Map)()))),ie=(0,_.P1)(C,(e=>e.get("requests",(0,A.Map)()))),se=(0,_.P1)(C,(e=>e.get("mutatedRequests",(0,A.Map)()))),le=(e,t,r)=>ae(e).getIn([t,r],null),ue=(e,t,r)=>ie(e).getIn([t,r],null),ce=(e,t,r)=>se(e).getIn([t,r],null),pe=()=>!0,fe=(e,t,r)=>{const n=D(e).getIn(["paths",...t,"parameters"],(0,A.OrderedMap)()),o=e.getIn(["meta","paths",...t,"parameters"],(0,A.OrderedMap)()),a=c()(n).call(n,(e=>{const t=o.get(`${r.get("in")}.${r.get("name")}`),n=o.get(`${r.get("in")}.${r.get("name")}.hash-${r.hashCode()}`);return(0,A.OrderedMap)().merge(e,t,n)}));return d()(a).call(a,(e=>e.get("in")===r.get("in")&&e.get("name")===r.get("name")),(0,A.OrderedMap)())},he=(e,t,r,n)=>{const o=`${n}.${r}`;return e.getIn(["meta","paths",...t,"parameter_inclusions",o],!1)},de=(e,t,r,n)=>{const o=D(e).getIn(["paths",...t,"parameters"],(0,A.OrderedMap)()),a=d()(o).call(o,(e=>e.get("in")===n&&e.get("name")===r),(0,A.OrderedMap)());return fe(e,t,a)},me=(e,t,r)=>{var n;const o=D(e).getIn(["paths",t,r],(0,A.OrderedMap)()),a=e.getIn(["meta","paths",t,r],(0,A.OrderedMap)()),i=c()(n=o.get("parameters",(0,A.List)())).call(n,(n=>fe(e,[t,r],n)));return(0,A.OrderedMap)().merge(o,a).set("parameters",i)};function ge(e,t,r,n){t=t||[];let o=e.getIn(["meta","paths",...t,"parameters"],(0,A.fromJS)([]));return d()(o).call(o,(e=>A.Map.isMap(e)&&e.get("name")===r&&e.get("in")===n))||(0,A.Map)()}const ve=(0,_.P1)(L,(e=>{const t=e.get("host");return"string"==typeof t&&t.length>0&&"/"!==t[0]}));function ye(e,t,r){t=t||[];let n=me(e,...t).get("parameters",(0,A.List)());return g()(n).call(n,((e,t)=>{let n=r&&"body"===t.get("in")?t.get("value_xml"):t.get("value");return e.set((0,S.V9)(t,{allowHashes:!1}),n)}),(0,A.fromJS)({}))}function be(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(A.List.isList(e))return w()(e).call(e,(e=>A.Map.isMap(e)&&e.get("in")===t))}function we(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(A.List.isList(e))return w()(e).call(e,(e=>A.Map.isMap(e)&&e.get("type")===t))}function Ee(e,t){t=t||[];let r=D(e).getIn(["paths",...t],(0,A.fromJS)({})),n=e.getIn(["meta","paths",...t],(0,A.fromJS)({})),o=xe(e,t);const a=r.get("parameters")||new A.List,i=n.get("consumes_value")?n.get("consumes_value"):we(a,"file")?"multipart/form-data":we(a,"formData")?"application/x-www-form-urlencoded":void 0;return(0,A.fromJS)({requestContentType:i,responseContentType:o})}function xe(e,t){t=t||[];const r=D(e).getIn(["paths",...t],null);if(null===r)return;const n=e.getIn(["meta","paths",...t,"produces_value"],null),o=r.getIn(["produces",0],null);return n||o||"application/json"}function _e(e,t){t=t||[];const r=D(e),n=r.getIn(["paths",...t],null);if(null===n)return;const[o]=t,a=n.get("produces",null),i=r.getIn(["paths",o,"produces"],null),s=r.getIn(["produces"],null);return a||i||s}function Se(e,t){t=t||[];const r=D(e),n=r.getIn(["paths",...t],null);if(null===n)return;const[o]=t,a=n.get("consumes",null),i=r.getIn(["paths",o,"consumes"],null),s=r.getIn(["consumes"],null);return a||i||s}const Ae=(e,t,r)=>{let n=e.get("url").match(/^([a-z][a-z0-9+\-.]*):/),o=x()(n)?n[1]:null;return e.getIn(["scheme",t,r])||e.getIn(["scheme","_defaultScheme"])||o||""},ke=(e,t,r)=>{var n;return l()(n=["http","https"]).call(n,Ae(e,t,r))>-1},Ce=(e,t)=>{t=t||[];let r=e.getIn(["meta","paths",...t,"parameters"],(0,A.fromJS)([])),n=!0;return i()(r).call(r,(e=>{let t=e.get("errors");t&&t.count()&&(n=!1)})),n},Oe=(e,t)=>{var r;let n={requestBody:!1,requestContentType:{}},o=e.getIn(["resolvedSubtrees","paths",...t,"requestBody"],(0,A.fromJS)([]));return o.size<1||(o.getIn(["required"])&&(n.requestBody=o.getIn(["required"])),i()(r=o.getIn(["content"]).entrySeq()).call(r,(e=>{const t=e[0];if(e[1].getIn(["schema","required"])){const r=e[1].getIn(["schema","required"]).toJS();n.requestContentType[t]=r}}))),n},je=(e,t,r,n)=>{if((r||n)&&r===n)return!0;let o=e.getIn(["resolvedSubtrees","paths",...t,"requestBody","content"],(0,A.fromJS)([]));if(o.size<2||!r||!n)return!1;let a=o.getIn([r,"schema","properties"],(0,A.fromJS)([])),i=o.getIn([n,"schema","properties"],(0,A.fromJS)([]));return!!a.equals(i)};function Ie(e){return A.Map.isMap(e)?e:new A.Map}},77508:(e,t,r)=>{"use strict";r.r(t),r.d(t,{updateSpec:()=>u,updateJsonSpec:()=>c,executeRequest:()=>p,validateParams:()=>f});var n=r(28222),o=r.n(n),a=r(86),i=r.n(a),s=r(27361),l=r.n(s);const u=(e,t)=>{let{specActions:r}=t;return function(){e(...arguments),r.parseToJson(...arguments)}},c=(e,t)=>{let{specActions:r}=t;return function(){for(var t=arguments.length,n=new Array(t),a=0;a{l()(u,[e]).$ref&&r.requestResolvedSubtree(["paths",e])})),r.requestResolvedSubtree(["components","securitySchemes"])}},p=(e,t)=>{let{specActions:r}=t;return t=>(r.logRequest(t),e(t))},f=(e,t)=>{let{specSelectors:r}=t;return t=>e(t,r.isOAS3())}},34852:(e,t,r)=>{"use strict";r.r(t),r.d(t,{loaded:()=>n});const n=(e,t)=>function(){e(...arguments);const r=t.getConfigs().withCredentials;void 0!==r&&(t.fn.fetch.withCredentials="string"==typeof r?"true"===r:!!r)}},48792:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>qr});var n={};r.r(n),r.d(n,{JsonPatchError:()=>Fe,_areEquals:()=>Ge,applyOperation:()=>$e,applyPatch:()=>We,applyReducer:()=>He,deepClone:()=>ze,getValueByPointer:()=>Ve,validate:()=>Ke,validator:()=>Je});var o={};r.r(o),r.d(o,{compare:()=>nt,generate:()=>tt,observe:()=>et,unobserve:()=>Xe});var a={};r.r(a),r.d(a,{cookie:()=>kr,header:()=>Ar,path:()=>xr,query:()=>_r});var i=r(80093),s=r.n(i),l=r(30222),u=r.n(l),c=r(36594),p=r.n(c),f=r(20474),h=r.n(f),d=r(67375),m=r.n(d),g=r(58118),v=r.n(g),y=r(74386),b=r.n(y),w=r(25110),E=r.n(w),x=r(35627),_=r.n(x),S=r(97606),A=r.n(S),k=r(28222),C=r.n(k),O=r(39022),j=r.n(O),I=r(2018),N=r.n(I),T=r(14418),P=r.n(T),R=(r(31905),r(92495)),M=r.n(R),D=r(1272);const L="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:window,{FormData:B,Blob:F,File:z}=L;var U=r(15687),q=r.n(U),V=r(24278),$=r.n(V),W=function(e){return":/?#[]@!$&'()*+,;=".indexOf(e)>-1},H=function(e){return/^[a-z0-9\-._~]+$/i.test(e)};function J(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=r.escape,o=arguments.length>2?arguments[2]:void 0;return"number"==typeof e&&(e=e.toString()),"string"==typeof e&&e.length&&n?o?JSON.parse(e):A()(t=q()(e)).call(t,(function(e){var t,r;if(H(e))return e;if(W(e)&&"unsafe"===n)return e;var o=new TextEncoder;return A()(t=A()(r=E()(o.encode(e))).call(r,(function(e){var t;return $()(t="0".concat(e.toString(16).toUpperCase())).call(t,-2)}))).call(t,(function(e){return"%".concat(e)})).join("")})).join(""):e}function K(e){var t=e.value;return Array.isArray(t)?function(e){var t=e.key,r=e.value,n=e.style,o=e.explode,a=e.escape,i=function(e){return J(e,{escape:a})};if("simple"===n)return A()(r).call(r,(function(e){return i(e)})).join(",");if("label"===n)return".".concat(A()(r).call(r,(function(e){return i(e)})).join("."));if("matrix"===n)return A()(r).call(r,(function(e){return i(e)})).reduce((function(e,r){var n,a,i;return!e||o?j()(a=j()(i="".concat(e||"",";")).call(i,t,"=")).call(a,r):j()(n="".concat(e,",")).call(n,r)}),"");if("form"===n){var s=o?"&".concat(t,"="):",";return A()(r).call(r,(function(e){return i(e)})).join(s)}if("spaceDelimited"===n){var l=o?"".concat(t,"="):"";return A()(r).call(r,(function(e){return i(e)})).join(" ".concat(l))}if("pipeDelimited"===n){var u=o?"".concat(t,"="):"";return A()(r).call(r,(function(e){return i(e)})).join("|".concat(u))}return}(e):"object"===h()(t)?function(e){var t=e.key,r=e.value,n=e.style,o=e.explode,a=e.escape,i=function(e){return J(e,{escape:a})},s=C()(r);if("simple"===n)return s.reduce((function(e,t){var n,a,s,l=i(r[t]),u=o?"=":",",c=e?"".concat(e,","):"";return j()(n=j()(a=j()(s="".concat(c)).call(s,t)).call(a,u)).call(n,l)}),"");if("label"===n)return s.reduce((function(e,t){var n,a,s,l=i(r[t]),u=o?"=":".",c=e?"".concat(e,"."):".";return j()(n=j()(a=j()(s="".concat(c)).call(s,t)).call(a,u)).call(n,l)}),"");if("matrix"===n&&o)return s.reduce((function(e,t){var n,o,a=i(r[t]),s=e?"".concat(e,";"):";";return j()(n=j()(o="".concat(s)).call(o,t,"=")).call(n,a)}),"");if("matrix"===n)return s.reduce((function(e,n){var o,a,s=i(r[n]),l=e?"".concat(e,","):";".concat(t,"=");return j()(o=j()(a="".concat(l)).call(a,n,",")).call(o,s)}),"");if("form"===n)return s.reduce((function(e,t){var n,a,s,l,u=i(r[t]),c=e?j()(n="".concat(e)).call(n,o?"&":","):"",p=o?"=":",";return j()(a=j()(s=j()(l="".concat(c)).call(l,t)).call(s,p)).call(a,u)}),"");return}(e):function(e){var t,r=e.key,n=e.value,o=e.style,a=e.escape,i=function(e){return J(e,{escape:a})};if("simple"===o)return i(n);if("label"===o)return".".concat(i(n));if("matrix"===o)return j()(t=";".concat(r,"=")).call(t,i(n));if("form"===o)return i(n);if("deepObject"===o)return i(n,{},!0);return}(e)}const G=function(e,t){t.body=e};var Z={serializeRes:te,mergeInQueryOrForm:fe};function Y(e){return Q.apply(this,arguments)}function Q(){return Q=s()(u().mark((function e(t){var r,n,o,a,i,s=arguments;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=s.length>1&&void 0!==s[1]?s[1]:{},"object"===h()(t)&&(t=(r=t).url),r.headers=r.headers||{},Z.mergeInQueryOrForm(r),r.headers&&C()(r.headers).forEach((function(e){var t=r.headers[e];"string"==typeof t&&(r.headers[e]=t.replace(/\n+/g," "))})),!r.requestInterceptor){e.next=12;break}return e.next=8,r.requestInterceptor(r);case 8:if(e.t0=e.sent,e.t0){e.next=11;break}e.t0=r;case 11:r=e.t0;case 12:return n=r.headers["content-type"]||r.headers["Content-Type"],/multipart\/form-data/i.test(n)&&r.body instanceof B&&(delete r.headers["content-type"],delete r.headers["Content-Type"]),e.prev=14,e.next=17,(r.userFetch||fetch)(r.url,r);case 17:return o=e.sent,e.next=20,Z.serializeRes(o,t,r);case 20:if(o=e.sent,!r.responseInterceptor){e.next=28;break}return e.next=24,r.responseInterceptor(o);case 24:if(e.t1=e.sent,e.t1){e.next=27;break}e.t1=o;case 27:o=e.t1;case 28:e.next=39;break;case 30:if(e.prev=30,e.t2=e.catch(14),o){e.next=34;break}throw e.t2;case 34:throw(a=new Error(o.statusText||"response status is ".concat(o.status))).status=o.status,a.statusCode=o.status,a.responseError=e.t2,a;case 39:if(o.ok){e.next=45;break}throw(i=new Error(o.statusText||"response status is ".concat(o.status))).status=o.status,i.statusCode=o.status,i.response=o,i;case 45:return e.abrupt("return",o);case 46:case"end":return e.stop()}}),e,null,[[14,30]])}))),Q.apply(this,arguments)}var X=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return/(json|xml|yaml|text)\b/.test(e)};function ee(e,t){return t&&(0===t.indexOf("application/json")||t.indexOf("+json")>0)?JSON.parse(e):D.ZP.load(e)}function te(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=r.loadSpec,o=void 0!==n&&n,a={ok:e.ok,url:e.url||t,status:e.status,statusText:e.statusText,headers:ne(e.headers)},i=a.headers["content-type"],s=o||X(i),l=s?e.text:e.blob||e.buffer;return l.call(e).then((function(e){if(a.text=e,a.data=e,s)try{var t=ee(e,i);a.body=t,a.obj=t}catch(e){a.parseError=e}return a}))}function re(e){return v()(e).call(e,", ")?e.split(", "):e}function ne(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return"function"!=typeof b()(e)?{}:E()(b()(e).call(e)).reduce((function(e,t){var r=m()(t,2),n=r[0],o=r[1];return e[n]=re(o),e}),{})}function oe(e,t){return t||"undefined"==typeof navigator||(t=navigator),t&&"ReactNative"===t.product?!(!e||"object"!==h()(e)||"string"!=typeof e.uri):void 0!==z&&e instanceof z||(void 0!==F&&e instanceof F||(!!ArrayBuffer.isView(e)||null!==e&&"object"===h()(e)&&"function"==typeof e.pipe))}function ae(e,t){return Array.isArray(e)&&e.some((function(e){return oe(e,t)}))}var ie={form:",",spaceDelimited:"%20",pipeDelimited:"|"},se={csv:",",ssv:"%20",tsv:"%09",pipes:"|"};function le(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=t.collectionFormat,o=t.allowEmptyValue,a=t.serializationOption,i=t.encoding,s="object"!==h()(t)||Array.isArray(t)?t:t.value,l=r?function(e){return e.toString()}:function(e){return encodeURIComponent(e)},u=l(e);if(void 0===s&&o)return[[u,""]];if(oe(s)||ae(s))return[[u,s]];if(a)return ue(e,s,r,a);if(i){if([h()(i.style),h()(i.explode),h()(i.allowReserved)].some((function(e){return"undefined"!==e}))){var c=i.style,p=i.explode,f=i.allowReserved;return ue(e,s,r,{style:c,explode:p,allowReserved:f})}if(i.contentType){if("application/json"===i.contentType){var d="string"==typeof s?s:_()(s);return[[u,l(d)]]}return[[u,l(s.toString())]]}return"object"!==h()(s)?[[u,l(s)]]:Array.isArray(s)&&s.every((function(e){return"object"!==h()(e)}))?[[u,A()(s).call(s,l).join(",")]]:[[u,l(_()(s))]]}return"object"!==h()(s)?[[u,l(s)]]:Array.isArray(s)?"multi"===n?[[u,A()(s).call(s,l)]]:[[u,A()(s).call(s,l).join(se[n||"csv"])]]:[[u,""]]}function ue(e,t,r,n){var o,a,i,s=n.style||"form",l=void 0===n.explode?"form"===s:n.explode,u=!r&&(n&&n.allowReserved?"unsafe":"reserved"),c=function(e){return J(e,{escape:u})},p=r?function(e){return e}:function(e){return J(e,{escape:u})};return"object"!==h()(t)?[[p(e),c(t)]]:Array.isArray(t)?l?[[p(e),A()(t).call(t,c)]]:[[p(e),A()(t).call(t,c).join(ie[s])]]:"deepObject"===s?A()(a=C()(t)).call(a,(function(r){var n;return[p(j()(n="".concat(e,"[")).call(n,r,"]")),c(t[r])]})):l?A()(i=C()(t)).call(i,(function(e){return[p(e),c(t[e])]})):[[p(e),A()(o=C()(t)).call(o,(function(e){var r;return[j()(r="".concat(p(e),",")).call(r,c(t[e]))]})).join(",")]]}function ce(e){return N()(e).reduce((function(e,t){var r,n=m()(t,2),o=n[0],a=n[1],i=p()(le(o,a,!0));try{for(i.s();!(r=i.n()).done;){var s=m()(r.value,2),l=s[0],u=s[1];if(Array.isArray(u)){var c,f=p()(u);try{for(f.s();!(c=f.n()).done;){var h=c.value;if(ArrayBuffer.isView(h)){var d=new F([h]);e.append(l,d)}else e.append(l,h)}}catch(e){f.e(e)}finally{f.f()}}else if(ArrayBuffer.isView(u)){var g=new F([u]);e.append(l,g)}else e.append(l,u)}}catch(e){i.e(e)}finally{i.f()}return e}),new B)}function pe(e){var t=C()(e).reduce((function(t,r){var n,o=p()(le(r,e[r]));try{for(o.s();!(n=o.n()).done;){var a=m()(n.value,2),i=a[0],s=a[1];t[i]=s}}catch(e){o.e(e)}finally{o.f()}return t}),{});return M().stringify(t,{encode:!1,indices:!1})||""}function fe(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.url,r=void 0===t?"":t,n=e.query,o=e.form,a=function(){for(var e=arguments.length,t=new Array(e),r=0;r=48&&t<=57))return!1;r++}return!0}function Re(e){return-1===e.indexOf("/")&&-1===e.indexOf("~")?e:e.replace(/~/g,"~0").replace(/\//g,"~1")}function Me(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function De(e){if(void 0===e)return!0;if(e)if(Array.isArray(e)){for(var t=0,r=e.length;t0&&"constructor"==s[u-1]))throw new TypeError("JSON-Patch: modifying `__proto__` or `constructor/prototype` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README");if(r&&void 0===p&&(void 0===l[f]?p=s.slice(0,u).join("/"):u==c-1&&(p=t.path),void 0!==p&&h(t,0,e,p)),u++,Array.isArray(l)){if("-"===f)f=l.length;else{if(r&&!Pe(f))throw new Fe("Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index","OPERATION_PATH_ILLEGAL_ARRAY_INDEX",a,t,e);Pe(f)&&(f=~~f)}if(u>=c){if(r&&"add"===t.op&&f>l.length)throw new Fe("The specified index MUST NOT be greater than the number of elements in the array","OPERATION_VALUE_OUT_OF_BOUNDS",a,t,e);if(!1===(i=qe[t.op].call(t,l,f,e)).test)throw new Fe("Test operation failed","TEST_OPERATION_FAILED",a,t,e);return i}}else if(u>=c){if(!1===(i=Ue[t.op].call(t,l,f,e)).test)throw new Fe("Test operation failed","TEST_OPERATION_FAILED",a,t,e);return i}if(l=l[f],r&&u0)throw new Fe('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",t,e,r);if(("move"===e.op||"copy"===e.op)&&"string"!=typeof e.from)throw new Fe("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",t,e,r);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&void 0===e.value)throw new Fe("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",t,e,r);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&De(e.value))throw new Fe("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED",t,e,r);if(r)if("add"==e.op){var o=e.path.split("/").length,a=n.split("/").length;if(o!==a+1&&o!==a)throw new Fe("Cannot perform an `add` operation at the desired path","OPERATION_PATH_CANNOT_ADD",t,e,r)}else if("replace"===e.op||"remove"===e.op||"_get"===e.op){if(e.path!==n)throw new Fe("Cannot perform the operation at a path that does not exist","OPERATION_PATH_UNRESOLVABLE",t,e,r)}else if("move"===e.op||"copy"===e.op){var i=Ke([{op:"_get",path:e.from,value:void 0}],r);if(i&&"OPERATION_PATH_UNRESOLVABLE"===i.name)throw new Fe("Cannot perform the operation from a path that does not exist","OPERATION_FROM_UNRESOLVABLE",t,e,r)}}function Ke(e,t,r){try{if(!Array.isArray(e))throw new Fe("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");if(t)We(Te(t),Te(e),r||!0);else{r=r||Je;for(var n=0;n0&&(e.patches=[],e.callback&&e.callback(n)),n}function rt(e,t,r,n,o){if(t!==e){"function"==typeof t.toJSON&&(t=t.toJSON());for(var a=Ne(t),i=Ne(e),s=!1,l=i.length-1;l>=0;l--){var u=e[p=i[l]];if(!Ie(t,p)||void 0===t[p]&&void 0!==u&&!1===Array.isArray(t))Array.isArray(e)===Array.isArray(t)?(o&&r.push({op:"test",path:n+"/"+Re(p),value:Te(u)}),r.push({op:"remove",path:n+"/"+Re(p)}),s=!0):(o&&r.push({op:"test",path:n,value:e}),r.push({op:"replace",path:n,value:t}),!0);else{var c=t[p];"object"==typeof u&&null!=u&&"object"==typeof c&&null!=c&&Array.isArray(u)===Array.isArray(c)?rt(u,c,r,n+"/"+Re(p),o):u!==c&&(!0,o&&r.push({op:"test",path:n+"/"+Re(p),value:Te(u)}),r.push({op:"replace",path:n+"/"+Re(p),value:Te(c)}))}}if(s||a.length!=i.length)for(l=0;l0){var o=t(e,r[r.length-1],r);o&&(n=j()(n).call(n,o))}if(Array.isArray(e)){var a=A()(e).call(e,(function(e,n){return pt(e,t,j()(r).call(r,n))}));a&&(n=j()(n).call(n,a))}else if(mt(e)){var i,s=A()(i=C()(e)).call(i,(function(n){return pt(e[n],t,j()(r).call(r,n))}));s&&(n=j()(n).call(n,s))}return n=ht(n)}function ft(e){return Array.isArray(e)?e:[e]}function ht(e){var t;return j()(t=[]).apply(t,q()(A()(e).call(e,(function(e){return Array.isArray(e)?ht(e):e}))))}function dt(e){return P()(e).call(e,(function(e){return void 0!==e}))}function mt(e){return e&&"object"===h()(e)}function gt(e){return e&&"function"==typeof e}function vt(e){if(wt(e)){var t=e.op;return"add"===t||"remove"===t||"replace"===t}return!1}function yt(e){return vt(e)||wt(e)&&"mutation"===e.type}function bt(e){return yt(e)&&("add"===e.op||"replace"===e.op||"merge"===e.op||"mergeDeep"===e.op)}function wt(e){return e&&"object"===h()(e)}function Et(e,t){try{return Ve(e,t)}catch(e){return console.error(e),{}}}var xt=r(28886),_t=r.n(xt),St=r(37659),At=r.n(St),kt=r(8575);function Ct(e,t){function r(){Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack;for(var e=arguments.length,r=new Array(e),n=0;n-1&&-1===Nt.indexOf(r)||Tt.indexOf(n)>-1||Pt.some((function(e){return n.indexOf(e)>-1}))}function Mt(e,t){var r,n=e.split("#"),o=m()(n,2),a=o[0],i=o[1],s=kt.resolve(a||"",t||"");return i?j()(r="".concat(s,"#")).call(r,i):s}var Dt="application/json, application/yaml",Lt=/^([a-z]+:\/\/|\/\/)/i,Bt=Ct("JSONRefError",(function(e,t,r){this.originalError=r,Ee()(this,t||{})})),Ft={},zt=new(_t()),Ut=[function(e){return"paths"===e[0]&&"responses"===e[3]&&"examples"===e[5]},function(e){return"paths"===e[0]&&"responses"===e[3]&&"content"===e[5]&&"example"===e[7]},function(e){return"paths"===e[0]&&"responses"===e[3]&&"content"===e[5]&&"examples"===e[7]&&"value"===e[9]},function(e){return"paths"===e[0]&&"requestBody"===e[3]&&"content"===e[4]&&"example"===e[6]},function(e){return"paths"===e[0]&&"requestBody"===e[3]&&"content"===e[4]&&"examples"===e[6]&&"value"===e[8]},function(e){return"paths"===e[0]&&"parameters"===e[2]&&"example"===e[4]},function(e){return"paths"===e[0]&&"parameters"===e[3]&&"example"===e[5]},function(e){return"paths"===e[0]&&"parameters"===e[2]&&"examples"===e[4]&&"value"===e[6]},function(e){return"paths"===e[0]&&"parameters"===e[3]&&"examples"===e[5]&&"value"===e[7]},function(e){return"paths"===e[0]&&"parameters"===e[2]&&"content"===e[4]&&"example"===e[6]},function(e){return"paths"===e[0]&&"parameters"===e[2]&&"content"===e[4]&&"examples"===e[6]&&"value"===e[8]},function(e){return"paths"===e[0]&&"parameters"===e[3]&&"content"===e[4]&&"example"===e[7]},function(e){return"paths"===e[0]&&"parameters"===e[3]&&"content"===e[5]&&"examples"===e[7]&&"value"===e[9]}],qt={key:"$ref",plugin:function(e,t,r,n){var o=n.getInstance(),a=$()(r).call(r,0,-1);if(!Rt(a)&&!function(e){return Ut.some((function(t){return t(e)}))}(a)){var i=n.getContext(r).baseDoc;if("string"!=typeof e)return new Bt("$ref: must be a string (JSON-Ref)",{$ref:e,baseDoc:i,fullPath:r});var s,l,u,c=Jt(e),p=c[0],f=c[1]||"";try{s=i||p?Wt(p,i):null}catch(t){return Ht(t,{pointer:f,$ref:e,basePath:s,fullPath:r})}if(function(e,t,r,n){var o,a,i=zt.get(n);i||(i={},zt.set(n,i));var s=function(e){if(0===e.length)return"";return"/".concat(A()(e).call(e,Xt).join("/"))}(r),l=j()(o="".concat(t||"","#")).call(o,e),u=s.replace(/allOf\/\d+\/?/g,""),c=n.contextTree.get([]).baseDoc;if(t===c&&er(u,e))return!0;var p="",f=r.some((function(e){var t;return p=j()(t="".concat(p,"/")).call(t,Xt(e)),i[p]&&i[p].some((function(e){return er(e,l)||er(l,e)}))}));if(f)return!0;return void(i[u]=j()(a=i[u]||[]).call(a,l))}(f,s,a,n)&&!o.useCircularStructures){var h=Mt(e,s);return e===h?null:it.replace(r,h)}if(null==s?(u=Yt(f),void 0===(l=n.get(u))&&(l=new Bt("Could not resolve reference: ".concat(e),{pointer:f,$ref:e,baseDoc:i,fullPath:r}))):l=null!=(l=Kt(s,f)).__value?l.__value:l.catch((function(t){throw Ht(t,{pointer:f,$ref:e,baseDoc:i,fullPath:r})})),l instanceof Error)return[it.remove(r),l];var d=Mt(e,s),m=it.replace(a,l,{$$ref:d});if(s&&s!==i)return[m,it.context(a,{baseDoc:s})];try{if(!function(e,t){var r=[e];return t.path.reduce((function(e,t){return r.push(e[t]),e[t]}),e),n(t.value);function n(e){return it.isObject(e)&&(r.indexOf(e)>=0||C()(e).some((function(t){return n(e[t])})))}}(n.state,m)||o.useCircularStructures)return m}catch(e){return null}}}},Vt=Ee()(qt,{docCache:Ft,absoluteify:Wt,clearCache:function(e){void 0!==e?delete Ft[e]:C()(Ft).forEach((function(e){delete Ft[e]}))},JSONRefError:Bt,wrapError:Ht,getDoc:Gt,split:Jt,extractFromDoc:Kt,fetchJSON:function(e){return fetch(e,{headers:{Accept:Dt},loadSpec:!0}).then((function(e){return e.text()})).then((function(e){return D.ZP.load(e)}))},extract:Zt,jsonPointerToArray:Yt,unescapeJsonPointerToken:Qt});const $t=Vt;function Wt(e,t){if(!Lt.test(e)){var r;if(!t)throw new Bt(j()(r="Tried to resolve a relative URL, without having a basePath. path: '".concat(e,"' basePath: '")).call(r,t,"'"));return kt.resolve(t,e)}return e}function Ht(e,t){var r,n;e&&e.response&&e.response.body?r=j()(n="".concat(e.response.body.code," ")).call(n,e.response.body.message):r=e.message;return new Bt("Could not resolve reference: ".concat(r),t,e)}function Jt(e){return(e+"").split("#")}function Kt(e,t){var r=Ft[e];if(r&&!it.isPromise(r))try{var n=Zt(t,r);return Ee()(Ae().resolve(n),{__value:n})}catch(e){return Ae().reject(e)}return Gt(e).then((function(e){return Zt(t,e)}))}function Gt(e){var t=Ft[e];return t?it.isPromise(t)?t:Ae().resolve(t):(Ft[e]=Vt.fetchJSON(e).then((function(t){return Ft[e]=t,t})),Ft[e])}function Zt(e,t){var r=Yt(e);if(r.length<1)return t;var n=it.getIn(t,r);if(void 0===n)throw new Bt("Could not resolve pointer: ".concat(e," does not exist in document"),{pointer:e});return n}function Yt(e){var t;if("string"!=typeof e)throw new TypeError("Expected a string, got a ".concat(h()(e)));return"/"===e[0]&&(e=e.substr(1)),""===e?[]:A()(t=e.split("/")).call(t,Qt)}function Qt(e){return"string"!=typeof e?e:new(At())("=".concat(e.replace(/~1/g,"/").replace(/~0/g,"~"))).get("")}function Xt(e){var t,r=new(At())([["",e.replace(/~/g,"~0").replace(/\//g,"~1")]]);return $()(t=r.toString()).call(t,1)}function er(e,t){if(!(r=t)||"/"===r||"#"===r)return!0;var r,n=e.charAt(t.length),o=$()(t).call(t,-1);return 0===e.indexOf(t)&&(!n||"/"===n||"#"===n)&&"#"!==o}const tr={key:"allOf",plugin:function(e,t,r,n,o){if(!o.meta||!o.meta.$$ref){var a=$()(r).call(r,0,-1);if(!Rt(a)){if(!Array.isArray(e)){var i=new TypeError("allOf must be an array");return i.fullPath=r,i}var s=!1,l=o.value;if(a.forEach((function(e){l&&(l=l[e])})),l=me()({},l),0!==C()(l).length){delete l.allOf;var u,c,p=[];if(p.push(n.replace(a,{})),e.forEach((function(e,t){if(!n.isObject(e)){if(s)return null;s=!0;var o=new TypeError("Elements in allOf must be objects");return o.fullPath=r,p.push(o)}p.push(n.mergeDeep(a,e));var i=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=r.specmap,o=r.getBaseUrlForNodePath,a=void 0===o?function(e){var r;return n.getContext(j()(r=[]).call(r,q()(t),q()(e))).baseDoc}:o,i=r.targetKeys,s=void 0===i?["$ref","$$ref"]:i,l=[];return jt()(e).forEach((function(){if(v()(s).call(s,this.key)&&"string"==typeof this.node){var e=this.path,r=j()(t).call(t,this.path),o=Mt(this.node,a(e));l.push(n.replace(r,o))}})),l}(e,$()(r).call(r,0,-1),{getBaseUrlForNodePath:function(e){var o;return n.getContext(j()(o=[]).call(o,q()(r),[t],q()(e))).baseDoc},specmap:n});p.push.apply(p,q()(i))})),l.example)p.push(n.remove(j()(u=[]).call(u,a,"example")));if(p.push(n.mergeDeep(a,l)),!l.$$ref)p.push(n.remove(j()(c=[]).call(c,a,"$$ref")));return p}}}}},rr={key:"parameters",plugin:function(e,t,r,n){if(Array.isArray(e)&&e.length){var o=Ee()([],e),a=$()(r).call(r,0,-1),i=me()({},it.getIn(n.spec,a));return e.forEach((function(e,t){try{o[t].default=n.parameterMacro(i,e)}catch(e){var a=new Error(e);return a.fullPath=r,a}})),it.replace(r,o)}return it.replace(r,e)}},nr={key:"properties",plugin:function(e,t,r,n){var o=me()({},e);for(var a in e)try{o[a].default=n.modelPropertyMacro(o[a])}catch(e){var i=new Error(e);return i.fullPath=r,i}return it.replace(r,o)}};var or=function(){function e(t){ve()(this,e),this.root=ar(t||{})}return be()(e,[{key:"set",value:function(e,t){var r=this.getParent(e,!0);if(r){var n=e[e.length-1],o=r.children;o[n]?ir(o[n],t,r):o[n]=ar(t,r)}else ir(this.root,t,null)}},{key:"get",value:function(e){if((e=e||[]).length<1)return this.root.value;for(var t,r,n=this.root,o=0;o1?r-1:0),o=1;o1?n-1:0),a=1;a0}))}},{key:"nextPromisedPatch",value:function(){var e;if(this.promisedPatches.length>0)return Ae().race(A()(e=this.promisedPatches).call(e,(function(e){return e.value})))}},{key:"getPluginHistory",value:function(e){var t=this.constructor.getPluginName(e);return this.pluginHistory[t]||[]}},{key:"getPluginRunCount",value:function(e){return this.getPluginHistory(e).length}},{key:"getPluginHistoryTip",value:function(e){var t=this.getPluginHistory(e);return t&&t[t.length-1]||{}}},{key:"getPluginMutationIndex",value:function(e){var t=this.getPluginHistoryTip(e).mutationIndex;return"number"!=typeof t?-1:t}},{key:"updatePluginHistory",value:function(e,t){var r=this.constructor.getPluginName(e);this.pluginHistory[r]=this.pluginHistory[r]||[],this.pluginHistory[r].push(t)}},{key:"updatePatches",value:function(e){var t=this;it.normalizeArray(e).forEach((function(e){if(e instanceof Error)t.errors.push(e);else try{if(!it.isObject(e))return void t.debug("updatePatches","Got a non-object patch",e);if(t.showDebug&&t.allPatches.push(e),it.isPromise(e.value))return t.promisedPatches.push(e),void t.promisedPatchThen(e);if(it.isContextPatch(e))return void t.setContext(e.path,e.value);if(it.isMutation(e))return void t.updateMutations(e)}catch(e){console.error(e),t.errors.push(e)}}))}},{key:"updateMutations",value:function(e){"object"===h()(e.value)&&!Array.isArray(e.value)&&this.allowMetaPatches&&(e.value=me()({},e.value));var t=it.applyPatch(this.state,e,{allowMetaPatches:this.allowMetaPatches});t&&(this.mutations.push(e),this.state=t)}},{key:"removePromisedPatch",value:function(e){var t,r=this.promisedPatches.indexOf(e);r<0?this.debug("Tried to remove a promisedPatch that isn't there!"):Ce()(t=this.promisedPatches).call(t,r,1)}},{key:"promisedPatchThen",value:function(e){var t=this;return e.value=e.value.then((function(r){var n=me()(me()({},e),{},{value:r});t.removePromisedPatch(e),t.updatePatches(n)})).catch((function(r){t.removePromisedPatch(e),t.updatePatches(r)})),e.value}},{key:"getMutations",value:function(e,t){var r;return e=e||0,"number"!=typeof t&&(t=this.mutations.length),$()(r=this.mutations).call(r,e,t)}},{key:"getCurrentMutations",value:function(){return this.getMutationsForPlugin(this.getCurrentPlugin())}},{key:"getMutationsForPlugin",value:function(e){var t=this.getPluginMutationIndex(e);return this.getMutations(t+1)}},{key:"getCurrentPlugin",value:function(){return this.currentPlugin}},{key:"getLib",value:function(){return this.libMethods}},{key:"_get",value:function(e){return it.getIn(this.state,e)}},{key:"_getContext",value:function(e){return this.contextTree.get(e)}},{key:"setContext",value:function(e,t){return this.contextTree.set(e,t)}},{key:"_hasRun",value:function(e){return this.getPluginRunCount(this.getCurrentPlugin())>(e||0)}},{key:"dispatch",value:function(){var e,t=this,r=this,n=this.nextPlugin();if(!n){var o=this.nextPromisedPatch();if(o)return o.then((function(){return t.dispatch()})).catch((function(){return t.dispatch()}));var a={spec:this.state,errors:this.errors};return this.showDebug&&(a.patches=this.allPatches),Ae().resolve(a)}if(r.pluginCount=r.pluginCount||{},r.pluginCount[n]=(r.pluginCount[n]||0)+1,r.pluginCount[n]>100)return Ae().resolve({spec:r.state,errors:j()(e=r.errors).call(e,new Error("We've reached a hard limit of ".concat(100," plugin runs")))});if(n!==this.currentPlugin&&this.promisedPatches.length){var i,s=A()(i=this.promisedPatches).call(i,(function(e){return e.value}));return Ae().all(A()(s).call(s,(function(e){return e.then(sr,sr)}))).then((function(){return t.dispatch()}))}return function(){r.currentPlugin=n;var e=r.getCurrentMutations(),t=r.mutations.length-1;try{if(n.isGenerator){var o,a=p()(n(e,r.getLib()));try{for(a.s();!(o=a.n()).done;){l(o.value)}}catch(e){a.e(e)}finally{a.f()}}else{l(n(e,r.getLib()))}}catch(e){console.error(e),l([Ee()(Object.create(e),{plugin:n})])}finally{r.updatePluginHistory(n,{mutationIndex:t})}return r.dispatch()}();function l(e){e&&(e=it.fullyNormalizeArray(e),r.updatePatches(e,n))}}}],[{key:"getPluginName",value:function(e){return e.pluginName}},{key:"getPatchesOfType",value:function(e,t){return P()(e).call(e,t)}}]),e}();var ur={refs:$t,allOf:tr,parameters:rr,properties:nr},cr=r(23159);function pr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.requestInterceptor,n=t.responseInterceptor,o=e.withCredentials?"include":"same-origin";return function(t){return e({url:t,loadSpec:!0,requestInterceptor:r,responseInterceptor:n,headers:{Accept:Dt},credentials:o}).then((function(e){return e.body}))}}function fr(e){var t=e.fetch,r=e.spec,n=e.url,o=e.mode,a=e.allowMetaPatches,i=void 0===a||a,l=e.pathDiscriminator,c=e.modelPropertyMacro,p=e.parameterMacro,f=e.requestInterceptor,h=e.responseInterceptor,d=e.skipNormalization,m=e.useCircularStructures,g=e.http,v=e.baseDoc;return v=v||n,g=t||g||Y,r?y(r):pr(g,{requestInterceptor:f,responseInterceptor:h})(v).then(y);function y(e){v&&(ur.refs.docCache[v]=e),ur.refs.fetchJSON=pr(g,{requestInterceptor:f,responseInterceptor:h});var t,r=[ur.refs];return"function"==typeof p&&r.push(ur.parameters),"function"==typeof c&&r.push(ur.properties),"strict"!==o&&r.push(ur.allOf),(t={spec:e,context:{baseDoc:v},plugins:r,allowMetaPatches:i,pathDiscriminator:l,parameterMacro:p,modelPropertyMacro:c,useCircularStructures:m},new lr(t).dispatch()).then(d?function(){var e=s()(u().mark((function e(t){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",t);case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}():cr.K1)}}var hr=r(88436),dr=r.n(hr),mr=r(27361),gr=r.n(mr),vr=r(30006);function yr(e){return"[object Object]"===Object.prototype.toString.call(e)}function br(e){var t,r;return!1!==yr(e)&&(void 0===(t=e.constructor)||!1!==yr(r=t.prototype)&&!1!==r.hasOwnProperty("isPrototypeOf"))}const wr={body:function(e){var t=e.req,r=e.value;t.body=r},header:function(e){var t=e.req,r=e.parameter,n=e.value;t.headers=t.headers||{},void 0!==n&&(t.headers[r.name]=n)},query:function(e){var t=e.req,r=e.value,n=e.parameter;t.query=t.query||{},!1===r&&"boolean"===n.type&&(r="false");0===r&&["number","integer"].indexOf(n.type)>-1&&(r="0");if(r)t.query[n.name]={collectionFormat:n.collectionFormat,value:r};else if(n.allowEmptyValue&&void 0!==r){var o=n.name;t.query[o]=t.query[o]||{},t.query[o].allowEmptyValue=!0}},path:function(e){var t=e.req,r=e.value,n=e.parameter;t.url=t.url.split("{".concat(n.name,"}")).join(encodeURIComponent(r))},formData:function(e){var t=e.req,r=e.value,n=e.parameter;(r||n.allowEmptyValue)&&(t.form=t.form||{},t.form[n.name]={value:r,allowEmptyValue:n.allowEmptyValue,collectionFormat:n.collectionFormat})}};function Er(e,t){return v()(t).call(t,"application/json")?"string"==typeof e?e:_()(e):e.toString()}function xr(e){var t=e.req,r=e.value,n=e.parameter,o=n.name,a=n.style,i=n.explode,s=n.content;if(s){var l=C()(s)[0];t.url=t.url.split("{".concat(o,"}")).join(J(Er(r,l),{escape:!0}))}else{var u=K({key:n.name,value:r,style:a||"simple",explode:i||!1,escape:!0});t.url=t.url.split("{".concat(o,"}")).join(u)}}function _r(e){var t=e.req,r=e.value,n=e.parameter;if(t.query=t.query||{},n.content){var o=C()(n.content)[0];t.query[n.name]=Er(r,o)}else if(!1===r&&(r="false"),0===r&&(r="0"),r){var a=n.style,i=n.explode,s=n.allowReserved;t.query[n.name]={value:r,serializationOption:{style:a,explode:i,allowReserved:s}}}else if(n.allowEmptyValue&&void 0!==r){var l=n.name;t.query[l]=t.query[l]||{},t.query[l].allowEmptyValue=!0}}var Sr=["accept","authorization","content-type"];function Ar(e){var t=e.req,r=e.parameter,n=e.value;if(t.headers=t.headers||{},!(Sr.indexOf(r.name.toLowerCase())>-1))if(r.content){var o=C()(r.content)[0];t.headers[r.name]=Er(n,o)}else void 0!==n&&(t.headers[r.name]=K({key:r.name,value:n,style:r.style||"simple",explode:void 0!==r.explode&&r.explode,escape:!1}))}function kr(e){var t=e.req,r=e.parameter,n=e.value;t.headers=t.headers||{};var o=h()(n);if(r.content){var a,i=C()(r.content)[0];t.headers.Cookie=j()(a="".concat(r.name,"=")).call(a,Er(n,i))}else if("undefined"!==o){var s="object"===o&&!Array.isArray(n)&&r.explode?"":"".concat(r.name,"=");t.headers.Cookie=s+K({key:r.name,value:n,escape:!1,style:r.style||"form",explode:void 0!==r.explode&&r.explode})}}var Cr=r(92381),Or=r.n(Cr);const jr=(void 0!==Or()?Or():"undefined"!=typeof self?self:window).btoa;function Ir(e,t){var r=e.operation,n=e.requestBody,o=e.securities,a=e.spec,i=e.attachContentTypeForEmptyPayload,s=e.requestContentType;t=function(e){var t=e.request,r=e.securities,n=void 0===r?{}:r,o=e.operation,a=void 0===o?{}:o,i=e.spec,s=me()({},t),l=n.authorized,u=void 0===l?{}:l,c=a.security||i.security||[],p=u&&!!C()(u).length,f=gr()(i,["components","securitySchemes"])||{};if(s.headers=s.headers||{},s.query=s.query||{},!C()(n).length||!p||!c||Array.isArray(a.security)&&!a.security.length)return t;return c.forEach((function(e){C()(e).forEach((function(e){var t=u[e],r=f[e];if(t){var n=t.value||t,o=r.type;if(t)if("apiKey"===o)"query"===r.in&&(s.query[r.name]=n),"header"===r.in&&(s.headers[r.name]=n),"cookie"===r.in&&(s.cookies[r.name]=n);else if("http"===o){if(/^basic$/i.test(r.scheme)){var a,i=n.username||"",l=n.password||"",c=jr(j()(a="".concat(i,":")).call(a,l));s.headers.Authorization="Basic ".concat(c)}/^bearer$/i.test(r.scheme)&&(s.headers.Authorization="Bearer ".concat(n))}else if("oauth2"===o||"openIdConnect"===o){var p,h=t.token||{},d=h[r["x-tokenName"]||"access_token"],m=h.token_type;m&&"bearer"!==m.toLowerCase()||(m="Bearer"),s.headers.Authorization=j()(p="".concat(m," ")).call(p,d)}}}))})),s}({request:t,securities:o,operation:r,spec:a});var l=r.requestBody||{},u=C()(l.content||{}),c=s&&u.indexOf(s)>-1;if(n||i){if(s&&c)t.headers["Content-Type"]=s;else if(!s){var p=u[0];p&&(t.headers["Content-Type"]=p,s=p)}}else s&&c&&(t.headers["Content-Type"]=s);if(!e.responseContentType&&r.responses){var f,d=P()(f=N()(r.responses)).call(f,(function(e){var t=m()(e,2),r=t[0],n=t[1],o=parseInt(r,10);return o>=200&&o<300&&br(n.content)})).reduce((function(e,t){var r=m()(t,2)[1];return j()(e).call(e,C()(r.content))}),[]);d.length>0&&(t.headers.accept=d.join(", "))}if(n)if(s){if(u.indexOf(s)>-1)if("application/x-www-form-urlencoded"===s||"multipart/form-data"===s)if("object"===h()(n)){var g=(l.content[s]||{}).encoding||{};t.form={},C()(n).forEach((function(e){t.form[e]={value:n[e],encoding:g[e]||{}}}))}else t.form=n;else t.body=n}else t.body=n;return t}function Nr(e,t){var r,n,o=e.spec,a=e.operation,i=e.securities,s=e.requestContentType,l=e.responseContentType,u=e.attachContentTypeForEmptyPayload;if(t=function(e){var t=e.request,r=e.securities,n=void 0===r?{}:r,o=e.operation,a=void 0===o?{}:o,i=e.spec,s=me()({},t),l=n.authorized,u=void 0===l?{}:l,c=n.specSecurity,p=void 0===c?[]:c,f=a.security||p,h=u&&!!C()(u).length,d=i.securityDefinitions;if(s.headers=s.headers||{},s.query=s.query||{},!C()(n).length||!h||!f||Array.isArray(a.security)&&!a.security.length)return t;return f.forEach((function(e){C()(e).forEach((function(e){var t=u[e];if(t){var r=t.token,n=t.value||t,o=d[e],a=o.type,i=o["x-tokenName"]||"access_token",l=r&&r[i],c=r&&r.token_type;if(t)if("apiKey"===a){var p="query"===o.in?"query":"headers";s[p]=s[p]||{},s[p][o.name]=n}else if("basic"===a)if(n.header)s.headers.authorization=n.header;else{var f,h=n.username||"",m=n.password||"";n.base64=jr(j()(f="".concat(h,":")).call(f,m)),s.headers.authorization="Basic ".concat(n.base64)}else if("oauth2"===a&&l){var g;c=c&&"bearer"!==c.toLowerCase()?c:"Bearer",s.headers.authorization=j()(g="".concat(c," ")).call(g,l)}}}))})),s}({request:t,securities:i,operation:a,spec:o}),t.body||t.form||u)if(s)t.headers["Content-Type"]=s;else if(Array.isArray(a.consumes)){var c=m()(a.consumes,1);t.headers["Content-Type"]=c[0]}else if(Array.isArray(o.consumes)){var p=m()(o.consumes,1);t.headers["Content-Type"]=p[0]}else a.parameters&&P()(r=a.parameters).call(r,(function(e){return"file"===e.type})).length?t.headers["Content-Type"]="multipart/form-data":a.parameters&&P()(n=a.parameters).call(n,(function(e){return"formData"===e.in})).length&&(t.headers["Content-Type"]="application/x-www-form-urlencoded");else if(s){var f,h,d=a.parameters&&P()(f=a.parameters).call(f,(function(e){return"body"===e.in})).length>0,g=a.parameters&&P()(h=a.parameters).call(h,(function(e){return"formData"===e.in})).length>0;(d||g)&&(t.headers["Content-Type"]=s)}return!l&&Array.isArray(a.produces)&&a.produces.length>0&&(t.headers.accept=a.produces.join(", ")),t}var Tr=["http","fetch","spec","operationId","pathName","method","parameters","securities"],Pr=function(e){return Array.isArray(e)?e:[]},Rr=Ct("OperationNotFoundError",(function(e,t,r){this.originalError=r,Ee()(this,t||{})})),Mr={buildRequest:Lr};function Dr(e){var t=e.http,r=e.fetch,n=e.spec,o=e.operationId,a=e.pathName,i=e.method,s=e.parameters,l=e.securities,u=dr()(e,Tr),c=t||r||Y;a&&i&&!o&&(o=(0,cr.nc)(a,i));var p=Mr.buildRequest(me()({spec:n,operationId:o,parameters:s,securities:l,http:c},u));return p.body&&(br(p.body)||Array.isArray(p.body))&&(p.body=_()(p.body)),c(p)}function Lr(e){var t,r,n=e.spec,o=e.operationId,i=e.responseContentType,s=e.scheme,l=e.requestInterceptor,u=e.responseInterceptor,c=e.contextUrl,p=e.userFetch,f=e.server,h=e.serverVariables,d=e.http,g=e.signal,v=e.parameters,y=e.parameterBuilders,b=(0,cr.z6)(n);y||(y=b?a:wr);var w={url:"",credentials:d&&d.withCredentials?"include":"same-origin",headers:{},cookies:{}};g&&(w.signal=g),l&&(w.requestInterceptor=l),u&&(w.responseInterceptor=u),p&&(w.userFetch=p);var E=(0,cr.$r)(n,o);if(!E)throw new Rr("Operation ".concat(o," not found"));var x,_=E.operation,S=void 0===_?{}:_,k=E.method,O=E.pathName;if(w.url+=(x={spec:n,scheme:s,contextUrl:c,server:f,serverVariables:h,pathName:O,method:k},(0,cr.z6)(x.spec)?function(e){var t=e.spec,r=e.pathName,n=e.method,o=e.server,a=e.contextUrl,i=e.serverVariables,s=void 0===i?{}:i,l=gr()(t,["paths",r,(n||"").toLowerCase(),"servers"])||gr()(t,["paths",r,"servers"])||gr()(t,["servers"]),u="",c=null;if(o&&l&&l.length){var p=A()(l).call(l,(function(e){return e.url}));p.indexOf(o)>-1&&(u=o,c=l[p.indexOf(o)])}if(!u&&l&&l.length){u=l[0].url;var f=m()(l,1);c=f[0]}return u.indexOf("{")>-1&&function(e){for(var t,r=[],n=/{([^}]+)}/g;t=n.exec(e);)r.push(t[1]);return r}(u).forEach((function(e){if(c.variables&&c.variables[e]){var t=c.variables[e],r=s[e]||t.default,n=new RegExp("{".concat(e,"}"),"g");u=u.replace(n,r)}})),function(){var e,t,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",o=r&&n?kt.parse(kt.resolve(n,r)):kt.parse(r),a=kt.parse(n),i=Br(o.protocol)||Br(a.protocol)||"",s=o.host||a.host,l=o.pathname||"";return"/"===(e=i&&s?j()(t="".concat(i,"://")).call(t,s+l):l)[e.length-1]?$()(e).call(e,0,-1):e}(u,a)}(x):function(e){var t,r,n=e.spec,o=e.scheme,a=e.contextUrl,i=void 0===a?"":a,s=kt.parse(i),l=Array.isArray(n.schemes)?n.schemes[0]:null,u=o||l||Br(s.protocol)||"http",c=n.host||s.host||"",p=n.basePath||"";return"/"===(t=u&&c?j()(r="".concat(u,"://")).call(r,c+p):p)[t.length-1]?$()(t).call(t,0,-1):t}(x)),!o)return delete w.cookies,w;w.url+=O,w.method="".concat(k).toUpperCase(),v=v||{};var I=n.paths[O]||{};i&&(w.headers.accept=i);var N=function(e){var t={};e.forEach((function(e){t[e.in]||(t[e.in]={}),t[e.in][e.name]=e}));var r=[];return C()(t).forEach((function(e){C()(t[e]).forEach((function(n){r.push(t[e][n])}))})),r}(j()(t=j()(r=[]).call(r,Pr(S.parameters))).call(t,Pr(I.parameters)));N.forEach((function(e){var t,r,o=y[e.in];if("body"===e.in&&e.schema&&e.schema.properties&&(t=v),void 0===(t=e&&e.name&&v[e.name]))t=e&&e.name&&v[j()(r="".concat(e.in,".")).call(r,e.name)];else if(function(e,t){return P()(t).call(t,(function(t){return t.name===e}))}(e.name,N).length>1){var a;console.warn(j()(a="Parameter '".concat(e.name,"' is ambiguous because the defined spec has more than one parameter with the name: '")).call(a,e.name,"' and the passed-in parameter values did not define an 'in' value."))}if(null!==t){if(void 0!==e.default&&void 0===t&&(t=e.default),void 0===t&&e.required&&!e.allowEmptyValue)throw new Error("Required parameter ".concat(e.name," is not provided"));if(b&&e.schema&&"object"===e.schema.type&&"string"==typeof t)try{t=JSON.parse(t)}catch(e){throw new Error("Could not parse object parameter value string as JSON")}o&&o({req:w,parameter:e,value:t,operation:S,spec:n})}}));var T=me()(me()({},e),{},{operation:S});if((w=b?Ir(T,w):Nr(T,w)).cookies&&C()(w.cookies).length){var R=C()(w.cookies).reduce((function(e,t){var r=w.cookies[t];return e+(e?"&":"")+vr.serialize(t,r)}),"");w.headers.Cookie=R}return w.cookies&&delete w.cookies,fe(w),w}var Br=function(e){return e?e.replace(/\W/g,""):null};function Fr(e,t){return zr.apply(this,arguments)}function zr(){return zr=s()(u().mark((function e(t,r){var n,o,a,i,s,l,c,p,f,h,d,m,g=arguments;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=g.length>2&&void 0!==g[2]?g[2]:{},o=n.returnEntireTree,a=n.baseDoc,i=n.requestInterceptor,s=n.responseInterceptor,l=n.parameterMacro,c=n.modelPropertyMacro,p=n.useCircularStructures,f={pathDiscriminator:r,baseDoc:a,requestInterceptor:i,responseInterceptor:s,parameterMacro:l,modelPropertyMacro:c,useCircularStructures:p},h=(0,cr.K1)({spec:t}),d=h.spec,e.next=6,fr(me()(me()({},f),{},{spec:d,allowMetaPatches:!0,skipNormalization:!0}));case 6:return m=e.sent,!o&&Array.isArray(r)&&r.length&&(m.spec=gr()(m.spec,r)||null),e.abrupt("return",m);case 9:case"end":return e.stop()}}),e)}))),zr.apply(this,arguments)}var Ur=r(34852);function qr(e){let{configs:t,getConfigs:r}=e;return{fn:{fetch:(n=Y,o=t.preFetch,a=t.postFetch,a=a||function(e){return e},o=o||function(e){return e},function(e){return"string"==typeof e&&(e={url:e}),Z.mergeInQueryOrForm(e),e=o(e),a(n(e))}),buildRequest:Lr,execute:Dr,resolve:fr,resolveSubtree:function(e,t,n){if(void 0===n){const e=r();n={modelPropertyMacro:e.modelPropertyMacro,parameterMacro:e.parameterMacro,requestInterceptor:e.requestInterceptor,responseInterceptor:e.responseInterceptor}}for(var o=arguments.length,a=new Array(o>3?o-3:0),i=3;i{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(90242);function o(){return{fn:{shallowEqualKeys:n.be}}}},48347:(e,t,r)=>{"use strict";r.r(t),r.d(t,{getDisplayName:()=>n});const n=e=>e.displayName||e.name||"Component"},73420:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>u});var n=r(35627),o=r.n(n),a=r(90242),i=r(55776),s=r(48347),l=r(60314);const u=e=>{let{getComponents:t,getStore:r,getSystem:n}=e;const u=(c=(0,i.getComponent)(n,r,t),(0,a.HP)(c,(function(){for(var e=arguments.length,t=new Array(e),r=0;r(0,l.Z)(e,(function(){for(var e=arguments.length,t=new Array(e),r=0;r{"use strict";r.r(t),r.d(t,{getComponent:()=>ne,render:()=>re,withMappedContainer:()=>te});var n=r(23101),o=r.n(n),a=r(28222),i=r.n(a),s=r(67294),l=r(73935),u=r(97779),c=s.createContext(null);var p=function(e){e()},f=function(){return p},h={notify:function(){}};var d=function(){function e(e,t){this.store=e,this.parentSub=t,this.unsubscribe=null,this.listeners=h,this.handleChangeWrapper=this.handleChangeWrapper.bind(this)}var t=e.prototype;return t.addNestedSub=function(e){return this.trySubscribe(),this.listeners.subscribe(e)},t.notifyNestedSubs=function(){this.listeners.notify()},t.handleChangeWrapper=function(){this.onStateChange&&this.onStateChange()},t.isSubscribed=function(){return Boolean(this.unsubscribe)},t.trySubscribe=function(){this.unsubscribe||(this.unsubscribe=this.parentSub?this.parentSub.addNestedSub(this.handleChangeWrapper):this.store.subscribe(this.handleChangeWrapper),this.listeners=function(){var e=f(),t=null,r=null;return{clear:function(){t=null,r=null},notify:function(){e((function(){for(var e=t;e;)e.callback(),e=e.next}))},get:function(){for(var e=[],r=t;r;)e.push(r),r=r.next;return e},subscribe:function(e){var n=!0,o=r={callback:e,next:null,prev:r};return o.prev?o.prev.next=o:t=o,function(){n&&null!==t&&(n=!1,o.next?o.next.prev=o.prev:r=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}())},t.tryUnsubscribe=function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,this.listeners.clear(),this.listeners=h)},e}(),m="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement?s.useLayoutEffect:s.useEffect;const g=function(e){var t=e.store,r=e.context,n=e.children,o=(0,s.useMemo)((function(){var e=new d(t);return e.onStateChange=e.notifyNestedSubs,{store:t,subscription:e}}),[t]),a=(0,s.useMemo)((function(){return t.getState()}),[t]);m((function(){var e=o.subscription;return e.trySubscribe(),a!==t.getState()&&e.notifyNestedSubs(),function(){e.tryUnsubscribe(),e.onStateChange=null}}),[o,a]);var i=r||c;return s.createElement(i.Provider,{value:o},n)};var v=r(87462),y=r(63366),b=r(8679),w=r.n(b),E=r(72973),x=[],_=[null,null];function S(e,t){var r=e[1];return[t.payload,r+1]}function A(e,t,r){m((function(){return e.apply(void 0,t)}),r)}function k(e,t,r,n,o,a,i){e.current=n,t.current=o,r.current=!1,a.current&&(a.current=null,i())}function C(e,t,r,n,o,a,i,s,l,u){if(e){var c=!1,p=null,f=function(){if(!c){var e,r,f=t.getState();try{e=n(f,o.current)}catch(e){r=e,p=e}r||(p=null),e===a.current?i.current||l():(a.current=e,s.current=e,i.current=!0,u({type:"STORE_UPDATED",payload:{error:r}}))}};r.onStateChange=f,r.trySubscribe(),f();return function(){if(c=!0,r.tryUnsubscribe(),r.onStateChange=null,p)throw p}}}var O=function(){return[null,0]};function j(e,t){void 0===t&&(t={});var r=t,n=r.getDisplayName,o=void 0===n?function(e){return"ConnectAdvanced("+e+")"}:n,a=r.methodName,i=void 0===a?"connectAdvanced":a,l=r.renderCountProp,u=void 0===l?void 0:l,p=r.shouldHandleStateChanges,f=void 0===p||p,h=r.storeKey,m=void 0===h?"store":h,g=(r.withRef,r.forwardRef),b=void 0!==g&&g,j=r.context,I=void 0===j?c:j,N=(0,y.Z)(r,["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef","forwardRef","context"]),T=I;return function(t){var r=t.displayName||t.name||"Component",n=o(r),a=(0,v.Z)({},N,{getDisplayName:o,methodName:i,renderCountProp:u,shouldHandleStateChanges:f,storeKey:m,displayName:n,wrappedComponentName:r,WrappedComponent:t}),l=N.pure;var c=l?s.useMemo:function(e){return e()};function p(r){var n=(0,s.useMemo)((function(){var e=r.reactReduxForwardedRef,t=(0,y.Z)(r,["reactReduxForwardedRef"]);return[r.context,e,t]}),[r]),o=n[0],i=n[1],l=n[2],u=(0,s.useMemo)((function(){return o&&o.Consumer&&(0,E.isContextConsumer)(s.createElement(o.Consumer,null))?o:T}),[o,T]),p=(0,s.useContext)(u),h=Boolean(r.store)&&Boolean(r.store.getState)&&Boolean(r.store.dispatch);Boolean(p)&&Boolean(p.store);var m=h?r.store:p.store,g=(0,s.useMemo)((function(){return function(t){return e(t.dispatch,a)}(m)}),[m]),b=(0,s.useMemo)((function(){if(!f)return _;var e=new d(m,h?null:p.subscription),t=e.notifyNestedSubs.bind(e);return[e,t]}),[m,h,p]),w=b[0],j=b[1],I=(0,s.useMemo)((function(){return h?p:(0,v.Z)({},p,{subscription:w})}),[h,p,w]),N=(0,s.useReducer)(S,x,O),P=N[0][0],R=N[1];if(P&&P.error)throw P.error;var M=(0,s.useRef)(),D=(0,s.useRef)(l),L=(0,s.useRef)(),B=(0,s.useRef)(!1),F=c((function(){return L.current&&l===D.current?L.current:g(m.getState(),l)}),[m,P,l]);A(k,[D,M,B,l,F,L,j]),A(C,[f,m,w,g,D,M,B,L,j,R],[m,w,g]);var z=(0,s.useMemo)((function(){return s.createElement(t,(0,v.Z)({},F,{ref:i}))}),[i,t,F]);return(0,s.useMemo)((function(){return f?s.createElement(u.Provider,{value:I},z):z}),[u,z,I])}var h=l?s.memo(p):p;if(h.WrappedComponent=t,h.displayName=p.displayName=n,b){var g=s.forwardRef((function(e,t){return s.createElement(h,(0,v.Z)({},e,{reactReduxForwardedRef:t}))}));return g.displayName=n,g.WrappedComponent=t,w()(g,t)}return w()(h,t)}}function I(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function N(e,t){if(I(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var r=Object.keys(e),n=Object.keys(t);if(r.length!==n.length)return!1;for(var o=0;o=0;n--){var o=t[n](e);if(o)return o}return function(t,n){throw new Error("Invalid value of type "+typeof e+" for "+r+" argument when connecting component "+n.wrappedComponentName+".")}}function V(e,t){return e===t}function $(e){var t=void 0===e?{}:e,r=t.connectHOC,n=void 0===r?j:r,o=t.mapStateToPropsFactories,a=void 0===o?D:o,i=t.mapDispatchToPropsFactories,s=void 0===i?M:i,l=t.mergePropsFactories,u=void 0===l?B:l,c=t.selectorFactory,p=void 0===c?U:c;return function(e,t,r,o){void 0===o&&(o={});var i=o,l=i.pure,c=void 0===l||l,f=i.areStatesEqual,h=void 0===f?V:f,d=i.areOwnPropsEqual,m=void 0===d?N:d,g=i.areStatePropsEqual,b=void 0===g?N:g,w=i.areMergedPropsEqual,E=void 0===w?N:w,x=(0,y.Z)(i,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),_=q(e,a,"mapStateToProps"),S=q(t,s,"mapDispatchToProps"),A=q(r,u,"mergeProps");return n(p,(0,v.Z)({methodName:"connect",getDisplayName:function(e){return"Connect("+e+")"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:_,initMapDispatchToProps:S,initMergeProps:A,pure:c,areStatesEqual:h,areOwnPropsEqual:m,areStatePropsEqual:b,areMergedPropsEqual:E},x))}}const W=$();var H;H=l.unstable_batchedUpdates,p=H;var J=r(57557),K=r.n(J),G=r(6557),Z=r.n(G);const Y=e=>t=>{const{fn:r}=e();class n extends s.Component{render(){return s.createElement(t,o()({},e(),this.props,this.context))}}return n.displayName=`WithSystem(${r.getDisplayName(t)})`,n},Q=(e,t)=>r=>{const{fn:n}=e();class a extends s.Component{render(){return s.createElement(g,{store:t},s.createElement(r,o()({},this.props,this.context)))}}return a.displayName=`WithRoot(${n.getDisplayName(r)})`,a},X=(e,t,r)=>(0,u.qC)(r?Q(e,r):Z(),W(((r,n)=>{var o;const a={...n,...e()},i=(null===(o=t.prototype)||void 0===o?void 0:o.mapStateToProps)||(e=>({state:e}));return i(r,a)})),Y(e))(t),ee=(e,t,r,n)=>{for(const o in t){const a=t[o];"function"==typeof a&&a(r[o],n[o],e())}},te=(e,t,r)=>(t,n)=>{const{fn:o}=e(),a=r(t,"root");class l extends s.Component{constructor(t,r){super(t,r),ee(e,n,t,{})}UNSAFE_componentWillReceiveProps(t){ee(e,n,t,this.props)}render(){const e=K()(this.props,n?i()(n):[]);return s.createElement(a,e)}}return l.displayName=`WithMappedContainer(${o.getDisplayName(a)})`,l},re=(e,t,r,n)=>o=>{const a=r(e,t,n)("App","root");l.render(s.createElement(a,null),o)},ne=(e,t,r)=>function(n,o){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"!=typeof n)throw new TypeError("Need a string, to fetch a component. Was given a "+typeof n);const i=r(n);return i?o?"root"===o?X(e,i,t()):X(e,i):i:(a.failSilently||e().log.warn("Could not find component:",n),null)}},36581:(e,t,r)=>{"use strict";r.d(t,{d3:()=>T,C2:()=>Z});var n=r(28222),o=r.n(n),a=r(58118),i=r.n(a),s=r(63366);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=4?[t[0],t[1],t[2],t[3],"".concat(t[0],".").concat(t[1]),"".concat(t[0],".").concat(t[2]),"".concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[0]),"".concat(t[1],".").concat(t[2]),"".concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[1]),"".concat(t[2],".").concat(t[3]),"".concat(t[3],".").concat(t[0]),"".concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[0]),"".concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[1],".").concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[2],".").concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[3],".").concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[2],".").concat(t[1],".").concat(t[0])]:void 0),d[n]}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2?arguments[2]:void 0,n=e.filter((function(e){return"token"!==e})),o=m(n);return o.reduce((function(e,t){return p({},e,r[t])}),t)}function v(e){return e.join(" ")}function y(e){var t=e.node,r=e.stylesheet,n=e.style,o=void 0===n?{}:n,a=e.useInlineStyles,i=e.key,s=t.properties,l=t.type,u=t.tagName,c=t.value;if("text"===l)return c;if(u){var d,m=function(e,t){var r=0;return function(n){return r+=1,n.map((function(n,o){return y({node:n,stylesheet:e,useInlineStyles:t,key:"code-segment-".concat(r,"-").concat(o)})}))}}(r,a);if(a){var b=Object.keys(r).reduce((function(e,t){return t.split(".").forEach((function(t){e.includes(t)||e.push(t)})),e}),[]),w=s.className&&s.className.includes("token")?["token"]:[],E=s.className&&w.concat(s.className.filter((function(e){return!b.includes(e)})));d=p({},s,{className:v(E)||void 0,style:g(s.className,Object.assign({},s.style,o),r)})}else d=p({},s,{className:v(s.className)});var x=m(t.children);return f.createElement(u,(0,h.Z)({key:i},d),x)}}var b=/\n/g;function w(e){var t=e.codeString,r=e.codeStyle,n=e.containerStyle,o=void 0===n?{float:"left",paddingRight:"10px"}:n,a=e.numberStyle,i=void 0===a?{}:a,s=e.startingLineNumber;return f.createElement("code",{style:Object.assign({},r,o)},function(e){var t=e.lines,r=e.startingLineNumber,n=e.style;return t.map((function(e,t){var o=t+r;return f.createElement("span",{key:"line-".concat(t),className:"react-syntax-highlighter-line-number",style:"function"==typeof n?n(o):n},"".concat(o,"\n"))}))}({lines:t.replace(/\n$/,"").split("\n"),style:i,startingLineNumber:s}))}function E(e,t){return{type:"element",tagName:"span",properties:{key:"line-number--".concat(e),className:["comment","linenumber","react-syntax-highlighter-line-number"],style:t},children:[{type:"text",value:e}]}}function x(e,t,r){var n;return p({},{display:"inline-block",minWidth:(n=r,"".concat(n.toString().length,".25em")),paddingRight:"1em",textAlign:"right",userSelect:"none"},"function"==typeof e?e(t):e)}function _(e){var t=e.children,r=e.lineNumber,n=e.lineNumberStyle,o=e.largestLineNumber,a=e.showInlineLineNumbers,i=e.lineProps,s=void 0===i?{}:i,l=e.className,u=void 0===l?[]:l,c=e.showLineNumbers,f=e.wrapLongLines,h="function"==typeof s?s(r):s;if(h.className=u,r&&a){var d=x(n,r,o);t.unshift(E(r,d))}return f&c&&(h.style=p({},h.style,{display:"flex"})),{type:"element",tagName:"span",properties:h,children:t}}function S(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],n=0;n2&&void 0!==arguments[2]?arguments[2]:[];return _({children:e,lineNumber:t,lineNumberStyle:s,largestLineNumber:i,showInlineLineNumbers:o,lineProps:r,className:a,showLineNumbers:n,wrapLongLines:l})}function m(e,t){if(n&&t&&o){var r=x(s,t,i);e.unshift(E(t,r))}return e}function g(e,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return t||n.length>0?d(e,r,n):m(e,r)}for(var v=function(){var e=c[h],t=e.children[0].value;if(t.match(b)){var r=t.split("\n");r.forEach((function(t,o){var i=n&&p.length+a,s={type:"text",value:"".concat(t,"\n")};if(0===o){var l=g(c.slice(f+1,h).concat(_({children:[s],className:e.properties.className})),i);p.push(l)}else if(o===r.length-1){if(c[h+1]&&c[h+1].children&&c[h+1].children[0]){var u=_({children:[{type:"text",value:"".concat(t)}],className:e.properties.className});c.splice(h+1,0,u)}else{var d=g([s],i,e.properties.className);p.push(d)}}else{var m=g([s],i,e.properties.className);p.push(m)}})),f=h}h++};h=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(e,["language","children","style","customStyle","codeTagProps","useInlineStyles","showLineNumbers","showInlineLineNumbers","startingLineNumber","lineNumberContainerStyle","lineNumberStyle","wrapLines","wrapLongLines","lineProps","renderer","PreTag","CodeTag","code","astGenerator"]);U=U||O;var V=m?f.createElement(w,{containerStyle:E,codeStyle:u.style||{},numberStyle:_,startingLineNumber:b,codeString:z}):null,$=o.hljs||o['pre[class*="language-"]']||{backgroundColor:"#fff"},W=C(U)?"hljs":"prismjs",H=h?Object.assign({},q,{style:Object.assign({},$,i)}):Object.assign({},q,{className:q.className?"".concat(W," ").concat(q.className):W,style:Object.assign({},i)});if(!U)return f.createElement(D,H,V,f.createElement(B,u,z));(void 0===S&&R||N)&&(S=!0),R=R||k;var J=[{type:"text",value:z}],K=function(e){var t=e.astGenerator,r=e.language,n=e.code,o=e.defaultCodeValue;if(C(t)){var a=function(e,t){return-1!==e.listLanguages().indexOf(t)}(t,r);return"text"===r?{value:o,language:"text"}:a?t.highlight(r,n):t.highlightAuto(n)}try{return r&&"text"!==r?{value:t.highlight(n,r)}:{value:o}}catch(e){return{value:o}}}({astGenerator:U,language:t,code:z,defaultCodeValue:J});null===K.language&&(K.value=J);var G=A(K,S,P,m,v,b,K.value.length+b,_,N);return u.style=p({},u.style,N?{whiteSpace:"pre-wrap"}:{whiteSpace:"pre"}),f.createElement(D,H,f.createElement(B,u,!v&&V,R({rows:G,stylesheet:o,useInlineStyles:h})))});N.registerLanguage=I.registerLanguage;const T=N;var P=r(96344);const R=r.n(P)();var M=r(82026);const D=r.n(M)();var L=r(42157);const B=r.n(L)();var F=r(61519);const z=r.n(F)();var U=r(54587);const q=r.n(U)();var V=r(30786);const $=r.n(V)();var W=r(66336);const H=r.n(W)(),J={hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#333",color:"white"},"hljs-name":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"},"hljs-code":{fontStyle:"italic",color:"#888"},"hljs-emphasis":{fontStyle:"italic"},"hljs-tag":{color:"#62c8f3"},"hljs-variable":{color:"#ade5fc"},"hljs-template-variable":{color:"#ade5fc"},"hljs-selector-id":{color:"#ade5fc"},"hljs-selector-class":{color:"#ade5fc"},"hljs-string":{color:"#a2fca2"},"hljs-bullet":{color:"#d36363"},"hljs-type":{color:"#ffa"},"hljs-title":{color:"#ffa"},"hljs-section":{color:"#ffa"},"hljs-attribute":{color:"#ffa"},"hljs-quote":{color:"#ffa"},"hljs-built_in":{color:"#ffa"},"hljs-builtin-name":{color:"#ffa"},"hljs-number":{color:"#d36363"},"hljs-symbol":{color:"#d36363"},"hljs-keyword":{color:"#fcc28c"},"hljs-selector-tag":{color:"#fcc28c"},"hljs-literal":{color:"#fcc28c"},"hljs-comment":{color:"#888"},"hljs-deletion":{color:"#333",backgroundColor:"#fc9b9b"},"hljs-regexp":{color:"#c6b4f0"},"hljs-link":{color:"#c6b4f0"},"hljs-meta":{color:"#fc9b9b"},"hljs-addition":{backgroundColor:"#a2fca2",color:"#333"}};T.registerLanguage("json",D),T.registerLanguage("js",R),T.registerLanguage("xml",B),T.registerLanguage("yaml",q),T.registerLanguage("http",$),T.registerLanguage("bash",z),T.registerLanguage("powershell",H),T.registerLanguage("javascript",R);const K={agate:J,arta:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#222",color:"#aaa"},"hljs-subst":{color:"#aaa"},"hljs-section":{color:"#fff",fontWeight:"bold"},"hljs-comment":{color:"#444"},"hljs-quote":{color:"#444"},"hljs-meta":{color:"#444"},"hljs-string":{color:"#ffcc33"},"hljs-symbol":{color:"#ffcc33"},"hljs-bullet":{color:"#ffcc33"},"hljs-regexp":{color:"#ffcc33"},"hljs-number":{color:"#00cc66"},"hljs-addition":{color:"#00cc66"},"hljs-built_in":{color:"#32aaee"},"hljs-builtin-name":{color:"#32aaee"},"hljs-literal":{color:"#32aaee"},"hljs-type":{color:"#32aaee"},"hljs-template-variable":{color:"#32aaee"},"hljs-attribute":{color:"#32aaee"},"hljs-link":{color:"#32aaee"},"hljs-keyword":{color:"#6644aa"},"hljs-selector-tag":{color:"#6644aa"},"hljs-name":{color:"#6644aa"},"hljs-selector-id":{color:"#6644aa"},"hljs-selector-class":{color:"#6644aa"},"hljs-title":{color:"#bb1166"},"hljs-variable":{color:"#bb1166"},"hljs-deletion":{color:"#bb1166"},"hljs-template-tag":{color:"#bb1166"},"hljs-doctag":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"},"hljs-emphasis":{fontStyle:"italic"}},monokai:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#272822",color:"#ddd"},"hljs-tag":{color:"#f92672"},"hljs-keyword":{color:"#f92672",fontWeight:"bold"},"hljs-selector-tag":{color:"#f92672",fontWeight:"bold"},"hljs-literal":{color:"#f92672",fontWeight:"bold"},"hljs-strong":{color:"#f92672"},"hljs-name":{color:"#f92672"},"hljs-code":{color:"#66d9ef"},"hljs-class .hljs-title":{color:"white"},"hljs-attribute":{color:"#bf79db"},"hljs-symbol":{color:"#bf79db"},"hljs-regexp":{color:"#bf79db"},"hljs-link":{color:"#bf79db"},"hljs-string":{color:"#a6e22e"},"hljs-bullet":{color:"#a6e22e"},"hljs-subst":{color:"#a6e22e"},"hljs-title":{color:"#a6e22e",fontWeight:"bold"},"hljs-section":{color:"#a6e22e",fontWeight:"bold"},"hljs-emphasis":{color:"#a6e22e"},"hljs-type":{color:"#a6e22e",fontWeight:"bold"},"hljs-built_in":{color:"#a6e22e"},"hljs-builtin-name":{color:"#a6e22e"},"hljs-selector-attr":{color:"#a6e22e"},"hljs-selector-pseudo":{color:"#a6e22e"},"hljs-addition":{color:"#a6e22e"},"hljs-variable":{color:"#a6e22e"},"hljs-template-tag":{color:"#a6e22e"},"hljs-template-variable":{color:"#a6e22e"},"hljs-comment":{color:"#75715e"},"hljs-quote":{color:"#75715e"},"hljs-deletion":{color:"#75715e"},"hljs-meta":{color:"#75715e"},"hljs-doctag":{fontWeight:"bold"},"hljs-selector-id":{fontWeight:"bold"}},nord:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#2E3440",color:"#D8DEE9"},"hljs-subst":{color:"#D8DEE9"},"hljs-selector-tag":{color:"#81A1C1"},"hljs-selector-id":{color:"#8FBCBB",fontWeight:"bold"},"hljs-selector-class":{color:"#8FBCBB"},"hljs-selector-attr":{color:"#8FBCBB"},"hljs-selector-pseudo":{color:"#88C0D0"},"hljs-addition":{backgroundColor:"rgba(163, 190, 140, 0.5)"},"hljs-deletion":{backgroundColor:"rgba(191, 97, 106, 0.5)"},"hljs-built_in":{color:"#8FBCBB"},"hljs-type":{color:"#8FBCBB"},"hljs-class":{color:"#8FBCBB"},"hljs-function":{color:"#88C0D0"},"hljs-function > .hljs-title":{color:"#88C0D0"},"hljs-keyword":{color:"#81A1C1"},"hljs-literal":{color:"#81A1C1"},"hljs-symbol":{color:"#81A1C1"},"hljs-number":{color:"#B48EAD"},"hljs-regexp":{color:"#EBCB8B"},"hljs-string":{color:"#A3BE8C"},"hljs-title":{color:"#8FBCBB"},"hljs-params":{color:"#D8DEE9"},"hljs-bullet":{color:"#81A1C1"},"hljs-code":{color:"#8FBCBB"},"hljs-emphasis":{fontStyle:"italic"},"hljs-formula":{color:"#8FBCBB"},"hljs-strong":{fontWeight:"bold"},"hljs-link:hover":{textDecoration:"underline"},"hljs-quote":{color:"#4C566A"},"hljs-comment":{color:"#4C566A"},"hljs-doctag":{color:"#8FBCBB"},"hljs-meta":{color:"#5E81AC"},"hljs-meta-keyword":{color:"#5E81AC"},"hljs-meta-string":{color:"#A3BE8C"},"hljs-attr":{color:"#8FBCBB"},"hljs-attribute":{color:"#D8DEE9"},"hljs-builtin-name":{color:"#81A1C1"},"hljs-name":{color:"#81A1C1"},"hljs-section":{color:"#88C0D0"},"hljs-tag":{color:"#81A1C1"},"hljs-variable":{color:"#D8DEE9"},"hljs-template-variable":{color:"#D8DEE9"},"hljs-template-tag":{color:"#5E81AC"},"abnf .hljs-attribute":{color:"#88C0D0"},"abnf .hljs-symbol":{color:"#EBCB8B"},"apache .hljs-attribute":{color:"#88C0D0"},"apache .hljs-section":{color:"#81A1C1"},"arduino .hljs-built_in":{color:"#88C0D0"},"aspectj .hljs-meta":{color:"#D08770"},"aspectj > .hljs-title":{color:"#88C0D0"},"bnf .hljs-attribute":{color:"#8FBCBB"},"clojure .hljs-name":{color:"#88C0D0"},"clojure .hljs-symbol":{color:"#EBCB8B"},"coq .hljs-built_in":{color:"#88C0D0"},"cpp .hljs-meta-string":{color:"#8FBCBB"},"css .hljs-built_in":{color:"#88C0D0"},"css .hljs-keyword":{color:"#D08770"},"diff .hljs-meta":{color:"#8FBCBB"},"ebnf .hljs-attribute":{color:"#8FBCBB"},"glsl .hljs-built_in":{color:"#88C0D0"},"groovy .hljs-meta:not(:first-child)":{color:"#D08770"},"haxe .hljs-meta":{color:"#D08770"},"java .hljs-meta":{color:"#D08770"},"ldif .hljs-attribute":{color:"#8FBCBB"},"lisp .hljs-name":{color:"#88C0D0"},"lua .hljs-built_in":{color:"#88C0D0"},"moonscript .hljs-built_in":{color:"#88C0D0"},"nginx .hljs-attribute":{color:"#88C0D0"},"nginx .hljs-section":{color:"#5E81AC"},"pf .hljs-built_in":{color:"#88C0D0"},"processing .hljs-built_in":{color:"#88C0D0"},"scss .hljs-keyword":{color:"#81A1C1"},"stylus .hljs-keyword":{color:"#81A1C1"},"swift .hljs-meta":{color:"#D08770"},"vim .hljs-built_in":{color:"#88C0D0",fontStyle:"italic"},"yaml .hljs-meta":{color:"#D08770"}},obsidian:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#282b2e",color:"#e0e2e4"},"hljs-keyword":{color:"#93c763",fontWeight:"bold"},"hljs-selector-tag":{color:"#93c763",fontWeight:"bold"},"hljs-literal":{color:"#93c763",fontWeight:"bold"},"hljs-selector-id":{color:"#93c763"},"hljs-number":{color:"#ffcd22"},"hljs-attribute":{color:"#668bb0"},"hljs-code":{color:"white"},"hljs-class .hljs-title":{color:"white"},"hljs-section":{color:"white",fontWeight:"bold"},"hljs-regexp":{color:"#d39745"},"hljs-link":{color:"#d39745"},"hljs-meta":{color:"#557182"},"hljs-tag":{color:"#8cbbad"},"hljs-name":{color:"#8cbbad",fontWeight:"bold"},"hljs-bullet":{color:"#8cbbad"},"hljs-subst":{color:"#8cbbad"},"hljs-emphasis":{color:"#8cbbad"},"hljs-type":{color:"#8cbbad",fontWeight:"bold"},"hljs-built_in":{color:"#8cbbad"},"hljs-selector-attr":{color:"#8cbbad"},"hljs-selector-pseudo":{color:"#8cbbad"},"hljs-addition":{color:"#8cbbad"},"hljs-variable":{color:"#8cbbad"},"hljs-template-tag":{color:"#8cbbad"},"hljs-template-variable":{color:"#8cbbad"},"hljs-string":{color:"#ec7600"},"hljs-symbol":{color:"#ec7600"},"hljs-comment":{color:"#818e96"},"hljs-quote":{color:"#818e96"},"hljs-deletion":{color:"#818e96"},"hljs-selector-class":{color:"#A082BD"},"hljs-doctag":{fontWeight:"bold"},"hljs-title":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"}},"tomorrow-night":{"hljs-comment":{color:"#969896"},"hljs-quote":{color:"#969896"},"hljs-variable":{color:"#cc6666"},"hljs-template-variable":{color:"#cc6666"},"hljs-tag":{color:"#cc6666"},"hljs-name":{color:"#cc6666"},"hljs-selector-id":{color:"#cc6666"},"hljs-selector-class":{color:"#cc6666"},"hljs-regexp":{color:"#cc6666"},"hljs-deletion":{color:"#cc6666"},"hljs-number":{color:"#de935f"},"hljs-built_in":{color:"#de935f"},"hljs-builtin-name":{color:"#de935f"},"hljs-literal":{color:"#de935f"},"hljs-type":{color:"#de935f"},"hljs-params":{color:"#de935f"},"hljs-meta":{color:"#de935f"},"hljs-link":{color:"#de935f"},"hljs-attribute":{color:"#f0c674"},"hljs-string":{color:"#b5bd68"},"hljs-symbol":{color:"#b5bd68"},"hljs-bullet":{color:"#b5bd68"},"hljs-addition":{color:"#b5bd68"},"hljs-title":{color:"#81a2be"},"hljs-section":{color:"#81a2be"},"hljs-keyword":{color:"#b294bb"},"hljs-selector-tag":{color:"#b294bb"},hljs:{display:"block",overflowX:"auto",background:"#1d1f21",color:"#c5c8c6",padding:"0.5em"},"hljs-emphasis":{fontStyle:"italic"},"hljs-strong":{fontWeight:"bold"}}},G=o()(K),Z=e=>i()(G).call(G,e)?K[e]:(console.warn(`Request style '${e}' is not available, returning default instead`),J)},90242:(e,t,r)=>{"use strict";r.d(t,{mz:()=>pe,oG:()=>fe,AF:()=>he,LQ:()=>de,Kn:()=>me,Wl:()=>ge,kJ:()=>ve,HP:()=>ye,Ay:()=>be,Q2:()=>we,_5:()=>Ee,iQ:()=>xe,gp:()=>_e,DR:()=>Se,Zl:()=>Ae,Ik:()=>Ce,xi:()=>Pe,UG:()=>Re,r3:()=>Me,wh:()=>De,GZ:()=>Le,be:()=>Be,Nm:()=>Fe,hW:()=>ze,QG:()=>Ue,oJ:()=>qe,J6:()=>Ve,nX:()=>$e,po:()=>We,XV:()=>He,Pz:()=>Je,D$:()=>Ke,V9:()=>Ge,cz:()=>Ze,Uj:()=>Ye,Xb:()=>Qe,O2:()=>et});var n=r(58309),o=r.n(n),a=r(97606),i=r.n(a),s=r(74386),l=r.n(s),u=r(86),c=r.n(u),p=r(14418),f=r.n(p),h=r(28222),d=r.n(h),m=(r(11189),r(24282)),g=r.n(m),v=r(76986),y=r.n(v),b=r(2578),w=r.n(b),E=r(24278),x=r.n(E),_=(r(39022),r(92039)),S=r.n(_),A=(r(58118),r(35627)),k=r.n(A),C=r(11882),O=r.n(C),j=r(51679),I=r.n(j),N=r(27043),T=r.n(N),P=r(81607),R=r.n(P),M=r(43393),D=r.n(M),L=r(17967),B=r(68929),F=r.n(B),z=r(11700),U=r.n(z),q=r(88306),V=r.n(q),$=r(13311),W=r.n($),H=r(59704),J=r.n(H),K=r(77813),G=r.n(K),Z=r(23560),Y=r.n(Z),Q=r(57050),X=r(27504),ee=r(8269),te=r.n(ee),re=r(19069),ne=r(92282),oe=r.n(ne),ae=r(89072),ie=r.n(ae),se=r(1272),le=r(48764).Buffer;const ue="default",ce=e=>D().Iterable.isIterable(e);function pe(e){return me(e)?ce(e)?e.toJS():e:{}}function fe(e){var t,r;if(ce(e))return e;if(e instanceof X.Z.File)return e;if(!me(e))return e;if(o()(e))return i()(r=D().Seq(e)).call(r,fe).toList();if(Y()(l()(e))){var n;const t=function(e){if(!Y()(l()(e)))return e;const t={},r="_**[]",n={};for(let o of l()(e).call(e))if(t[o[0]]||n[o[0]]&&n[o[0]].containsMultiple){if(!n[o[0]]){n[o[0]]={containsMultiple:!0,length:1},t[`${o[0]}${r}${n[o[0]].length}`]=t[o[0]],delete t[o[0]]}n[o[0]].length+=1,t[`${o[0]}${r}${n[o[0]].length}`]=o[1]}else t[o[0]]=o[1];return t}(e);return i()(n=D().OrderedMap(t)).call(n,fe)}return i()(t=D().OrderedMap(e)).call(t,fe)}function he(e){return o()(e)?e:[e]}function de(e){return"function"==typeof e}function me(e){return!!e&&"object"==typeof e}function ge(e){return"function"==typeof e}function ve(e){return o()(e)}const ye=V();function be(e,t){var r;return g()(r=d()(e)).call(r,((r,n)=>(r[n]=t(e[n],n),r)),{})}function we(e,t){var r;return g()(r=d()(e)).call(r,((r,n)=>{let o=t(e[n],n);return o&&"object"==typeof o&&y()(r,o),r}),{})}function Ee(e){return t=>{let{dispatch:r,getState:n}=t;return t=>r=>"function"==typeof r?r(e()):t(r)}}function xe(e){var t;let r=e.keySeq();return r.contains(ue)?ue:w()(t=f()(r).call(r,(e=>"2"===(e+"")[0]))).call(t).first()}function _e(e,t){if(!D().Iterable.isIterable(e))return D().List();let r=e.getIn(o()(t)?t:[t]);return D().List.isList(r)?r:D().List()}function Se(e){let t,r=[/filename\*=[^']+'\w*'"([^"]+)";?/i,/filename\*=[^']+'\w*'([^;]+);?/i,/filename="([^;]*);?"/i,/filename=([^;]*);?/i];if(S()(r).call(r,(r=>(t=r.exec(e),null!==t))),null!==t&&t.length>1)try{return decodeURIComponent(t[1])}catch(e){console.error(e)}return null}function Ae(e){return t=e.replace(/\.[^./]*$/,""),U()(F()(t));var t}function ke(e,t,r,n,a){if(!t)return[];let s=[],l=t.get("nullable"),u=t.get("required"),p=t.get("maximum"),h=t.get("minimum"),d=t.get("type"),m=t.get("format"),g=t.get("maxLength"),v=t.get("minLength"),y=t.get("uniqueItems"),b=t.get("maxItems"),w=t.get("minItems"),E=t.get("pattern");const x=r||!0===u,_=null!=e;if(l&&null===e||!d||!(x||_&&"array"===d||!(!x&&!_)))return[];let A="string"===d&&e,k="array"===d&&o()(e)&&e.length,C="array"===d&&D().List.isList(e)&&e.count();const O=[A,k,C,"array"===d&&"string"==typeof e&&e,"file"===d&&e instanceof X.Z.File,"boolean"===d&&(e||!1===e),"number"===d&&(e||0===e),"integer"===d&&(e||0===e),"object"===d&&"object"==typeof e&&null!==e,"object"===d&&"string"==typeof e&&e],j=S()(O).call(O,(e=>!!e));if(x&&!j&&!n)return s.push("Required field is not provided"),s;if("object"===d&&(null===a||"application/json"===a)){let r=e;if("string"==typeof e)try{r=JSON.parse(e)}catch(e){return s.push("Parameter string value must be valid JSON"),s}var I;if(t&&t.has("required")&&ge(u.isList)&&u.isList()&&c()(u).call(u,(e=>{void 0===r[e]&&s.push({propKey:e,error:"Required property not found"})})),t&&t.has("properties"))c()(I=t.get("properties")).call(I,((e,t)=>{const o=ke(r[t],e,!1,n,a);s.push(...i()(o).call(o,(e=>({propKey:t,error:e}))))}))}if(E){let t=((e,t)=>{if(!new RegExp(t).test(e))return"Value must follow pattern "+t})(e,E);t&&s.push(t)}if(w&&"array"===d){let t=((e,t)=>{if(!e&&t>=1||e&&e.length{if(e&&e.length>t)return`Array must not contain more then ${t} item${1===t?"":"s"}`})(e,b);t&&s.push({needRemove:!0,error:t})}if(y&&"array"===d){let t=((e,t)=>{if(e&&("true"===t||!0===t)){const t=(0,M.fromJS)(e),r=t.toSet();if(e.length>r.size){let e=(0,M.Set)();if(c()(t).call(t,((r,n)=>{f()(t).call(t,(e=>ge(e.equals)?e.equals(r):e===r)).size>1&&(e=e.add(n))})),0!==e.size)return i()(e).call(e,(e=>({index:e,error:"No duplicates allowed."}))).toArray()}}})(e,y);t&&s.push(...t)}if(g||0===g){let t=((e,t)=>{if(e.length>t)return`Value must be no longer than ${t} character${1!==t?"s":""}`})(e,g);t&&s.push(t)}if(v){let t=((e,t)=>{if(e.length{if(e>t)return`Value must be less than ${t}`})(e,p);t&&s.push(t)}if(h||0===h){let t=((e,t)=>{if(e{if(isNaN(Date.parse(e)))return"Value must be a DateTime"})(e):"uuid"===m?(e=>{if(e=e.toString().toLowerCase(),!/^[{(]?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}[)}]?$/.test(e))return"Value must be a Guid"})(e):(e=>{if(e&&"string"!=typeof e)return"Value must be a string"})(e),!t)return s;s.push(t)}else if("boolean"===d){let t=(e=>{if("true"!==e&&"false"!==e&&!0!==e&&!1!==e)return"Value must be a boolean"})(e);if(!t)return s;s.push(t)}else if("number"===d){let t=(e=>{if(!/^-?\d+(\.?\d+)?$/.test(e))return"Value must be a number"})(e);if(!t)return s;s.push(t)}else if("integer"===d){let t=(e=>{if(!/^-?\d+$/.test(e))return"Value must be an integer"})(e);if(!t)return s;s.push(t)}else if("array"===d){if(!k&&!C)return s;e&&c()(e).call(e,((e,r)=>{const o=ke(e,t.get("items"),!1,n,a);s.push(...i()(o).call(o,(e=>({index:r,error:e}))))}))}else if("file"===d){let t=(e=>{if(e&&!(e instanceof X.Z.File))return"Value must be a file"})(e);if(!t)return s;s.push(t)}return s}const Ce=function(e,t){let{isOAS3:r=!1,bypassRequiredCheck:n=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=e.get("required"),{schema:a,parameterContentMediaType:i}=(0,re.Z)(e,{isOAS3:r});return ke(t,a,o,n,i)},Oe=(e,t,r)=>{if(e&&!e.xml&&(e.xml={}),e&&!e.xml.name){if(!e.$$ref&&(e.type||e.items||e.properties||e.additionalProperties))return'\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e';if(e.$$ref){let t=e.$$ref.match(/\S*\/(\S+)$/);e.xml.name=t[1]}}return(0,Q.memoizedCreateXMLExample)(e,t,r)},je=[{when:/json/,shouldStringifyTypes:["string"]}],Ie=["object"],Ne=(e,t,r,n)=>{const o=(0,Q.memoizedSampleFromSchema)(e,t,n),a=typeof o,i=g()(je).call(je,((e,t)=>t.when.test(r)?[...e,...t.shouldStringifyTypes]:e),Ie);return J()(i,(e=>e===a))?k()(o,null,2):o},Te=(e,t,r,n)=>{const o=Ne(e,t,r,n);let a;try{a=se.ZP.dump(se.ZP.load(o),{lineWidth:-1},{schema:se.A8}),"\n"===a[a.length-1]&&(a=x()(a).call(a,0,a.length-1))}catch(e){return console.error(e),"error: could not generate yaml example"}return a.replace(/\t/g," ")},Pe=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return e&&ge(e.toJS)&&(e=e.toJS()),n&&ge(n.toJS)&&(n=n.toJS()),/xml/.test(t)?Oe(e,r,n):/(yaml|yml)/.test(t)?Te(e,r,t,n):Ne(e,r,t,n)},Re=()=>{let e={},t=X.Z.location.search;if(!t)return{};if(""!=t){let r=t.substr(1).split("&");for(let t in r)Object.prototype.hasOwnProperty.call(r,t)&&(t=r[t].split("="),e[decodeURIComponent(t[0])]=t[1]&&decodeURIComponent(t[1])||"")}return e},Me=e=>{let t;return t=e instanceof le?e:le.from(e.toString(),"utf-8"),t.toString("base64")},De={operationsSorter:{alpha:(e,t)=>e.get("path").localeCompare(t.get("path")),method:(e,t)=>e.get("method").localeCompare(t.get("method"))},tagsSorter:{alpha:(e,t)=>e.localeCompare(t)}},Le=e=>{let t=[];for(let r in e){let n=e[r];void 0!==n&&""!==n&&t.push([r,"=",encodeURIComponent(n).replace(/%20/g,"+")].join(""))}return t.join("&")},Be=(e,t,r)=>!!W()(r,(r=>G()(e[r],t[r])));function Fe(e){return"string"!=typeof e||""===e?"":(0,L.N)(e)}function ze(e){return!(!e||O()(e).call(e,"localhost")>=0||O()(e).call(e,"127.0.0.1")>=0||"none"===e)}function Ue(e){if(!D().OrderedMap.isOrderedMap(e))return null;if(!e.size)return null;const t=I()(e).call(e,((e,t)=>T()(t).call(t,"2")&&d()(e.get("content")||{}).length>0)),r=e.get("default")||D().OrderedMap(),n=(r.get("content")||D().OrderedMap()).keySeq().toJS().length?r:null;return t||n}const qe=e=>"string"==typeof e||e instanceof String?R()(e).call(e).replace(/\s/g,"%20"):"",Ve=e=>te()(qe(e).replace(/%20/g,"_")),$e=e=>f()(e).call(e,((e,t)=>/^x-/.test(t))),We=e=>f()(e).call(e,((e,t)=>/^pattern|maxLength|minLength|maximum|minimum/.test(t)));function He(e,t){var r;let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:()=>!0;if("object"!=typeof e||o()(e)||null===e||!t)return e;const a=y()({},e);return c()(r=d()(a)).call(r,(e=>{e===t&&n(a[e],e)?delete a[e]:a[e]=He(a[e],t,n)})),a}function Je(e){if("string"==typeof e)return e;if(e&&e.toJS&&(e=e.toJS()),"object"==typeof e&&null!==e)try{return k()(e,null,2)}catch(t){return String(e)}return null==e?"":e.toString()}function Ke(e){return"number"==typeof e?e.toString():e}function Ge(e){let{returnAll:t=!1,allowHashes:r=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!D().Map.isMap(e))throw new Error("paramToIdentifier: received a non-Im.Map parameter as input");const n=e.get("name"),o=e.get("in");let a=[];return e&&e.hashCode&&o&&n&&r&&a.push(`${o}.${n}.hash-${e.hashCode()}`),o&&n&&a.push(`${o}.${n}`),a.push(n),t?a:a[0]||""}function Ze(e,t){var r;const n=Ge(e,{returnAll:!0});return f()(r=i()(n).call(n,(e=>t[e]))).call(r,(e=>void 0!==e))[0]}function Ye(){return Xe(oe()(32).toString("base64"))}function Qe(e){return Xe(ie()("sha256").update(e).digest("base64"))}function Xe(e){return e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}const et=e=>!e||!(!ce(e)||!e.isEmpty())},2518:(e,t,r)=>{"use strict";function n(e){return function(e){try{return!!JSON.parse(e)}catch(e){return null}}(e)?"json":null}r.d(t,{O:()=>n})},27504:(e,t,r)=>{"use strict";r.d(t,{Z:()=>n});const n=function(){var e={location:{},history:{},open:()=>{},close:()=>{},File:function(){}};if("undefined"==typeof window)return e;try{e=window;for(var t of["File","Blob","FormData"])t in window&&(e[t]=window[t])}catch(e){console.error(e)}return e}()},19069:(e,t,r)=>{"use strict";r.d(t,{Z:()=>c});var n=r(14418),o=r.n(n),a=r(58118),i=r.n(a),s=r(43393),l=r.n(s);const u=l().Set.of("type","format","items","default","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","enum","multipleOf");function c(e){let{isOAS3:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!l().Map.isMap(e))return{schema:l().Map(),parameterContentMediaType:null};if(!t)return"body"===e.get("in")?{schema:e.get("schema",l().Map()),parameterContentMediaType:null}:{schema:o()(e).call(e,((e,t)=>i()(u).call(u,t))),parameterContentMediaType:null};if(e.get("content")){const t=e.get("content",l().Map({})).keySeq().first();return{schema:e.getIn(["content",t,"schema"],l().Map()),parameterContentMediaType:t}}return{schema:e.get("schema",l().Map()),parameterContentMediaType:null}}},60314:(e,t,r)=>{"use strict";r.d(t,{Z:()=>x});var n=r(58309),o=r.n(n),a=r(2250),i=r.n(a),s=r(25110),l=r.n(s),u=r(8712),c=r.n(u),p=r(51679),f=r.n(p),h=r(12373),d=r.n(h),m=r(18492),g=r.n(m),v=r(88306),y=r.n(v);const b=e=>t=>o()(e)&&o()(t)&&e.length===t.length&&i()(e).call(e,((e,r)=>e===t[r])),w=function(){for(var e=arguments.length,t=new Array(e),r=0;r1&&void 0!==arguments[1]?arguments[1]:w;const{Cache:r}=y();y().Cache=E;const n=y()(e,t);return y().Cache=r,n}},79742:(e,t)=>{"use strict";t.byteLength=function(e){var t=l(e),r=t[0],n=t[1];return 3*(r+n)/4-n},t.toByteArray=function(e){var t,r,a=l(e),i=a[0],s=a[1],u=new o(function(e,t,r){return 3*(t+r)/4-r}(0,i,s)),c=0,p=s>0?i-4:i;for(r=0;r>16&255,u[c++]=t>>8&255,u[c++]=255&t;2===s&&(t=n[e.charCodeAt(r)]<<2|n[e.charCodeAt(r+1)]>>4,u[c++]=255&t);1===s&&(t=n[e.charCodeAt(r)]<<10|n[e.charCodeAt(r+1)]<<4|n[e.charCodeAt(r+2)]>>2,u[c++]=t>>8&255,u[c++]=255&t);return u},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,a=[],i=16383,s=0,l=n-o;sl?l:s+i));1===o?(t=e[n-1],a.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],a.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return a.join("")};for(var r=[],n=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0,s=a.length;i0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function u(e,t,n){for(var o,a,i=[],s=t;s>18&63]+r[a>>12&63]+r[a>>6&63]+r[63&a]);return i.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},48764:(e,t,r)=>{"use strict";const n=r(79742),o=r(80645),a="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=l,t.SlowBuffer=function(e){+e!=e&&(e=0);return l.alloc(+e)},t.INSPECT_MAX_BYTES=50;const i=2147483647;function s(e){if(e>i)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return p(e)}return u(e,t,r)}function u(e,t,r){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!l.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const r=0|m(e,t);let n=s(r);const o=n.write(e,t);o!==r&&(n=n.slice(0,o));return n}(e,t);if(ArrayBuffer.isView(e))return function(e){if(G(e,Uint8Array)){const t=new Uint8Array(e);return h(t.buffer,t.byteOffset,t.byteLength)}return f(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(G(e,ArrayBuffer)||e&&G(e.buffer,ArrayBuffer))return h(e,t,r);if("undefined"!=typeof SharedArrayBuffer&&(G(e,SharedArrayBuffer)||e&&G(e.buffer,SharedArrayBuffer)))return h(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return l.from(n,t,r);const o=function(e){if(l.isBuffer(e)){const t=0|d(e.length),r=s(t);return 0===r.length||e.copy(r,0,0,t),r}if(void 0!==e.length)return"number"!=typeof e.length||Z(e.length)?s(0):f(e);if("Buffer"===e.type&&Array.isArray(e.data))return f(e.data)}(e);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function c(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function p(e){return c(e),s(e<0?0:0|d(e))}function f(e){const t=e.length<0?0:0|d(e.length),r=s(t);for(let n=0;n=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|e}function m(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||G(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let o=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return H(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return J(e).length;default:if(o)return n?-1:H(e).length;t=(""+t).toLowerCase(),o=!0}}function g(e,t,r){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return I(this,t,r);case"utf8":case"utf-8":return k(this,t,r);case"ascii":return O(this,t,r);case"latin1":case"binary":return j(this,t,r);case"base64":return A(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return N(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function v(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function y(e,t,r,n,o){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),Z(r=+r)&&(r=o?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(o)return-1;r=e.length-1}else if(r<0){if(!o)return-1;r=0}if("string"==typeof t&&(t=l.from(t,n)),l.isBuffer(t))return 0===t.length?-1:b(e,t,r,n,o);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):b(e,[t],r,n,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,r,n,o){let a,i=1,s=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;i=2,s/=2,l/=2,r/=2}function u(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(o){let n=-1;for(a=r;as&&(r=s-l),a=r;a>=0;a--){let r=!0;for(let n=0;no&&(n=o):n=o;const a=t.length;let i;for(n>a/2&&(n=a/2),i=0;i>8,o=r%256,a.push(o),a.push(n);return a}(t,e.length-r),e,r,n)}function A(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function k(e,t,r){r=Math.min(e.length,r);const n=[];let o=t;for(;o239?4:t>223?3:t>191?2:1;if(o+i<=r){let r,n,s,l;switch(i){case 1:t<128&&(a=t);break;case 2:r=e[o+1],128==(192&r)&&(l=(31&t)<<6|63&r,l>127&&(a=l));break;case 3:r=e[o+1],n=e[o+2],128==(192&r)&&128==(192&n)&&(l=(15&t)<<12|(63&r)<<6|63&n,l>2047&&(l<55296||l>57343)&&(a=l));break;case 4:r=e[o+1],n=e[o+2],s=e[o+3],128==(192&r)&&128==(192&n)&&128==(192&s)&&(l=(15&t)<<18|(63&r)<<12|(63&n)<<6|63&s,l>65535&&l<1114112&&(a=l))}}null===a?(a=65533,i=1):a>65535&&(a-=65536,n.push(a>>>10&1023|55296),a=56320|1023&a),n.push(a),o+=i}return function(e){const t=e.length;if(t<=C)return String.fromCharCode.apply(String,e);let r="",n=0;for(;nn.length?(l.isBuffer(t)||(t=l.from(t)),t.copy(n,o)):Uint8Array.prototype.set.call(n,t,o);else{if(!l.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(n,o)}o+=t.length}return n},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tr&&(e+=" ... "),""},a&&(l.prototype[a]=l.prototype.inspect),l.prototype.compare=function(e,t,r,n,o){if(G(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),t<0||r>e.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&t>=r)return 0;if(n>=o)return-1;if(t>=r)return 1;if(this===e)return 0;let a=(o>>>=0)-(n>>>=0),i=(r>>>=0)-(t>>>=0);const s=Math.min(a,i),u=this.slice(n,o),c=e.slice(t,r);for(let e=0;e>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const o=this.length-t;if((void 0===r||r>o)&&(r=o),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let a=!1;for(;;)switch(n){case"hex":return w(this,e,t,r);case"utf8":case"utf-8":return E(this,e,t,r);case"ascii":case"latin1":case"binary":return x(this,e,t,r);case"base64":return _(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,e,t,r);default:if(a)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),a=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const C=4096;function O(e,t,r){let n="";r=Math.min(e.length,r);for(let o=t;on)&&(r=n);let o="";for(let n=t;nr)throw new RangeError("Trying to access beyond buffer length")}function P(e,t,r,n,o,a){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function R(e,t,r,n,o){q(t,n,o,e,r,7);let a=Number(t&BigInt(4294967295));e[r++]=a,a>>=8,e[r++]=a,a>>=8,e[r++]=a,a>>=8,e[r++]=a;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i,r}function M(e,t,r,n,o){q(t,n,o,e,r,7);let a=Number(t&BigInt(4294967295));e[r+7]=a,a>>=8,e[r+6]=a,a>>=8,e[r+5]=a,a>>=8,e[r+4]=a;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=i,i>>=8,e[r+2]=i,i>>=8,e[r+1]=i,i>>=8,e[r]=i,r+8}function D(e,t,r,n,o,a){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function L(e,t,r,n,a){return t=+t,r>>>=0,a||D(e,0,r,4),o.write(e,t,r,n,23,4),r+4}function B(e,t,r,n,a){return t=+t,r>>>=0,a||D(e,0,r,8),o.write(e,t,r,n,52,8),r+8}l.prototype.slice=function(e,t){const r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||T(e,t,this.length);let n=this[e],o=1,a=0;for(;++a>>=0,t>>>=0,r||T(e,t,this.length);let n=this[e+--t],o=1;for(;t>0&&(o*=256);)n+=this[e+--t]*o;return n},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||T(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readBigUInt64LE=Q((function(e){V(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||$(e,this.length-8);const n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,o=this[++e]+256*this[++e]+65536*this[++e]+r*2**24;return BigInt(n)+(BigInt(o)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||$(e,this.length-8);const n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],o=this[++e]*2**24+65536*this[++e]+256*this[++e]+r;return(BigInt(n)<>>=0,t>>>=0,r||T(e,t,this.length);let n=this[e],o=1,a=0;for(;++a=o&&(n-=Math.pow(2,8*t)),n},l.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||T(e,t,this.length);let n=t,o=1,a=this[e+--n];for(;n>0&&(o*=256);)a+=this[e+--n]*o;return o*=128,a>=o&&(a-=Math.pow(2,8*t)),a},l.prototype.readInt8=function(e,t){return e>>>=0,t||T(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||T(e,2,this.length);const r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt16BE=function(e,t){e>>>=0,t||T(e,2,this.length);const r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readBigInt64LE=Q((function(e){V(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||$(e,this.length-8);const n=this[e+4]+256*this[e+5]+65536*this[e+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||$(e,this.length-8);const n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<>>=0,t||T(e,4,this.length),o.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||T(e,4,this.length),o.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||T(e,8,this.length),o.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||T(e,8,this.length),o.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,r,n){if(e=+e,t>>>=0,r>>>=0,!n){P(this,e,t,r,Math.pow(2,8*r)-1,0)}let o=1,a=0;for(this[t]=255&e;++a>>=0,r>>>=0,!n){P(this,e,t,r,Math.pow(2,8*r)-1,0)}let o=r-1,a=1;for(this[t+o]=255&e;--o>=0&&(a*=256);)this[t+o]=e/a&255;return t+r},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigUInt64LE=Q((function(e,t=0){return R(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeBigUInt64BE=Q((function(e,t=0){return M(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);P(this,e,t,r,n-1,-n)}let o=0,a=1,i=0;for(this[t]=255&e;++o>0)-i&255;return t+r},l.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);P(this,e,t,r,n-1,-n)}let o=r-1,a=1,i=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===i&&0!==this[t+o+1]&&(i=1),this[t+o]=(e/a>>0)-i&255;return t+r},l.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||P(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigInt64LE=Q((function(e,t=0){return R(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeBigInt64BE=Q((function(e,t=0){return M(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeFloatLE=function(e,t,r){return L(this,e,t,!0,r)},l.prototype.writeFloatBE=function(e,t,r){return L(this,e,t,!1,r)},l.prototype.writeDoubleLE=function(e,t,r){return B(this,e,t,!0,r)},l.prototype.writeDoubleBE=function(e,t,r){return B(this,e,t,!1,r)},l.prototype.copy=function(e,t,r,n){if(!l.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function q(e,t,r,n,o,a){if(e>r||e3?0===t||t===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(a+1)}${n}`:`>= -(2${n} ** ${8*(a+1)-1}${n}) and < 2 ** ${8*(a+1)-1}${n}`:`>= ${t}${n} and <= ${r}${n}`,new F.ERR_OUT_OF_RANGE("value",o,e)}!function(e,t,r){V(t,"offset"),void 0!==e[t]&&void 0!==e[t+r]||$(t,e.length-(r+1))}(n,o,a)}function V(e,t){if("number"!=typeof e)throw new F.ERR_INVALID_ARG_TYPE(t,"number",e)}function $(e,t,r){if(Math.floor(e)!==e)throw V(e,r),new F.ERR_OUT_OF_RANGE(r||"offset","an integer",e);if(t<0)throw new F.ERR_BUFFER_OUT_OF_BOUNDS;throw new F.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${t}`,e)}z("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),z("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),z("ERR_OUT_OF_RANGE",(function(e,t,r){let n=`The value of "${e}" is out of range.`,o=r;return Number.isInteger(r)&&Math.abs(r)>2**32?o=U(String(r)):"bigint"==typeof r&&(o=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(o=U(o)),o+="n"),n+=` It must be ${t}. Received ${o}`,n}),RangeError);const W=/[^+/0-9A-Za-z-_]/g;function H(e,t){let r;t=t||1/0;const n=e.length;let o=null;const a=[];for(let i=0;i55295&&r<57344){if(!o){if(r>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(i+1===n){(t-=3)>-1&&a.push(239,191,189);continue}o=r;continue}if(r<56320){(t-=3)>-1&&a.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(t-=3)>-1&&a.push(239,191,189);if(o=null,r<128){if((t-=1)<0)break;a.push(r)}else if(r<2048){if((t-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function J(e){return n.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(W,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function K(e,t,r,n){let o;for(o=0;o=t.length||o>=e.length);++o)t[o+r]=e[o];return o}function G(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function Z(e){return e!=e}const Y=function(){const e="0123456789abcdef",t=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let o=0;o<16;++o)t[n+o]=e[r]+e[o]}return t}();function Q(e){return"undefined"==typeof BigInt?X:e}function X(){throw new Error("BigInt not supported")}},21924:(e,t,r)=>{"use strict";var n=r(40210),o=r(55559),a=o(n("String.prototype.indexOf"));e.exports=function(e,t){var r=n(e,!!t);return"function"==typeof r&&a(e,".prototype.")>-1?o(r):r}},55559:(e,t,r)=>{"use strict";var n=r(58612),o=r(40210),a=o("%Function.prototype.apply%"),i=o("%Function.prototype.call%"),s=o("%Reflect.apply%",!0)||n.call(i,a),l=o("%Object.getOwnPropertyDescriptor%",!0),u=o("%Object.defineProperty%",!0),c=o("%Math.max%");if(u)try{u({},"a",{value:1})}catch(e){u=null}e.exports=function(e){var t=s(n,i,arguments);if(l&&u){var r=l(t,"length");r.configurable&&u(t,"length",{value:1+c(0,e.length-(arguments.length-1))})}return t};var p=function(){return s(n,a,arguments)};u?u(e.exports,"apply",{value:p}):e.exports.apply=p},94184:(e,t)=>{var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e=[],t=0;t{"use strict";var n=r(11742),o={"text/plain":"Text","text/html":"Url",default:"Text"};e.exports=function(e,t){var r,a,i,s,l,u,c=!1;t||(t={}),r=t.debug||!1;try{if(i=n(),s=document.createRange(),l=document.getSelection(),(u=document.createElement("span")).textContent=e,u.style.all="unset",u.style.position="fixed",u.style.top=0,u.style.clip="rect(0, 0, 0, 0)",u.style.whiteSpace="pre",u.style.webkitUserSelect="text",u.style.MozUserSelect="text",u.style.msUserSelect="text",u.style.userSelect="text",u.addEventListener("copy",(function(n){if(n.stopPropagation(),t.format)if(n.preventDefault(),void 0===n.clipboardData){r&&console.warn("unable to use e.clipboardData"),r&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var a=o[t.format]||o.default;window.clipboardData.setData(a,e)}else n.clipboardData.clearData(),n.clipboardData.setData(t.format,e);t.onCopy&&(n.preventDefault(),t.onCopy(n.clipboardData))})),document.body.appendChild(u),s.selectNodeContents(u),l.addRange(s),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");c=!0}catch(n){r&&console.error("unable to copy using execCommand: ",n),r&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),c=!0}catch(n){r&&console.error("unable to copy using clipboardData: ",n),r&&console.error("falling back to prompt"),a=function(e){var t=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C";return e.replace(/#{\s*key\s*}/g,t)}("message"in t?t.message:"Copy to clipboard: #{key}, Enter"),window.prompt(a,e)}}finally{l&&("function"==typeof l.removeRange?l.removeRange(s):l.removeAllRanges()),u&&document.body.removeChild(u),i()}return c}},95299:(e,t,r)=>{var n=r(24848);e.exports=n},83450:(e,t,r)=>{var n=r(83363);e.exports=n},66820:(e,t,r)=>{var n=r(56243);e.exports=n},5023:(e,t,r)=>{var n=r(72369);e.exports=n},90093:(e,t,r)=>{var n=r(28196);e.exports=n},3688:(e,t,r)=>{var n=r(11955);e.exports=n},83838:(e,t,r)=>{var n=r(46279);e.exports=n},15684:(e,t,r)=>{var n=r(19373);e.exports=n},99826:(e,t,r)=>{var n=r(28427);e.exports=n},84234:(e,t,r)=>{var n=r(82073);e.exports=n},65362:(e,t,r)=>{var n=r(63383);e.exports=n},32271:(e,t,r)=>{var n=r(14471);e.exports=n},91254:(e,t,r)=>{var n=r(57396);e.exports=n},43536:(e,t,r)=>{var n=r(41910);e.exports=n},37331:(e,t,r)=>{var n=r(79427);e.exports=n},68522:(e,t,r)=>{var n=r(62857);e.exports=n},73151:(e,t,r)=>{var n=r(9534);e.exports=n},99565:(e,t,r)=>{var n=r(96507);e.exports=n},45012:(e,t,r)=>{var n=r(23059);e.exports=n},78690:(e,t,r)=>{var n=r(16670);e.exports=n},25626:(e,t,r)=>{var n=r(27460);e.exports=n},80281:(e,t,r)=>{var n=r(92547);e.exports=n},40031:(e,t,r)=>{var n=r(46509);e.exports=n},54493:(e,t,r)=>{r(77971),r(53242);var n=r(54058);e.exports=n.Array.from},24034:(e,t,r)=>{r(92737);var n=r(54058);e.exports=n.Array.isArray},15367:(e,t,r)=>{r(85906);var n=r(35703);e.exports=n("Array").concat},12710:(e,t,r)=>{r(66274),r(55967);var n=r(35703);e.exports=n("Array").entries},51459:(e,t,r)=>{r(48851);var n=r(35703);e.exports=n("Array").every},6172:(e,t,r)=>{r(80290);var n=r(35703);e.exports=n("Array").fill},62383:(e,t,r)=>{r(21501);var n=r(35703);e.exports=n("Array").filter},60009:(e,t,r)=>{r(44929);var n=r(35703);e.exports=n("Array").findIndex},17671:(e,t,r)=>{r(80833);var n=r(35703);e.exports=n("Array").find},99324:(e,t,r)=>{r(2437);var n=r(35703);e.exports=n("Array").forEach},80991:(e,t,r)=>{r(97690);var n=r(35703);e.exports=n("Array").includes},8700:(e,t,r)=>{r(99076);var n=r(35703);e.exports=n("Array").indexOf},95909:(e,t,r)=>{r(66274),r(55967);var n=r(35703);e.exports=n("Array").keys},6442:(e,t,r)=>{r(75915);var n=r(35703);e.exports=n("Array").lastIndexOf},23866:(e,t,r)=>{r(68787);var n=r(35703);e.exports=n("Array").map},52999:(e,t,r)=>{r(81876);var n=r(35703);e.exports=n("Array").reduce},91876:(e,t,r)=>{r(11490);var n=r(35703);e.exports=n("Array").reverse},24900:(e,t,r)=>{r(60186);var n=r(35703);e.exports=n("Array").slice},3824:(e,t,r)=>{r(36026);var n=r(35703);e.exports=n("Array").some},2948:(e,t,r)=>{r(4115);var n=r(35703);e.exports=n("Array").sort},78209:(e,t,r)=>{r(98611);var n=r(35703);e.exports=n("Array").splice},14423:(e,t,r)=>{r(66274),r(55967);var n=r(35703);e.exports=n("Array").values},81103:(e,t,r)=>{r(95160);var n=r(54058);e.exports=n.Date.now},27700:(e,t,r)=>{r(73381);var n=r(35703);e.exports=n("Function").bind},13830:(e,t,r)=>{r(66274),r(77971);var n=r(22902);e.exports=n},91031:(e,t,r)=>{r(52595),e.exports=r(21899)},16246:(e,t,r)=>{var n=r(7046),o=r(27700),a=Function.prototype;e.exports=function(e){var t=e.bind;return e===a||n(a,e)&&t===a.bind?o:t}},56043:(e,t,r)=>{var n=r(7046),o=r(15367),a=Array.prototype;e.exports=function(e){var t=e.concat;return e===a||n(a,e)&&t===a.concat?o:t}},13160:(e,t,r)=>{var n=r(7046),o=r(51459),a=Array.prototype;e.exports=function(e){var t=e.every;return e===a||n(a,e)&&t===a.every?o:t}},80446:(e,t,r)=>{var n=r(7046),o=r(6172),a=Array.prototype;e.exports=function(e){var t=e.fill;return e===a||n(a,e)&&t===a.fill?o:t}},2480:(e,t,r)=>{var n=r(7046),o=r(62383),a=Array.prototype;e.exports=function(e){var t=e.filter;return e===a||n(a,e)&&t===a.filter?o:t}},7147:(e,t,r)=>{var n=r(7046),o=r(60009),a=Array.prototype;e.exports=function(e){var t=e.findIndex;return e===a||n(a,e)&&t===a.findIndex?o:t}},32236:(e,t,r)=>{var n=r(7046),o=r(17671),a=Array.prototype;e.exports=function(e){var t=e.find;return e===a||n(a,e)&&t===a.find?o:t}},58557:(e,t,r)=>{var n=r(7046),o=r(80991),a=r(21631),i=Array.prototype,s=String.prototype;e.exports=function(e){var t=e.includes;return e===i||n(i,e)&&t===i.includes?o:"string"==typeof e||e===s||n(s,e)&&t===s.includes?a:t}},34570:(e,t,r)=>{var n=r(7046),o=r(8700),a=Array.prototype;e.exports=function(e){var t=e.indexOf;return e===a||n(a,e)&&t===a.indexOf?o:t}},57564:(e,t,r)=>{var n=r(7046),o=r(6442),a=Array.prototype;e.exports=function(e){var t=e.lastIndexOf;return e===a||n(a,e)&&t===a.lastIndexOf?o:t}},88287:(e,t,r)=>{var n=r(7046),o=r(23866),a=Array.prototype;e.exports=function(e){var t=e.map;return e===a||n(a,e)&&t===a.map?o:t}},68025:(e,t,r)=>{var n=r(7046),o=r(52999),a=Array.prototype;e.exports=function(e){var t=e.reduce;return e===a||n(a,e)&&t===a.reduce?o:t}},59257:(e,t,r)=>{var n=r(7046),o=r(80454),a=String.prototype;e.exports=function(e){var t=e.repeat;return"string"==typeof e||e===a||n(a,e)&&t===a.repeat?o:t}},91060:(e,t,r)=>{var n=r(7046),o=r(91876),a=Array.prototype;e.exports=function(e){var t=e.reverse;return e===a||n(a,e)&&t===a.reverse?o:t}},69601:(e,t,r)=>{var n=r(7046),o=r(24900),a=Array.prototype;e.exports=function(e){var t=e.slice;return e===a||n(a,e)&&t===a.slice?o:t}},28299:(e,t,r)=>{var n=r(7046),o=r(3824),a=Array.prototype;e.exports=function(e){var t=e.some;return e===a||n(a,e)&&t===a.some?o:t}},69355:(e,t,r)=>{var n=r(7046),o=r(2948),a=Array.prototype;e.exports=function(e){var t=e.sort;return e===a||n(a,e)&&t===a.sort?o:t}},18339:(e,t,r)=>{var n=r(7046),o=r(78209),a=Array.prototype;e.exports=function(e){var t=e.splice;return e===a||n(a,e)&&t===a.splice?o:t}},71611:(e,t,r)=>{var n=r(7046),o=r(3269),a=String.prototype;e.exports=function(e){var t=e.startsWith;return"string"==typeof e||e===a||n(a,e)&&t===a.startsWith?o:t}},62774:(e,t,r)=>{var n=r(7046),o=r(13348),a=String.prototype;e.exports=function(e){var t=e.trim;return"string"==typeof e||e===a||n(a,e)&&t===a.trim?o:t}},84426:(e,t,r)=>{r(32619);var n=r(54058),o=r(79730);n.JSON||(n.JSON={stringify:JSON.stringify}),e.exports=function(e,t,r){return o(n.JSON.stringify,null,arguments)}},91018:(e,t,r)=>{r(66274),r(37501),r(55967),r(77971);var n=r(54058);e.exports=n.Map},45999:(e,t,r)=>{r(49221);var n=r(54058);e.exports=n.Object.assign},35254:(e,t,r)=>{r(53882);var n=r(54058).Object;e.exports=function(e,t){return n.create(e,t)}},7702:(e,t,r)=>{r(74979);var n=r(54058).Object,o=e.exports=function(e,t){return n.defineProperties(e,t)};n.defineProperties.sham&&(o.sham=!0)},48171:(e,t,r)=>{r(86450);var n=r(54058).Object,o=e.exports=function(e,t,r){return n.defineProperty(e,t,r)};n.defineProperty.sham&&(o.sham=!0)},73081:(e,t,r)=>{r(94366);var n=r(54058);e.exports=n.Object.entries},286:(e,t,r)=>{r(46924);var n=r(54058).Object,o=e.exports=function(e,t){return n.getOwnPropertyDescriptor(e,t)};n.getOwnPropertyDescriptor.sham&&(o.sham=!0)},92766:(e,t,r)=>{r(88482);var n=r(54058);e.exports=n.Object.getOwnPropertyDescriptors},30498:(e,t,r)=>{r(35824);var n=r(54058);e.exports=n.Object.getOwnPropertySymbols},13966:(e,t,r)=>{r(17405);var n=r(54058);e.exports=n.Object.getPrototypeOf},48494:(e,t,r)=>{r(21724);var n=r(54058);e.exports=n.Object.keys},3065:(e,t,r)=>{r(90108);var n=r(54058);e.exports=n.Object.setPrototypeOf},98430:(e,t,r)=>{r(26614);var n=r(54058);e.exports=n.Object.values},52956:(e,t,r)=>{r(47627),r(66274),r(55967),r(98881),r(4560),r(91302),r(44349),r(77971);var n=r(54058);e.exports=n.Promise},21631:(e,t,r)=>{r(11035);var n=r(35703);e.exports=n("String").includes},80454:(e,t,r)=>{r(60986);var n=r(35703);e.exports=n("String").repeat},3269:(e,t,r)=>{r(94761);var n=r(35703);e.exports=n("String").startsWith},13348:(e,t,r)=>{r(57398);var n=r(35703);e.exports=n("String").trim},57473:(e,t,r)=>{r(85906),r(55967),r(35824),r(8555),r(52615),r(21732),r(35903),r(1825),r(28394),r(45915),r(61766),r(62737),r(89911),r(74315),r(63131),r(64714),r(70659),r(69120),r(79413),r(1502);var n=r(54058);e.exports=n.Symbol},24227:(e,t,r)=>{r(66274),r(55967),r(77971),r(1825);var n=r(11477);e.exports=n.f("iterator")},32304:(e,t,r)=>{r(66274),r(55967),r(54334);var n=r(54058);e.exports=n.WeakMap},27385:(e,t,r)=>{var n=r(95299);e.exports=n},81522:(e,t,r)=>{var n=r(83450);e.exports=n},32209:(e,t,r)=>{var n=r(66820);e.exports=n},30888:(e,t,r)=>{r(9668);var n=r(5023);e.exports=n},14122:(e,t,r)=>{var n=r(90093);e.exports=n},44442:(e,t,r)=>{var n=r(3688);e.exports=n},57152:(e,t,r)=>{var n=r(83838);e.exports=n},69447:(e,t,r)=>{var n=r(15684);e.exports=n},17579:(e,t,r)=>{var n=r(99826);e.exports=n},81493:(e,t,r)=>{var n=r(84234);e.exports=n},60269:(e,t,r)=>{var n=r(65362);e.exports=n},76094:(e,t,r)=>{var n=r(32271);e.exports=n},70573:(e,t,r)=>{var n=r(91254);e.exports=n},73685:(e,t,r)=>{var n=r(43536);e.exports=n},27533:(e,t,r)=>{var n=r(37331);e.exports=n},39057:(e,t,r)=>{var n=r(68522);e.exports=n},84710:(e,t,r)=>{var n=r(73151);e.exports=n},74303:(e,t,r)=>{var n=r(99565);e.exports=n},93799:(e,t,r)=>{var n=r(45012);e.exports=n},55122:(e,t,r)=>{var n=r(78690);e.exports=n},29531:(e,t,r)=>{var n=r(25626);r(89731),r(55708),r(30014),r(88731),e.exports=n},86600:(e,t,r)=>{var n=r(80281);r(28783),r(43975),r(65799),r(45414),r(46774),r(80620),r(36172),e.exports=n},9759:(e,t,r)=>{var n=r(40031);e.exports=n},24883:(e,t,r)=>{var n=r(21899),o=r(57475),a=r(69826),i=n.TypeError;e.exports=function(e){if(o(e))return e;throw i(a(e)+" is not a function")}},174:(e,t,r)=>{var n=r(21899),o=r(24284),a=r(69826),i=n.TypeError;e.exports=function(e){if(o(e))return e;throw i(a(e)+" is not a constructor")}},11851:(e,t,r)=>{var n=r(21899),o=r(57475),a=n.String,i=n.TypeError;e.exports=function(e){if("object"==typeof e||o(e))return e;throw i("Can't set "+a(e)+" as a prototype")}},18479:e=>{e.exports=function(){}},5743:(e,t,r)=>{var n=r(21899),o=r(7046),a=n.TypeError;e.exports=function(e,t){if(o(t,e))return e;throw a("Incorrect invocation")}},96059:(e,t,r)=>{var n=r(21899),o=r(10941),a=n.String,i=n.TypeError;e.exports=function(e){if(o(e))return e;throw i(a(e)+" is not an object")}},97135:(e,t,r)=>{var n=r(95981);e.exports=n((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},91860:(e,t,r)=>{"use strict";var n=r(89678),o=r(59413),a=r(10623);e.exports=function(e){for(var t=n(this),r=a(t),i=arguments.length,s=o(i>1?arguments[1]:void 0,r),l=i>2?arguments[2]:void 0,u=void 0===l?r:o(l,r);u>s;)t[s++]=e;return t}},56837:(e,t,r)=>{"use strict";var n=r(3610).forEach,o=r(34194)("forEach");e.exports=o?[].forEach:function(e){return n(this,e,arguments.length>1?arguments[1]:void 0)}},11354:(e,t,r)=>{"use strict";var n=r(21899),o=r(86843),a=r(78834),i=r(89678),s=r(75196),l=r(6782),u=r(24284),c=r(10623),p=r(55449),f=r(53476),h=r(22902),d=n.Array;e.exports=function(e){var t=i(e),r=u(this),n=arguments.length,m=n>1?arguments[1]:void 0,g=void 0!==m;g&&(m=o(m,n>2?arguments[2]:void 0));var v,y,b,w,E,x,_=h(t),S=0;if(!_||this==d&&l(_))for(v=c(t),y=r?new this(v):d(v);v>S;S++)x=g?m(t[S],S):t[S],p(y,S,x);else for(E=(w=f(t,_)).next,y=r?new this:[];!(b=a(E,w)).done;S++)x=g?s(w,m,[b.value,S],!0):b.value,p(y,S,x);return y.length=S,y}},31692:(e,t,r)=>{var n=r(74529),o=r(59413),a=r(10623),i=function(e){return function(t,r,i){var s,l=n(t),u=a(l),c=o(i,u);if(e&&r!=r){for(;u>c;)if((s=l[c++])!=s)return!0}else for(;u>c;c++)if((e||c in l)&&l[c]===r)return e||c||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},3610:(e,t,r)=>{var n=r(86843),o=r(95329),a=r(37026),i=r(89678),s=r(10623),l=r(64692),u=o([].push),c=function(e){var t=1==e,r=2==e,o=3==e,c=4==e,p=6==e,f=7==e,h=5==e||p;return function(d,m,g,v){for(var y,b,w=i(d),E=a(w),x=n(m,g),_=s(E),S=0,A=v||l,k=t?A(d,_):r||f?A(d,0):void 0;_>S;S++)if((h||S in E)&&(b=x(y=E[S],S,w),e))if(t)k[S]=b;else if(b)switch(e){case 3:return!0;case 5:return y;case 6:return S;case 2:u(k,y)}else switch(e){case 4:return!1;case 7:u(k,y)}return p?-1:o||c?c:k}};e.exports={forEach:c(0),map:c(1),filter:c(2),some:c(3),every:c(4),find:c(5),findIndex:c(6),filterReject:c(7)}},67145:(e,t,r)=>{"use strict";var n=r(79730),o=r(74529),a=r(62435),i=r(10623),s=r(34194),l=Math.min,u=[].lastIndexOf,c=!!u&&1/[1].lastIndexOf(1,-0)<0,p=s("lastIndexOf"),f=c||!p;e.exports=f?function(e){if(c)return n(u,this,arguments)||0;var t=o(this),r=i(t),s=r-1;for(arguments.length>1&&(s=l(s,a(arguments[1]))),s<0&&(s=r+s);s>=0;s--)if(s in t&&t[s]===e)return s||0;return-1}:u},50568:(e,t,r)=>{var n=r(95981),o=r(99813),a=r(53385),i=o("species");e.exports=function(e){return a>=51||!n((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},34194:(e,t,r)=>{"use strict";var n=r(95981);e.exports=function(e,t){var r=[][e];return!!r&&n((function(){r.call(null,t||function(){throw 1},1)}))}},46499:(e,t,r)=>{var n=r(21899),o=r(24883),a=r(89678),i=r(37026),s=r(10623),l=n.TypeError,u=function(e){return function(t,r,n,u){o(r);var c=a(t),p=i(c),f=s(c),h=e?f-1:0,d=e?-1:1;if(n<2)for(;;){if(h in p){u=p[h],h+=d;break}if(h+=d,e?h<0:f<=h)throw l("Reduce of empty array with no initial value")}for(;e?h>=0:f>h;h+=d)h in p&&(u=r(u,p[h],h,c));return u}};e.exports={left:u(!1),right:u(!0)}},15790:(e,t,r)=>{var n=r(21899),o=r(59413),a=r(10623),i=r(55449),s=n.Array,l=Math.max;e.exports=function(e,t,r){for(var n=a(e),u=o(t,n),c=o(void 0===r?n:r,n),p=s(l(c-u,0)),f=0;u{var n=r(95329);e.exports=n([].slice)},61388:(e,t,r)=>{var n=r(15790),o=Math.floor,a=function(e,t){var r=e.length,l=o(r/2);return r<8?i(e,t):s(e,a(n(e,0,l),t),a(n(e,l),t),t)},i=function(e,t){for(var r,n,o=e.length,a=1;a0;)e[n]=e[--n];n!==a++&&(e[n]=r)}return e},s=function(e,t,r,n){for(var o=t.length,a=r.length,i=0,s=0;i{var n=r(21899),o=r(1052),a=r(24284),i=r(10941),s=r(99813)("species"),l=n.Array;e.exports=function(e){var t;return o(e)&&(t=e.constructor,(a(t)&&(t===l||o(t.prototype))||i(t)&&null===(t=t[s]))&&(t=void 0)),void 0===t?l:t}},64692:(e,t,r)=>{var n=r(5693);e.exports=function(e,t){return new(n(e))(0===t?0:t)}},75196:(e,t,r)=>{var n=r(96059),o=r(7609);e.exports=function(e,t,r,a){try{return a?t(n(r)[0],r[1]):t(r)}catch(t){o(e,"throw",t)}}},21385:(e,t,r)=>{var n=r(99813)("iterator"),o=!1;try{var a=0,i={next:function(){return{done:!!a++}},return:function(){o=!0}};i[n]=function(){return this},Array.from(i,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var r=!1;try{var a={};a[n]=function(){return{next:function(){return{done:r=!0}}}},e(a)}catch(e){}return r}},82532:(e,t,r)=>{var n=r(95329),o=n({}.toString),a=n("".slice);e.exports=function(e){return a(o(e),8,-1)}},9697:(e,t,r)=>{var n=r(21899),o=r(22885),a=r(57475),i=r(82532),s=r(99813)("toStringTag"),l=n.Object,u="Arguments"==i(function(){return arguments}());e.exports=o?i:function(e){var t,r,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=l(e),s))?r:u?i(t):"Object"==(n=i(t))&&a(t.callee)?"Arguments":n}},38694:(e,t,r)=>{var n=r(95329)("".replace),o=String(Error("zxcasd").stack),a=/\n\s*at [^:]*:[^\n]*/,i=a.test(o);e.exports=function(e,t){if(i&&"string"==typeof e)for(;t--;)e=n(e,a,"");return e}},85616:(e,t,r)=>{"use strict";var n=r(65988).f,o=r(29290),a=r(87524),i=r(86843),s=r(5743),l=r(93091),u=r(47771),c=r(94431),p=r(55746),f=r(21647).fastKey,h=r(45402),d=h.set,m=h.getterFor;e.exports={getConstructor:function(e,t,r,u){var c=e((function(e,n){s(e,h),d(e,{type:t,index:o(null),first:void 0,last:void 0,size:0}),p||(e.size=0),null!=n&&l(n,e[u],{that:e,AS_ENTRIES:r})})),h=c.prototype,g=m(t),v=function(e,t,r){var n,o,a=g(e),i=y(e,t);return i?i.value=r:(a.last=i={index:o=f(t,!0),key:t,value:r,previous:n=a.last,next:void 0,removed:!1},a.first||(a.first=i),n&&(n.next=i),p?a.size++:e.size++,"F"!==o&&(a.index[o]=i)),e},y=function(e,t){var r,n=g(e),o=f(t);if("F"!==o)return n.index[o];for(r=n.first;r;r=r.next)if(r.key==t)return r};return a(h,{clear:function(){for(var e=g(this),t=e.index,r=e.first;r;)r.removed=!0,r.previous&&(r.previous=r.previous.next=void 0),delete t[r.index],r=r.next;e.first=e.last=void 0,p?e.size=0:this.size=0},delete:function(e){var t=this,r=g(t),n=y(t,e);if(n){var o=n.next,a=n.previous;delete r.index[n.index],n.removed=!0,a&&(a.next=o),o&&(o.previous=a),r.first==n&&(r.first=o),r.last==n&&(r.last=a),p?r.size--:t.size--}return!!n},forEach:function(e){for(var t,r=g(this),n=i(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:r.first;)for(n(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!y(this,e)}}),a(h,r?{get:function(e){var t=y(this,e);return t&&t.value},set:function(e,t){return v(this,0===e?0:e,t)}}:{add:function(e){return v(this,e=0===e?0:e,e)}}),p&&n(h,"size",{get:function(){return g(this).size}}),c},setStrong:function(e,t,r){var n=t+" Iterator",o=m(t),a=m(n);u(e,t,(function(e,t){d(this,{type:n,target:e,state:o(e),kind:t,last:void 0})}),(function(){for(var e=a(this),t=e.kind,r=e.last;r&&r.removed;)r=r.previous;return e.target&&(e.last=r=r?r.next:e.state.first)?"keys"==t?{value:r.key,done:!1}:"values"==t?{value:r.value,done:!1}:{value:[r.key,r.value],done:!1}:(e.target=void 0,{value:void 0,done:!0})}),r?"entries":"values",!r,!0),c(t)}}},8850:(e,t,r)=>{"use strict";var n=r(95329),o=r(87524),a=r(21647).getWeakData,i=r(96059),s=r(10941),l=r(5743),u=r(93091),c=r(3610),p=r(90953),f=r(45402),h=f.set,d=f.getterFor,m=c.find,g=c.findIndex,v=n([].splice),y=0,b=function(e){return e.frozen||(e.frozen=new w)},w=function(){this.entries=[]},E=function(e,t){return m(e.entries,(function(e){return e[0]===t}))};w.prototype={get:function(e){var t=E(this,e);if(t)return t[1]},has:function(e){return!!E(this,e)},set:function(e,t){var r=E(this,e);r?r[1]=t:this.entries.push([e,t])},delete:function(e){var t=g(this.entries,(function(t){return t[0]===e}));return~t&&v(this.entries,t,1),!!~t}},e.exports={getConstructor:function(e,t,r,n){var c=e((function(e,o){l(e,f),h(e,{type:t,id:y++,frozen:void 0}),null!=o&&u(o,e[n],{that:e,AS_ENTRIES:r})})),f=c.prototype,m=d(t),g=function(e,t,r){var n=m(e),o=a(i(t),!0);return!0===o?b(n).set(t,r):o[n.id]=r,e};return o(f,{delete:function(e){var t=m(this);if(!s(e))return!1;var r=a(e);return!0===r?b(t).delete(e):r&&p(r,t.id)&&delete r[t.id]},has:function(e){var t=m(this);if(!s(e))return!1;var r=a(e);return!0===r?b(t).has(e):r&&p(r,t.id)}}),o(f,r?{get:function(e){var t=m(this);if(s(e)){var r=a(e);return!0===r?b(t).get(e):r?r[t.id]:void 0}},set:function(e,t){return g(this,e,t)}}:{add:function(e){return g(this,e,!0)}}),c}}},24683:(e,t,r)=>{"use strict";var n=r(76887),o=r(21899),a=r(21647),i=r(95981),s=r(32029),l=r(93091),u=r(5743),c=r(57475),p=r(10941),f=r(90904),h=r(65988).f,d=r(3610).forEach,m=r(55746),g=r(45402),v=g.set,y=g.getterFor;e.exports=function(e,t,r){var g,b=-1!==e.indexOf("Map"),w=-1!==e.indexOf("Weak"),E=b?"set":"add",x=o[e],_=x&&x.prototype,S={};if(m&&c(x)&&(w||_.forEach&&!i((function(){(new x).entries().next()})))){var A=(g=t((function(t,r){v(u(t,A),{type:e,collection:new x}),null!=r&&l(r,t[E],{that:t,AS_ENTRIES:b})}))).prototype,k=y(e);d(["add","clear","delete","forEach","get","has","set","keys","values","entries"],(function(e){var t="add"==e||"set"==e;!(e in _)||w&&"clear"==e||s(A,e,(function(r,n){var o=k(this).collection;if(!t&&w&&!p(r))return"get"==e&&void 0;var a=o[e](0===r?0:r,n);return t?this:a}))})),w||h(A,"size",{configurable:!0,get:function(){return k(this).collection.size}})}else g=r.getConstructor(t,e,b,E),a.enable();return f(g,e,!1,!0),S[e]=g,n({global:!0,forced:!0},S),w||r.setStrong(g,e,b),g}},23489:(e,t,r)=>{var n=r(90953),o=r(31136),a=r(49677),i=r(65988);e.exports=function(e,t,r){for(var s=o(t),l=i.f,u=a.f,c=0;c{var n=r(99813)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(r){try{return t[n]=!1,"/./"[e](t)}catch(e){}}return!1}},64160:(e,t,r)=>{var n=r(95981);e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},31046:(e,t,r)=>{"use strict";var n=r(35143).IteratorPrototype,o=r(29290),a=r(31887),i=r(90904),s=r(12077),l=function(){return this};e.exports=function(e,t,r,u){var c=t+" Iterator";return e.prototype=o(n,{next:a(+!u,r)}),i(e,c,!1,!0),s[c]=l,e}},32029:(e,t,r)=>{var n=r(55746),o=r(65988),a=r(31887);e.exports=n?function(e,t,r){return o.f(e,t,a(1,r))}:function(e,t,r){return e[t]=r,e}},31887:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},55449:(e,t,r)=>{"use strict";var n=r(83894),o=r(65988),a=r(31887);e.exports=function(e,t,r){var i=n(t);i in e?o.f(e,i,a(0,r)):e[i]=r}},47771:(e,t,r)=>{"use strict";var n=r(76887),o=r(78834),a=r(82529),i=r(79417),s=r(57475),l=r(31046),u=r(249),c=r(88929),p=r(90904),f=r(32029),h=r(99754),d=r(99813),m=r(12077),g=r(35143),v=i.PROPER,y=i.CONFIGURABLE,b=g.IteratorPrototype,w=g.BUGGY_SAFARI_ITERATORS,E=d("iterator"),x="keys",_="values",S="entries",A=function(){return this};e.exports=function(e,t,r,i,d,g,k){l(r,t,i);var C,O,j,I=function(e){if(e===d&&M)return M;if(!w&&e in P)return P[e];switch(e){case x:case _:case S:return function(){return new r(this,e)}}return function(){return new r(this)}},N=t+" Iterator",T=!1,P=e.prototype,R=P[E]||P["@@iterator"]||d&&P[d],M=!w&&R||I(d),D="Array"==t&&P.entries||R;if(D&&(C=u(D.call(new e)))!==Object.prototype&&C.next&&(a||u(C)===b||(c?c(C,b):s(C[E])||h(C,E,A)),p(C,N,!0,!0),a&&(m[N]=A)),v&&d==_&&R&&R.name!==_&&(!a&&y?f(P,"name",_):(T=!0,M=function(){return o(R,this)})),d)if(O={values:I(_),keys:g?M:I(x),entries:I(S)},k)for(j in O)(w||T||!(j in P))&&h(P,j,O[j]);else n({target:t,proto:!0,forced:w||T},O);return a&&!k||P[E]===M||h(P,E,M,{name:d}),m[t]=M,O}},66349:(e,t,r)=>{var n=r(54058),o=r(90953),a=r(11477),i=r(65988).f;e.exports=function(e){var t=n.Symbol||(n.Symbol={});o(t,e)||i(t,e,{value:a.f(e)})}},55746:(e,t,r)=>{var n=r(95981);e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},61333:(e,t,r)=>{var n=r(21899),o=r(10941),a=n.document,i=o(a)&&o(a.createElement);e.exports=function(e){return i?a.createElement(e):{}}},63281:e=>{e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},34342:(e,t,r)=>{var n=r(2861).match(/firefox\/(\d+)/i);e.exports=!!n&&+n[1]},23321:e=>{e.exports="object"==typeof window},81046:(e,t,r)=>{var n=r(2861);e.exports=/MSIE|Trident/.test(n)},4470:(e,t,r)=>{var n=r(2861),o=r(21899);e.exports=/ipad|iphone|ipod/i.test(n)&&void 0!==o.Pebble},22749:(e,t,r)=>{var n=r(2861);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},6049:(e,t,r)=>{var n=r(82532),o=r(21899);e.exports="process"==n(o.process)},58045:(e,t,r)=>{var n=r(2861);e.exports=/web0s(?!.*chrome)/i.test(n)},2861:(e,t,r)=>{var n=r(626);e.exports=n("navigator","userAgent")||""},53385:(e,t,r)=>{var n,o,a=r(21899),i=r(2861),s=a.process,l=a.Deno,u=s&&s.versions||l&&l.version,c=u&&u.v8;c&&(o=(n=c.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!o&&i&&(!(n=i.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=i.match(/Chrome\/(\d+)/))&&(o=+n[1]),e.exports=o},18938:(e,t,r)=>{var n=r(2861).match(/AppleWebKit\/(\d+)\./);e.exports=!!n&&+n[1]},35703:(e,t,r)=>{var n=r(54058);e.exports=function(e){return n[e+"Prototype"]}},56759:e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},18780:(e,t,r)=>{var n=r(95981),o=r(31887);e.exports=!n((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",o(1,7)),7!==e.stack)}))},76887:(e,t,r)=>{"use strict";var n=r(21899),o=r(79730),a=r(95329),i=r(57475),s=r(49677).f,l=r(37252),u=r(54058),c=r(86843),p=r(32029),f=r(90953),h=function(e){var t=function(r,n,a){if(this instanceof t){switch(arguments.length){case 0:return new e;case 1:return new e(r);case 2:return new e(r,n)}return new e(r,n,a)}return o(e,this,arguments)};return t.prototype=e.prototype,t};e.exports=function(e,t){var r,o,d,m,g,v,y,b,w=e.target,E=e.global,x=e.stat,_=e.proto,S=E?n:x?n[w]:(n[w]||{}).prototype,A=E?u:u[w]||p(u,w,{})[w],k=A.prototype;for(d in t)r=!l(E?d:w+(x?".":"#")+d,e.forced)&&S&&f(S,d),g=A[d],r&&(v=e.noTargetGet?(b=s(S,d))&&b.value:S[d]),m=r&&v?v:t[d],r&&typeof g==typeof m||(y=e.bind&&r?c(m,n):e.wrap&&r?h(m):_&&i(m)?a(m):m,(e.sham||m&&m.sham||g&&g.sham)&&p(y,"sham",!0),p(A,d,y),_&&(f(u,o=w+"Prototype")||p(u,o,{}),p(u[o],d,m),e.real&&k&&!k[d]&&p(k,d,m)))}},95981:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},45602:(e,t,r)=>{var n=r(95981);e.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},79730:(e,t,r)=>{var n=r(18285),o=Function.prototype,a=o.apply,i=o.call;e.exports="object"==typeof Reflect&&Reflect.apply||(n?i.bind(a):function(){return i.apply(a,arguments)})},86843:(e,t,r)=>{var n=r(95329),o=r(24883),a=r(18285),i=n(n.bind);e.exports=function(e,t){return o(e),void 0===t?e:a?i(e,t):function(){return e.apply(t,arguments)}}},18285:(e,t,r)=>{var n=r(95981);e.exports=!n((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},98308:(e,t,r)=>{"use strict";var n=r(21899),o=r(95329),a=r(24883),i=r(10941),s=r(90953),l=r(93765),u=r(18285),c=n.Function,p=o([].concat),f=o([].join),h={},d=function(e,t,r){if(!s(h,t)){for(var n=[],o=0;o{var n=r(18285),o=Function.prototype.call;e.exports=n?o.bind(o):function(){return o.apply(o,arguments)}},79417:(e,t,r)=>{var n=r(55746),o=r(90953),a=Function.prototype,i=n&&Object.getOwnPropertyDescriptor,s=o(a,"name"),l=s&&"something"===function(){}.name,u=s&&(!n||n&&i(a,"name").configurable);e.exports={EXISTS:s,PROPER:l,CONFIGURABLE:u}},95329:(e,t,r)=>{var n=r(18285),o=Function.prototype,a=o.bind,i=o.call,s=n&&a.bind(i,i);e.exports=n?function(e){return e&&s(e)}:function(e){return e&&function(){return i.apply(e,arguments)}}},626:(e,t,r)=>{var n=r(54058),o=r(21899),a=r(57475),i=function(e){return a(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?i(n[e])||i(o[e]):n[e]&&n[e][t]||o[e]&&o[e][t]}},22902:(e,t,r)=>{var n=r(9697),o=r(14229),a=r(12077),i=r(99813)("iterator");e.exports=function(e){if(null!=e)return o(e,i)||o(e,"@@iterator")||a[n(e)]}},53476:(e,t,r)=>{var n=r(21899),o=r(78834),a=r(24883),i=r(96059),s=r(69826),l=r(22902),u=n.TypeError;e.exports=function(e,t){var r=arguments.length<2?l(e):t;if(a(r))return i(o(r,e));throw u(s(e)+" is not iterable")}},14229:(e,t,r)=>{var n=r(24883);e.exports=function(e,t){var r=e[t];return null==r?void 0:n(r)}},21899:(e,t,r)=>{var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof r.g&&r.g)||function(){return this}()||Function("return this")()},90953:(e,t,r)=>{var n=r(95329),o=r(89678),a=n({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return a(o(e),t)}},27748:e=>{e.exports={}},34845:(e,t,r)=>{var n=r(21899);e.exports=function(e,t){var r=n.console;r&&r.error&&(1==arguments.length?r.error(e):r.error(e,t))}},15463:(e,t,r)=>{var n=r(626);e.exports=n("document","documentElement")},2840:(e,t,r)=>{var n=r(55746),o=r(95981),a=r(61333);e.exports=!n&&!o((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},37026:(e,t,r)=>{var n=r(21899),o=r(95329),a=r(95981),i=r(82532),s=n.Object,l=o("".split);e.exports=a((function(){return!s("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?l(e,""):s(e)}:s},81302:(e,t,r)=>{var n=r(95329),o=r(57475),a=r(63030),i=n(Function.toString);o(a.inspectSource)||(a.inspectSource=function(e){return i(e)}),e.exports=a.inspectSource},53794:(e,t,r)=>{var n=r(10941),o=r(32029);e.exports=function(e,t){n(t)&&"cause"in t&&o(e,"cause",t.cause)}},21647:(e,t,r)=>{var n=r(76887),o=r(95329),a=r(27748),i=r(10941),s=r(90953),l=r(65988).f,u=r(10946),c=r(684),p=r(91584),f=r(99418),h=r(45602),d=!1,m=f("meta"),g=0,v=function(e){l(e,m,{value:{objectID:"O"+g++,weakData:{}}})},y=e.exports={enable:function(){y.enable=function(){},d=!0;var e=u.f,t=o([].splice),r={};r[m]=1,e(r).length&&(u.f=function(r){for(var n=e(r),o=0,a=n.length;o{var n,o,a,i=r(38019),s=r(21899),l=r(95329),u=r(10941),c=r(32029),p=r(90953),f=r(63030),h=r(44262),d=r(27748),m="Object already initialized",g=s.TypeError,v=s.WeakMap;if(i||f.state){var y=f.state||(f.state=new v),b=l(y.get),w=l(y.has),E=l(y.set);n=function(e,t){if(w(y,e))throw new g(m);return t.facade=e,E(y,e,t),t},o=function(e){return b(y,e)||{}},a=function(e){return w(y,e)}}else{var x=h("state");d[x]=!0,n=function(e,t){if(p(e,x))throw new g(m);return t.facade=e,c(e,x,t),t},o=function(e){return p(e,x)?e[x]:{}},a=function(e){return p(e,x)}}e.exports={set:n,get:o,has:a,enforce:function(e){return a(e)?o(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!u(t)||(r=o(t)).type!==e)throw g("Incompatible receiver, "+e+" required");return r}}}},6782:(e,t,r)=>{var n=r(99813),o=r(12077),a=n("iterator"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||i[a]===e)}},1052:(e,t,r)=>{var n=r(82532);e.exports=Array.isArray||function(e){return"Array"==n(e)}},57475:e=>{e.exports=function(e){return"function"==typeof e}},24284:(e,t,r)=>{var n=r(95329),o=r(95981),a=r(57475),i=r(9697),s=r(626),l=r(81302),u=function(){},c=[],p=s("Reflect","construct"),f=/^\s*(?:class|function)\b/,h=n(f.exec),d=!f.exec(u),m=function(e){if(!a(e))return!1;try{return p(u,c,e),!0}catch(e){return!1}},g=function(e){if(!a(e))return!1;switch(i(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return d||!!h(f,l(e))}catch(e){return!0}};g.sham=!0,e.exports=!p||o((function(){var e;return m(m.call)||!m(Object)||!m((function(){e=!0}))||e}))?g:m},37252:(e,t,r)=>{var n=r(95981),o=r(57475),a=/#|\.prototype\./,i=function(e,t){var r=l[s(e)];return r==c||r!=u&&(o(t)?n(t):!!t)},s=i.normalize=function(e){return String(e).replace(a,".").toLowerCase()},l=i.data={},u=i.NATIVE="N",c=i.POLYFILL="P";e.exports=i},10941:(e,t,r)=>{var n=r(57475);e.exports=function(e){return"object"==typeof e?null!==e:n(e)}},82529:e=>{e.exports=!0},60685:(e,t,r)=>{var n=r(10941),o=r(82532),a=r(99813)("match");e.exports=function(e){var t;return n(e)&&(void 0!==(t=e[a])?!!t:"RegExp"==o(e))}},56664:(e,t,r)=>{var n=r(21899),o=r(626),a=r(57475),i=r(7046),s=r(32302),l=n.Object;e.exports=s?function(e){return"symbol"==typeof e}:function(e){var t=o("Symbol");return a(t)&&i(t.prototype,l(e))}},93091:(e,t,r)=>{var n=r(21899),o=r(86843),a=r(78834),i=r(96059),s=r(69826),l=r(6782),u=r(10623),c=r(7046),p=r(53476),f=r(22902),h=r(7609),d=n.TypeError,m=function(e,t){this.stopped=e,this.result=t},g=m.prototype;e.exports=function(e,t,r){var n,v,y,b,w,E,x,_=r&&r.that,S=!(!r||!r.AS_ENTRIES),A=!(!r||!r.IS_ITERATOR),k=!(!r||!r.INTERRUPTED),C=o(t,_),O=function(e){return n&&h(n,"normal",e),new m(!0,e)},j=function(e){return S?(i(e),k?C(e[0],e[1],O):C(e[0],e[1])):k?C(e,O):C(e)};if(A)n=e;else{if(!(v=f(e)))throw d(s(e)+" is not iterable");if(l(v)){for(y=0,b=u(e);b>y;y++)if((w=j(e[y]))&&c(g,w))return w;return new m(!1)}n=p(e,v)}for(E=n.next;!(x=a(E,n)).done;){try{w=j(x.value)}catch(e){h(n,"throw",e)}if("object"==typeof w&&w&&c(g,w))return w}return new m(!1)}},7609:(e,t,r)=>{var n=r(78834),o=r(96059),a=r(14229);e.exports=function(e,t,r){var i,s;o(e);try{if(!(i=a(e,"return"))){if("throw"===t)throw r;return r}i=n(i,e)}catch(e){s=!0,i=e}if("throw"===t)throw r;if(s)throw i;return o(i),r}},35143:(e,t,r)=>{"use strict";var n,o,a,i=r(95981),s=r(57475),l=r(29290),u=r(249),c=r(99754),p=r(99813),f=r(82529),h=p("iterator"),d=!1;[].keys&&("next"in(a=[].keys())?(o=u(u(a)))!==Object.prototype&&(n=o):d=!0),null==n||i((function(){var e={};return n[h].call(e)!==e}))?n={}:f&&(n=l(n)),s(n[h])||c(n,h,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:d}},12077:e=>{e.exports={}},10623:(e,t,r)=>{var n=r(43057);e.exports=function(e){return n(e.length)}},66132:(e,t,r)=>{var n,o,a,i,s,l,u,c,p=r(21899),f=r(86843),h=r(49677).f,d=r(42941).set,m=r(22749),g=r(4470),v=r(58045),y=r(6049),b=p.MutationObserver||p.WebKitMutationObserver,w=p.document,E=p.process,x=p.Promise,_=h(p,"queueMicrotask"),S=_&&_.value;S||(n=function(){var e,t;for(y&&(e=E.domain)&&e.exit();o;){t=o.fn,o=o.next;try{t()}catch(e){throw o?i():a=void 0,e}}a=void 0,e&&e.enter()},m||y||v||!b||!w?!g&&x&&x.resolve?((u=x.resolve(void 0)).constructor=x,c=f(u.then,u),i=function(){c(n)}):y?i=function(){E.nextTick(n)}:(d=f(d,p),i=function(){d(n)}):(s=!0,l=w.createTextNode(""),new b(n).observe(l,{characterData:!0}),i=function(){l.data=s=!s})),e.exports=S||function(e){var t={fn:e,next:void 0};a&&(a.next=t),o||(o=t,i()),a=t}},19297:(e,t,r)=>{var n=r(21899);e.exports=n.Promise},72497:(e,t,r)=>{var n=r(53385),o=r(95981);e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},28468:(e,t,r)=>{var n=r(95981),o=r(99813),a=r(82529),i=o("iterator");e.exports=!n((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,r="";return e.pathname="c%20d",t.forEach((function(e,n){t.delete("b"),r+=n+e})),a&&!e.toJSON||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[i]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==r||"x"!==new URL("http://x",void 0).host}))},38019:(e,t,r)=>{var n=r(21899),o=r(57475),a=r(81302),i=n.WeakMap;e.exports=o(i)&&/native code/.test(a(i))},69520:(e,t,r)=>{"use strict";var n=r(24883),o=function(e){var t,r;this.promise=new e((function(e,n){if(void 0!==t||void 0!==r)throw TypeError("Bad Promise constructor");t=e,r=n})),this.resolve=n(t),this.reject=n(r)};e.exports.f=function(e){return new o(e)}},14649:(e,t,r)=>{var n=r(85803);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:n(e)}},70344:(e,t,r)=>{var n=r(21899),o=r(60685),a=n.TypeError;e.exports=function(e){if(o(e))throw a("The method doesn't accept regular expressions");return e}},24420:(e,t,r)=>{"use strict";var n=r(55746),o=r(95329),a=r(78834),i=r(95981),s=r(14771),l=r(87857),u=r(36760),c=r(89678),p=r(37026),f=Object.assign,h=Object.defineProperty,d=o([].concat);e.exports=!f||i((function(){if(n&&1!==f({b:1},f(h({},"a",{enumerable:!0,get:function(){h(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},r=Symbol(),o="abcdefghijklmnopqrst";return e[r]=7,o.split("").forEach((function(e){t[e]=e})),7!=f({},e)[r]||s(f({},t)).join("")!=o}))?function(e,t){for(var r=c(e),o=arguments.length,i=1,f=l.f,h=u.f;o>i;)for(var m,g=p(arguments[i++]),v=f?d(s(g),f(g)):s(g),y=v.length,b=0;y>b;)m=v[b++],n&&!a(h,g,m)||(r[m]=g[m]);return r}:f},29290:(e,t,r)=>{var n,o=r(96059),a=r(59938),i=r(56759),s=r(27748),l=r(15463),u=r(61333),c=r(44262),p=c("IE_PROTO"),f=function(){},h=function(e){return"